BF533中对MCP2515的初始化
0赞
发表于 3/3/2012 11:38:01 AM
阅读(3577)
#include "dm_bf5xx.h"
#include "dm_types.h"
#define Out_Flag_A 0x00
#define Out_Flag_B 0x00
#define Out_Flag_C 0x00
/****************************************************************************
* 名称 : MCP2515_init
* 功能 : 初始化SPI控制器 选通CAN_SPISS
* 入口参数 :无
* 出口参数 :无
****************************************************************************/
void MCP2515_init(void)
{
*pFIO_DIR = PF2;
*pFIO_FLAG_S = PF2; //拉高SPISS
SPIinit();
SPIMenable();
SPIMODE_TX();
*pCtrIner_Flag_OE = (~SPI_OE) ; //SPI_switc 允许
mdelay(500);
*pCtrOut_Flag_B = Out_Flag_B|SPI_A0;//0x01; // 选择CAN_SPISS
mdelay(500);
}
/****************************************************************************
* 名称 : MCP2515_RST
* 功能 : MCP2515 软件复位
* 入口参数 :无
* 出口参数 :无
****************************************************************************/
void MCP2515_RST(void)
{
SPIsend(0xc0);
udelay(0x7fff);
udelay(0x7fff);
}
/****************************************************************************
* 名称 : MCP2515_WRITE_REG
* 功能 : MCP2515 内部控制寄存器写函数
* 入口参数 :addr 内部寄存器地址 dat 写入该地址的数据
* 出口参数 :无
****************************************************************************/
void MCP2515_WRITE_REG(uint8_t addr,uint8_t dat)
{
SPIMenable(); //允许SPI
SPIMODE_TX(); //发送模式
SPIsend(MCP2515_WRITE );//写命令
SPIsend(addr); //写地址
SPIsend(dat); //写数据
udelay(0x7fff);
SPIdisable(); //禁止SPI
udelay(0x7fff);
}
/****************************************************************************
* 名称 : MCP2515_READ_REG
* 功能 : MCP2515 内部控制寄存器读函数
* 入口参数 :无
* 出口参数 :addrr 要读的内部寄存器地址 *buf 读出的数据 len 为读出的字节数
****************************************************************************/
void MCP2515_READ_REG(uint8_t addrr,uint8_t *buf,uint8_t len)
{
uint8_t i;
SPIMenable(); //允许SPI
SPIMODE_TX(); //发送模式
SPIsend(MCP2515_READ ); //读命令
SPIsend(addrr ); //读地址
SPIMODE_RX(); //接收模式
if(*pSPI_STAT&RXS)
{
buf[0] = *pSPI_RDBR;
}
for(i=0;i
