查看: 501  |  回复: 0
【ARM开发教程10】ARM功能手机-SPI教程

主题

回复
发表于2022-09-01 14:56:19 | 只看该作者
1# 电梯直达

ARM功能手机

——疯壳·开发板系列

SPI教程    

   

   



 

   图1

   

   

   第一节SPI Flash硬件电路

   

   SPI_Flash可用于存储程序以及一些数据,如果需要存储程序则必须连接在规定的引脚,开发板上选用的MCU引脚分别为:P00,P03,P05,P06,如下图所示:

   

    

   图2

   

   

   

   第二节 SPI+寄存器

   

   2.1 SPI+介绍

   

   这个接口支持SPI总线的一个子集。这个串行接口在主/从模式可以发送和接收8、16或32位,并且在主模式可以发送9位。SPI+接口有双向的2×16位字的FIFO,功能得到了增强。

   该接口可以工作在主或从模式;有8、9、16、32位的操作方式;SPI控制器的时钟达到16MHz,SPI时钟源可以通过编程进行1、2、4、8分频;SPI的时钟线达到8MHz;支持SPI的0、1、2、3四种工作模式;SPI_DO的空闲电平可以通过编程设置;可屏蔽的中断发生器;单向读和写模式降低总线负载。

   

   2.2 寄存器介绍

   2.2.1 SPI控制寄存器0

   

 

    

   图3

   15位:SPI_EN引脚是否有效,’0’表示无效,’1’表示有效;

   14位:SPI中断使能位,’0’表示无效,’1’表示有效;

   13位:’0’表示接收寄存器或FIFO为空,’1’表示SPI中断,数据已经被发送或接收,该位必须通过软件写SPI_CLR_INT_REG清零;

   12位:返回SPI_DI引脚的状态值;

   11位:‘0’表示发送FIFO满,‘1’表示发送FIFO空;

   10位:‘0’正常模式,‘1’使SPIDO的值等于SPI_DO的值;

   9位:‘0’正常操作,‘1’复位SPI;

   8:7位:SPI数据格式;

   6位:SPI工作模式,‘0’为主设备,‘1’为从设备;

   5位:当SPI处于空闲模式或者当SPI_FORCE_DO=1时引脚SPI_DO的值;

   4:3位:SPI在主模式下的时钟频率选择;

   2位:SPI时钟初始电平的高低,‘0’为低,‘1’为高;

   1位:SPI时钟的相位选择,具体看SPI的时序图;(SPI的资料)

   0位:SPI的开关。

   

   2.2.2 SPI接收/发送寄存器0

   

    

   图4

   15:0位:SPI发送或接收的数据,写操作是,存储发送的数据,读操作时,为接收到的数据。

   

   2.2.3 SPI接收/发送寄存器1

   

    

   图5

   15:0位:SPI发送或接收的数据,写操作是,存储发送的数据,读操作时,为接收到的数据;为32位模式的高16位数据。

   

   2.2.4 SPI清除中断寄存器

   

    

   图6

   15:0位:写任意值到该寄存器清除SPI的中断标志。

   

   2.2.5 SPI控制寄存器1

   

   

  

   图7

   15:5位:保留不使用;

   4位:决定在9位模式下的第一位的值;

   3位:SPI忙标志位,‘0’表示SPI空闲,‘1’表示SPI忙;

   2位:SPI优先级选择位,‘0’低优先级,‘1’高优先级;

   1:0位:SPI_FIFO模式。

   

   2.3 寄存器配置讲解

   #define CLK_PER_REG                (* ( volatile uint16*)0x50000004)

   #define SPI_CTRL_REG                (* ( volatile uint16*)0x50001200)

   #define SPI_RX_TX_REG0              (* ( volatile uint16*)0x50001202)

   #define SPI_RX_TX_REG1              (* ( volatile uint16*)0x50001204)

   #define SPI_CLEAR_INT_REG           (* ( volatile uint16*)0x50001206)

   #define SPI_CTRL_REG1               (* ( volatile uint16*)0x50001208)

   启动SPI模块的时钟:CLK_PER_REG |= 0x0800;

   SPI的初始化配置寄存器:

   先关闭SPI, SPI_CTRL_REG =0x8000;

   SPI配置为8位模式,主模式,时钟空闲为低电平,相位模式0,关闭SPI中断,时钟8分频(0x1000000000000000),则SPI_CTRL_REG =0x8000;

   开SPI, SPI_CTRL_REG | =0x0001;

   发送一个字节0x55,将数据填充进发送寄存器SPI_RX_TX_REG0 = 0x55;等待发送寄存器为空while(SPI_CTRL_REG&0x2000);

   接收一个字节,读取接收寄存器rx_data = SPI_RX_TX_REG;

   

   

   

   第三节 SPI实验

   

   实验需要使用的模块有:手机开发板底板,Jlink调试工具,USB转串模块、杜邦线、3.7V锂电池或Mocro USB线。

   使用USB转串模块连接手机蓝牙串口,连接方式如下:

       (1)USB转串模块一端只需要使用杜邦线连接RXD、TXD、GND三个引脚,如下图所示:

   

    

   图8

   (2)手机主控底板一端需要使用杜邦线连接左侧J7三个引脚,与USB转串模块的引脚一一对应(串口引脚要交叉),分别为RXD-->TXD、TXD-->RXD、GND-->GND,如下图所示:

   

    

   图9

   使用JLINK通过杜邦线连接手机蓝牙,连接方式如下:

   (1)JLINK一端只需要使用杜邦线连接JLINK的SWC、SWD、GND三个引脚,如下图所示:

   

   

   图10

   (2)手机蓝牙一端需要使用杜邦线连接上方右侧的J3三个引脚,与JLINK的连接引脚一一对应,分别为SWC-->SWCLK、SWD-->SWDIO、GND-->GND,如下图所示:

   

    

   图11

   将JLINK插上电脑的USB接口,连接好之后给手机主控底板供电,详细的介绍可以参考《如何上电》教程,路径为:..\WT_Mobile\0.从这里开始\0.开机测试。

   SPI实验的Keil工程为spi_flash.uvproj,位于目录:

   ..\WT_Mobile\1.初级教程\DA14580\6_初级_SPI\projects\target_apps\peripheral_examples\spi\spi_flash\Keil_5,如下图所示:

   

    

   图12

   打开串口调试助手连接串口模块。在KEIL中编译源代码,点击DEBUG,然后点击全速运行,就看到串口打印出的读写Flash的信息,如下图所示:

   

 


 


    

   图13

   

   

   

      文件下载请点击:SPI教程.pdf 



主题

回复
  • 温馨提示: 标题不合格、重复发帖、发布广告贴,将会被删除帖子或禁止发言。 详情请参考: 社区发帖规则
  • 您当前输入了 0 个文字。还可以输入 8000 个文字。 已添加复制上传图片功能,该功能目前仅支持chrome和火狐

禁言/删除

X
请选择禁言时长:
是否清除头像:
禁言/删除备注:
昵 称:
 
温馨提示:昵称只能设置一次,设置后无法修改。
只支持中文、英文和数字。

举报

X
请选择举报类型:
请输入详细内容:

顶部