查看: 4912|回复: 0

i.MX RT1064函数库:I2C模块和SPI模块

[复制链接]
  • TA的每日心情
    开心
    2024-3-26 15:16
  • 签到天数: 266 天

    [LV.8]以坛为家I

    3300

    主题

    6547

    帖子

    0

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    32035
    最后登录
    2024-4-26
    发表于 2020-8-6 11:10:56 | 显示全部楼层 |阅读模式
    i.MX RT1064函数库:I2C模块和SPI模块


    为方便参加恩智浦大学生智能车设计竞赛的同学们,成都逐飞科技设计制作了i.MX RT1064核心板,并配套开发了相应的函数库。
    本文为逐飞科技来稿,在此分享给大家,对不参加智能车竞赛的朋友也有很大的帮助作用。
    点此回顾往期内容:
    GPIO详解
    FAST GPIO模块详解与使用示例
    ADC模块和QTIMER模块
    PIT模块详解与使用示例
    UART模块详解与使用示例

    PWM和CACHE模块的使用


    各位朋友好,逐飞科技连载的“基于RT1064的智能车应用入门指导”开发分享又来投稿啦!今天分享IIC & SPI两个模块的使用,主要讲解如何通过逐飞RT1064函数库来便捷的实现使用这两个模块进行通信。感谢恩智浦的支持,感谢梁平老师的支持以及帮忙检查修改文中错误,感谢关注“逐飞科技”。接下来进入我们今天分享的主题----“IIC模块详解与使用示例”&“SPI模块详解与使用示例”:

    IIC模块详解与使用示例


    1. IIC功能


    IIC(Inter-Integrated Circuit)主要是用于芯片之间短距离、低速的通信。IIC可以在一个主机下连接多个从机,通过不同的从机地址与不同的从机进行通信。RT1064的IIC全部是低功耗的(LPIIC)。


    2. IIC库函数


    以下函数均位于zf_iic.c和zf_iic.h:
    1.png
    iic_init函数参数
    2.png
    iic_write_reg函数参数
    3.png
    iic_read_reg函数参数
    5.png
    iic_read_reg_bytes函数参数
    6.png
    IIC使用示例


    IIC基本使用
    1. #include "headfile.h"
    2.   
    3. uint8 dat;
    4. uint8 test[10];
    5. int main(void)
    6. {
    7.     DisableGlobalIRQ();
    8.     board_init();   //务必保留,本函数用于初始化MPU 时钟 调试串口

    9.     //初始化IIC模块1 B17为SDA B16为SCL 波特率为400K
    10.     iic_init(IIC_1,IIC1_SDA_B17,IIC1_SCL_B16,400*1000);
    11.       
    12.     //使用IIC模块1 写入0x32数据到0x65地址 从机ID为0x55
    13.     iic_write_reg(IIC_1,0x55,0x65,0x32);
    14.       
    15.     //使用IIC模块1 读取0x65地址的数据存放到dat 从机ID为0x55
    16.     iic_read_reg(IIC_1,0x55,0x65,&dat);
    17.       
    18.     //使用IIC模块1 读取0x65开始之后的10个地址的数据存放到test数组 从机ID为0x55
    19.     iic_read_reg_bytes(IIC_1,0x55,0x65,test,10);
    20.       
    21.     EnableGlobalIRQ(0);
    22.   
    23.     while(1)
    24.     {
    25.          
    26.     }
    27. }
    复制代码
    编程要点:当需要连续读取某一段地址的数据时,建议使用iic_read_reg_bytes采用连读,避免了多次发送起始信号,使得读取速度相比单字节读取函数要快。
    使用注意事项:想直接调用这一层函数需要对IIC协议有一定的了解,并且对所操作的模块寄存器分布以及ID都必须了解才能完成与外部模块通讯的功能。

    SPI模块详解与使用示例


    1. SPI功能
    SPI(Serial Peripheral Interface)主要用于是板级之间短距离、低速的通信。相较于IIC,SPI具有更高的通信速率。SPI可以在一个主机下连接多个从机,通过将不同的片选引脚拉低与不同的从机进行通信。RT1064的SPI全部是低功耗的(LPSPI)。


    2. SPI库函数
    以下函数位于zf_spi.c和zf_spi.h:
    7.png
    spi_init函数参数
    8.png
    spi_mosi函数参数
    10.png
    SPI使用示例



    SPI基本使用
    1. #include "headfile.h"
    2.   
    3. uint8 dat[5];
    4. int main(void)
    5. {
    6.     DisableGlobalIRQ();
    7.     board_init();   //务必保留,本函数用于初始化MPU 时钟 调试串口

    8.     //初始化SPI1模块 SCK为D12 MOSI为D14 MISO为D15 CS0为D13 模式1 波特率为1M  
    9.     spi_init(SPI_1, SPI1_SCK_D12, SPI1_MOSI_D14, SPI1_MISO_D15, SPI1_CS0_D13, 0, 1*1000*1000);
    10.       
    11.     EnableGlobalIRQ(0);
    12.   
    13.     //写入需要发送的数据  
    14.     dat[0] = 0x00;
    15.     dat[1] = 0x01;
    16.     dat[2] = 0x02;
    17.     dat[3] = 0x03;
    18.     dat[4] = 0x04;
    19.       
    20.     //开始发送数据
    21.     spi_mosi(SPI_1,SPI1_CS0_D13,dat,dat,5,0);
    22.       
    23.     while(1)
    24.     {
    25.          
    26.     }
    27. }
    复制代码
    编程要点1:在使用SPI与外设进行通讯时请务必查阅资料,了解清楚外设的SPI是哪种模式,然后在初始化设置模式与外设模式必须一致。否则通讯可能失败或者不正确。
    编程要点2:在使用spi_mosi发送或者接收数据时,最后一个参数请务必根据外设的时序来选择合适的片选控制方式。有的外设在一次通讯期间CS必须持续为低电平。




    本期逐飞科技“基于RT1064的智能车应用入门指导”之“IIC模块详解与使用示例”&“SPI模块详解与使用示例”专题分享就到这里,大家在使用库的过程中如果遇到什么问题、或发现不足及建议请及时联系“逐飞科技”:
    逐飞科技__智能车③部:824575535;
    AI电磁组交流群--逐飞科技:1077051054;
    我们将尽快完善。感谢关注“逐飞科技”,下期再见!


    文章出处:恩智浦MCU加油站

    签到签到
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2024-4-28 08:24 , Processed in 0.120957 second(s), 22 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表