This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

283335同一程序的外部中断,执行时间不同

上面两张图是我用示波器两次截取在外部中断3中翻转0口电平的波形,程序是35口采样方波,上升沿触发外部中断3。我用的是同样的程序,我确定一点都没有修改。我做了10次实验,8次是和图1一样的波形,延时500ns,2次和图2一样,延时1us多。我不知道为什么这样。

void main(void)
{
// 步骤 1. 初始化系统控制:
// 设置PLL, WatchDog, 使能外设时钟
// 下面这个函数可以从DSP2833x_SysCtrl.c文件中找到..
InitSysCtrl();
// 清除所有中断初始化中断向量表:
// 禁止CPU全局中断
DINT;
// 初始化PIE中断向量表,并使其指向中断服务子程序(ISR)
// 这些中断服务子程序被放在了DSP280x_DefaultIsr.c源文件中
// 这个函数放在了DSP2833x_PieVect.c源文件里面.
InitPieCtrl();
// 禁止CPU中断和清除所有CPU中断标志
IER = 0x0000;
IFR = 0x0000;
// PIE 向量表指针指向中断服务程(ISR)完成其初始化.
// 即使在程序里不需要使用中断功能,也要对 PIE 向量表进行初始化.
// 这样做是为了避免PIE引起的错误.
InitPieVectTable();
// 外部中断初始化
InitExInt();
// 本例使用下面的GPIO配置
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); //While循环
}
/**********************************************************************************************/

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;
}

  • 贴上的程序是主程序、外部中断3的服务程序和外部中断配置程序
  • 从图上看 你的黄色脉冲不是每个沿都触发啊 所以这个延时就不确定
    最好降低黄色脉冲的频率 让每次都触发中断 看看是不是所有的延时都相等
  • 我把中断程序里面的内容修改成置位TOGGLE寄存器来翻转电平。上面两张图就是我修改之后测得的波形。两张图的第一个电平翻转时间不固定,其后的翻转时间都是固定的。这样比较明显,希望能帮忙解答下。

  • 1、LED1这个管脚 上接的LED灯,还有其它东西没。建议将其上面的所有负载去掉,用电阻下拉或上拉,或悬空。
    2、EXTINT3 管脚的IO属性里有 输入滤波  采样频率 采样点 ,(对对对,别不服,IO输入也是有采样频率的)有专用的寄存器来设置,初始化时设置一下。