如下所示将PORTH_4设置为中断触发:
void PortH_Init(void) { PPSH |= (1 << 4); //设置为上升沿中断,视需求再修改 PERH |= (1 << 4); //使能上拉/下拉电阻,视需求再修改 DDRH &= ~(1 << 4); //置为输入状态 PIFH = (1 << 4); //清除之前可能产生的中断标志, PIEH_PIEH4 = 1; //使能PORTH_4中断 }
以下下中断服务程序: #pragma CODE_SEG __NEAR_SEG NON_BANKED interrupt void _PORTH_Interrupt(void) { if(PIFH & (1 << 4)) { PIFH = (1 << 4); // 清除中断标志,这是必需的, /* 这里加入中断服务程序 */ } } #pragma CODE_SEG DEFAULT
PRM文件中的中断向量声明:
VECTOR ADDRESS 0xFFCC _PORTH_Interrupt
如果使用PE产生的中断向量表,则将 _PORTH_Interrupt加入向量表格相应位置,不需要在PRM文件中声明
最后:PORTH中的各个中断没有优先级,但你可以将HPRIO设置为0xcc将PORTH中断提升到IRQ中的最高级别.
|