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.

[参考译文] TMS320F28377D:I2C SDA 对 ADC EOC 中断的干扰

Guru**** 2030840 points
Other Parts Discussed in Thread: SYSCONFIG
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1223420/tms320f28377d-i2c-sda-interference-with-adc-eoc-interrupt

器件型号:TMS320F28377D
"Thread:SysConfig"中讨论的其他器件

您好!  

我将 ePWM 外设(3、4、6和4)设置为通用计数器周期、以实现50us。 计数器达到0后、对 EPWM3进行配置、从而触发 ADC 开始转换。 一旦转换完成、转换结束(EOC) 中断将被触发。 这样、每隔50 us 给我一次中断。 我的中断例程[INTERRUPT void ADCC1_ISR (void)]将清除 INT1标志并确认中断[PieCtrlRegs.PIEACK.ALL = PIEACK_GROUP1;]

这种方法效果很好、直到我添加了一些代码来执行与外部 EEPROM 的 I2C 通信。

使用 I2C A 时、 SDAA 连接在 GPIO 0上、SCLA 连接在 GPIO 1上。 这两个引脚均设置为具有输出、开漏、GPIO_ASYNC。

启动 I2C 通信时、在 SDA 设置为高电平时、 在50us 中断之前进入中断例程。 (这应该意味着 ADC 的转换已经结束。)

在参考手册中、GPIO 0和 GPIO 1与 EPWM1A 和 EPWM1B 共享多路复用。 我不使用 EPWM1。

我还已断开 EPWM1时钟、以确保其关闭。  

-->使用相同的软件,将 GPIO32和 GPIO 33上的 I2C A 接线很好。 中断没有干扰!  

GPIO 0和1上的 I2C A 是否遗漏了任何东西? 在勘误表中也找不到任何相关内容

下面是 PicoScope 示波器上的一些轨迹。  

紫色表示中断在 I2C 传输(读取)数据之前50us 产生脉冲  

红色是 I2C 时钟

蓝色是 I2C SDA

一旦 SDA 为高电平、将调用中断处理程序(发生中断)   

更大的视图

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Brice、

    您能向我展示用于配置 I2C 的 GPIO0/1引脚的代码吗? 特别是 GPAGMUX1和 GPAMUX1配置。 如果要查看 用于配置 EPWM、ADC 以及两者之间的中断的代码、也会有所帮助。

    此致、

    Omer Amir

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好,Omer,有办法让我私下分享代码吗?  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    是的、我已接受您朋友的请求。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我已经检查了我的所有寄存器、我看到使用设置了寄存器 XBARFLG2.EXTSYNCOUT (=1)  

    XBARFLG2.Input1... 至...  XBARFLG2.INPUT6也要设置。  

    我已经看到 INPUT5连接到 ADC SOC。 而将 INPUT5设置为 GPIO1会导致不会触发意外中断。

    由于我没有自愿设置外部同步、我发现在 ePWM 设置中、我已在 TBCTL 寄存器中启用了 PHSEN。  

    0:不从时基加载时基计数器(TBCTR)
    相位寄存器(TBPHS)。
    1:允许从相位寄存器(TBPHS)和中加载计数器
    EPWMxSYNCI 输入信号时的影子到活动加载事件
    发生或软件强制同步信号、请参阅位6。

    禁用该位将停止未出现的中断。  

    您知道我是否错过了任何内容、因为我可能需要影子寄存器功能。  

    我不知道为什么 EXTSYNOUT 设置在第一个地方。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Brice、  

    在开发代码时是否使用 SysConfig? 默认情况下、禁用来自 PWM 模块的 EXTSYNCOUT。 如何同步 PWM 模块? 它们都具有相同的周期正确吗? 你是否有任何其他可能的 ISR 可以触发 ADC?

    在不添加 I2C 模块的情况下、您是否能正常正确地发生预期的 ISR EOC? 但一旦您添加 I2C 模块、就会发生多个 EOC 中断?  

    此致!

    Ryan Ma

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Ryan、  

    在不添加 I2C 模块的情况下、您是否能正常正确地发生预期的 ISR EOC? 但一旦您添加 I2C 模块、就会发生多个 EOC 中断?    -->我得到一个 ADC 转换开始被触发,然后在 EOF 上触发一个中断,只有当 SDA 被连接到 GPIO0。  

    在开发代码时是否使用 SysConfig?  不、我不是-我很早就尝试过一次、但不确定它是否与我当前正在从事的项目相同。

    默认情况下、禁用来自 PWM 模块的 EXTSYNCOUT。 如何同步 PWM 模块? 它们都具有相同的周期正确吗?

    所有6个 PWM 都具有相同的20kHz 周期。 死区是根据 A+的值设置的、用于使 EPWMxB 反相。

    =>我将 PHSEN 设置为启用。 保持此启用状态会在 GPIO0变为高电平时使所有 ePWM 计数器均为0。 这将触发 ADC 转换、从而产生中断。   

    你是否有任何其他可能的 ISR 可以触发 ADC? 不是-唯一的 ISR 是 ADC EOC。  

    谢谢

    Brice

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Brice、

    您如何输出指示 EOC 的紫色波形? 是否切换 GPIO? 黄色波形是什么信号?

    您能否确认您是否在 ADCINTFLG 寄存器中看到设置了 ADCINT 标志? 我们需要确认在 I2C 通信启动时是否实际触发 ADC EOC 中断(必须在 ADC 模块级别而不是在 CPU 级别进行检查)。 由于中断嵌套、它可能是错误地触发的 ADCA 中断。

    此致!

    Ryan Ma

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Ryan、  

    紫色波形是进入 ADC ISR 后 GPIO 引脚设置为高电平。 ISR 将执行调度程序、然后将 GPIO 设置为低电平。  

    黄色信号对于此问题并不重要。 一旦在 I2C 中执行寻址、它就只是一个引脚设置为高电平。

    当中断发生时、ADCINT 标志被置位。 然后、我将在 ISR 中清除此中断。  

    当引脚 GPIO0上的 SDA (I2C 的)变为高电平时、将触发 SOC。  

    前面讲过、发生这种 不必要中断的原因、我认为 PHSEN 位已置位、并根据 InputXBar 的 INPUT5强制同步。 当 SDA 变为高电平时、它会触发同步、并将 TBCTR 设置为0。 如果我选择 Input5作为 GPIO0不同的对象或删除 PHSEN 位、则显然我没有不需要的中断。  

    我不确定是否需要设置 PHSEN 来实现6PWM 的同步。 具有相同的周期。它们的时钟同步(在所有 PWM 初始化之前 TBCLKSYNC 设置为0,然后设置为1)。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我不确定是否需要设置 PHSEN 来实现6PWM 的同步。

    如果您不需要对这些信号进行相移、则无需启用 PHSEN。 现在、您可以禁用 PHSEN 以防止出现不需要的中断。

    TBCLKSYNC 将确保 TBCTR 同时启动。

    此致!

    Ryan Ma