MCP2515的使用(二)

1.首先MCP2515的资料都在这,里面有MCP2515的数据手册,一些示例代码,有些代码是可以直接拷贝使用的。

http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1999&ty=&dty=&section=&NextRow=&ssUserText=MCP2515

2.SPI指令集

MCP2515有两个接收缓冲器,三个发送缓冲器, SPI 接口。驱动的代码一部分要完成SPI接口的指令集,有表及执行时序。

 MCP2515的使用(二)_第1张图片

相应的函数

void   MCP2515Reset  (void);                                                         //复位

uint8  MCP2515Read  (uint8 addr);                                                //

void   MCP2515ReadRXBuf  (uint8 addr, uint8 *str, uint8 num);   //RX缓冲器

void   MCP2515Write  (uint8 addr, uint8 data);                            //

void   MCP2515LoadTXBuf (uint8 addr, uint8 *str, uint8 num);    //装载TX缓冲器

void   MCP2515ReqTx  (uint8 addr);                                             //请求发送报文

uint8  MCP2515RdStus  (void);                                                     //读状态

uint8  MCP2515RxStus  (void);                                                     //RX状态

void   MCP2515BitModify (uint8 addr, uint8 mask, uint8 data);   //位修改

3.就是CAN的收发数据了,共有两个接收缓冲器,三个发送缓冲器,可以通过中断来收发数据,当发送缓冲器满或接收缓冲器有有效数据时产生中断。

BOOL CANSendMsg( int Channel, UINT16 Identifier, UINT8* Msg, UINT8 MsgSize )

BOOL CANGetMsg( int Channel, UINT16* pIdentifier, UINT8* Msg, UINT8* pMsgSize )

注意:一定要确保初始化成功,本人在调试的过程中就遇到,如果初始化没成功,程序会一会执行正确,一会不正常的情况。

     改变工作模式时,新的工作模式须等到所有当前报文发送完毕之后才生效。必须通过读取CANSTAT.OPMODE位来验证新的工作模式。

比如:

    do

    {

        MCP2515Write( MCP_CANCTRL, 0x80);        //CAN工作在配置模式

        j = MCP2515Read( MCP_CANSTAT ) & 0xF0;   //验证是否已经进入配置模式

    }while(j!=0x80);

 4.一个代码的例子

你可能感兴趣的:(工作)