- 밑 3버스가 sram과 연결됨
int tmp = *(int *)0x22000000; -> 2200만 번지에서 네바이트를 읽어서 tmp에 대입
위 구문 실행하면 data address bus 실행됨. 이 값이 bus matrix로 들어감. bus matrix 거쳐서 주소가 system bus로 들어감.
8비트에서 1비트만 뽑아내서 data
icode
P.27
*** Atomic ***
rSFR의 끝 두비트는 11로 변경 -> 3
하지만, 인터럽트 발생시점에 따라서 3이 되지 않을 수도 있음
INTERRUPT는 해당 명령어(ORR) 끝나고 실행됨.
하지만 ISR 이 무시됨 따라서 결과는 10
INTERRUPT MASKING DISABLE 이므로 중간에 ISR발생해도 이동하지 않음
실행이 완료된 후 INTERRUPT MASKING ENABLE 로 값이 바뀜, 이때 ISR 실행
22000004번지는 물리적으로 존재하지않음.
Normal Routine -> 임계영역
<** NVIC **> **중요
// ALIAS
#define rRCC_AHB1ENR (*(int *)0x40023830)
#define rGPIOA_MODER (*(int *)0x40020000)
#define rGPIOA_IDR (*(int *)0x40020010)
#define rGPIOD_MODER (*(int *)0x40020C00)
#define rGPIOD_ODR (*(int *)0x40020C14)
#define bGPIOA_IDR_0 (*(int *)(0x42000000 + 32*0x20010 + 4*0))
#define bGPIOD_ODR_12 (*(int *)(0x42000000 + 32*0x20C14 + 4*12))
// TIMER
#define rSCSR (*(int *) 0xE000E010)
#define rSRVR (*(int *) 0xE000E014)
#define rSCVR (*(int *) 0xE000E018)
/* ORGINAL
#define rRCC_AHB1ENR (*(int *)0x40023830)
#define rGPIOA_MODER (*(int *)0x40020000)
#define rGPIOA_IDR (*(int *)0x40020010)
#define rGPIOD_MODER (*(int *)0x40020C00)
#define rGPIOD_ODR (*(int *)0x40020C14)
*/
#include "lib.h"
#include <stdio.h>
extern void gpio_control();
unsigned int gTickCount;
void MySystemTimerIsr()
{
gTickCount = gTickCount + 1;
}
int main()
{
// TIMER
rSRVR = 16000 - 1;
rSCSR = 0x7;
// clock enable for PORT-D, PORT-A
rRCC_AHB1ENR = rRCC_AHB1ENR | (0x1<<3) | (0x1<<0);
// PD12 --> output
int tmp = rGPIOD_MODER & ~ (0x3<<24);
rGPIOD_MODER = tmp | (0x1<<24);
// PA0 --> input
rGPIOA_MODER = rGPIOA_MODER & ~ (0x3<<0);
while (1)
{
if (rGPIOA_IDR & (0x1<<0)) { rGPIOD_ODR = rGPIOD_ODR | (0x1 << 12); }
else { rGPIOD_ODR = rGPIOD_ODR & ~(0x1 << 12); }
if (bGPIOA_IDR_0)
{
bGPIOD_ODR_12 = 1;
}
else
{
bGPIOD_ODR_12 = 0;
}
}
}
인터럽트 추가
p.59 <타이머>
SYSTICK -> NVIC 인터럽트 요청을 보냄
p.53 TIMER SFR
RELOAD에 1MSEC 시간이 소요됨
'FW 심화 과정 > [2] STM32심화실습' 카테고리의 다른 글
0805 인터럽트 실습 코드 (0) | 2022.08.06 |
---|---|
0804 인터럽트 실습 완성 코드 (0) | 2022.08.04 |
0804 인터럽트 ** (0) | 2022.08.04 |
0802 어셈블리어로 보드 제어 (sw / led) (0) | 2022.08.02 |
[C] 유용한 함수작성 (0) | 2022.08.01 |
0729 C프로그래밍 기초 17~ (0) | 2022.07.29 |