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.
根据官方的例程,对CANA模块进行配置,通过中断进行外部数据接收处理。
官方例程使用的是中断线0( INT_CANA0 ),我想更改为中断线1( INT_CANA1 )重新测试一下,结果发现无法触发中断,想求教一下程序配置哪里出错了?
我的中断程序:
void InitCAN_Interrupt() //<> CAN 中断初始化配置
{
CAN_enableInterrupt(CANA_BASE, CAN_INT_IE0 | CAN_INT_ERROR | CAN_INT_STATUS);
Interrupt_register(INT_CANA0, &canaRX_isr);
Interrupt_enable(INT_CANA0);
CAN_enableGlobalInterrupt(CANA_BASE, CAN_GLOBAL_INT_CANINT0);
}
将中断线0更改为1无法正常运行。
你好,不清楚你所说的中断线使能指的是哪个部分
void InitCAN_Interrupt() //<> CAN 中断初始化配置
{
CAN_enableInterrupt(CANA_BASE, CAN_INT_IE1 | CAN_INT_ERROR | CAN_INT_STATUS);
Interrupt_register(INT_CANA1, &canaRX_isr);
Interrupt_enable(INT_CANA1);
CAN_enableGlobalInterrupt(CANA_BASE, CAN_GLOBAL_INT_CANINT1);
}
这个是直接更改后的程序。
CAN_enableInterrupt(uint32_t base, uint32_t intFlags)
{
//
// Check the arguments.
//
ASSERT(CAN_isBaseValid(base));
ASSERT((intFlags & ~(CAN_INT_ERROR | CAN_INT_STATUS | CAN_INT_IE0 |
CAN_INT_IE1)) == 0U);
//
// Enable the specified interrupts.
//
HWREG_BP(base + CAN_O_CTL) |= intFlags;
}
这个函数使能了 CAN_CTL->bit17,即 CANINT1 已经开启。
我使用的是 can_ex2_loopback_interrupts
路径:C:\ti\c2000\C2000Ware_5_01_00_00\driverlib\f28003x\examples\can
该程序使用的是中断线0,中断配置部分在上面的回答中
测试方法:在 for 循环中做删减,当前为
for(;;)
{
{
CAN_sendMessage(CANA_BASE, TX_MSG_OBJ_ID, MSG_DATA_LENGTH,
txMsgData);
}
}
通过can输出进行验证测试。例程是正常运行的,但是更改中断线后无输出
我是自己新建的工程,复制了官方的例程< can_ex2_loopback_interrupts >进行的测试,
对于使用了sysconfig工具的工程建议不要这样做。因为有些设置是在sysconfig中完成的。所以建议您不要复制,直接导入工程,然后再利用sysconfig工具进行修改。