打印
[LKS32 软件]

ADC是Utimer0触发的,但却找不到使能Utimer0的语句

[复制链接]
722|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
这个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 UTimer_init(void)
{
    TIM_TimerInitTypeDef TIM_InitStruct;

    TIM_TimerCmd(TIMER2, ENABLE);                         /* Timer2 模块使能 */
    TIM_TimerStrutInit(&TIM_InitStruct);                  //Timer结构体初始化
    TIM_InitStruct.Timer_CH0_WorkMode = TIMER_OPMode_CMP; /* 设置Timer CH0 为比较模式 */
    TIM_InitStruct.Timer_CH0_CapMode = TIMER_CapMode_None;
    TIM_InitStruct.Timer_CH0Output = 0;                   /* 计数器回零时,比较模式输出极性控制 */
    TIM_InitStruct.Timer_CH1_WorkMode = TIMER_OPMode_CMP; /* 设置Timer CH1 为比较模式 */
    TIM_InitStruct.Timer_CH1_CapMode = TIMER_CapMode_None;
    TIM_InitStruct.Timer_CH1Output = 0; /* 计数器回零时,比较模式输出极性控制 */
    TIM_InitStruct.Timer_TH = 48000;    /* 定时器计数门限初始值1000*/
    TIM_InitStruct.Timer_CMP0 = 24000;  /* 设置比较模式的CH0比较初始值500 */
    TIM_InitStruct.Timer_CMP1 = 24000;  /* 设置比较模式的CH1比较初始值500 */
    TIM_InitStruct.Timer_Filter0 = 0;   /* 设置捕捉模式或编码器模式下对应通道的数字滤波值 */
    TIM_InitStruct.Timer_Filter1 = 0;
    TIM_InitStruct.Timer_ClockDiv = TIM_Clk_Div2;                                          /* 设置Timer模块数据分频系数 */
    TIM_InitStruct.Timer_IRQEna = Timer_IRQEna_CH0 | Timer_IRQEna_CH1 | Timer_IRQEna_Zero; /* 开启Timer模块比较中断和过零中断*/
    TIM_TimerInit(TIMER2, &TIM_InitStruct);

    TIM_TimerCmd(TIMER3, ENABLE);                         /* Timer3 模块使能 */
    TIM_TimerStrutInit(&TIM_InitStruct);                  //Timer结构体初始化
    TIM_InitStruct.Timer_CH0_WorkMode = TIMER_OPMode_CMP; /* 设置Timer CH0 为比较模式 */
    TIM_InitStruct.Timer_CH0_CapMode = TIMER_CapMode_None;
    TIM_InitStruct.Timer_CH0Output = 0;                   /* 计数器回零时,比较模式输出极性控制 */
    TIM_InitStruct.Timer_CH1_WorkMode = TIMER_OPMode_CMP; /* 设置Timer CH1 为比较模式 */
    TIM_InitStruct.Timer_CH1_CapMode = TIMER_CapMode_None;
    TIM_InitStruct.Timer_CH1Output = 0; /* 计数器回零时,比较模式输出极性控制 */
    TIM_InitStruct.Timer_TH = 48000;    /* 定时器计数门限初始值1000*/
    TIM_InitStruct.Timer_CMP0 = 24000;  /* 设置比较模式的CH0比较初始值500 */
    TIM_InitStruct.Timer_CMP1 = 24000;  /* 设置比较模式的CH1比较初始值500 */
    TIM_InitStruct.Timer_Filter0 = 0;   /* 设置捕捉模式或编码器模式下对应通道的数字滤波值 */
    TIM_InitStruct.Timer_Filter1 = 0;
    TIM_InitStruct.Timer_ClockDiv = TIM_Clk_Div2;                                          /* 设置Timer模块数据分频系数 */
    TIM_InitStruct.Timer_IRQEna = Timer_IRQEna_CH0 | Timer_IRQEna_CH1 | Timer_IRQEna_Zero; /* 开启Timer模块比较中断和过零中断*/
    TIM_TimerInit(TIMER3, &TIM_InitStruct);
}



----------------

看不懂啊:
1,定时器0到底是在哪使能的?
2,实际调试程序确实能跑。
有大佬能给解释解释吗?

使用特权

评论回复
沙发
红色钢铁|  楼主 | 2023-3-1 20:14 | 只看该作者
搞定了!原来是我理解错误


这里指的不是定时器0,只是在设置adc触发事件源。
看文档还是不够仔细啊



使用特权

评论回复
板凳
隐现619| | 2023-3-1 20:24 | 只看该作者
兄弟你理解错了,他是用Utimer0来触发ADC采样,但是Utimer0不是你理解的定时器0产生的。实际是定时器2的通道0比较事件产生的。使用手册上有介绍哈。

使用特权

评论回复
地板
红色钢铁|  楼主 | 2023-3-2 17:35 | 只看该作者
隐现619 发表于 2023-3-1 20:24
兄弟你理解错了,他是用Utimer0来触发ADC采样,但是Utimer0不是你理解的定时器0产生的。实际是定时器2的通 ...

嗯嗯,是我阅读文档不够仔细

使用特权

评论回复
5
zhuomuniao110| | 2023-3-21 21:44 | 只看该作者
中文手册好懂。

使用特权

评论回复
6
勇敢的大白菜| | 2023-3-22 12:58 | 只看该作者
直接看中文的文档即可。

使用特权

评论回复
7
名字是啥样| | 2023-3-22 17:56 | 只看该作者
你可以直接看中文的文档的,没有什么。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

20

主题

105

帖子

0

粉丝