《2022年模拟SPI口实现对CAN控制器mcp的操作程序 .pdf》由会员分享,可在线阅读,更多相关《2022年模拟SPI口实现对CAN控制器mcp的操作程序 .pdf(3页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、模拟 SPI 口实现对 CAN 控制器 mcp2515的操作程序(2009- 06-18 11:33:20)标签: can 总线 mcp2515 参考程序it#include 2515.h #include SPI.h #include reg51.h #include Function.h #define CAN_10Kbps 0 x31 #define CAN_25Kbps 0 x13 #define CAN_50Kbps 0 x09 #define CAN_100Kbps 0 x04 #define CAN_125Kbps 0 x03 #define CAN_250Kbps 0 x01
2、#define CAN_500Kbps 0 x00 /void SPIReset(void); /void SPIByteWrite(unsigned char ,unsigned char ); /unsigned char SPIByteRead(unsigned char ); unsigned char dummy; void Init2515(unsigned int IDF) SPIReset(); delay_ms(1); /SPIByteWrite(CANCTRL,0 x80);/CAN工作在配置模式 SPIByteWrite(RXM0SIDH,0 x00); SPIByteW
3、rite(RXM0SIDL,0 x00); SPIByteWrite(RXF0SIDH,0 x00); SPIByteWrite(RXF0SIDL,0 x00); SPIByteWrite(RXM1SIDH,0 x00); SPIByteWrite(RXM1SIDL,0 x00); SPIByteWrite(RXF2SIDH,0 x00); SPIByteWrite(RXF2SIDL,0 x00); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 3 页 - - - -
4、- - - - - /设置波特率为10Kbps /set CNF1,SJW=00,长度为 1TQ,BRP=49,TQ=2*(BRP+1)/Fsoc=2*50/8M=12.5us SPIByteWrite(CNF1,CAN_125Kbps); /set CNF2,SAM=0,在采样点对总线进行一次采样,PHSEG1=(2+1)TQ=3TQ,PRSEG=(0+1)TQ=1TQ SPIByteWrite(CNF2,0 x80|PHSEG1_3TQ|PRSEG_1TQ); /set CNF3,PHSEG2=(2+1)TQ=3TQ, 同时当 CANCTRL.CLKEN=1 时设定 CLKOUT 引脚为时
5、间输出使能位 SPIByteWrite(CNF3,PHSEG2_3TQ); /set TXB0,设置发送缓冲器0 的标识符和发送的数据,以及发送的数据长度 SPIByteWrite(TXB0CTRL,0 x03);/设置发送缓冲器0 控制寄存器清零TXREQ, 发送优先级最高 /BitModiMcp2515(TXB0CTRL,0 x08,0 x00); SPIByteWrite(TXB0SIDH,IDF);/设置发送缓冲器0 的标准标识符,待修改* SPIByteWrite(TXB0SIDL,0 xE0);/用到标准标识符 SPIByteWrite(TXB0DLC,DLC_8);/设置发送数据
6、的长度为8 个字节 /SPIByteWrite(TXB0D0,0 x1E);/有待修改及确定是否使用 /SPIByteWrite(TXB0D1,0 x10); / 有待修改及确定是否使用 /设置接收缓冲器0 的标识符和初始化数据 /SPIByteWrite(RXB0SIDH,0 x55);/设置接收缓冲器0 的标准标识符,待修改* /SPIByteWrite(RXB0SIDL,0 xE0);/用到标准标识符 SPIByteWrite(RXB0CTRL,0 x20);/仅仅接收标准标识符的有效信息,FIILHIT0=0表示RXB0 ,采用 FILHIT0 SPIByteWrite(RXB0DLC
7、,DLC_8);/设置接收数据的长度为8 个字节 SPIByteWrite(RXF0SIDH,0 xE0);/初始化接收滤波器0,待修改 * SPIByteWrite(RXF0SIDL,0 xE0); SPIByteWrite(RXM0SIDH,0 xFF);/初始化接收屏蔽器0,待修改 * SPIByteWrite(RXM0SIDL,0 xE0); /设置接收缓冲器1 的标识符和初始化数据 /SPIByteWrite(RXB1SIDH,IDF); /设置接收缓冲器0 的标准标识符,待修改* 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - -
8、- - - 名师精心整理 - - - - - - - 第 2 页,共 3 页 - - - - - - - - - /SPIByteWrite(RXB1SIDL,0 xE0);/用到标准标识符 SPIByteWrite(RXB1CTRL,0 x20);/仅仅接收标准标识符的有效信息,FIILHIT0=0表示RXB0 ,采用 FILHIT0 SPIByteWrite(RXB1DLC,DLC_8);/设置接收数据的长度为8 个字节 SPIByteWrite(RXF2SIDH,0 x00);/初始化接收滤波器2,待修改 * SPIByteWrite(RXF2SIDL,0 xE0); SPIByteWr
9、ite(RXF3SIDH,0 x01);/初始化接收滤波器3,待修改 * SPIByteWrite(RXF3SIDL,0 xE0); SPIByteWrite(RXF4SIDH,0 x02);/初始化接收滤波器4,待修改 * SPIByteWrite(RXF4SIDL,0 xE0); SPIByteWrite(RXF5SIDH,0 x56);/初始化接收滤波器5,待修改 * SPIByteWrite(RXF5SIDL,0 xE0); SPIByteWrite(RXM1SIDH,0 xFF);/初始化接收屏蔽器1,待修改 * SPIByteWrite(RXM1SIDL,0 xE0); /设置接收
10、缓冲器0 中断 SPIByteWrite(CANINTF,0 x00);/接收完一次必须对中断标志位清0 SPIByteWrite(CANINTE,0 x02);/接收缓冲器0 满中断使能位 * 修改成 01-02 /设置单触发模式1 使能,报文尝试发送一次;0 禁止。如有需要报文会重发 /BitModiMcp2515(CANCTRL,0 x08,0 x00); SPIByteWrite(CANCTRL,REQOP_NORMAL | CLKOUT_ENABLED);/设置正常模式 BitModiMcp2515(CANCTRL,0 xE7,0 x04); dummy=SPIByteRead(CANSTAT); if (OPMODE_NORMAL != (dummy & 0 xE0) SPIByteWrite(CANCTRL,REQOP_NORMAL | CLKOUT_ENABLED);/ 判断进入正常工作模式 /SPIByteWrite(CANCTRL,0 x00);/选定正常工作模式 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 3 页 - - - - - - - - -