主题中讨论的其他器件: HALCOGEN
您好!
我使用的是"RM46L852"。
我必须使用 CAN 通信的接收中断。
但是、我没有得到我想要的结果。
"HALCOGEN"用于如下设置:
我检查了生成的代码中"ca.c、ca.h、sys_vim.c 和 sys_vim.h"的内容、并将相关器件复制到了我的项目中。
请告诉我、除了上述文件之外、您是否还有任何需要检查的文件。
如果您有一个使用接收中断的示例、请分享。 我认为这将对我有所帮助。
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.
您好!
我使用的是"RM46L852"。
我必须使用 CAN 通信的接收中断。
但是、我没有得到我想要的结果。
"HALCOGEN"用于如下设置:
我检查了生成的代码中"ca.c、ca.h、sys_vim.c 和 sys_vim.h"的内容、并将相关器件复制到了我的项目中。
请告诉我、除了上述文件之外、您是否还有任何需要检查的文件。
如果您有一个使用接收中断的示例、请分享。 我认为这将对我有所帮助。
您好、Woodyonng、
您的 HALCoGen 配置看起来不错、它应该生成具有 ISR 的 CAN 驱动程序(CAN.c)、如下所示:
#pragma CODE_STATE (CAN1LowLevelInterrupt、32)
#pragma INTERRUPT (CAN1LowLevelInterrupt、IRQ)
/* sourceId:CAN_sourceId_021 */
/* DesignId:CAN_DesignId_019 */
/*要求:HL_SR221、HL_SR223 */
void can1LowLevelInterrupt (void)
{
uint32 MessageBox = canREG1->INT >> 16U;
/*用户代码开始(44)*/
/*用户代码结束*/
/**-设置 IF1以清除暂挂中断标志*/
/*SAFETYMCUSW 28 D MR:NA "找到可能无限的循环-执行序列的硬件状态检查"*/
while ((canREG1->IF1STAT & 0x80U)=0x80U)
{
}/*等待*/
CANREG1->IF1CMD = 0x08U;
/*SAFETYMCUSW 93 S MR:6.1、6.2、10.1、10.2、10.3、10.4 "LDRA 工具问题"*/
canREG1->IF1NO =(uint8) MessageBox;
/*SAFETYMCUSW 28 D MR:NA "找到可能无限的循环-执行序列的硬件状态检查"*/
while ((canREG1->IF1STAT & 0x80U)=0x80U)
{
}/*等待*/
CANREG1->IF1CMD = 0x87U;
canMessageNotification (canREG1、MessageBox);
/*用户代码开始(45)*/
/*用户代码结束*/
在主函数中、请使用以下命令启用 IRQ 中断:
_enable_interrupt_();
或
_enable_IRQ ();
HALCoGen 有一个使用中断的 CAN 示例:
感谢您的回答。
我通过向"void can1LowLevelInterrupt (void)"函数添加断点来检查它、但它不会进入此函数。
但是、当在主函数中执行以下函数时、该值将出现在 Rx 数据中。
CAN1RxID = canGetID (canREG1、canMESSAGE_BOX5);
//while (!canIsRxMessageArrived (canREG1、canMESSAGE_BOX5));
canGetData (canREG1、canMESSAGE_BOX5、canRxData);
此外、当您取消注释"// while (! CanIsRxMessageArrived (canREG1、canMESSAGE_BOX5));"、您将在这里以无限循环结束。
通常会执行通信、但不会发生中断。
我认为中断设置有问题、但我不知道哪个部分。