你好,非常非常感谢你的回复。第一次使用,不太熟悉本论坛,所以上午没有能够插入图片。ADC我设置的通过定时器0触发
我的代码在下面:
具体代码:
void ADC_Init(void)
{
EALLOW;
SysCtrlRegs.PCLKCR0.bit.ADCENCLK = 1; //开启ADC外设时钟
EDIS;
InitAdc();//初始化ADC
AdcRegs.ADCSOC0CTL.bit.ACQPS=6;//采样窗口设置
AdcRegs.ADCSOC0CTL.bit.CHSEL=1;//选用ADCINA1通道
AdcRegs.ADCSOC0CTL.bit.TRIGSEL=1;//采用定时器0作触发源
AdcRegs.ADCSAMPLEMODE.bit.SIMULEN0=0;//顺序采样
AdcRegs.ADCCTL1.bit.INTPULSEPOS=1;//锁存转换结果前1个周期产生INT脉冲
//
PieVectTable.ADCINT1 = &adc_isr;//中断地址
AdcRegs.INTSEL1N2.bit.INT1E=1;//开启中断线1
AdcRegs.INTSEL1N2.bit.INT1SEL =0;//中断线1选择soc0
AdcRegs.INTSEL1N2.bit.INT1CONT=0;//连续采样
PieCtrlRegs.PIEIER1.bit.INTx1 = 1;//PIE级中断
IER |= M_INT1;//CPU级中断
EINT;//开启总中断
ERTM;
//
}
interrupt void adc_isr(void)
{
while (AdcRegs.ADCCTL1.bit.ADCBSY == 1);//查询转换是否结束
int16 A;
A=AdcResult.ADCRESULT0>>4;
AdcRegs.ADCINT**CLR.bit.ADCINT1 = 1;//清楚寄存器中的标志位
AdcRegs.ADCINTOVFCLR.bit.ADCINT3 = 1;//清楚寄存器中的溢出位
PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;
}
下面为定时器0的中断函数
具体代码
interrupt void TIM0_IRQn(void)
{
EALLOW;
GpioDataRegs.GPATOGGLE.bit.GPIO0=1;//中断子程序
PieCtrlRegs.PIEACK.bit.ACK1=1;//定时结束之后,向PIEACK写1清零,以保证后续中断可以继续响应
EDIS;
}
整个编译没有错误,但是通过proteus软件仿真,不能进行样。
我怀疑是ADC程序写错了,或者定时器0没有触发ADC采样,我也不知道哪里错了。向您请教一下,再次表示感谢。
|