• SPI接口协议的学习3


    在SPI接口使用之前,需要实现SPI提供的服务,包括:
    SPI接口的初始化、配置、打开、关闭、发送、接收等,如果使能了中断,还需要提供中断服务程序,使能了DAM,需要提供DMA的收发程序等。
    实现上述功能服务前,还需要提供一些基础的服务,比如寄存器配置、状态获取、配置参数获取和设置、GPIO相关初始化和配置控制等。
    通过前面学习可知,SPI寄存器的基地址获取方式:
    spi_regs[SPI0]
    spi_regs[SPI1]
    spi_regs[SPI2]
    其中SPI0、SPI1、SPI2为SPI编号。
    通过基地址和寄存器配置相关的宏定义,可以实现对寄存器的配置。
    对于SPI GPIO的访问,需要知道使用了哪个SPI,即SPI的编号,使用了哪个组。
    当上层使用SPI接口时,传入参数为SPI设备。这里提供函数,通过SPI设备返回其编号,函数实现如下:
    static u8 spi_get_info_id(spi_dev spi)//获取ID
    {
    ASSERT(spi < SPI_MAX_HW_NUM);
    return spi;
    }
    这里SPI设备号和SPI编号一致,因此为相同的值。
    上层调用SPI接口时传入SPI设备即为SPI的编号。
    通过SPI设备,获取其用了哪个端口,即哪个组,函数实现如下:
    static u8 spi_get_info_port(spi_dev spi)
    {
    u8 port = (u8) - 1;
    u8 id = spi_get_info_id(spi);
    switch (id) {
    #if SPI0_ENABLE
    case SPI0:
    port = spi0_p_data.port;
    break;
    #endif
    #if SPI1_ENABLE
    case SPI1:
    port = spi1_p_data.port;
    break;
    #endif
    #if SPI2_ENABLE
    case SPI2:
    port = spi2_p_data.port;
    break;
    #endif
    default:

  • 相关阅读:
    五问补盲(一) | 激光雷达补盲,视场多大算大?
    Unittest框架--自动化
    QT入门10个小demo——连接MySql实现登录模块
    Typora收费了,于是乎我自己写了一个
    排序算法总结
    重生之我是一名程序员 38
    阿里云->宝塔配置
    如何在C程序中使用libcurl库下载网页内容
    视频 | 生信Linux - awk 学习和使用
    3个线程打印ABC
  • 原文地址:https://blog.csdn.net/binglinuxxin/article/details/127980506