MCP2515的使用(一)

MCP2515的中文资料网上有很多,此,仅讨论具体的一些使用。先看下,在用ARM(LPC21XX)做控制器的情况下,用GPIO口模拟SPI总线的代码。

1.先看下SPI总线的时序图

SPI总线有四根线,CSSCKMISOMOSI,是一种环形总线结构,如下图。

CS是片选。

SCK是串行时钟。

MISO是主输入从输出。

MOSI是主输出从输入。

时序图如下:(参照MCP2515的数据手册)

SPI的输入时序

SPI的输出时序

2.分析下

Commands and data are sent to the device via the SI pin, with data being clocked in on the rising edge of SCK. Data is driven out by the MCP2515 (on the SO line) on the falling edge of SCK.

命令和数据通过SI脚发到设备上,数据在SCK的上升沿写入。数据在SCK的下降沿SO输出

3.相应代码如下:(代码经使用是可行的,给出仅做参考)

/******************************************************************************

*名称: WriteSPI()    SPI一个字节

*功能SPI一个字节

       P0.11            CS

       P0.12            SO

       P0.13            SI

       P1.22            SCK

******************************************************************************/

void  WriteSPI  (uint8  data)

{

    uint8 i;

    IO1CLR = IO1CLR | (1 << 22);                            //SK=0

    for ( i="0"; i<8 ;i++ )

    {   

        i = i;                                                                //延时

        if ( (data & 0x80)==0 )

        {

            IO0CLR = IO0CLR | (1 << 13);                    //SI=0

        }

        else

        {

            IO0SET = IO0SET | (1 << 13);                    //SI=1

        }

        i = i;      

        IO1SET = IO1SET | (1 << 22);                        //SK=1

        i = i;

        data = data << 1;

        IO1CLR = IO1CLR | (1 << 22);                        //SK=0

    }

}

 

/******************************************************************************

*名称: ReadSPI()    SPI一个字节

*功能SPI一个字节

       P0.11            CS

       P0.12            SO

       P0.13            SI

       P1.22            SCK

******************************************************************************/

uint8  ReadSPI  ( void )

{

    uint8 i;

    uint32 bdata1,bdata2;

    uint8 cdata = 0;

    IO1CLR = IO1CLR | (1 << 22);                             //SK=0

    for ( i="0"; i<8 ;i++ )

    {

        i = i;                                                                 //延时

        i = i;

        IO1SET = IO1SET | (1 << 22);                         //SK=1

        cdata  = cdata << 1;

        bdata1  = IO0PIN & 0x00001000;                  //SO         

        i = i;

        bdata2  = IO0PIN & 0x00001000;

        if ( bdata1 != bdata2) return 0x00;               //验证下

        if ( bdata1)

        {

            cdata = cdata | 0x01;

        }

        else

        {

            cdata = cdata & (~0x01);

        }

       

        IO1CLR = IO1CLR | (1 << 22);                      //SK=0

    }

    return cdata;

}

  • 0
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MCP2515是一款CAN总线控制器,可以用于FPGA编程中实现CAN通信功能。在使用MCP2515进行FPGA编程时,需要了解以下几个方面的内容。 首先,需要在FPGA中通过适当的硬件接口连接MCP2515。FPGA通常具有通用输入/输出(GPIO)引脚,可以用于与外部器件进行通信。可以将MCP2515的引脚与FPGA的GPIO引脚相连,以实现数据传输和控制信号的交互。 其次,需要了解MCP2515的寄存器和协议。MCP2515具有一组寄存器,用于配置和控制CAN总线通信。在FPGA编程中,需要使用FPGA的输入/输出引脚与MCP2515的SPI(串行外设接口)通信,向其寄存器写入配置信息,使其能够正常进行数据传输和接收。 接下来,还需要在FPGA中实现CAN数据包的处理和解析。CAN总线通信通常使用特定的数据包格式,包括标识符、数据长度和数据内容等。在FPGA编程中,可以使用FPGA的逻辑单元和存储器来处理和解析CAN数据包,从而实现CAN通信的功能。 最后,还需要在FPGA中实现相应的控制逻辑和状态机。CAN通信需要进行一系列的控制操作,以确保数据传输的正确性和可靠性。在FPGA编程中,可以使用逻辑门和状态机等技术,实现CAN通信的控制逻辑,包括发送控制、接收控制和错误处理等。 综上所述,在FPGA编程中使用MCP2515需要考虑硬件接口连接、寄存器配置、CAN数据包处理和解析以及控制逻辑实现等方面的内容。通过正确的编程和配置,可以在FPGA中实现CAN总线通信功能,从而实现与其他CAN设备的数据交互。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值