Hi i have an issue that i have tracked to this code:
interrupt void ADCScalingInt(void)
{
// unsigned int chan_a_1v5=0;
Int32 i,j,tempOff0A=0,tempOff0B=0,tempOff0C=0,tempOff0D=0;
while (AdcResult.ADCRESULT1== 0)
{
PieCtrlRegs.PIEIFR3.bit.INTx1=0;
//AdcRegs.ADCTRL.bit.RST_SEQ1=1;
}
for (i=0;i<1024;i++)
{
tempOff0A +=1;//AdcResult.ADCRESULT0>>4;
tempOff0C +=11;//AdcResult.ADCRESULT1>>4;
//AdcRegs.ADCTRL2.bit.SOC_SEQ1=1;
for (j=0;j<1;j++) DELAY;
}
CurrLoop.ADCOffset_Phase_A=tempOff0A>>6;
CurrLoop.ADCOffset_Phase_C=tempOff0C>>6;
CurrLoop.IaOff=(Int32)CurrLoop.ADCOffset_Phase_A + ((UInt32)1<<15);
CurrLoop.IcOff=(Int32)CurrLoop.ADCOffset_Phase_C + ((UInt32)1<<15);
}
ADCScalingInt:
3eb0b0: 761B ASP
3eb0b1: ABBD MOVL *SP++, XT
3eb0b2: A8BD MOVL *SP++, XAR4
3eb0b3: A0BD MOVL *SP++, XAR5
3eb0b4: C2BD MOVL *SP++, XAR6
3eb0b5: C3BD MOVL *SP++, XAR7
3eb0b6: 2942 CLRC OVM|PAGE0
3eb0b7: 5616 CLRC AMODE
419 Int32 i,j,tempOff0A=0,tempOff0B=0,tempOff0C=0,tempOff0D=0;
3eb0b8: B600 MOVB XAR7, #0x00
3eb0b9: A3A7 MOVL P, @XAR7
421 while (AdcResult.ADCRESULT1== 0)
3eb0ba: 6F05 SB C$DW$L$_ADCScalingInt$2$E, UNC
423 PieCtrlRegs.PIEIFR3.bit.INTx1=0;
C$DW$L$_ADCScalingInt$2$B, C$L9:
3eb0bb: 761F0033 MOVW DP, #0x33
3eb0bd: 1827FFFE AND @0x27, #0xfffe
421 while (AdcResult.ADCRESULT1== 0)
C$DW$L$_ADCScalingInt$3$B, C$L10, C$DW$L$_ADCScalingInt$2$E:
3eb0bf: 761F002C MOVW DP, #0x2c
3eb0c1: 9201 MOV AL, @0x1
3eb0c2: ECF9 SBF C$L9, EQ
428 for (i=0;i<1024;i++)
C$DW$L$_ADCScalingInt$3$E:
3eb0c3: BE00 MOVB XAR6, #0x00
3eb0c4: 8F000400 MOVL XAR4, #0x000400
3eb0c6: A8A9 MOVL @ACC, XAR4
3eb0c7: 0FA6 CMPL ACC, @XAR6
3eb0c8: 6512 SB C$DW$L$_ADCScalingInt$7$E, LEQ
430 tempOff0A +=1;//AdcResult.ADCRESULT0>>4;
C$DW$L$_ADCScalingInt$5$B, C$L11:
3eb0c9: 06A7 MOVL ACC, @XAR7
3eb0ca: 0901 ADDB ACC, #1
3eb0cb: 1EA7 MOVL @XAR7, ACC
431 tempOff0C +=11;//AdcResult.ADCRESULT1>>4;
3eb0cc: A9A9 MOVL @ACC, P
3eb0cd: 090B ADDB ACC, #11
3eb0ce: FF5A MOVL P, ACC
433 for (j=0;j<1;j++) DELAY;
3eb0cf: 0200 MOVB ACC, #0
3eb0d0: 6204 SB C$DW$L$_ADCScalingInt$6$E, GT
C$DW$L$_ADCScalingInt$6$B, C$L12, C$DW$L$_ADCScalingInt$5$E:
3eb0d1: 7700 NOP
3eb0d2: 0901 ADDB ACC, #1
3eb0d3: 65FE SB C$DW$L$_ADCScalingInt$5$E, LEQ
428 for (i=0;i<1024;i++)
C$DW$L$_ADCScalingInt$7$B, C$L13, C$DW$L$_ADCScalingInt$6$E:
3eb0d4: 06A6 MOVL ACC, @XAR6
3eb0d5: 0901 ADDB ACC, #1
3eb0d6: 1EA6 MOVL @XAR6, ACC
3eb0d7: A8A9 MOVL @ACC, XAR4
3eb0d8: 0FA6 CMPL ACC, @XAR6
3eb0d9: 62F0 SB C$L11, GT
436 CurrLoop.ADCOffset_Phase_A=tempOff0A>>6;
C$L14, C$DW$L$_ADCScalingInt$7$E:
3eb0da: 3B01 SETC SXM
3eb0db: 06A7 MOVL ACC, @XAR7
3eb0dc: 761F0233 MOVW DP, #0x233
3eb0de: FF45 SFR ACC, 6
3eb0df: 9610 MOV @0x10, AL
437 CurrLoop.ADCOffset_Phase_C=tempOff0C>>6;
3eb0e0: A9A9 MOVL @ACC, P
3eb0e1: FF45 SFR ACC, 6
3eb0e2: 9611 MOV @0x11, AL
438 CurrLoop.IaOff=(Int32)CurrLoop.ADCOffset_Phase_A + ((UInt32)1<<15);
3eb0e3: 9210 MOV AL, @0x10
3eb0e4: 08A98000 ADD @AL, #-32768
3eb0e6: 960E MOV @0xe, AL
439 CurrLoop.IcOff=(Int32)CurrLoop.ADCOffset_Phase_C + ((UInt32)1<<15);
3eb0e7: 9211 MOV AL, @0x11
3eb0e8: 08A98000 ADD @AL, #-32768
3eb0ea: 960F MOV @0xf, AL
442 }
3eb0eb: C5BE MOVL XAR7, *--SP
3eb0ec: C4BE MOVL XAR6, *--SP
3eb0ed: 83BE MOVL XAR5, *--SP
3eb0ee: 8ABE MOVL XAR4, *--SP
3eb0ef: 87BE MOVL XT, *--SP
3eb0f0: 7617 NASP
3eb0f1: 7602 IRET
54 {
it looks like an interrupt function makes use of P cpu register but doesnt save it!
please help.