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.
您好!
我将 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