MC9S12XEP100 CAN通信配置
MC9S12XEP100 CAN通信配置
CAN0配置
结构体
typedef struct
{UINT32 ID; UINT8 DtLen;UINT8 IDE;UINT8 data[8];
} CanMsg_t;CanMsg_t Rx0Msg,Rx4Msg;
初始化
void Init_Can0(void)
{if(CAN0CTL0_INITRQ==0) // 查询是否进入初始化状态 CAN0CTL0_INITRQ =1;// 进入初始化状态while (CAN0CTL1_INITAK==0); //等待进入初始化状态CAN0BTR0_SJW = 0;//设置同步CAN0BTR0_BRP = 3;//设置波特率3-250k,根据时钟按需配置CAN0BTR1 = 0x1c; //设置时段1和时段2的Tq个数 ,总线频率为500k // 关闭滤波器 CAN0IDMR0 = 0xFF;CAN0IDMR1 = 0xFF;CAN0IDMR2 = 0xFF;CAN0IDMR3 = 0xFF;CAN0IDMR4 = 0xFF;CAN0IDMR5 = 0xFF;CAN0IDMR6 = 0xFF;CAN0IDMR7 = 0xFF; CAN0CTL1 = 0xC0; //使能MSCAN模块,设置为一般运行模式、使用总线时钟源 CAN0CTL0 = 0x00; //返回一般模式运行while(CAN0CTL1_INITAK); //等待回到一般运行模式while(CAN0CTL0_SYNCH==0);//等待总线时钟同步CAN0RIER_RXFIE = 1; //开接收中断
}
发送
unsigned char Can0SendMsg(CanMsg_t msg)
{ unsigned char send_buf, sp;// 检查数据长度if(msg.DtLen > 8)return(FALSE);// 检查总线时钟if(CAN0CTL0_SYNCH==0)return(FALSE);send_buf = 0;do{
// 寻找空闲的缓冲器CAN0TBSEL=CAN0TFLG;send_buf=CAN0TBSEL;}while(!send_buf); // 写入标识符if(msg.IDE==0) {CAN0TXIDR0 = (unsigned char)(msg.ID>>3);CAN0TXIDR1 = (unsigned char)(msg.ID<<5);} else {CAN0TXIDR0 = (unsigned char)(msg.ID>>21);CAN0TXIDR1 = (unsigned char)(((msg.ID>>15)&0x07)|((msg.ID>>13)&0xE0)|0x18);CAN0TXIDR2 = (unsigned char)(msg.ID>>7);CAN0TXIDR3 = (unsigned char)(msg.ID<<1);}// 写入数据for(sp = 0; sp < msg.DtLen; sp++)*((&CAN0TXDSR0)+sp) = msg.data[sp];// 写入数据长度CAN0TXDLR = msg.DtLen; // 清 TXx 标志 (缓冲器准备发送)CAN0TFLG = send_buf;return(TRUE);
}
接收
unsigned char Can0GetMsg(CanMsg_t *msg)
{ unsigned char sp0; // 检测接收标志if(CAN0RFLG_RXF==0){return(FALSE);}// 检测 CAN协议报文模式 (一般/扩展) 标识符if(!CAN0RXIDR1_IDE) //IDE = 0:标准ID ;1:扩展ID msg->ID = ((((unsigned char)CAN0RXIDR0)<<8) + ((unsigned char)CAN0RXIDR1)) >> 5;elsemsg->ID = (unsigned long)((unsigned long)CAN0RXIDR0<<21)|(unsigned long)((((CAN0RXIDR1>>5)<<3)| ((unsigned long)(CAN0RXIDR1&0b00000111)))<<15)| (unsigned long)(CAN0RXIDR2<<7)|(CAN0RXIDR3>>1);// 读取数据长度 msg->DtLen = CAN0RXDLR;// 读取数据for(sp0 = 0; sp0 < msg->DtLen; sp0++)msg->data[sp0] = *((&CAN0RXDSR0)+sp0);// 清 RXF 标志位 (缓冲器准备接收)CAN0RFLG = 0x01;return(TRUE);
}
中断
#pragma CODE_SEG __NEAR_SEG NON_BANKEDvoid interrupt 38U Can0Rx(void)
{if(Can0GetMsg(&Rx0Msg)) {if(Rx0Msg.ID == 0x0000000) {}}
}
#pragma CODE_SEG DEFAULT
CAN4
void Init_Can4(void)
{MODRR_MODRR2 = 1; MODRR_MODRR3 = 0;if(CAN4CTL0_INITRQ==0) // 查询是否进入初始化状态 CAN4CTL0_INITRQ =1;// 进入初始化状态while (CAN4CTL1_INITAK==0); //等待进入初始化状态CAN4BTR0_SJW = 0;//设置同步CAN4BTR0_BRP = 3;//设置波特率 CAN4BTR1 = 0x1c; //设置时段1和时段2的Tq个数 ,总线频率为0x5c->250kb/s ,0x25->500k // 关闭滤波器 CAN4IDMR0 = 0xFF;CAN4IDMR1 = 0xFF;CAN4IDMR2 = 0xFF;CAN4IDMR3 = 0xFF;CAN4IDMR4 = 0xFF;CAN4IDMR5 = 0xFF;CAN4IDMR6 = 0xFF;CAN4IDMR7 = 0xFF; CAN4CTL1 = 0xC0; //使能MSCAN模块,设置为一般运行模式、使用总线时钟源 CAN4CTL0 = 0x00; //返回一般模式运行while(CAN4CTL1_INITAK); //等待回到一般运行模式while(CAN4CTL0_SYNCH==0);//等待总线时钟同步CAN4RIER_RXFIE = 1; //开接收中断
}
发送接收
与CAN0类似
中断
#pragma CODE_SEG __NEAR_SEG NON_BANKED
void interrupt 54U Can4Rx(void)// CAN_receive
{if(Can4GetMsg(&Rx4Msg)) { if(Rx4Msg.ID == 0x0000000000) {} }
}
#pragma CODE_SEG DEFAULT
MC9S12XEP100 CAN通信配置相关推荐
- 小型公司 --- OSPF 不连续区域进行通信配置
实验名称:OSPF 不连续区域进行通信配置: 实验目的:在不连续的区域间进行全网通信: 实验准备: 首先,准备六台路由器,三台PC机. PC1:IP地址:100.1.1.1 子网掩码:255.255. ...
- linux 子接口 非vlan,VLAN之间通过子接口通信配置示例
VLAN之间通过子接口通信配置示例 1.组网需求 图1配置VLAN间通过子接口通信组网图 如上图1所示,企业的不同部门拥有相同的业务,如上网.VoIP等业务,且各个部门中的用户位于不同的网段.目前存在 ...
- 西门子S7-200 SMART(6ES7 288-1ST40-0AA0)相关与晨控智能CK-FR08-E00关于modbus tcp 通信配置指南
西门子S7-200 SMART(6ES7 288-1ST40-0AA0)相关与晨控智能CK-FR08-E00关于modbus tcp 通信配置指南 准备阶段 软件:STEP 7-MicroWIN SM ...
- 西门子S7300PLC转以太网连接CHNet-S7300MD实现以太网通信配置方法
西门子S7300PLC转以太网连接CHNet-S7300MD实现以太网通信配置方法 产品简介 兴达易控CHNet-S7300MD用于西门子S7-200/SMART S7-200/S7-300/S7-4 ...
- Modbus转Profinet网关连接皖仪氦质谱检漏仪SFJ-16M通信配置案例
Modbus转Profinet网关连接皖仪氦质谱检漏仪SFJ-16M通信配置案例 Modbus转Profinet网关XD-MDPN100连接皖仪氦质谱检漏仪SFJ-16M,接入到西门子1200PLC, ...
- 串口服务器与网页通信配置,串口服务器是怎么实现串口通信的
串口服务器作用通过串口把工业设备通过有线(RJ45)或无线(WIFI)的方式连连接到以太网上.来实现设备的远程传输与管理.那么串口服务器通信是怎么样通信的呢.下面就以众山设备ZSE310为例,介绍串口 ...
- 4G模组通信配置相关概念及流程
文章目录 一.cs域和ps域: 二.移动设备上网流程 三.PDP上下文 四.TCP/IP AT 命令使用流程图(EC200x) 参考 一.cs域和ps域: CS域 PS域 主要负责语音业务,如12.2 ...
- STM32F207串口通信配置
因为之前有用到STM32F207芯片,因此写了一个串口通信,鉴于自己学习时候也查找过网上关于STM32F2系列的资料,感觉查出来比较少,因此想着今天分享一下自己写的关于STM32F207串口配置的代码 ...
- 欧姆龙CJ系列PLC连接CHNet-CJ实现以太网通信配置方法
产品简介 CHNet-CJ是兴达易控自主研发的一款经济型的以太网通讯处理器,是为满足日益增多的工厂设备信息化需求(设备网络监控和生产管理)而设计,用于欧姆龙CJ1M/CJ2M/CS1/CG1/NX1P ...
- Console方式下俩台思科路由器间局域网通信配置
实验环境(真机操作): 每个实验台共俩太PC机,每俩台为一组: 每组配备一台思科路由器(具有俩个LAN口): 每组配置一根Console线,俩跟直通双绞线,一根路由器电源线: 实验网络拓补结构图: 图 ...
最新文章
- 智源大会参会指南:4天 100+场顶尖报告,硬核高密度,如何才能不留遗憾?
- 人工智能用python还是java_学会java和python语言,可以开始搞人工智能吗?
- 关于Delphi中DLL,BPL等无法调试的问题
- python qq模块_Python的nonebot模块如何获取命令发出者的QQ?
- 智能音箱 之 麦克风参数介绍
- 适用于Apache Hadoop 2.0 M5的Spring
- 直播回顾:准确性提升到 5 秒级,ssar 独创的 load5s 指标有多硬核?| 龙蜥技术
- 创建ASM With Oracle 10g
- Java:对于Borderlayout布局管理的理解
- 开通5G网络服务三个月,中国广电交出了什么样的答卷?
- Ubuntu linux下的命令大全
- 怎样恢复手机oracle默认窗口,通达信恢复默认版面,Effects界面如何恢复初始默认设置...
- JVM从入门到入魔(一) 类加载机制
- .NET Core 分析程序集更优方法,超越ReflectionOnlyLoad
- Nat Chem Biol | 李大力/宋高洁/赵永祥合作开发“精准安全”的腺嘌呤碱基编辑器ABE9...
- Pdf 插入图片 | 指定位置插入图片 不改变原格式 直接操作 pdf
- stm32f4晶振管理
- android图片涂鸦,具有设置画笔,撤销,缩放移动等功能(一)
- 【human nature】:马云的故事
- Legacy Code Tool
热门文章
- ptc creo 4.0 m140中文版(CAD设计软件) 附安装教程
- CCPC-WFinal-女生专场
- 安装纯净版windows系统,win10企业版LTSC
- 永磁同步电机PMS直接转矩控制 Matlab/Simulink仿真模型
- 为什么手机发射功率这么小而基站却能收到信号?
- Origin 8.6 使用常见操作(随遇随写)
- 树莓派挂载8187L破解wifi
- python工厂模式和单例模式_python之单例模式和工厂模式
- win7如何设置自定义开关机背景图片
- 2.3,2.2,2.1最新谷歌服务包发布附下载(原创)