请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:TMS320F28027 工具/软件:TI C/C++编译器
大家好。
我有一个简单的环路、其中 I ADC 和平均单通道。
首先,我惊讶地发现平均值是不正确的。 然后添加一个数组 BL_ADC_ARRAY、其中放置了用于调试的值。
BL_ADC_ARRAY 预先初始化为-1。
BL_ADC_ARRAT[0]<- ADCINTFLG、用于在 ADC 启动前检查标志是否存在。 好的。 标志已清除。
下面是一段代码和一个 BL_ADC_array 值....
值得一提的是、在单步执行中、它可以正常工作。
下图是生成的 ASM。
我使用编译器 v15.12.3.LTS、对整个项目的速度进行优化。
怎么了???
从调试器生成的 asm。
BL_ADC_ARRAT[0]= AdcRegs.ADCINTFLG.ALL; 3f2ba3:8F008640 MOVL XAR4、#0x008640 789UINT16 tmp = AdcRegs.INTSEL7N8.bit.INT7SEL; 3f2ba5:CC0B001F 和 AL、@0xb、#0x1f 3f2ba7:83A4 MOVL XAR5、@XAR4 3f2ba8:BE03 MOVB XAR6、#0x03 3f2ba9:9645 MOV *-SP[5]、AL 790AdcRegs.INTSEL7N8.bit.INT7SEL = 15;//+ BL_ZC_FREE_PH_NUM;// 12 + BL_ZC_FREE_PH_NUM; 3f2baa:CC0BFFE0和 AL、@0xb、#0xffe0 3f2bac:500F ORB AL、#0xF 3f2bad:DD01 ADDK XAR5、#1 3f2bae:960B MOV @0xb、AL 803BL_ADC_ARRAY[0]= AdcRegs.ADCINTFLG.ALL; 3f2baf:9204 MOV AL、@0x4 3f2bb0:96C4 MOV *+XAR4[0]、AL 800signed int Vb_sum = 0;//hi0;//= 30000;//0;// VSE。 Nizhe nulya, znachit budet vsyo ok。 没有 Tak nelzya,T.K. esli eshe do 0 ne upalo,到 budet tipa podem。 3f2bb1:9A00 MOVB AL、#0x0 3f2bb2:DC02 ADDK XAR4、#2 3f2bb3:9643 MOV *-SP[3]、AL C$L5: 3f2bb4:761F01C4 MOVW DP、#0x1c4 811AdcRegs.ADCSOCFRC1.all = 0b1000000000000000;//<bl_ZC_FREE_PH_NUM;// smesharem suttvetstvenno na 0、1 ili 2 3f2bb6:281A8000 MOV @0x1A、#0x8000 813while (AdcRegs.ADCINTFlG.bit.ADCINT7 = 0) C$L6: 3f2bb8:4604 TBIT @0x4、#0x6 3f2bb9:6CFF SB C$L6、NTC 817AdcRegs.ADCINTFLGCLR.bit.ADCINT7 = 1;// ubiraem 标志 3f2bba:1A050040或 @0x5、#0x0040 3f2bbc:761F002C MOVW DP、#0x2C 819vb_sum = vb_sum + AdcResult.ADCRESULT15; 3f2bbe:940F 添加 AL、@0xF 3f2bbf:9643 MOV *-SP[3]、AL 822BL_ADC_array[i]= AdcResult.ADCRESULT15; 3f2bc0:920F MOV AL、@0xF 3f2bc1:96C5 MOV *+XAR5[0]、AL 807for (i = 1;i < 9;i=i+2) 3f2bc2:DD02 ADDK XAR5、#2 822BL_ADC_array[i]= AdcResult.ADCRESULT15; 3f2bc3:9243 MOV AL、*-SP[3] 823BL_ADC_array[i+1]= Vb_sum;//AdcResult.ADCRESULT15; 3f2bc4:96C4 MOV *+XAR4[0]、AL 807for (i = 1;i < 9;i=i+2) 3f2bc5:DC02 ADDK XAR4、#2 3f2bc6:000EFFEE BANZ 65518、AR6-3f2bc8 :761F022C MOVW DP、#0x22c 827BL_V_BATT = Vb_sum; 3f2bca:962A MOV @0x2a、AL 828Vb_sum = Vb_sum / 4; 3f2bcb:FFA0 ASR AL、1 833BL_ADC_array[9]= BL_ZC_DV_DT_UP; 3f2bcc:8DC08640 MOVL XAR3、#0x008640 828Vb_sum = Vb_sum / 4; 3f2bce:FFCD LSR AL、14 833BL_ADC_array[9]= BL_ZC_DV_DT_UP; 3f2bcf:D009 MOVB XAR0、#0x9 3f2bd0:761F01C4 MOVW DP、#0x1c4 3f2bd2:8BA3 MOVL XAR1、@XAR3 828Vb_sum = Vb_sum / 4; 3f2bd3:9443 添加 AL、*-SP[3] 782uINT32时间= 0;//= CpuTimer1Regs.TIM.all; 3f2bd4:D200 MOVB XAR2、#0x0 828Vb_sum = Vb_sum / 4; 3f2bd5:FFA1 ASR AL、2 3f2bd6:9643 MOV *-SP[3]、AL 830AdcRegs.INTSEL7N8.bit.INT7SEL = 13;//+ BL_ZC_FREE_PH_NUM;// 12 + BL_ZC_FREE_PH_NUM; 3f2bd7:CC0BFFE0和 AL、@0xb、#0xffe0 3f2bd9:500d ORB AL、#0xd 3f2dda:D90B ADDK XAR1、#11 3f2bdb:960B MOV @0xb、AL 833BL_ADC_array[9]= BL_ZC_DV_DT_UP; 3f2bdc:56BF0A93 MOVB *+XAR3[AR0]、#0x0a、UNC 834BL_ADC_array[10]= Vb_sum; 3f2bde:D00A MOVB XAR0、#0xA 3f2bdf:9243 MOV AL、*- SP[3] 3f2be0:9693 MOV *+XAR3[AR0]、AL
