上面两张图是我用示波器两次截取在外部中断3中翻转0口电平的波形,程序是35口采样方波,上升沿触发外部中断3。我用的是同样的程序,我确定一点都没有修改。我做了10次实验,8次是和图1一样的波形,延时500ns,2次和图2一样,延时1us多。我不知道为什么这样。
下面贴上主程序、外部中断3的服务程序和外部中断配置程序
void main(void)
{
InitSysCtrl();
DINT;
InitPieCtrl();
IER = 0x0000;
IFR = 0x0000;
InitPieVectTable();
InitExInt();
configtestled();
LED1=0; //初始化LED电平
EALLOW; // This is needed to write to EALLOW protected registers
PieVectTable.XINT3 = &ISRExint3; // 将外部中断添加都中断向量表里
EDIS; // This is needed to disable write to EALLOW protected registers IER |= M_INT12; //使能第一组中断
PieCtrlRegs.PIECTRL.bit.ENPIE = 1; //使能总中断
PieCtrlRegs.PIEIER12.bit.INTx1= 1; //使能第12组中断里的第1个中断--XINT3中断 EINT; // 中断使能
ERTM; // 使能总实时中断
while(1);
}
/**********************************************************************************************/
interrupt void ISRExint3(void)
{
LED1 = 1;
PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;//0x0001赋给12组中断ACKnowledge寄存器,对其全部清除,不接受其他中断
} void InitExInt(void) //外部中断的配置
{
EALLOW;
GpioCtrlRegs.GPBMUX1.bit.GPIO35 = 0; // GPIO35复用为GPIO功能
GpioCtrlRegs.GPBDIR.bit.GPIO35= 0; // GPIO35设置为输入
GpioCtrlRegs.GPBQSEL1.bit.GPIO35= 0; // GPIO35量化寄存器配置为0
GpioCtrlRegs.GPBPUD.bit.GPIO35 = 1;//禁止上拉
GpioIntRegs.GPIOXINT3SEL.bit.GPIOSEL = 35;//选择GPIO35为外部输入XINT3输入引脚
XIntruptRegs.XINT3CR.bit.POLARITY= 1; //1:上升沿//0:下降沿触发中断
XIntruptRegs.XINT3CR.bit.ENABLE = 1; //使能XINT3中断
EDIS;
}
|