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.

L138的dsp核与arm核同时运行,GPIO外部中断不响应问题

Other Parts Discussed in Thread: SYSBIOS

L138芯片dsp核与arm核均裸机运行,dsp核配置GPIO0[12]为外部中断,arm核配置GPIO8[8]为外部中断,外部中断信号由FPGA发出。

CCS5下在dsp端、arm端分别建立工程,并按照Starterware example中的gpioCardDetect.c例程分别在arm端和dsp端进行中断的配置。

1、CCS5下用仿真器只load arm端工程或者只load dsp端工程,中断均能正常响应,中断服务程序也能正常执行。

2、若先load arm端工程-->run arm,arm中断能正常响应,然后load dsp端工程-->run dsp,arm中断不响应了,dsp中断响应;

3、反之,先load dsp程序,再load arm程序,最后现象是dsp中断不响应,arm中断响应。

反复检查了arm端和dsp端GPIO的寄存器配置,没有重复写或复位GPIO寄存器冲突的问题,dspINTC和AINTC中断寄存器完全独立,应该也不会有冲突问题。

不知问题出在哪里,求解??谢谢...

  • 我估计是你的GPIO配置写的有问题,后一个核运行时配置GPIO寄存器把前面的覆盖清掉了。你不妨看一下GPIO寄存的值。

  • Tonny:你说的原因我也有想到,但是仔细检查,确实没有覆盖的问题。

    问题最终还是解决了,方法如下:

    屏蔽dsp端工程中断服务函数中起始与结束的GPIOBankIntDisable与GPIOBankIntEnable,就可以了。arm端工程中断服务函数仍保留这两个函数。

    仔细看过GPIOBankIntDisable()与GPIOBankIntEnable()这两个函数,都是对BINTEN寄存器进行位操作,按道理讲是不存在写入覆盖的问题。

    所以,问题解决了,但原因没想明白...呵呵....

    static void dsp_ext_interrupt(void)
    {

    // 禁用 GPIO BANK0 中断
    //GPIOBankIntDisable(SOC_GPIO_0_REGS, 0);---需屏蔽

    // 清除 GPIO BANK0 中断事件
    IntEventClear(SYS_INT_GPIO_B0INT);

    // 清除GPIO中断状态
    GPIOPinIntClear(SOC_GPIO_0_REGS, 13);

    //中断服务函数(.......省略......)

    // 使能 GPIO BANK0 中断
    //GPIOBankIntEnable(SOC_GPIO_0_REGS, 0); ---需屏蔽
    }

  • 问题可能和我出现的一样:e2echina.ti.com/.../161705
    是多核系统共享一个中断状态寄存器,其中一个核处理的时候把别的核注册的中断bit给清除了
  • 遇到同样的问题,留个脚印

  • 也遇到同样的问题,我是ARM端跑Linux能获取到GPIO中断,一旦DSP程序(SYSBIOS系统)加载了之后,就ARM端和DSP都获取不到GPIO中断了,用仿真器查看GPIO寄存器发现边沿触发寄存器全零,我把想要触发的GPIO手动SET后马上又被自动CLR了,很奇怪,还在找问题。