Board logo

标题: 求教MSCAN和中断的问题,困扰很多天了 [打印本页]

作者: brittany    时间: 2007-7-13 09:22     标题: 求教MSCAN和中断的问题,困扰很多天了

我的MSCAN的收数和发数都已经没问题了,数据完全正确,但是现在有个问题,就是如果我的CAN的插座不接上,程序就会跑死,出不来了,我单步走发现是进了一个中断里
/*
** ===================================================================
** Method : Cpu_Interrupt (bean MC9S12C32_80)
**
** Description :
** This method is internal. It is used by Processor Expert
** only.
** ===================================================================
*/
#pragma CODE_SEG __NEAR_SEG NON_BANKED /* Interrupt section for this module. Placement will be in NON_BANKED area. */

__interrupt void Cpu_Interrupt(void)
{
}

#pragma CODE_SEG DEFAULT /* Change code section to DEFAULT. */
就是上面的这个中断,我用的单片机是MC9S12C32,用PE 自动生成代码,上面这个中断是在CPU.C中,请各路高手帮帮我吧,我该怎么解决?
作者: brittany    时间: 2007-7-13 09:27

还有一个问题,就是我的CAN数据的接受和发送都用的是中断,设断点我发现接受可以进中断,而发送却进不了中断
#pragma CODE_SEG __NEAR_SEG NON_BANKED /* Interrupt section for this module. Placement will be in NON_BANKED area. */
__interrupt void CAN1_FreeTxBuffer(void)
{
byte buffer = CANTFLG & 7; /* Temporary variable */

__EI(); /* If yes then enable interrupts */
CAN1_OnFreeTxBuffer(buffer); /* If yes then invoke user event */

}

#pragma CODE_SEG CAN1_CODE /* Code section for this module. */
/*
** ===================================================================
** Method : CAN1_FullRxBuffer (bean MotorolaCAN)
**
** Description :
** This method is internal. It is used by Processor Expert
** only.
** ===================================================================
*/
#pragma CODE_SEG __NEAR_SEG NON_BANKED /* Interrupt section for this module. Placement will be in NON_BANKED area. */
__interrupt void CAN1_FullRxBuffer(void)
{
CAN1_OnFullRxBuffer(); /* If yes then invoke user event */
CANRFLG_RXF = 1; /* Reset the reception complete flag */

}

#pragma CODE_SEG CAN1_CODE /* Code section for this module. */
/*
** ===================================================================
** Method : CAN1_Error (bean MotorolaCAN)
**
** Description :
** This method is internal. It is used by Processor Expert
** only.
** ===================================================================
*/
#pragma CODE_SEG __NEAR_SEG NON_BANKED /* Interrupt section for this module. Placement will be in NON_BANKED area. */
__interrupt void CAN1_Error(void)
{
if (CANRFLG_TSTAT == 3) { /* Is busoff detect? */
CAN1_OnBusOff(); /* If yes then invoke user event */
}
CANRFLG |= 254; /* Reset error flags */
}

#pragma CODE_SEG CAN1_CODE /* Code section for this module. */
请问是怎么回事,代码有问题吗?


作者: brittany    时间: 2007-7-13 09:31

虽然是发送是进不去中断,但是数据是发送出去了,不知道怎么回事
作者: lanncyxjj    时间: 2007-7-13 10:06

"就是如果我的CAN的插座不接上,程序就会跑死,出不来了"

CAN要通信必须要是两个节点以上才能跑起来哦 你断开另外一个 它发送不出去 显然会有问题哦
作者: lanncyxjj    时间: 2007-7-13 10:09

对了 你的帧接受是一次就能接到正确的么?我也在做CAN通信 我的重要接4-6次才能接到 不知道何故啊?
作者: brittany    时间: 2007-7-13 10:47

我的是发送一个帧就是对的,可能你的程序有问题吧
但是不把节点接上肯定跑死是一定的吗?
哪位高手给我说说呗
作者: brittany    时间: 2007-7-13 17:34

问题已经解决,是中断设置的问题,只把接受中断打开,而别的中断全关了就行了,不是必须把硬件连上才不能出错,关键是把出错中断关掉就行了




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0