找回密码
 立即注册
查看: 73|回复: 5

CAN2 进不去中断,为什么

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:3
  • 最近打卡:2025-06-09 09:26:01
已绑定手机

2

主题

2

回帖

24

积分

新手上路

积分
24
发表于 7 天前 | 显示全部楼层 |阅读模式
void CANInit(void)
{
        CAN_InitTypeDef                CAN_InitStructure;                                                //结构定义

        P_SW3 &= ~0x03;                                                //CAN2: CAN2RX(P0.2), CAN2TX(P0.3)

CAN_InitStructure.CAN_Enable = ENABLE;                        //CAN功能使能          ENABLE,DISABLE
        CAN_InitStructure.CAN_IMR = 0xff;                                //CAN中断寄存器         CAN_DOIM,CAN_BEIM,CAN_TIM,CAN_RIM,CAN_EPIM,CAN_EWIM,CAN_ALIM,CAN_ALLIM,DISABLE
        CAN_InitStructure.CAN_SJW = SJW;                                //重新同步跳跃宽度  0~3
        CAN_InitStructure.CAN_SAM = SAM;                                //总线电平采样次数  0:采样1次; 1:采样3次
        CAN_InitStructure.CAN_TSG1 = TSG1;                                //同步采样段1       0~15
        CAN_InitStructure.CAN_TSG2 = TSG2;                                //同步采样段2       1~7 (TSG2 不能设置为0)
        CAN_InitStructure.CAN_BRP = BRP;                                //波特率分频系数    0~63
        CAN_InitStructure.CAN_ACR0 = 0x00;                                //总线验收代码寄存器 0~0xFF
        CAN_InitStructure.CAN_ACR1 = 0x00;        
        CAN_InitStructure.CAN_ACR2 = 0x00;        
        CAN_InitStructure.CAN_ACR3 = 0x00;        
        CAN_InitStructure.CAN_AMR0 = 0xff;                                //总线验收屏蔽寄存器 0~0xFF
        CAN_InitStructure.CAN_AMR1 = 0xff;        
        CAN_InitStructure.CAN_AMR2 = 0xff;        
        CAN_InitStructure.CAN_AMR3 = 0xff;        
        CAN_Inilize(CAN2, &CAN_InitStructure);                        //初始化CAN1          CAN1,CAN2
        CANSEL = 1;         //选择CAN2模块
//        CANICR = 0x02;                //CAN中断使能
        CANICR |= 0x20;                //CAN中断使能
}

void CAN2_ISR_Handler(void) interrupt CAN2_VECTOR
{
        u8 isr;
        u8 store;
        u8 arTemp;
        P31=1;
        arTemp = CANAR;     //先CANAR现场保存,避免主循环里写完 CANAR 后产生中断,在中断里修改了 CANAR 内容
        store = AUXR2;      //后AUXR2现场保存
        
        AUXR2 |= 0x08;                //选择CAN2模块
        isr = CanReadReg(ISR);                //读取中断寄存器
        CanWriteReg(ISR, isr);  // 直接写ISR寄存器清除标志位


        if((isr & CAN_TIM) == CAN_TIM)          //TI        发送中断
        {
                CAN_TX_Flag = 0;                                        //发送完成,CAN发送状态标记清零
        }        
        if((isr & CAN_RIM) == CAN_RIM)          //RI        接收中断
        {
                CAN_RX_Flag = 1;                                        //接收完成,CAN接收状态标记置1
                //ReadID = CanReadStandardFrame(CAN_RX_BUF);  // 读取ID和数据
        }
        if((isr & CAN_EWIM) == CAN_EWIM)          //EWI        错位警告中断
        {
                CANAR = MR;
                CANDR &= ~0x04;  //清除 Reset Mode, 从BUS-OFF状态退出
        }        
        if((isr & CAN_ALIM) == CAN_ALIM)          //ALI        仲裁丢失中断
        {                }        
        if((isr & CAN_EPIM) == CAN_EPIM)          //EPI        被动错位中断
        {                }        
        if((isr & CAN_BEIM) == CAN_BEIM)         //BEI        总线错位中断
        {                }        
        if((isr & CAN_DOIM) == CAN_DOIM)          //DOI        接收溢出中断
        {                }        

        AUXR2 = store;     //先AUXR2现场恢复
        CANAR = arTemp;    //后CANAR现场恢复
}


回复

使用道具 举报 送花

3

主题

727

回帖

165

积分

等待验证会员

积分
165
发表于 7 天前 | 显示全部楼层
在CAN网络中,CAN2协议是一种常用的28位协议,主要用于自动化控制设备之间的通信。CAN2帧包含以下信息:
CAN2: CAN2RX(P02), CAN2TX(P03)
CAN2FR: CAN2Frame数(1-1024)
CAN2BW: CAN2总线宽度(1-4)
CAN2ID: CAN2ID寄存器(1-24)
CAN2TID: CAN2TotalID寄存器(1-8)

在CAN网络中,功能设置(CANymoon)是一个至关重要的部分,它决定了CAN2帧在通信系统中的行为。功能设置包括以下参数:
CANymoon: CAN功能使能(0-63)
CANIMR: CAN中断寄存器(0-0xFF)
CANSJD: CAN同步跳变(0~3)
CANSAM: CAN采样次数(0~7)
CANTSG1: CAN同步采样段1(0~15)
CANTSG2: CAN同步采样段2(0~7)
CANBRP: 波特率(0~63)
CANACR0-2: CAN总线验收代码寄存器(0~0xFF)

在CAN网络中,断点检测(CAN中断)需要一个中断寄存器(CANIMR)来保存中断状态。CANIMR的范围是0~0xFF,表示中断状态的16位二进制数。

在CAN网络中,CAN2帧的生成和初始化是一个复杂的过程。通常,CAN2帧的生成需要通过CAN2初态(CAN2FG1)来初始化CAN2网络设备。CAN2初态的设置包括功能设置(CANymoon)和中断寄存器(CANIMR)。

以下是一些在CAN网络中可能遇到的问题和解决方案:
1. CAN中断无法正确检测:如果中断寄存器(CANIMR)未正确设置,导致中断检测无法生效。建议检查CANIMR的设置值是否正确,并确保符合CAN标准。
2. CAN2初态未正确初始化网络设备:如果网络设备未正确初始化CAN2初态,会导致CAN2帧无法正确发送。建议通过CAN HW的CAN2FG1功能设置来正确初始化网络设备。
3. CAN2帧生成失败:如果CAN2帧生成失败,可能是因为功能设置或中断寄存器设置错误。建议查阅CAN HW的手册,确保功能设置正确。
4. CAN中断检测失败:如果中断检测失败,可能是因为中断寄存器未正确设置或功能设置未正确。建议检查CANIMR的设置,确保符合CAN标准。

在CAN网络中,功能设置是关键部分,需要仔细配置才能确保CAN2帧的正确发送和断点检测。如果功能设置存在问题,可能导致CAN网络无法正常工作。建议通过CAN HW的CAN2FG1功能设置来正确配置功能设置。

此外,断点检测(CAN中断)是CAN协议中非常重要的部分。断点检测通过中断寄存器(CANIMR)来保存中断状态,中断检测通过CAN中断检测功能(CANIMD)来检测中断状态。断点检测可以用于检测网络设备之间的连接中断,确保网络设备的通信正常。

在实际使用中,CAN中断检测通常通过CAN中断检测功能(CANIMD)来实现。CAN中断检测功能包括断点检测(CAN中断检测)和断点检测校验(CAN中断校验)。

综上所述,在CAN网络中,功能设置和中断处理是关键部分。需要仔细配置功能设置以确保CAN2帧的正确发送和断点检测的正常工作。如果功能设置存在问题,建议通过CAN HW的CAN2FG1功能设置来正确配置功能设置。同时,还需要正确设置中断寄存器(CANIMR)和中断检测功能(CANIMD),以确保断点检测的正常工作。

[本文内容由国芯人工智能辅助生成,仅供参考]
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:207
  • 最近打卡:2025-06-15 14:11:16
已绑定手机

67

主题

1906

回帖

4279

积分

荣誉版主

无情的代码机器

积分
4279
发表于 7 天前 | 显示全部楼层
没开总中断?

参考32G实验箱例程测试下:
51-CAN1-CAN2总线标准帧扩展帧同时使用收发测试.zip (167.89 KB, 下载次数: 4)


截图202506090940165645.jpg
深圳国芯人工智能有限公司-实验箱

截图202506090941034110.jpg
深圳国芯人工智能有限公司-核心功能实验板
三天不学习,赶不上刘少奇~
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:3
  • 最近打卡:2025-06-09 09:26:01
已绑定手机

2

主题

2

回帖

24

积分

新手上路

积分
24
发表于 7 天前 | 显示全部楼层
erci*** 发表于 2025-6-9 09:30
没开总中断?

参考32G实验箱例程测试下:

可以发,但是进不了中断,中断打开了

点评

可以发,但Tx中断也触发不了? 试下上面例程,另外1L这个库函数版本和库函数例程也有点差异: [attachimg]103112[/attachimg]  详情 回复 发表于 7 天前
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:207
  • 最近打卡:2025-06-15 14:11:16
已绑定手机

67

主题

1906

回帖

4279

积分

荣誉版主

无情的代码机器

积分
4279
发表于 7 天前 | 显示全部楼层
吴*** 发表于 2025-6-9 09:38
可以发,但是进不了中断,中断打开了

可以发,但Tx中断也触发不了?
试下上面例程,另外1L这个库函数版本和库函数例程也有点差异:
截图202506090944449177.jpg
三天不学习,赶不上刘少奇~
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民II
  • 打卡总天数:98
  • 最近打卡:2025-06-15 09:46:00

733

主题

1万

回帖

1万

积分

管理员

积分
16603
发表于 7 天前 | 显示全部楼层

尝试下用 AiCube 来支持 CAN / Lin 的通信
截图202506090949579609.jpg
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-6-16 04:03 , Processed in 0.167009 second(s), 86 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表