更新,在更详细阅读用户手册后,发现有另一种触发方式
以高级定时器 Tx 触发 AD 为例,当使用 Tx,可以使用自动触发 AD 的功能。AD 触发
功能有两种形式,一种是通过 Tx 溢出信号触发,一种是通过 Tx_CCRy(x=5;y=0,1)寄存
器与 Tx 匹配时产生触发,这种方法可在周期中的任意位置触发 AD。
以 Tx 触发 AD 为例,设置寄存器 Tx_CTL,选择合适的计数模式,通过 TXOFS<1:0>
选择 Tx 的上溢/下溢触发 AD,通过 TXADAUTO 使能 Tx 溢出触发 AD。TXADAUTO 信号
在完成一次 AD 转换后自动清零。
还可以设置 Tx_CCRy(y=0,1)寄存器,当 Tx_CCRy 与 Tx 匹配时,也会产生 AD 触发
信号,将 ADSTART 位置 1
翻阅库函数发现这条语句/**
* 描述 配置Tx溢出中断自动触发AD控制位。
* 输入 ATIMx: 指向定时器内存结构的指针,取值T5_SFR/T9_SFR。
* NewState: Tx溢出中断自动触发AD控制位,
* 取值为:TRUE或FALSE。
* 返回 无
*/
void
ATIM_X_TriggerAD_Config (ATIM_SFRmap* ATIMx, FunctionalState NewState)
{
/* 参数校验 */
CHECK_RESTRICTION(CHECK_ATIM_PERIPH(ATIMx));
CHECK_RESTRICTION(CHECK_FUNCTIONAL_STATE(NewState));
/*-------------------- 设置TXCTL寄存器TXADAUTO位 --------------------*/
if (NewState != FALSE)
{
/* 计数模式 */
SFR_SET_BIT_ASM(ATIMx->TXCTL, ATIM_TXCTL_TXADAUTO_POS);
}
else
{
/* 定时模式 */
SFR_CLR_BIT_ASM(ATIMx->TXCTL, ATIM_TXCTL_TXADAUTO_POS);
}
}
可以通过TXADAUTO来使能Tx溢出触发AD,于是我将本人代码更改如下void cfg_T5(void)
{
ATIM_X_Work_Mode_Config(T5_SFR,ATIM_TIMER_MODE); //定时模式
ATIM_X_Set_Counter(T5_SFR,0); //T5计数值清0
ATIM_X_Set_Period(T5_SFR,ECCP5_PWM_PERIOD); //周期值
ATIM_X_Set_Prescaler(T5_SFR,0); //预分频器 1:1
ATIM_X_Postscaler_Config(T5_SFR,ATIM_POSTSCALER_DIV_1); //后分频比为1:1
ATIM_X_Counter_Mode_Config(T5_SFR,ATIM_COUNT_UP_DOWN_OF); //中心对齐的PWM信号,向上计数,上溢时产生中断标志
ATIM_X_Clock_Config(T5_SFR,ATIM_SCLK); //选用SCLK时钟为Tx工作时钟
ATIM_X_Updata_Immediately_Config(T5_SFR,FALSE); //立即更新以 T5 为时基的占空比、周期、预分频、更新计数器寄存器,并将定时器清零
ATIM_X_Updata_Output_Ctl(T5_SFR,FALSE); //立即更新以T5为时基的输出控制寄存器
ATIM_X_Updata_Enable(T5_SFR,TRUE); //允许以T5为时基的相关配置信息更改
ATIM_X_Set_TriggerAD_Signal(T5_SFR,0,0);
ATIM_X_Overflow_AD_Enable(T5_SFR,TRUE);
//ATIM_X_Underflow_AD_Enable(T5_SFR,TRUE);
ATIM_X_TriggerAD_Config(T5_SFR,TRUE);
ATIM_X_Cmd(T5_SFR,TRUE); //T5启动控制使能
}
却仍没有实现AD的触发
哪里做错了呢?求帮助 |