Сергей Борщ (16.09.2008 14:11, просмотров: 122) ответил S_U на Помогите разобраться с программными прерываниями.
Примерно так: __arm __irq void SoftIntHandler();
__arm __irq void TimerIntHandler();
// инициализация:
#define SOFT_INT VIC_SW
VICVectAddr14 = (uint32_t)TimerIntHandler;
VICVectCntl14 = (1<<5) | VIC_TIMER1;
VICVectAddr15 = (uint32_t)SoftIntHandler;
VICVectCntl15 = (1<<5) | SOFT_INT;
VICIntEnable = (1UL<<SOFT_INT) | (1UL<<VIC_TIMER1);
// генерация:
VICSoftInt = (1<<SOFT_INT);
// Селектор векторов обработчика:
// одна команда в асмовом файле:
VICVectAddr DEFINE 0xFFFFF030
CODE32
COMMON INTVEC:CODE:ROOT
org 0x00000018
LDR PC, VICVectAdd ; branch to address provided by interrupt controller
//собственно тела обработчиков:
__arm __irq void SoftIntHandler()
{
// обработка
VICVectAdd = 0;
}
__arm __irq void TimerIntHandler()
{
// обработка
VICVectAdd = 0;
}