TM4C123GH6PM7에서 작동하도록 SysTick 인터럽트를 얻으려고했습니다. 이것은 피질 m4 기반 마이크로 컨트롤러입니다. Keil 디버거를 사용할 때 Systick 인터럽트가 int NVIC를 보류하고 있지만 핸들러를 실행하지 않음을 알 수 있습니다. 다른 예외는 사용할 수 없으며 PRIMASK 레지스터를 지 웠습니다. 나는 그것이 모든 인터럽트를 마스크 디버거 수 있다는 것을 발견 검색을 많이 후SysTick 인터럽트가 보류 중이지만 실행되지 않습니다. 디버그 인터럽트 마스크 문제가 있습니까?
systck_init LDR R0,=NVIC_ST_CTRL_R
LDR R1,=NVIC_ST_RELOAD_R
LDR R2,=NVIC_ST_CURRENT_R
MOV R3,#0
STR R3,[R0]
STR R3,[R2]
MOV R3,#0x000020
STR R3,[R1]
MOV R3,#7
STR R3,[R0]
LDR R3,=NVIC_EN0_R
LDR R4,[R3]
ORR R4,#0x00008000
STR R4,[R3]
CPSIE I
MOV R3,#0x3
MSR CONTROL,R3
: 아래의 코드는 내가 인터럽트를 초기화하는 방법입니다. 이것을 제어하는 비트는 디버그 중지 상태 및 제어 레지스터라는 레지스터에 있습니다. 비록 디버거에서 보거나 디버그 명령을 사용하여 읽기/쓰기를 할 수는 없지만.
Keil에서 제공 한 Startup.s을 사용했고 벡터/레이블이 정확하다고 알 수 있습니다.
그리고 알고 있습니다. 왜 어셈블리에서 모든 것을 해내 느냐.
모든 아이디어는 크게 감사하겠습니다. 처음 :
도움을 주셔서 감사합니다! 만약 Systick이 NVIC을 통해 결합되지 않았다면 예외이므로 하드웨어 인터럽트에 의해 선점 될 수 없습니까? 모든 코드를 게시하지 않아서 죄송합니다. 많은 코드가 있습니다. 하지만 PSP를 다른 곳에서 설정합니다. 0x20을 사용하여 핸들러로 곧바로 건너 뜁니다. 오늘 Keil 시뮬레이터를 사용하고 핸들러가 올바르게 실행되지만 여전히 회로 디버거와 함께 작동하지 않습니다. – MHilton
'SCB'에 'SHP'레지스터를 사용하여 Systick (및 다른 시스템 인터럽트)에 우선 순위를 설정할 수 있습니다. –
코드를 빨리 읽었을뿐입니다 (코드에 주석 달기!) 카운터를 시작하기 전에 카운터를 지우지 않는 것으로 보입니다. 나는 카운터 값이 시작시에 정의되지 않았다고 생각한다. (그러나 에뮬레이터는 그것을 0으로 만들 수도있다.) 카운터가 0x21이고 다시로드를 0x20으로 설정하면 해고되기 전에 다시로드 할 때까지 기다려야합니다. 즉, SysTick 카운터가 24 비트에 불과하다는 것은 아닙니다. –