主题中讨论的其他器件:SysConfig
工具与软件:
您好!
我将轮盘分离为"SOC0至 SOC6":高初级(使用 SOC0-SOC5、未使用 SOC6 )和"SOC7至 SOC15":轮询低初级(使用 SOC7-SOC15、3倍大小3突发、冲洗重复)。
SOC0至 SOC5均由 ePWM1 ADCSOCA 事件触发、RoundRobin -bush (burstsize = 3)也 由同一个 ePWM1 ADCSOCA 事件触发。
生成4个 ADC IRQ:SOC1 EOC 时的 ADC INT1 (仅用于测试目的)、 SOC3 EOC 时的 ADC INT2 (仅用于测试目的)、 SOC5 EOC 时的 ADC INT3 (主要 感兴趣的 IRQ)、
SOC15为 EOC 时的 ADC INT4 (仅用于测试目的)
对于我的问题:
Im 很难理解、因为我认为 IRQ:ADC INT1、 ADC INT2、ADC INT3 始终会提出、并且 在 SOC EOC 事件发生时始终执行我的 ISR。
调试应该会向我显示类似的内容。 下载+调试、按"开始"、ADC INT1发生、调用 ISR、命中断点、 内核停止、只有 ADCRESULT0和 ADCRESULT1的值不为0x0000、
但调试似乎显示、此时我最终首次进入 ISR、所有值"SOC0至 SOC5"和"SOC7至 SOC9"均已 获取(ADCRESULT0 至 ADCRESULT5和 ADCRESULT7至 ADCRESULT9的值 不为0x0000)。
我想要什么:ePWM1 ADCSOCA 事件出现一个触发器 HighPrio-SOC 和 RR-Burst --> HighPrio-SOC 首先出现 --> SOC0到 SOC5被获取--> SOEOC IRQ 被生成(由 ISR 处理)--> RR-Burst SOC 被 获取(与 ISR 在后台执行并行、说实话、我真的不关心这么多)。 必须重要的一点是、Im 在 SOC5 EOC 发生后立即获取我的 ISR 调用。
但对我来说、看起来所有由同一事件触发的 SOC 都是先获取的、而不是调用 ISR。
请有人向我解释发生了什么?
或者、我尝试使用中继器1 (也由 ePWM1 ADCSOCA 事件触发)来延迟降压块的触发、直到 采集所有高优先级 SOC。 在这种情况下、胸块由中继器1触发。
但遗憾的是、在 ADC bu 初始化 ADC_setBurstModeConfig ()--> assert ((uint16_t) trigger &~(uint16_t) 0x1FU)== 0U 时、会得到一个断言。 初始化代码是 生成的 CCS Theia 1.4.1。 这里的问题是什么?
还有一个问题是、有一种更智能的方法来获得我需要的内容。 使用纯轮循 采集不起作用。 我的 SOC 总共有很多。 在实际工程中、每个 ADC 内核始终具有4个高优先级 SOC 和7到9个轮循 SOC。
此致、Martin