• NXP I.MX6ULL SDK I2C研读(一)


    恩智浦官方SDK中的裸机I2C驱动中所有函数列出如下,共计32个,其中主机相关函数17个,从机相关函数12个,剩余3个为使能和失能interrupt和I2C block(I2C_Enable实际也有失能I2C block的功能)。

    1.I2C_DisableInterrupts

    如下,我认为改写版本也可以,只能说官方的更严谨,既然是Disable了,肯定是从able状态变到了disable了。而改写版本包含了able到disable,disable到diable两种行为,不严谨,但是效果我认为是一样的。

    2.I2C_Enable

    这个函数名是Enable,但是逻辑里却包含了disable的分支。这样做我觉得容易让人误解。

    3.I2C_EnableInterrupts

    如下,if条件实际是mask和另一个mask进行&运算,结果一定是真,也就是if可以不要,不清楚为啥要加个if判断,个人感觉没必要。

    4.I2C_MasterClearStatusFlags

    I2SR中,我们可写的只有bit1和bit4,其余6个都是只读的。I2C_MasterInit调用I2C_MasterClearStatusFlags的时候,statusMask值为18,即bit4和bit2为1,也证明了我们只能对bit4和bit2写操作。

    5.I2C_MasterDeinit

    如下,首先失能I2C,然后,判断:

    ①.假如之前没定义过FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL(没定义过肯定就没执行过相应的失能时钟的行为了)

    ②.时钟现在还是工作状态。

    以上两条件有一个满足就 掐掉时钟。

    6.I2C_MasterGetDefaultConfig

    不太理解为什么加上assert。剩下是设置默认波特率和使能I2C外设。但是此函数并没有在其他函数中有被调用。

     7.I2C_MasterGetStatusFlags

    如下,就是取I2SR寄存器的值。

    8.I2C_MasterInit

    直接拿流程图来说明。

    9.I2C_MasterReadBlocking

    细节在图中已标出。个人认为假读和最后两字节的处理是重点。

    10.I2C_MasterRepeatedStart

    函数逻辑及函数实现如下:

    11.I2C_MasterSetBaudRate

    12.I2C_MasterStart

    具体函数实现如下,和发送重复起始信号,少了“我是不是主机”的判断,默认使用该函数时,自己是主机。

     13.I2C_MasterStop

    将控制寄存器的相应位置为相应状态即可发送停止命令:

    ①MSTA:Slave Mode

    ②MTX:Receive

    ③TXAK:Transmit acknowledge enable

    14.I2C_MasterTransferAbort

    恩智浦是这么描述这个函数的:

    Aborts an interrupt non-blocking transfer early. This API can be called at any time when an interrupt non-blocking transfer initiates to abort the transfer early.
    具体函数实现如下:
    15. I2C_MasterTransferBlocking
    流程图如下。
    具体函数实现如下:
    16.I2C_MasterTransferCreateHandle
    NXP描述此函数:Initializes the I2C handle which is used in transactional functions.  具体实现如下:
    17.I2C_MasterTransferGetCount
    NXP描述此函数:Gets the master transfer status during a interrupt non-blocking transfer.
     
    Updating......
  • 相关阅读:
    Hive分桶bucket
    Error: java.io.IOException: org.apache.hadoop.hdfs.BlockMissingException: Could not obtain block
    接上一篇嵌套循环问题之解决
    RPA自动化机器人uibot之循环嵌套坑
    Chrom谷歌浏览器没网之最全解决办法之一
    (语法糖)列表生成式之怪诞--(暂时无法理解)
    浅析scrapy与scrapy-redis的区别
    浅谈Python中函数式编程、面向对象编程以及古怪的PythonIC
    OpenCV+TensorFlow图片手写数字识别(附源码)
    TensorFlow Object Detection API中的Faster R-CNN /SSD模型参数调整
  • 原文地址:https://www.cnblogs.com/kunshanpipixia/p/14304789.html
Copyright © 2020-2023  润新知