Tool/software: TI C/C++ Compiler
Hello, all.
I have a simple loop, where I adc and average single channel.
Firstly, I was surprisingly figured out that average was incorrect. Than I add an array BL_ADC_ARRAY where put values for debug purposes.
BL_ADC_ARRAY initialized to -1 beforehand.
BL_ADC_ARRAY[0] <- ADCINTFLG to check whether flag exist before adc start. Ok. flag is clear.
below is a piece of code and a BL_ADC_ARRAY values....
It worth mention, that in single stepping it works ok.
Below picture is a asm generated.
I use compiler v15.12.3.LTS, whole project optimization for speed.
What's wrong???
generated asm from debugger.
BL_ADC_ARRAY[0] = AdcRegs.ADCINTFLG.all;
3f2ba3: 8F008640 MOVL XAR4, #0x008640
789 Uint16 tmp = AdcRegs.INTSEL7N8.bit.INT7SEL;
3f2ba5: CC0B001F AND AL, @0xb, #0x1f
3f2ba7: 83A4 MOVL XAR5, @XAR4
3f2ba8: BE03 MOVB XAR6, #0x03
3f2ba9: 9645 MOV *-SP[5], AL
790 AdcRegs.INTSEL7N8.bit.INT7SEL = 15;// + BL_ZC_FREE_PH_NUM; //12 + BL_ZC_FREE_PH_NUM;
3f2baa: CC0BFFE0 AND AL, @0xb, #0xffe0
3f2bac: 500F ORB AL, #0xf
3f2bad: DD01 ADDB XAR5, #1
3f2bae: 960B MOV @0xb, AL
803 BL_ADC_ARRAY[0] = AdcRegs.ADCINTFLG.all;
3f2baf: 9204 MOV AL, @0x4
3f2bb0: 96C4 MOV *+XAR4[0], AL
800 signed int Vb_sum = 0;//hi0;// = 30000;//0; // vse. nizhe nulya, znachit budet vsyo ok. no tak nelzya, t.k. esli eshe do 0 ne upalo, to budet tipa podem..
3f2bb1: 9A00 MOVB AL, #0x0
3f2bb2: DC02 ADDB XAR4, #2
3f2bb3: 9643 MOV *-SP[3], AL
C$L5:
3f2bb4: 761F01C4 MOVW DP, #0x1c4
811 AdcRegs.ADCSOCFRC1.all = 0b1000000000000000;// << BL_ZC_FREE_PH_NUM; //smeshaem sootvetstvenno na 0, 1 ili 2
3f2bb6: 281A8000 MOV @0x1a, #0x8000
813 while(AdcRegs.ADCINTFLG.bit.ADCINT7 == 0)
C$L6:
3f2bb8: 4604 TBIT @0x4, #0x6
3f2bb9: 6CFF SB C$L6, NTC
817 AdcRegs.ADCINTFLGCLR.bit.ADCINT7 = 1; // ubiraem flag
3f2bba: 1A050040 OR @0x5, #0x0040
3f2bbc: 761F002C MOVW DP, #0x2c
819 Vb_sum = Vb_sum + AdcResult.ADCRESULT15;
3f2bbe: 940F ADD AL, @0xf
3f2bbf: 9643 MOV *-SP[3], AL
822 BL_ADC_ARRAY[i] = AdcResult.ADCRESULT15;
3f2bc0: 920F MOV AL, @0xf
3f2bc1: 96C5 MOV *+XAR5[0], AL
807 for(i = 1; i < 9; i=i+2)
3f2bc2: DD02 ADDB XAR5, #2
822 BL_ADC_ARRAY[i] = AdcResult.ADCRESULT15;
3f2bc3: 9243 MOV AL, *-SP[3]
823 BL_ADC_ARRAY[i+1] = Vb_sum;//AdcResult.ADCRESULT15;
3f2bc4: 96C4 MOV *+XAR4[0], AL
807 for(i = 1; i < 9; i=i+2)
3f2bc5: DC02 ADDB XAR4, #2
3f2bc6: 000EFFEE BANZ 65518,AR6--
3f2bc8: 761F022C MOVW DP, #0x22c
827 BL_V_BATT = Vb_sum;
3f2bca: 962A MOV @0x2a, AL
828 Vb_sum = Vb_sum / 4;
3f2bcb: FFA0 ASR AL, 1
833 BL_ADC_ARRAY[9] = BL_ZC_DV_DT_UP;
3f2bcc: 8DC08640 MOVL XAR3, #0x008640
828 Vb_sum = Vb_sum / 4;
3f2bce: FFCD LSR AL, 14
833 BL_ADC_ARRAY[9] = BL_ZC_DV_DT_UP;
3f2bcf: D009 MOVB XAR0, #0x9
3f2bd0: 761F01C4 MOVW DP, #0x1c4
3f2bd2: 8BA3 MOVL XAR1, @XAR3
828 Vb_sum = Vb_sum / 4;
3f2bd3: 9443 ADD AL, *-SP[3]
782 Uint32 time = 0;// = CpuTimer1Regs.TIM.all;
3f2bd4: D200 MOVB XAR2, #0x0
828 Vb_sum = Vb_sum / 4;
3f2bd5: FFA1 ASR AL, 2
3f2bd6: 9643 MOV *-SP[3], AL
830 AdcRegs.INTSEL7N8.bit.INT7SEL = 13;// + BL_ZC_FREE_PH_NUM; //12 + BL_ZC_FREE_PH_NUM;
3f2bd7: CC0BFFE0 AND AL, @0xb, #0xffe0
3f2bd9: 500D ORB AL, #0xd
3f2bda: D90B ADDB XAR1, #11
3f2bdb: 960B MOV @0xb, AL
833 BL_ADC_ARRAY[9] = BL_ZC_DV_DT_UP;
3f2bdc: 56BF0A93 MOVB *+XAR3[AR0], #0x0a, UNC
834 BL_ADC_ARRAY[10] = Vb_sum;
3f2bde: D00A MOVB XAR0, #0xa
3f2bdf: 9243 MOV AL, *-SP[3]
3f2be0: 9693 MOV *+XAR3[AR0], AL
