中断设置代码如下:(通过查技术手册查到upp的中断事件号为91)
Hwi_Params_init(&upphwiParams);
upphwiParams.arg = 12;
upphwiParams.enableInt = FALSE;
upphwiParams.eventId = 91;//SYS_INT_UPP_INT,see datasheet p308
upphwiParams.priority = 12;
uppHwi = Hwi_create(6,UPP_Isr,&upphwiParams,&eb2);
if (uppHwi == NULL) {
System_abort("main: failed to create Hwi thread");
}
Hwi_enableInterrupt(6);
在程序运行中,upp的upies寄存器的相应位都设为1,在传输过程中upier寄存器eowi位也为1,但是没有进入我的中断响应函数。
想请教:是我中断响应设置哪里的问题,或还有什么额外需要设置的吗?如果我要在使用sysbios的前提下怎么去设置中断响应。
Tony Tang:
从BIOS的使用说明来看,你的代码差不多,UPISR有置位没?
RUNTIME HWI CREATION
Below is an example that configures an interrupt at runtime. Typically such code would be placed in main().
#include <xdc/runtime/Error.h>#include <ti/sysbios/hal/Hwi.h>Hwi_Handle myHwi;Int main(Int argc, char* argv[]){Hwi_Params hwiParams;Error_Block eb;Hwi_Params_init(&hwiParams);Error_init(&eb);// set the argument you want passed to your ISR functionhwiParams.arg = 1;// set the event id of the peripheral assigned to this interrupthwiParams.eventId = 10;// don't allow this interrupt to nest itselfhwiParams.maskSetting = Hwi_MaskingOption_SELF;//// Configure interrupt 5 to invoke "myIsr".// Automatically enables interrupt 5 by default// set params.enableInt = FALSE if you want to control// when the interrupt is enabled using Hwi_enableInterrupt()//myHwi = Hwi_create(5, myIsr, &hwiParams, &eb);if (Error_check(&eb)) {// handle the error}}Void myIsr(UArg arg){// this runs when interrupt #5 goes off}
david leo:
回复 Tony Tang:
谢谢Tony,问题已经解决了,是查的手册不对;我最开始开的手册是OMAP-L138 C6000 DSP+ARM Processor Technical Reference Manual (Rev.A),p308上的upp中断号是91,但是在TMS320C6748 DSP Technical Reference Manual (Rev. A),p85上的upp中断号是94;通过例程确定94是对的;后面我找gpio的中断号也是以TMS320C6748 DSP Technical Reference Manual (Rev. A)的为准。
Tony Tang:
回复 david leo:
P308是ARM AINTC上的中断号,DSP侧的中断号在P99。
两个核上的中断号不一样,各是各的。