[求助] F28027在CCS中的ADC模块的程序改不了寄存器的值!为什么呢?

xcyseh   2013-7-24 19:20 楼主
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.
//===========================================================================

回复评论 (2)

《不要简单地贴代码》那个帖子建议楼主看看

改变不了什么寄存器?

建议楼主检查一下:
1、时钟打开了没有?
2、用EALLOW了没有?
3、是只读的吗?
点赞  2013-7-25 10:27
我也遇到这个问题,请问你最后是怎么解决的?
点赞  2014-9-26 10:57
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复