原创 MCP2515的使用(二)

2008-5-1 18:11 9683 8 8 分类: MCU/ 嵌入式

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接口的指令集,有表及执行时序。


 


点击看大图


相应的函数


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.一个代码的例子
点击下载


 


PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
我要评论
0
8
关闭 站长推荐上一条 /3 下一条