INT32S zyIsrSet (unsigned int uiChannel, unsigned long ulFunction, unsigned int uiPrio)
{
unsigned int uiTmp1, uiTmp2, uiTmp3;
if (uiChannel > MAX_VICS) {
return -ZY_NOT_OK;
}
zyIrqDisable();
if (uiChannel >= 16) {
uiTmp3 = uiChannel - 16;
uiTmp1 = uiTmp3 / 32;
uiTmp2 = uiTmp3 % 32;
((INT32U *)0xE000E100)[uiTmp1] = 1ul << uiTmp2; //这里((INT32U *)0xE000E100)[uiTmp1] 好好理解
((INT8U *)0xE000E400)[uiTmp3] = uiPrio;
} else {
switch (uiChannel) {
case MMI:
SHCSR = SHCSR | (1 << 16);
break;
case BFI:
SHCSR = SHCSR | (1 << 17);
break;
case UFI:
SHCSR = SHCSR | (1 << 18);
break;
default:
break;
}
if (uiChannel >= MMI) {
uiTmp3 = uiChannel - MMI;
((INT8U *)0xE000ED18)[uiTmp3] = uiPrio;
}
}
#if VECTOR_TABLE_IN_FLASH == 0
((unsigned long *)VTOR)[uiChannel] = ulFunction;
#endif
zyIrqEnable();
return ZY_OK;
}