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.

[参考译文] EK-TM4C1294XL:序列发生器 FIF0数据通道

Guru**** 2484615 points
Other Parts Discussed in Thread: TM4C1294KCPDT, INA240, LM94022

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/730285/ek-tm4c1294xl-sequencer-fif0-data-pathway

器件型号:EK-TM4C1294XL
主题中讨论的其他器件:TM4C1294KCPDTINA240LM94022

    当 ADC1 模块中的 SS1/SS2 FIFO 名称 配置为 ADC0模块的 SS1/SS2 FIFO 时、会发生非常奇怪的情况   、即使两者都存在于不同的基址。

 ADCSSFSTATn (HPTR/TPTR) 位锁定在 计数 器 ADC 基址中 、其作用类似于整个 ADC 模块中只有4个 FIFO。  

为什么只有 在 ADC 模块之间的 SS1或 SS2上才会发生这种情况 、尽管 当 SS0  配置 为两个 ADC 模块 的基地址时、它不会受到影响?

 除非两 个 ADC 模块之间只有4个 FIFO、否则这是一个难以回答的问题、这将部分解释这个奇怪的问题。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您使用的是 TivaWare、还是尝试使用直接寄存器写入?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    它都是 Tivaware、所以我不知道您所指的是什么、因为 通过序列发生 器的 FIFO 是在硬件级别触发写入的。  使用 ADC0 FIFO-1和2中的 ADCSequenceDataGet ()时,HPTR/TPTR 索引中的结果相同。 除了 Tivaware 调用不检查 FIFO 是否存在过流/欠流 以及返回所有结果数据 (良好或不良)只是坚果之外、它甚至不在乎! 序列发生器配置全部 由 ADCSequenceStepConfigure 完成、如下所示。

     进一步的调试研究发现 CCS 调试中的 ADC0 FIFO-1和2不是完全正常工作、既是 EKXL/EVM 、也是定制 PCB (TM4C1294KCPDT)。 调试 FIFO 数据 是非常零星的 、如果完全是通过80us PWM 触发源进行的 、并且 TPTR/HPTR 索引几乎没有动作、 大多数情况 下会保持 0x0、每隔一分钟 TPRR 就会切换一次。 除非 在 NCPDT 和 KCPDT 目标中执行了相同的错误映射、否则似乎不能是 CCS 调试 GEL 文件。  

    然而、通过 同一 PWM GEN0 触发源的 SS0 FIFO0 表明数据通过 ADCSSFSTAT TPTR/HPTR 位进行移动。  此外、ADC1 FIFO-1和2 似乎正常工作、即序列发生   器在1秒的间隔内触发样本、TPTR/HPTR 移动、并不是始终停留在0x0索引处。  配置 ADC1 SS0 以替换 ADC0 - SS1&2作为相同的80us 触发源、指示 TPTR/HPTR 增量和 FIFO 数据值。 ADCSequenceStepConfigure 似乎  可以 多路复用 ADC0 SS1-2、或者它们从未真正正常工作。

    由于  TPTR 索引(下一次读取)在与 已知 索引位置相对 触发源 PWM0 GEN0 (PWM_TR_CNT_LOAD)进行检查时永远不会一致地匹配、因此回读的 FIFO 值非常低或偶数(Rouge)。 事实上 、GPTM 设置为在   每个80us 周期开始后触发单次触发(1.5us)、似乎收集了更多的 ADC0 SS1或2 FIFO 数据、但它没有捕获、而是只捕获很少 的数据供 应用 使用。  无论序列发生  器是如何被读取的、如果 FIFO 实际采样实时模拟信号、ADCSSFSTAT TPTR/HPTR 位都不应处于很长的时间。    通过 ICDI (JTAG)、定制 PCB 或 EKXL/EVM 查看 CCS7寄存器时、返回检查此问题时会产生完全相同的结果。   

    MAP_ADCSequenceConfigure (ADC1_base、1、ADC_TRIGGER_PROCESSOR、0);
    
    //在 FIFO 读取模拟数据停止 OSTAT/USTAT *之后配置 DCOMP */
    MAP_ADCSequenceStepConfigure (ADC1_base、1、0、PIN_MOSTEMP_LOW1);// AIN16
    MAP_ADCSequenceConfigure、ADC1_BASE (ADC1、ADCSTEP1、ADCK_RESTABASE 1、ADCK_CONSTEP1 1、PIN_MOSTEMP_HIGH1);//AIN9
    MAP_ADCSequenceStepConfigure (ADC1_BASE、1、2、PIN_MOSTEMP_LOW1 | ADC_CTL_CMP0);
    MAP_ADCSequenceStepConfigure (ADC1_BASE、1、3、PIN_MOSTEMP_HIGH1| ADC_CTL_CMP1 |
    ADC_CTL_END | ADC_CTL_IE);
    
    
    MAP_ADCSequenceConfigure (ADC0_BASE、2、ADC_TRIGGER_TIMER、1)//或 ADC_TRIGGER_PWM0
    
    //为 PWM0触发器或 GPTM 触发源配置 SS1或 SS2 */
    MAP_ADCSequenceStepConfigure (ADC0_BASE、ADC0_BASE、ADC0);ADCIP0
    2、1、PIN_IPHASEB);//CH1
    MAP_ADCSequenceStepConfigure (ADC0_BASE、2、 2、PIN_IPHASEC | ADC_CTL_IE);//CH2
    MAP_ADCSequenceStepConfigure (ADC0_BASE、2、3、 ADC_CTL_END); 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    BP101、
    我在代码中注意到了几件事。 在 ADC1序列1的配置中、只有两个 ADC 样本存储在 FIFO 中、但仅为比较器1启用中断。 该中断只会在 ADCComparatorRegionSet()中定义的情况下发生。 除非您在中断例程之外的某个位置清空 FIFO、否则将获得 FIFO 溢出。

    在 ADC0序列2的配置中、您需要配置所有四个步骤。 第三步是启用中断。 第四步未指定默认为通道0的通道。 当您第一次收到中断时、FIFO 中将有三个样本。 第二次将为4、因为之前触发的通道0采样仍将在 FIFO 中。 这是您想要的、还是您想仅配置三个步骤?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Bob:

    [引用 user="Bob Crosby"] ADC1序列1的配置、FIFO 中只存储了两个 ADC 样本、但仅为比较器1启用中断。 该中断只会在 ADCComparatorRegionSet()中定义的情况下发生。 [/报价]

    这不完全正确、并且在定义的末尾步骤(3)发生中断、因为对于   任何配置 的序列发生器步骤、IE 的行为都应相同。 也许您的 比较器配置令人困惑、我们可以指定交叉区域驱动不同 的中断事件。 样本 TC 包括 TS 基于序列发生器触发源事件。 仅当最后一步转换 完成时、如果 或根据转换结果数据不在 FIFO 中而设置中断事件、则在与数字比较器故障触发无关的情况下、才会发生 IE。

    [引用 user="Bob Crosby">在 ADC0序列2的配置中、您配置了全部四个步骤。 第三步是启用中断。 第四步未指定默认为通道0的通道。 当您第一次收到中断时、FIFO 中将有三个样本

    我在第2步(第3步)结束时测试了 ADC0 SS2、获得了相同的结果、例如 POP 16位或32位数组中没有数据。 注意到具有 FFIO 的 ODD ADCSSFSTAT TPTR/HPTR 行为会导致数据 无 AINx 的最后一步结束 不会默认 为 CH0、 因此如果未指定 AINx 源、则同意在任何其他步骤中设置结束。  同样 、EKXL/EVM 的 ICDI 在所有8个序列发生器中难以读取 ADCSSFSTAT、其中当 SS0配置为3个步长时、SS0通常仅在0x0-0x6之间循环。  它(TPTR)抖动的原因、 这意味 着它需要(两 )个事务顺序 将 FIFO 内容 POP 到 C++数组中、 而不仅仅是数据表中所述的一个。

    Tivaware ADCSequenceDataGet ()通过 while 循环 POP 覆盖了 TPTR 勘误表, 因为它  不会测试 TPTR 的 FIFO 与 AINx 对齐是否正确,所以环路 POP 可能在过流/欠流条件下返回错误的结果数据。  建议 TPTR 勘误表、因为 CCS 调试 ICDI 寄存器视图(连续100ms 刷新)无法正确指示 TPTR 索引、即使  在任何已配置序列发生器步骤的序列发生器触发源的1秒间隔内也是如此。  一个 WA 是 在同一个数组写入指令中的两个事务中按位 POP 或步进索引(TPTR)的比较。 除非 特定应用操作(如数字读数)显示 已知电压或 FOC 实际成功、否则无法确认实际的 FIFO 阶跃结果数据。

    15.1.1:

    配置采样序列时、允许在同一序列中多次使用同一输入引脚。 在 ADCSSCTLn 寄存器中、IEn 位可以设置为任意采样组合的结果、必要时允许在序列中的每个采样后产生中断。 此外、可以在采样序列中的任意点设置 END 位。 例如、如果使用序列发生器0、则可以在与第5个采样相关的半字节中设置 END 位、从而允许序列发生器0在第5个采样后完成采样序列的执行。

    采样序列执行完成后、可从 ADC 采样序列结果 FIFO (ADCSSFIFOn)寄存器中检索结果数据。 FIFO 是简单的循环缓冲器、可将单个地址读取为"弹出"结果数据。 出于软件调试的目的、FIFO 头指针和尾指针的位置可在 ADC 采样序列 FIFO 状态(ADCSSFSTATn)寄存器中看到、同时还可看到 FULL 和 EMPTY 状态标志。 如果在 FIFO 满时尝试写入、则不会发生写入、并且会指示溢出条件。 上溢和下溢条件通过 ADCOSTAT 和 ADCUSTAT 寄存器进行监控。

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

    [报价用户="Bob Crosby"]第四步未指定默认为通道0的通道。

    Tivaware ADCSequenceStepConfigure()不应在 最后一步 指定 的端(仅限)添加默认的 CH0通道 ,它可以放置在任何一步。 数据表 并不意味着或推断最后一步结束必须 分配 AINx、或它默认为 CH0。 认为最后一步结束 可以在 ADC_SSMUX 中看到、0000 (第4个采样选择)是 CCS 调试寄存器视图的模板 GEL 文件结果 应该为空、因为无论 TPTR 在 所有通过 PWM0触发的序列发生器中不稳定、都可以为任何步骤分配结束。 或 GPTM 源。

    但是 、CH16最初在步骤0上生成 相同 的 TPTR 结果、但在应用程序检索 POP (已验证) TPTR 数据位置时未正确排序 FIFO 结果数据。 POP 行为似乎与 AHB 相关、甚至 CPU Thumb 指令都无法与检索到的 FIFO 数据进行正确对齐、并且还会影响 GEL 文件事务处理中的 CCS 调试 ADCSSFSTAT 寄存器视图。  例如、WA 读取第 0步数据 需要 按位 POP (TPTR=0x0 | 0x1) 不(0x0)、或甚至(0x1) 不能将任何数据 POP 到分配的数组级别、除非它在1秒样本触发器中的 AHB 检索速度非常慢。 即使如此、无论任何步骤中的结束位置如何、TPTR 索引也会跳过最后配置的 AINx 源步骤。

    我可以看到、有人可能会认为 CH0被附加 了第4个采样选择。  CCS 调试寄存器视图错误地指示 CH0正在配置为结束步骤3。 Fact 是 ADCSequenceStepConfigure(),如果它实际上将 一个未分配的 ANIx 添加到了第3步(超过了断言检查),那么它将被置位。  然而 、assert 检查 有效性 在 任何给定的步骤中都存在正确的参数、这样它会拒绝在没有 AINx 或除最后一个序列发生器步骤之外的任何步骤的情况下配置步骤0。

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

    无论 在哪个端阶跃被配置、I double checked 且默认的第4个采样输入选择(寄存器视图)有0x0000、例如、在 第3个采样上、带有或不带有 AINx 的最后一个步进为2或3、第4个采样输入选择总是显示0x0000。

    嗯、至少我对影响所有序列发生器的 TPTR 勘误表进行了说明、因此现在可以从创建的真正 FIFO 读取数据 INA240中预期单调比率度量斜率。 下面的斜率 建立在0-235 -VREFP 的基础上、但是很多零采集也正在从 FIFO 中读取、或者可能通过 GPTM 触发 ADC0 SS1或 SS2进行采样。 仅报告 RPM 是因为在中断监控3 AINx 期间、FOC 采样 ADC0 SS0步骤1在运行中被重新配置。 仅在配置为仅限末尾的第3个采样阶跃后才产生正确的 TPTR 对齐。 Scootby Doo 现在有一些工作要做!

    唯一不好的部分是 FIFO 读取下降值拒绝下降到低于 VREFP 起始阈值1.0安培。 请注意、随着电机轴上的阻力增加、负载电流增加到0-235 -VREP (黄色框)以上、然后下降到负载释放、但仅上升到与 CADC 共享 Cext 电荷的初始 VREFP 阈值。 当负载降至初始阈值以下或整数降至235个十进制整数 @1.0安培峰值以下时、即使为当前公式添加最小值/最大值也不会降低 VREFP。

      

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

    [引用 user="BP101"]下面的斜率 是从0-235 -VREFP 构建的,但许多零采集也是从 FIFO 读取的,或者可能是通过 GPTM 触发 ADC0 SS1或 SS2采样的。

    满量程 VREFP (3V3) 重复十进制235结果 POP 读取 ADC0 SS2步进0-2 (FIFO2) 、大约 为189mV。 最初几次 AIN 采集似乎无法检测 10倍模拟 信号示波器探针、垂直衰减1x @10mV/CM。   这是 不止前两个样本 的 POP 值@TSHN=0x2222、勘误表 ADC#14的  传播比前两个模拟样本的传播范围更广。 还注意    到、当模拟信号远高于0v、接近3-4mV 或更高时、许多 POP 为0x0、被默认为较低值。  也就是说、根据任何模块 FIFO 的 POP 结果、在触发前100次采样时、AD 转换器不会稳定到甚至1/2 LSB。

    进一步 的示例 ADC#14; 两个 LM94022 AINx 通道大约需要 6秒钟 的时间(通过 GPTM 启动 的 ADC1 SS1 STEP 0/1的 TriggerSourceProcessor()触发间隔),以便 在 MUC POR 之后生成正确和稳定的读数。  如果  ADC#14只应在 任何给定步骤的前两个样本上发生、则说明问题所在。

    必须想知道为什么或什么会导致所有序列发生    器在前两个 AD 转换之后出现 ADC#14症状、这是通过任何 FIFO 的 CPU 指令 POP 造成的。 CPU 指令解码 可能会成为问题!