好的、我有一个问题。 I2C-int1a_ISR 未在上触发(AAS =1 (即使我启用了 i2CIER -> AAS 位=1、i2CSTR 也是如此)。
那么、我在这里缺少什么吗? 当我具有 i2c 写入(作为从器件)时,它会触发,但在读取期间不起作用。
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-int1a_ISR 未在上触发(AAS =1 (即使我启用了 i2CIER -> AAS 位=1、i2CSTR 也是如此)。
那么、我在这里缺少什么吗? 当我具有 i2c 写入(作为从器件)时,它会触发,但在读取期间不起作用。
那么、我的问题是-
1)当我在28035中以写入方式将数据从28379 (主器件)发送到从器件28035时、会触发 i2c ISR、并在 ISR 中从 I2caRegs.I2CDRR 读取数据、操作成功完成。
2) 2)当我执行同样的操作但28379希望从从28035读取时- 23035中的 i2ca ISR 不会在 AAS 上触发。 我在 i2cier reg 中启用了 AAS 位。
那么、时钟会变低。 但是、如果我轮询 AAS 位、则传输会成功完成。 那么、为什么28035中的 i2c 中断即使已为 AAS 位启用也不会被触发?
我附加了一个寄存器的屏幕截图、当它被设置为 ned 时。 那么、让我知道我是否做了一些错误的事情。
谢谢、
是的、我在等待您的回复时做了几处更改。 如果您能更快地回复、那将是一个大帮助。
我只有两个中断被启用。
I2caRegs.I2CIER.ALL = 0x0;
I2caRegs.I2CIER.bit.RRDY=1;
I2caRegs.I2CIER.bit.XRDY=1;
因此、它在需要时仍然不会中断。
另外、 为什么在2CISRC.bit.INTCODE = 0时触发中断?
此外、如果我在 i2c ISR 开始时施加150微秒的延迟、则我的所有操作都将顺利进行。
那么、您能否帮助解决我为什么需要延迟的问题。
谢谢。
Sadar、
[引用 user="sagar shah54"]
我只有两个中断被启用。
I2caRegs.I2CIER.ALL = 0x0;
I2caRegs.I2CIER.bit.RRDY=1;
I2caRegs.I2CIER.bit.XRDY=1;
[/报价]
这些中断不用于使用、并且在使用 I2C FIFO 模式时可能不会触发。
[引用 user="sagar shah54"]当 2CISRC.bit.INTCODE = 0时为什么会触发中断?[/quot]
您是如何对此进行测试的? 当 CPU 读取 INTCODE 时、应该有相应的中断值。 可能是根据您看到的内容清除了它。
[引用 user="sagar shah54"]
此外、如果我在 i2c ISR 开始时施加150微秒的延迟、则我的所有操作都将顺利进行。
那么、您能否帮助解决我为什么需要延迟的问题。
[/报价]
您能否共享包含此延迟的 ISR 代码片段?
最棒的
Kevin
_interrupt void i2c_int1a_isr (void) // I2C-A { // int j; intcode = I2caRegs.I2CISRC.bit.INTCODE; if (intcode!= 0){ DELAY_US (130);//这是使其工作的延迟 if (I2caRegs.I2CSTR.bit.SDIR = 1 && intcode = 5){//将28379写入双核 I2caRegs.I2CDXR = dataRx[0]; while (I2caRegs.I2CSTR.bit.XRDY!= 1){};// 1 =数据移位后、数据传输到内核 TX 寄存器 I2caRegs.I2CDXR = dataRx[1]; while (I2caRegs.I2CSTR.bit.XRDY!= 1){};// 1 =数据移位后、数据传输到内核 TX 寄存器 I2caRegs.I2CDXR = dataRx[2]; while (I2caRegs.I2CSTR.bit.XRDY!= 1){};// 1 =数据在数据移位后通过内核 TX 寄存器传输 I2caRegs.I2CDXR = dataRx[3]; while (I2caRegs.I2CSTR.bit.XRDY!= 1){};// 1 =数据在数据移位 后通过内核 TX 寄存器传输} if (I2caRegs.I2CSTR.bit.SDIR =0 && intcode =4){//从28379读取并保存寄存器 while (I2caRegs.I2CFFRX.bit.RXFFST < 4){}; //等待4字节数据到达 for (j =0;j < 4;j++){ dataRx[j]= I2caRegs.I2CDRR; } }//案件结束 INT = 4 }// INTCODE 结束!= 0 PieCtrlRegs.PIEACX.ALL = PIEACK_group8; }
萨加尔
[引用 user="sagar shah54"]我不使用 FIFO 模式,我使用的 Cnt = 4字节。
不确定这是什么意思、看起来您使用的是 FIFO 模式。 在您在中提供寄存器值的第二个帖子中、I2CFFEN 和 RXFFRST 设置为1、从而启用 I2C FIFO。 您还在检查代码中的接收 FIFO 状态" while
(I2caRegs.I2CFFRX.bit.RXFFST < 4) {};'.
[引用 user="sagar shah54"]此外,当我在 ISR 中放入断点时,中断代码有时为0。
您是否在I2caRegs.I2CISRC.bit.INTCODE
intcode
断点处检查或检查变量? 如果您正在检查寄存器位、我希望在将值移动到intcode
变量后将其清除。 当 CPU 读取时、寄存器字段将被清除、intcode
您的变量应包含正确的值。
对我来说、对这种延迟的需求毫无意义。 INTCODE 已被读取、此时不会受到影响。 没有延迟会发生什么情况? 当您写入 TX 缓冲区时、总线可能会很忙? 您可以尝试添加一些其他状态寄存器检查(可能是 BB 位?) 然后再写入 I2CDXR.
最棒的
Kevin