F28027在CCS中的ADC模塊的程序在調試時改不了寄存器的值,這是為什么呢??應該已經使能ADC模塊了的。
附源程序:
#include "DSP28x_Project.h"
interrupt void tim0_isr(void);
interrupt void ADC_convered(void);
Uint16 ADCINA0_Voltage_sum = 0;
Uint16 ADCINA1_Voltage_sum = 0;
Uint16 ADCINA2_Voltage_sum = 0;
Uint16 ADCINA0_Voltage = 0;
Uint16 ADCINA1_Voltage = 0;
Uint16 ADCINA2_Voltage = 0;
char convered_count = 0;
void main(void)
{
InitSysCtrl();
InitGpio();
DINT;
InitPieCtrl();
IER = 0x0000; IFR = 0x0000;
InitPieVectTable();
InitAdc();
EALLOW;
AdcRegs.ADCSAMPLEMODE.bit.SIMULEN0 = 0; //SOC0、SOC1單一采樣
AdcRegs.ADCSAMPLEMODE.bit.SIMULEN2 = 0; //SOC2、SOC3單一采樣
AdcRegs.ADCSOC0CTL.bit.CHSEL=0; //SOC通道選擇
AdcRegs.ADCSOC1CTL.bit.CHSEL=1;
AdcRegs.ADCSOC2CTL.bit.CHSEL=2;
AdcRegs.ADCSOC0CTL.bit.ACQPS = 6; //采樣時間
AdcRegs.ADCSOC1CTL.bit.ACQPS = 6;
AdcRegs.ADCSOC2CTL.bit.ACQPS = 6;
AdcRegs.ADCSOC0CTL.bit.TRIGSEL = 1; //soc觸發選擇,TIM0
AdcRegs.ADCCTL1.bit.INTPULSEPOS = 1; //結果存入寄存器才產生中斷
PieVectTable.ADCINT1 = &ADC_convered;
AdcRegs.INTSEL1N2.bit.INT1SEL = 2; //中斷線1選擇soc2
AdcRegs.INTSEL1N2.bit.INT1CONT = 0;
AdcRegs.INTSEL1N2.bit.INT1E = 1; //中斷使能
PieCtrlRegs.PIEIER1.bit.INTx1 = 1; //使能int1.1 EDIS;
/****************設置定時器,用以觸發ADC*****************/
CpuTimer0Regs.TPR.bit.TDDR = 59;
CpuTimer0Regs.TPRH.bit.TDDRH = 0; //對輸入時鐘60分頻,60M/60=1M
CpuTimer0Regs.PRD.all = 500000;//定時0.5s
CpuTimer0Regs.TCR.bit.TRB = 1; //reload
CpuTimer0Regs.TCR.bit.TIE = 1; //使能中斷
CpuTimer0Regs.TCR.bit.TSS = 0; //開始計數
EALLOW; PieVectTable.TINT0 = &tim0_isr;
PieCtrlRegs.PIECTRL.bit.ENPIE = 1; //使能PIE
PieCtrlRegs.PIEIER1.bit.INTx7 = 1; //使能int1.7
IER |= 0x0001;//使能GROUP1
EINT;
EDIS;
}
interrupt void ADC_convered(void)
{ //LED_toggle(LED2);
ADCINA0_Voltage_sum += AdcResult.ADCRESULT0;
ADCINA1_Voltage_sum += AdcResult.ADCRESULT1;
ADCINA2_Voltage_sum += AdcResult.ADCRESULT2;
AdcRegs.ADCINTFLGCLR.bit.ADCINT1 = 1;
PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;
convered_count++;
/*********轉換16次,取平均值*********/
if(convered_count > 15)
{ ADCINA0_Voltage = ADCINA0_Voltage_sum >> 4;//相當于除以16
ADCINA1_Voltage = ADCINA1_Voltage_sum >> 4;
ADCINA2_Voltage = ADCINA2_Voltage_sum >> 4;
ADCINA0_Voltage_sum = 0;
ADCINA1_Voltage_sum = 0;
ADCINA2_Voltage_sum = 0;
convered_count = 0; }
}
interrupt void tim0_isr(void)
{ PieCtrlRegs.PIEACK.all = PIEACK_GROUP1; }
//===========================================================================
// No more.
//===========================================================================