RFIC4463_F3C&D

文档内容:

1、工程相关辅助函数编写,如复位延时函数等;

2、SPI接口程序编写,无线收发模块等使用SPI接口进行配置。

时间节点:2014/11/4~2014/11/6

一、       工程辅助函数编写

一个主程序的开始,首先要进行的是对相关模块进行复位和初始化等,工程中初始化操作如下:

 

对MCU进行初始化,MCU_Init如下:

 

MCU初始化中,对SPI接口初始化,即关SPI置nSEL为1。置SDN为0,定义有如下:

 

CLED置0,作为一个上电指示,当程序运行时拉低P0_7脚用于指示。

 

之后SDN拉高,由上述可得,实现对射频芯片的复位操作。

之后再经过一定时间的延时,完成对芯片的唤醒。

最后通过一定时间延时,发送POWER_UP命令至射频芯片,开始常规操作。

二、       SPI接口程序编写

MCU和RFIC之间使用SPI接口相联接,本工程采用4线方式,相应的引脚定义如下:

 

其中nSEL为片选使能信号,低电平有效;MISO为从器件的串行输出,即从RFIC到MCU;MOSI为主器件的串行输出,即从MCU到RFIC。

SPI程序头文件如下所示:

 

上述头文件中定义了使能和关闭SPI的两个函数SpiClear&SpiSet

 

由上可知,即通过使能nSEL实现。

另外包括四个函数SendData_NoResp/GetResp/Byte和SpiReadWrite。

前面的三个函数分别应用在不同的场景,有前述文档我们知道,每次发送的Command的是按byte发送的。

(1)对于WTS/Read_CMD/TX_FIFO_CMD等都是单byte的;

其余的一些CMD都是多个byte连着发送的,这里面又分为需要回复和不需要回复两种。

(2)对于GET_IN_STATUS_CMD需要GetResponse,WTS操作中亦是需要使用到GetResponse的;

(3)对于其余的大多数CMD都是直接发送连续,不需要回复,即GetNoResponse。

(4)上述三个函数归根至底层,都是将每byte通过SPI接口与MCU之间进行同行,即使用SpiReadWrite。

1SpiReadWrite函数编写

 

A:首先定义读功能时,返回读取数值的变量temp;以及存储中断状态的restoreEA

B:发送SPI数据之前先关掉系统中断;

C:对输出的8bit数据进行处理:

    a:拉低SCK,用于后面产生上升沿驱动数据传输;

    b:判断数据高位,为1则置MOSI为1,反之置0;

    c:拉高SCK,产生一个时钟上升沿驱动MOSI;

    d:将8bit数据左移一位,处理次高位

    e:下面程序为读时候的程序,将变量temp左移一位

    f:判断MISO引脚上收到的数据,为1,则将temp地位置1,反之置0

    g:循环上述操作,直到处理完8bit数据

D:数据传输结束,置SCK为0即默认状态

E:恢复系统中断状态

F:返回读取的数值

2Spi_SendDataByte函数编写

该函数较简单,即使用一次1中函数即可,如下所示

 

3Spi_SendDataGetResp函数编写

    函数获取的值即为RFIC通过SPI接口传送至MCU的数据。程序如下:

 

函数通过向SPI接口发送无用数据(0XFF,即始终置MOSI为1),然后获取Response。

4Spi_SendDataGetNoResp函数编写

    函数通过SPI接口将数据传送至MCU的数据。程序如下:

 

函数向SPI接口发送规定长度的数据,*pbDataIn指向所发送的数据。

具体的关于上述函数如何使用,会在后期文档中讲述。

一切都是最好的安排,感谢生命中所遭遇的一切!
原文地址:https://www.cnblogs.com/sunxuxu/p/4126828.html