TA的每日心情 | 慵懒 2020-5-29 14:13 |
---|
签到天数: 79 天 连续签到: 1 天 [LV.6]常住居民II
|
本帖最后由 wangdbff 于 2018-6-3 14:54 编辑
作为一款单片机,该芯片也拥有丰富的外设可以使用。这里使用QuadTimer 来再次点灯。作为PWM输出和普通定时器中断两种操作。该芯片有4路Qtimer,可上下计数,可级联,这种场景下任意选用均可。
外设库需要增加fsl_qtmr.c,新建文件bsp_qtimer.c。在文件内进行基本配置,如下图,有注释
定时时间到在中断服务函数里点灯,如下
板载RGB蓝色会已1Hz频率点亮。定时时间=cmp1/QTMR1_CLK,使用IPG_CLK_ROOT时钟源。
简单的定时中断之后,再来感受下呼吸灯。任意定时器比如Qtimer4通道3。首先要初始化
- void QTMR4_CH3_PWM_Init(uint8_t prisrc,uint32_t clk, uint8_t duty)
- {
- uint8_t fredivi=1;
-
- qtmr_primary_count_source_t qtimer_source;
- qtimer_source=(qtmr_primary_count_source_t)prisrc;
-
- //配置GPIO_B1_11为QTIMER3_TIMER1的输出引脚
- IOMUXC_SetPinMux(IOMUXC_GPIO_B1_11_QTIMER4_TIMER3,0);
-
- //配置IO引脚GPIO_AD_B1_11的功能
- //低转换速度,驱动能力为R0/6,速度为100Mhz,关闭开路功能,使能pull/keepr
- //选择keeper功能,下拉100K Ohm,关闭Hyst
- IOMUXC_SetPinConfig(IOMUXC_GPIO_B1_11_QTIMER4_TIMER3,0x10B0);
-
- fredivi=Calcu_2invo(prisrc-8);
- //初始化QTIMER4
- QTMR_GetDefaultConfig(&qtimer4pwm_config);
- //设置第一时钟源
- qtimer4pwm_config.primarySource=qtimer_source;
- //初始化TIM4通道3
- QTMR_Init(TMR4,kQTMR_Channel_3,&qtimer4pwm_config);
- QTMR_SetupPwm(TMR4,kQTMR_Channel_3,clk,duty,false,CLOCK_GetFreq(kCLOCK_IpgClk)/fredivi);
- //上升沿计数
- QTMR_StartTimer(TMR4,kQTMR_Channel_3,kQTMR_PriSrcRiseEdge);
- }
复制代码 占空比设置函数如下
- void QTMER4CH3_PWM_DutySet(uint8_t prisrc,uint32_t clk, uint8_t duty){
- uint8_t fredivi=1;
- uint32_t srcclk,period,hightime,lowtime;
-
- fredivi=Calcu_2invo(prisrc-8);
- srcclk=CLOCK_GetFreq(kCLOCK_IpgClk)/fredivi;
-
- period=(srcclk/clk);
- hightime=(period*duty)/100;
- lowtime=period-hightime;
-
- TMR4->CHANNEL[kQTMR_Channel_3].CMPLD1=lowtime;
- TMR4->CHANNEL[kQTMR_Channel_3].CMPLD2=hightime;
- }
复制代码 之后主函数中首先初始化PWM,然后将占空比改为变量,循环增减以实现呼吸灯效果。
使用的IO在CN3,LED对应的引脚在CN4,所以使用杜邦线将PWM信号接到LED引脚,为了避免RGB影响PWM,初始化设置时改为高电平熄灭状态。
|
|