在读取 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: