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

am5728的dsp核响应中断问题

am5728的dsp核响应中断问题:arm核运行linux系统,dsp1、dsp2分别运行ti sys/bios,dsp1、dsp2分别注册了gpio5_0/gpio5_1,经过调试发现,在gpio_v1.c中,对gpio中断的响应处理函数存在问题:

/*
* ======== GPIO_hwiIntFxn ========
* Hwi function that processes GPIO interrupts.
*/
static void GPIO_v1_hwiFxn(uintptr_t portIdx)
{
uint32_t gpioPins;
uint32_t gpioBase;
uint32_t gpioIndex;
uint32_t bitNum;
uint32_t portNo = (uint32_t)portIdx;
GPIO_PortCallbackInfo *portCallbackInfo;
GPIO_v1_HwAttrs *hwAttrs = (GPIO_v1_HwAttrs *)&GPIO_v1_hwAttrs[portNo – 1U];
uint32_t intrLineNum = GPIO_INT_LINE_1;
portCallbackInfo = &gpioCallbackInfo[portNo -1U];
gpioBase = hwAttrs->baseAddr;

/* Find out which pins have their interrupt flags set */
gpioPins = GPIORawIntStatus(gpioBase, intrLineNum, GPIO_PIN_MASK_ALL);

/* Clear all the set bits at once */
GPIOIntrClearMask(gpioBase, intrLineNum, gpioPins);//此处把不属于他注册的中断位也清除了,造成另外一个核无法响应中断

/* Match each set bit to its corresponding callback function */
while (gpioPins) {
/* Gets the lowest order set bit number */
bitNum = getPinNumber(gpioPins);
gpioIndex = portCallbackInfo->pinIndex[bitNum];
if (gpioIndex != CALLBACK_INDEX_NOT_CONFIGURED) {
GPIO_v1_config.callbacks[gpioIndex]();
}
gpioPins &= ~(((uint32_t)1U) << bitNum);
}
}

由于中断处理函数没有判断是否注册在本核,直接将所有的中断都清除了,造成在不同的核上注册的中断被第一个响应中断的全部清除,变成中断无法响应了,请问这个问题怎么解决?

另外一个问题:由于部分中断比较频繁,但是只注册在特定核上,如何屏蔽此中断不产生中断到arm、或另外的dsp核?

Kevin Le82:

多核系统中,管脚状态是多核共享的,尤其是中断状态,被其中一个核清除了,别的核就无法响应了

Denny%20Yang99373:

看看把不同bank的gpio映射到不同的核上,这样中断号不一样可以避免这个问题

赞(0)
未经允许不得转载:TI中文支持网 » am5728的dsp核响应中断问题
分享到: 更多 (0)