QUOTE (aaarrr @ Oct 15 2012, 18:11)

Еще контроллер прерываний настроить. Собственно, для 1808 это будет основной частью работы.
CODE
int ctl_set_isr(unsigned int number, unsigned int priority, CTL_ISR_FN_t isr, CTL_ISR_FN_t *oldisr)
{
unsigned long *cmr;
unsigned long cmr_data, mask;
if (number > sizeof(ctl_isr_table)/sizeof(CTL_ISR_FN_t)) return 0;
if (oldisr) *oldisr = ctl_isr_table[number];
ctl_isr_table[number] = isr;
cmr = (unsigned long *)&AINTC->CMR0;
cmr += number/4;
cmr_data = *cmr;
mask = 0xFF<<((number%4)<<3);
cmr_data &= ~mask;
cmr_data |= priority<<((number%4)<<3);
*cmr = cmr_data;
// Enable Interrupts
CSL_FINS(AINTC->EISR, AINTC_EISR_INDEX, number);
return 1;
}
как-то так. никакой работы. ну разве что таблицу векторов надо в шустром месте разместить, да обработчик прерывания должен знать как успокоить контроллер и как выковырять правильный вектор из таблицы