这个demo:LKS32MC08x_PeripDemo_v2p7.zip\4.ADC\ADC_UTimer_Triggerdemo里的代码如下:
ADC代码:
void ADC0_init(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
GPIO_StructInit(&GPIO_InitStruct); //初始化结构体
/* ADC_CHANNEL_7 P0.3 */
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_ANA;
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_3;
GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(GPIO0, &GPIO_InitStruct);
ADC_InitTypeDef ADC_InitStructure;
ADC_StructInit(&ADC_InitStructure); //初始化结构体
ADC_InitStructure.IE = ADC_EOS0_IRQ_EN | ADC_DAT0_OV_IRQ_EN; //第一段扫描结束中断使能和ADC_DAT0超阈值中断
ADC_InitStructure.Align = ADC_LEFT_ALIGN; //ADC数据输出左对齐
ADC_InitStructure.UTIMER_Trigger_En = ADC_UTIMER_T0_TRG; //UTIMER_T0硬件触发ADC采样
ADC_InitStructure.MCPWM_Trigger_En = DISABLE; //关闭MCPWM的硬件中断
ADC_InitStructure.FirSeg_Ch = ADC_1_TIMES_SAMPLE; //第一段采样的总通道数: 1~20
ADC_InitStructure.Trigger_Cnt = 0; /*单段触发模式下触发一次采样所需要的事件数:0~15 0表示需要一次触发,15表示需要16次*/
ADC_InitStructure.Trigger_Mode = ADC_1SEG_TRG; /*ADC采样1段模式*/
ADC_InitStructure.DAT0_TH_Type = 1; //设置ADC比较上阈值中断
ADC0_DAT0_TH = 5000; //设置ADC0_DARA0大于ADC0_DAT0_TH值时,触发ADC数值比较中断
ADC_Init(ADC0, &ADC_InitStructure);
ADC0_IF = 0xff; //清中断标志位
ADC0_GAIN0 = 0x0; //开启2/3增益
ADC0_CHN0 = ADC_CHANNEL_7 | (ADC_CHANNEL_7 << 8); //采样电位器分压值
}
定时器代码:
void ADC0_init(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
GPIO_StructInit(&GPIO_InitStruct); //初始化结构体
/* ADC_CHANNEL_7 P0.3 */
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_ANA;
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_3;
GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(GPIO0, &GPIO_InitStruct);
ADC_InitTypeDef ADC_InitStructure;
ADC_StructInit(&ADC_InitStructure); //初始化结构体
ADC_InitStructure.IE = ADC_EOS0_IRQ_EN | ADC_DAT0_OV_IRQ_EN; //第一段扫描结束中断使能和ADC_DAT0超阈值中断
ADC_InitStructure.Align = ADC_LEFT_ALIGN; //ADC数据输出左对齐
ADC_InitStructure.UTIMER_Trigger_En = ADC_UTIMER_T0_TRG; //UTIMER_T0硬件触发ADC采样
ADC_InitStructure.MCPWM_Trigger_En = DISABLE; //关闭MCPWM的硬件中断
ADC_InitStructure.FirSeg_Ch = ADC_1_TIMES_SAMPLE; //第一段采样的总通道数: 1~20
ADC_InitStructure.Trigger_Cnt = 0; /*单段触发模式下触发一次采样所需要的事件数:0~15 0表示需要一次触发,15表示需要16次*/
ADC_InitStructure.Trigger_Mode = ADC_1SEG_TRG; /*ADC采样1段模式*/
ADC_InitStructure.DAT0_TH_Type = 1; //设置ADC比较上阈值中断
ADC0_DAT0_TH = 5000; //设置ADC0_DARA0大于ADC0_DAT0_TH值时,触发ADC数值比较中断
ADC_Init(ADC0, &ADC_InitStructure);
ADC0_IF = 0xff; //清中断标志位
ADC0_GAIN0 = 0x0; //开启2/3增益
ADC0_CHN0 = ADC_CHANNEL_7 | (ADC_CHANNEL_7 << 8); //采样电位器分压值
}
----------------
看不懂啊:
1,定时器0到底是在哪使能的?
2,实际调试程序确实能跑。
有大佬能给解释解释吗?
|