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通信配置相关推荐

  1. 小型公司 --- OSPF 不连续区域进行通信配置

    实验名称:OSPF 不连续区域进行通信配置: 实验目的:在不连续的区域间进行全网通信: 实验准备: 首先,准备六台路由器,三台PC机. PC1:IP地址:100.1.1.1 子网掩码:255.255. ...

  2. linux 子接口 非vlan,VLAN之间通过子接口通信配置示例

    VLAN之间通过子接口通信配置示例 1.组网需求 图1配置VLAN间通过子接口通信组网图 如上图1所示,企业的不同部门拥有相同的业务,如上网.VoIP等业务,且各个部门中的用户位于不同的网段.目前存在 ...

  3. 西门子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 ...

  4. 西门子S7300PLC转以太网连接CHNet-S7300MD实现以太网通信配置方法

    西门子S7300PLC转以太网连接CHNet-S7300MD实现以太网通信配置方法 产品简介 兴达易控CHNet-S7300MD用于西门子S7-200/SMART S7-200/S7-300/S7-4 ...

  5. Modbus转Profinet网关连接皖仪氦质谱检漏仪SFJ-16M通信配置案例

    Modbus转Profinet网关连接皖仪氦质谱检漏仪SFJ-16M通信配置案例 Modbus转Profinet网关XD-MDPN100连接皖仪氦质谱检漏仪SFJ-16M,接入到西门子1200PLC, ...

  6. 串口服务器与网页通信配置,串口服务器是怎么实现串口通信的

    串口服务器作用通过串口把工业设备通过有线(RJ45)或无线(WIFI)的方式连连接到以太网上.来实现设备的远程传输与管理.那么串口服务器通信是怎么样通信的呢.下面就以众山设备ZSE310为例,介绍串口 ...

  7. 4G模组通信配置相关概念及流程

    文章目录 一.cs域和ps域: 二.移动设备上网流程 三.PDP上下文 四.TCP/IP AT 命令使用流程图(EC200x) 参考 一.cs域和ps域: CS域 PS域 主要负责语音业务,如12.2 ...

  8. STM32F207串口通信配置

    因为之前有用到STM32F207芯片,因此写了一个串口通信,鉴于自己学习时候也查找过网上关于STM32F2系列的资料,感觉查出来比较少,因此想着今天分享一下自己写的关于STM32F207串口配置的代码 ...

  9. 欧姆龙CJ系列PLC连接CHNet-CJ实现以太网通信配置方法

    产品简介 CHNet-CJ是兴达易控自主研发的一款经济型的以太网通讯处理器,是为满足日益增多的工厂设备信息化需求(设备网络监控和生产管理)而设计,用于欧姆龙CJ1M/CJ2M/CS1/CG1/NX1P ...

  10. Console方式下俩台思科路由器间局域网通信配置

    实验环境(真机操作): 每个实验台共俩太PC机,每俩台为一组: 每组配备一台思科路由器(具有俩个LAN口): 每组配置一根Console线,俩跟直通双绞线,一根路由器电源线: 实验网络拓补结构图: 图 ...

最新文章

  1. 智源大会参会指南:4天 100+场顶尖报告,硬核高密度,如何才能不留遗憾?
  2. 人工智能用python还是java_学会java和python语言,可以开始搞人工智能吗?
  3. 关于Delphi中DLL,BPL等无法调试的问题
  4. python qq模块_Python的nonebot模块如何获取命令发出者的QQ?
  5. 智能音箱 之 麦克风参数介绍
  6. 适用于Apache Hadoop 2.0 M5的Spring
  7. 直播回顾:准确性提升到 5 秒级,ssar 独创的 load5s 指标有多硬核?| 龙蜥技术
  8. 创建ASM With Oracle 10g
  9. Java:对于Borderlayout布局管理的理解
  10. 开通5G网络服务三个月,中国广电交出了什么样的答卷?
  11. Ubuntu linux下的命令大全
  12. 怎样恢复手机oracle默认窗口,通达信恢复默认版面,Effects界面如何恢复初始默认设置...
  13. JVM从入门到入魔(一) 类加载机制
  14. .NET Core 分析程序集更优方法,超越ReflectionOnlyLoad
  15. Nat Chem Biol | 李大力/宋高洁/赵永祥合作开发“精准安全”的腺嘌呤碱基编辑器ABE9...
  16. Pdf 插入图片 | 指定位置插入图片 不改变原格式 直接操作 pdf
  17. stm32f4晶振管理
  18. android图片涂鸦,具有设置画笔,撤销,缩放移动等功能(一)
  19. 【human nature】:马云的故事
  20. Legacy Code Tool

热门文章

  1. ptc creo 4.0 m140中文版(CAD设计软件) 附安装教程
  2. CCPC-WFinal-女生专场
  3. 安装纯净版windows系统,win10企业版LTSC
  4. 永磁同步电机PMS直接转矩控制 Matlab/Simulink仿真模型
  5. 为什么手机发射功率这么小而基站却能收到信号?
  6. Origin 8.6 使用常见操作(随遇随写)
  7. 树莓派挂载8187L破解wifi
  8. python工厂模式和单例模式_python之单例模式和工厂模式
  9. win7如何设置自定义开关机背景图片
  10. 2.3,2.2,2.1最新谷歌服务包发布附下载(原创)