TI中文支持网
TI专业的中文技术问题搜集分享网站

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

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中断寄存器完全独立,应该也不会有冲突问题。

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

Tony Tang:

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

nan sun2:

回复 Tony Tang:

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); —需屏蔽}

Kevin Le82:

回复 nan sun2:

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

user5183483:

回复 nan sun2:

遇到同样的问题,留个脚印

Jing Zhang:

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

赞(0)
未经允许不得转载:TI中文支持网 » L138的dsp核与arm核同时运行,GPIO外部中断不响应问题
分享到: 更多 (0)