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.

ScanIf

Other Parts Discussed in Thread: MSP430FW427

SCANIF的SIFDACRx校不准,代码如下,请指教

取值代码:

m=10;
SIFCTL1 = 0;
SIFCTL3 &= ~(SIFIFGSET0 | SIFIFGSET1 |SIFIFGSET2);
SIFCTL3 |= 0;
j=0;
while (j<m)    //取十次值
{
SIFCTL1 = 0;
SIFDACR0 = 0x02FF; // SIFCH.0 - set to maximum value
SIFDACR1 = 0x02FF;
SIFCTL1 = 0x0201;
SIFOUT_Sta =FALSE;
for(k=0;(k<1000) && (SIFOUT_Sta==FALSE);k++)
{
for(i=0;i<=2000;i++)Feed_Dog();
SIFDACR0=SIFDACR0-1;
SIFDACR1=SIFDACR1-1;
}
if(SIFOUT_Sta==TRUE)
{
SIFOUT_Sta =FALSE;
V0[j++] = SIFDACR1+1;
}
}

SIFCTL1 = 0;
SIFCTL3 &= ~(SIFIFGSET0 | SIFIFGSET1 |SIFIFGSET2);
SIFCTL3 |= SIFIFGSET0;
j=0;
while (j<m)
{
SIFCTL1 = 0;
SIFDACR0 = 0x200;
SIFDACR1 = 0x200;
SIFCTL1 = 0x0201;
SIFOUT_Sta =FALSE;
for(k=0;(k<1000) && (SIFOUT_Sta==FALSE);k++)
{
for(i=0;i<=2000;i++)Feed_Dog();
SIFDACR0=SIFDACR0+1;
SIFDACR1=SIFDACR1+1;
}
if(SIFOUT_Sta==TRUE)
{
SIFOUT_Sta =FALSE;
V1[j++] = SIFDACR1-1;
}
}

SIFCTL1 = 0;
V2=0;
Rank_Data(V0,m);   //从大到小排序
Rank_Data(V1,m);
for(j=2;j<8;j++)         //去除最大的两个和最小的两个取平均值
V2 += (V1[j] + V0[j]);
V2 /=12;                  
Calibration.SIFDACR_0 = V2 + 10;
Calibration.SIFDACR_1 = V2 - 5;

其中SIFOUT_Sta 由SCANIF的SIFIFG0中断来置为TRUE