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.

[参考译文] TMS320F28069M:使用 CLA 读取3个 ADC 输入、尝试将值保存到每个输入的数组中。

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/592228/tms320f28069m-reading-3-adc-inputs-using-cla-attempting-to-save-values-to-arrays-for-each-input

器件型号:TMS320F28069M

在读取 ADC 值时、CLA 遇到了一些问题。 我基于 ClaAdc 示例启动代码、该示例最初是从注释"CLA Task2在循环缓冲区中记录20个 ADCRESULT1值"中获取的。

我首先修改了此示例、将3个 ADC 值读取为简单的整数变量、然后尝试将这些值存储在3 (ADC) x 5 (阵列大小)数组中、这正是我遇到问题的地方。 每个数组第一个位置的值将更新、但该值不会递增。 我还尝试调整被调用的 CLA 中断的频率、但这没有任何影响。 CLA 代码发布如下。

   MMOVZ16  MR0、 @μ_ConversionCount              ;1当前转换

  MMOV16  MAR0、MR0、#_VoltageA                 ; 2点 MAR0寄存器到 VoltageA[转换计数]

  MMOV16  MAR1、MR0、#_VoltageB                 ; 2点 MAR1寄存器到 VoltageB[转换计数]

  MNOP                                          ;等待

  MNOP                                          ;等待

  MNOP                                          ;5等待

  MNOP                                         ;6等待

   MNOP                                         ;7等待 I8读取结果

  MMOVZ16  MR2、 @μ_AdcResult.ADCRESULT0       ;8读取 ADCRESULT0

  MMOV16  * MAR0、MR2.                         ;9使用到 VoltageA[转换计数]的指针存储 ADCRESULT0

  MMOV16  MAR0、MR0、#_VoltageC                ;10点 MAR0到 VoltageC[ConversionCount]、现在需要执行此操作、因为我们无法在另外5个周期内访问此寄存器

  MMOVZ16  MR2、 @μ_AdcResult.ADCRESULT1       ; 读取 ADCRESULT1

  MMOV16  * MAR1、MR2.                         ; 将 ADCRESULT1存储在 VoltageB[转换计数]中

  MUI16TOF32 MR0、MR0                          ;需要等待,但现在转换为浮点

  MMOVZ16  MR2、 @μ_AdcResult.ADCRESULT2      ;9读取 ADCRESULT2

  MMOV16  * MAR0、MR2.                         ; 将 ADCRESULT2存储到 VoltageC[转换计数]

  MADDF32 MR0、MR0、#1.0                       ;将1添加到 ConversionCount

  MCMPF32  MR0、#NUM_DATA_POINS.0           ;将 ConversionCount 与 max 进行比较

  MF32TOUI16 MR0、MR0                          ;将计数转换为 uint16

  MBCNDD  _RestartCount、GEQ                   ;如果 count >= NUM_DATA_POINS

  MMOVIZ  MR1、#0.0                            ;预先载入 MR1,带0

  MNOP

  MNOP

  MMOV16  @_ConversionCount、MR0              ;如果未进行分支,则存储当前计数

  MSTOP

_RestorartCount

  MMOV16  @转换计数、MR1              ;如果分支被采用,则重新开始计数

  MSTOP

  MNOP

  MNOP

  MNOP

Cla1T2End:

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

    [引用用户="Luke Smith16"]

    MCMPF32 MR0、#NUM_DATA_POINS.0 ;将 ConversionCount 与 max 进行比较
    MF32TOUI16 MR0、MR0 ;将计数转换为 uint16
    MNOP
    MNOP
    MBCNDD _RestorartCount、GEQ ;如果 count >= NUM_DATA_POINS 

    [/报价]

    该分支只能受前三个指令周期的影响。 因此、MCMPF32需要是分支前的第四条指令  

    此外、conversionCount 的地址是什么? 它是否位于 CLA 数据存储器中? 如何在汇编文件中声明它?