ARM таймеры и прерывания

Я собираюсь научиться работать с таймерами и прерывать микроконтроллеры ARM, это мой код

 #include "LPC17xx.h"
 int flag=0;   

 void TIMER0_RIQHandler(void)
 {
    if (flag == 0 )
 {
    LPC_GPIO1 -> FIOSET = 1 «28;              //turn on LED 
    flag =1;
 }
    else 
 {
    LPC_GPIO1 -> FIOCLR = 1 «28;              //turn off LED
    flag=1;
 }
    LPC_TIM0 -> IR = 1 ;               //clear interrupt flag
 }


 int main()
 {

 LPC_TIM0 -> CTCR = 00;                     //set timer mode
 LPC_TIM0 -> PR = 1;
 LPC_TIM0 -> MR0 = 12000000;
 LPC_TIM0 ->  MCR = 3 ;               //IF PC REACHES PR, TC will BE 
                                      //RESET AND INTERRUPT WILL BE GENERATE
 LPC_TIM0 -> TCR = 2;                         //RESET TIMER

 NVIC_SetPriority(TIMER0_IRQn , 0 );
 NVIC_EnableIRQ(TIMER0_IRQn);  
 LPC_TIM0 ->TCR = 1;                        //ENABLE TIMER

 LPC_GPIO1 -> FIODIR = 1 « 28 ; 
 LPC_GPIO1 -> FIOCLR = 1 « 28 ; 
 while (1)
 {
 }
 }

он должен включаться и выключать светодиод каждую секунду. сначала светодиод гаснет, но прерывание не работает. что не так с моим кодом?

0 ответов

Имя вашей процедуры обработки прерываний (ISR) неверно. Я считаю, что это должен быть TIMER0_IRQHandler. Оно должно совпадать с именем, которое отображается в файле запуска startup_LPC17xx.s.

Из-за этого несоответствия запускается прерывание, но нет соответствующей ISR для вызова.

Другие вопросы по тегам