首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

求教MSCAN和中断的问题,困扰很多天了

求教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中,请各路高手帮帮我吧,我该怎么解决?
其实地上本没有路,走的人多了也便成了路
还有一个问题,就是我的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. */
请问是怎么回事,代码有问题吗?

其实地上本没有路,走的人多了也便成了路
虽然是发送是进不去中断,但是数据是发送出去了,不知道怎么回事
其实地上本没有路,走的人多了也便成了路
"就是如果我的CAN的插座不接上,程序就会跑死,出不来了"

CAN要通信必须要是两个节点以上才能跑起来哦 你断开另外一个 它发送不出去 显然会有问题哦
对了 你的帧接受是一次就能接到正确的么?我也在做CAN通信 我的重要接4-6次才能接到 不知道何故啊?
我的是发送一个帧就是对的,可能你的程序有问题吧
但是不把节点接上肯定跑死是一定的吗?
哪位高手给我说说呗
其实地上本没有路,走的人多了也便成了路
问题已经解决,是中断设置的问题,只把接受中断打开,而别的中断全关了就行了,不是必须把硬件连上才不能出错,关键是把出错中断关掉就行了
其实地上本没有路,走的人多了也便成了路
返回列表