该程序中"I2C_MasterReceiver"函数的第314行。 根据手册、如果启用 REPEACT_MODE、则 I2CCNT 无效、并且"在处于 FIFO 模式时、直到发送 FIFO 为空"、因此"I2C_getRxFIFOStatus"函数的返回值为16、"remainingBytes"的值小于16、 不可能相等、因此该函数将循环并延迟、直到计数溢出。 这是程序中的错误还是我理解错误?
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
该程序中"I2C_MasterReceiver"函数的第314行。 根据手册、如果启用 REPEACT_MODE、则 I2CCNT 无效、并且"在处于 FIFO 模式时、直到发送 FIFO 为空"、因此"I2C_getRxFIFOStatus"函数的返回值为16、"remainingBytes"的值小于16、 不可能相等、因此该函数将循环并延迟、直到计数溢出。 这是程序中的错误还是我理解错误?
Han、
i2cLib_FIFO_POLLING.c 的第301行用于检查 RX FIFO 是否已满(即 RX FIFO 已接收到16个字节(或)未接收)。
i2cLib_FIFO_POLLING.c 的第314行用于检查接收到的字节数是否小于16。
此致、
曼诺伊
是的、我知道当数据量小于16时、这是接收函数、但当我调试时、可能是由于一个断点、即当我执行这句话时 FIFO 已满、"I2C_getRxFIFOStatus"的返回值不会逐渐增加。 在它等于"remainingBytes"之前、它直接等于16、因此该函数将进入 while 循环、那么它是否可以更改为">="而不是"="? 是否会有任何不良影响?
示例项目是否不适合您? 如果是、则不起作用的是什么。
您可以随意修改示例项目。 您应该能够替换为>=。