IMX6ULL裸机篇之SPI实验-SPI主控代码实现

一.  SPI 实验

SPI实验:学习如何使用 I.MX6U 的 SPI 接口来驱动 ICM-20608,读取 ICM-20608 的六轴数据。

本文学习 SPI主控芯片的代码编写。其中,包括SPI工作模式设置,主从模式设置,时钟配置等实现。

二.  SPI 主控芯片代码

本实验的工程代码是在  "I2C实验" 的工程代码基础上继续实现的SPI的。将"I2C实验"工程代码拷贝一份。更名为 "18_spi"
在 工程目录中的 bsp 文件夹下创建名为 "spi" 文件。在 /bsp/spi 目录中,新建 bsp_spi.h bsp_spi.c 这两个文件。

1.  设置 SPI根时钟源

bsp/clk 目录的时钟代码中,即 /bsp/clk/ 目录下的 bsp_clk.c 文件添加 SPI根时钟配置代码。

SPI 的时钟树如下:

IMX6ULL裸机篇之SPI实验-SPI主控代码实现_第1张图片

通过时钟树,可以知道 :

SPI 选择的是 PLL3_SW_CLK时钟,经过了 8分频,再经过一个1分频。最后得到 ECSPI_CLK_ROOT时钟,供 SPI外设使用。

bsp_clk.c 文件中的 imx6u_clkinit( ) 函数(即初始化系统时钟接口)中,添加如下 SPI根时钟代码:

    /* 设置SPI的根时钟源*/
    CCM->CSCDR2 &= ~(1 << 18);    //选择pll3_sw_clk/8= 480/8 = 60MHz
    CCM->CSCDR2 &= ~(0x3F << 19); //设置为1分频

2.  SPI主控代码

SPI通信中,片选信号可以有两种选择。可以选择硬件片选或软件片选。本实验使用软件片选。

-

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