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 для вызова.