IMX6ULL裸机篇之SPI实验-SPI主控寄存器

一.   SPI主控寄存器

IMX6ULL 芯片的 SPI接口叫做 ECSPI,支持全双工、主丛可配置。

本文学习 IMX6ULL-阿尔法开发板SPI中控芯片的 SPI寄存器部分。后续代码实现需要配置 SPI相关的寄存器。

二.   SPI主控的寄存器配置

1.   SPI主控芯片寄存器

(1)  RXDATA寄存器为接收到的数据。

关于RXDATA寄存器而言,这里读取数据时,一定要等待RR位置1(即状态位)后,才可以读取数据。

TXDATA寄存器为发送数据寄存器。

这两个寄存器都是32位寄存器。但是,我们一般使用低8位,因为SPI通信时,我们是一个字节一个字节进行传输的。

(2)  CONREG寄存器为配置寄存器。

bit0 置1,使能SPI。

Bit3 置1,表示当向TXFIFO写入数据以后马上开启SPI突发访问,也就是发送数据。

Bit7:4 设置 SPI通道主从模式,bit7为通道3,bit4为通道0,我们使用到了SS0,也就是通道0,因此需要设置bit4为1。

Bit8:11 是设置是时钟分频用的,Bit12:15也是设置时钟分频用。 (关于时钟分频数的配置在后面会进行详细的介绍!!!) 

Bit19:18 设置为00,我们使用到SS0,也就是通道0。

一个 ECSPI 有四个硬件片选信号,每个片选信号是一个硬件通道,虽然我们本章实验使用的软件片选,但是 SPI 通道还是要选择的。可 设置为 0~3 ,分别对应通道 0~3 I.MX6U-ALPHA 开发板上的 ICM-20608 的片选信号接的是 ECSPI3_SS0 ,也就是 ECSPI3 的通道 0

Bit31:20 设置突发访问长度,我们设置为7,也就是8bit突发长度,一个字节。

(3)  CONFIGREG寄存器为配置寄存器。

bit0 为PHA,设置为 0,表示 串行时钟的第一个跳变沿开始采集数据。

bit4:7 位表示设置时钟极性。bit4为PO,设置为0,表示SCLK空闲的时候为低电平。

Bit8 设置0。

Bit12 设置 为0。

Bit16 设置为0,表示空闲的时候数据线为高。

Bit20 设置为0,表示SCLK空闲的时候为低。

(4)  STATREG寄存器:为状态寄存器。

bit0表示TXFIFO为空,我们在发送数据之前要等待TXFIFO为空,即等待bit0为1。

Bit3表示RXFIFO是否有数据,为1的时候示RXFIFO至少有1个字的数据,我们在接收数据的时候要等到bit3为1。

(5)  PERIODREG寄存器采用周期控制寄存器。

bit14:0设置wait states时间,我们设置为0X2000。

Bit15设置wait states的时钟源为SPI CLK,将此位设置0。
Bit21:16表示片选信号的延时,可设置0-63,这里设置为0.

2.  时钟配置

时钟分频设置需要参考 "时钟章节" 中的时钟树部分。

IMX6ULL裸机篇之SPI实验-SPI主控寄存器_第1张图片

从时钟树可以看出:

SPI时钟源最终来源于pll3_sw_clk=480MHz/8=60MHz。

CSCDR2寄存器:

bit18:设置为 0,则 ECSPI时钟源为 60MHz

bit24:19:设置为0,表示1分频,最终进入到 SPI外设的时钟源为 60MHz

ECSPI_CONREG寄存器:

ECSPI模块还需要对时钟进行两级分频,由ECSPI_CONREG寄存器设置。

Bit15:12设置前级分频,可以设置0~0xf,表示1~16分频。

Bit11:8设置2级分频,设置2^n分频,n=0~15.

你可能感兴趣的:(嵌入式C开发,裸机开发,arm开发,linux)