【问题标题】:I2C and timer interrupt (timer1)I2C 和定时器中断 (timer1)
【发布时间】:2013-03-27 10:39:06
【问题描述】:

我正在尝试使用 dsPIC33 微控制器从多个 I2C 从设备中读取数据。

我希望有人能就使用定时器中断(在本例中为 timer1)和收集 I2C 数据的正确方法向我提供建议。

到目前为止,我可以通过在 while 循环中循环从 I2C 从设备收集数据,但由于尝试添加定时器中断(因此我可以应用自己的采样率而不是“尽可能快地收集”)我的 I2C 软件驱动程序卡住了。

我尝试过使用非常低的计时器速度(目前为 1Hz),并且 I2C 处于标准的 100KHz 速度。 PIC 以 80MHz 的频率处理。

使用定时器和 I2C 模块的正确方法是什么?我在网上看了看,似乎这可能是中断优先级的问题,因为当使用 timer1 时,我在中断 (timer1) 中有一个中断 (I2C),尽管到目前为止还没有运气。

【问题讨论】:

    标签: timer interrupt pic sampling i2c


    【解决方案1】:

    看来我设法解决了自己的问题,而且也相当快。

    原来是中断优先级问题,我之前将 timer1 设置为优先级 7(最高):

    IPC0bits.T1IP = 0b111; // Timer1 Interrupt priority level=7
    

    将其更改为优先级 1 解决了问题:

    IPC0bits.T1IP = 0b001; // Timer1 Interrupt priority level=1
    

    希望这可以帮助遇到此问题的其他人,我的猜测是不同的优先级与 I2C 中断冲突。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-02
      相关资源
      最近更新 更多