Осваиваю семейство 56F800/E. Не удается активировать механизм прерываний на кристалле. Кто работает с этим семейством, помогите пожалуйста разобраться - уже не первый день ломаю голову, все даташиты прочитал

Девайс: 56F8013. CW Development Studio v.8.0.
Тестовая программа при установке f_event = true, устанавливает бит в регистре IASSRT порта C, чем вызывает software interrupt.
Через отладчик видно:
1. Bit0 регистра IASSRT действительно устанавливается - Ok. Что приводит:
1.1. Устанавливается bit0 регистра IPEND - Ok.
1.2. Сбрасывается в 0 соответствующий номеру вектора прерывания (23) bit регистра IRQP1 - Ok.
2. Однако не устанавливается bit INT регистра ICTRL, говорящий о том, что interrupt is being sent to the 56800E core - NOT Ok.
3. Bit INT_DIS регистра ICTRL, запрещающий все прерывания не установлен - Ok.
4. Перехода в программу-обработчик прерывания не происходит.
Фрагмент кода:
Цитата
Код
#define PC_BASE__ 0xF120
#define PC_IASSRT *(unsigned short volatile *)(PC_BASE__ + 4)
volatile int w_dummy;
volatile bool f_event;
#pragma interrupt off
void main (void)
{
ioctl(SYS, SYS_INIT, NULL);
ioctl(INTC, INTC_INIT, NULL);
ioctl(GPIO_A, GPIO_INIT, NULL);
ioctl(GPIO_B, GPIO_INIT, NULL);
ioctl(GPIO_C, GPIO_INIT, NULL);
ioctl(GPIO_D, GPIO_INIT, NULL);
while(1)
{
if(f_event) //устанавливается в отладчике
{
f_event = false;
PC_IASSRT |= 0x01; //вызов software interrupt
}
}
}
#pragma interrupt on
void ISR_test(void)
{
w_dummy++;
}
#pragma interrupt reset
#define PC_IASSRT *(unsigned short volatile *)(PC_BASE__ + 4)
volatile int w_dummy;
volatile bool f_event;
#pragma interrupt off
void main (void)
{
ioctl(SYS, SYS_INIT, NULL);
ioctl(INTC, INTC_INIT, NULL);
ioctl(GPIO_A, GPIO_INIT, NULL);
ioctl(GPIO_B, GPIO_INIT, NULL);
ioctl(GPIO_C, GPIO_INIT, NULL);
ioctl(GPIO_D, GPIO_INIT, NULL);
while(1)
{
if(f_event) //устанавливается в отладчике
{
f_event = false;
PC_IASSRT |= 0x01; //вызов software interrupt
}
}
}
#pragma interrupt on
void ISR_test(void)
{
w_dummy++;
}
#pragma interrupt reset
В Graphic Configuration Tool в разделе INTC - Interrupt Controller указал имя обработчика прерывания и приоритета, на что в файле appconfig.h добавились строки:
Цитата
Код
#define INTC_ICTL_INIT 0x0000
#define INT_VECTOR_ADDR_23 ISR_test
#define INT_PRIORITY_LEVEL_23 INTC_LEVEL1
#define INT_VECTOR_ADDR_23 ISR_test
#define INT_PRIORITY_LEVEL_23 INTC_LEVEL1
Ну что ему не нравится???!!!
