公告

大中华汽车电子生态圈社区并入开发者社区- 更多资讯点击此

Tip / 登入 to post questions, reply, level up, and achieve exciting badges. Know more

cross mob

TC275调试日志——TOM-ILLD配置PWM产生

TC275调试日志——TOM-ILLD配置PWM产生

凌风2018_版主_
Level 4

前面我们了解过TOM模块产生PWM的基本原理,这一帖我们来看看怎么配置产生一个基本的PWM波以及怎么产生多通道的PWM。

1,ILLD配置产生PWM

首先我们使用TOM0模块,在channel_0产生一个周期为10ms,占空比为10%的PWM波。

我们按照ILLD的参考例程来编程

1.png

图1:ILLD_TOM参考例程

第一步是使能GTM模块,配置TOM输入时钟;

配置寄存器CLC.DISS=0使能GTM模块,对应ILLD中函数

IfxGtm_isEnabled(Ifx_GTM *gtm);

上一帖我们讲过CMU单元的基本结构,系统时钟经过CFGU分频得到8个基础时钟,接着其中之一进入FXU分频5个TOM输入时钟。时钟初始化函数如下:

2.png

图2:TOM时钟初始化

在CFGU单元,将系统时钟进行初始分频得到GCLK,我这里将该时钟设为最大100MHz;接着还是在CFGU单元,将GCLK分频得到8个基础时钟ECLK,这里我们选择CMU_CLK_0,将其配置为最大100MHz。当然这个频率可以更具实际情况来设置,例如设置为1MHz,那么需将frequency改成1000000,该参数的单位是Hz。

现在我们就得到了FXU单元的输入时钟CMU_CLK_0;接下来使能FXU单元,然后选择一个FXU单元的输出时钟作为TOM单元的时钟即可(在配置TOM时选择)。

 

第二步是配置TOM模块以及通道

3.png

图3;TOM初始化配置

我们按照ILLD做好的封装直接进行配置,我们需要配置的参数为TOM0的channel0产生周期为10ms,占空比为10%的PWM波,并且使能周期中断。首先来看看需要配置的参数:

图4.png

图4:参数配置函数内容

如图所示,在默认配置中,我们配置了TOM0,channel0,而且时钟选择了FXCLK0。根据上讲的内容,FXCLK0=CMU_CLK_0。按照我们的配置,那么这个时钟极为1MHz,所有tom的TIMER的时基为10us。也就是说,我们需要配置period=1000,表示10ms,dutycycle=10%*period=100,表示1ms。

将channel0的输出映射到相应的IO口,在文件GTM_PinMap.c中找到映射,如图5所示:

图5.png

图5:TOM输出IO口映射

 

另外需配置立即启动,表示初始化完成后即可启动PWM波。

 

第三步是中断配置

首先我们需要在参数配置中使能中断,配置中断处理终端,中断优先级。

(1)中断使能

TOM中支持两种中断,一种是CN0=CM0时,对应的周期中断:ccu0中断

config->interrupt.ccu0Enabled = TRUE;//使能周期中断

另一种是CN0=CM1时,对应的是匹配中断:CCU1中断

config->interrupt.ccu1Enabled = TRUE;//使能匹配中断

(2)中断处理终端

config->interrupt.isrProvider = IfxSrc_Tos_cpu0;//配置CPU0为中断处理中断;

 (3)中断优先级

tomConfig.interrupt.isrPriority = TOM0_CH0_PRIO;//需自行定义

(4)装载中断handler,使能中断

IfxCpu_Irq_installInterruptHandler (TOM0Ch0_ISR, TOM0_CH0_PRIO);

包含两个参数:中断处理函数和中断优先级。

IFX_INTERRUPT(TOM0Ch0_ISR, 0, TOM0_CH0_PRIO)

{

 

}//对应的中断处理函数

 

经过这么个流程PWM便可以产生了,至于PWM的启停以及周期和占空比的更新,我们下回分解。


0 点赞
6152 次查看
28 评论