网上能找到一些ColdFire的PWM的驱动,但是找到的都是通道没有级联的。一般为了提高调节精度,我们都会使用级联的PWM波,下面就实现PWM级联的方法。
在MCF52259_PWM.h 中有如下定义:
#define MCF_PWM_PWMPER0 (*(vuint8 *)(0x401B0014)) #define MCF_PWM_PWMPER1 (*(vuint8 *)(0x401B0015)) #define MCF_PWM_PWMPER2 (*(vuint8 *)(0x401B0016)) #define MCF_PWM_PWMPER3 (*(vuint8 *)(0x401B0017)) #define MCF_PWM_PWMPER4 (*(vuint8 *)(0x401B0018)) #define MCF_PWM_PWMPER5 (*(vuint8 *)(0x401B0019)) #define MCF_PWM_PWMPER6 (*(vuint8 *)(0x401B001A)) #define MCF_PWM_PWMPER7 (*(vuint8 *)(0x401B001B))
级联以前的两个通道的PWM的周期寄存器和占空比寄存器都是8位的寄存器,但是相邻通道的周期寄存器的和占空比寄存器在地址上是连续的,比如通道0的周期寄存器地址为0x401B0014,通道1的周期寄存器的地址为0x401B0015,所以我们对通道0的地址做如下定义:
#define MY_PWMPER01 (*(vuint16 *)(0x401B0014))
这样我们调节级联之后的PWM的占空比课直接对MY_PWMPER01操作,而不用把占空比分成高八位和第八位分别赋给两个通道。
#define MY_PWMPER01 (*(vuint16 *)(0x401B0014)) #define MY_PWMPER23 (*(vuint16 *)(0x401B0016)) #define MY_PWMPER45 (*(vuint16 *)(0x401B0018)) #define MY_PWMPER67 (*(vuint16 *)(0x401B001A)) #define MY_PWMDTY01 (*(vuint16 *)(0x401B001C)) #define MY_PWMDTY23 (*(vuint16 *)(0x401B001E)) #define MY_PWMDTY45 (*(vuint16 *)(0x401B0020)) #define MY_PWMDTY67 (*(vuint16 *)(0x401B0022))
void PWM_Init(void)
{
//配置引脚功能为PWM输出
MCF_GPIO_PTAPAR=MCF_GPIO_PTAPAR_ICOC0_PWM1
|MCF_GPIO_PTAPAR_ICOC1_PWM3
|MCF_GPIO_PTAPAR_ICOC2_PWM5
|MCF_GPIO_PTAPAR_ICOC3_PWM7;
//PWM波开始为高电平
MCF_PWM_PWMPOL=(MCF_PWM_PWMPOL_PPOL1
|MCF_PWM_PWMPOL_PPOL3
|MCF_PWM_PWMPOL_PPOL5
|MCF_PWM_PWMPOL_PPOL7);
//01 45 ---> SA
//23 67 ---> SB
MCF_PWM_PWMCLK=0XFF;
//128MHz A = B = 128/1=128MHz
MCF_PWM_PWMPRCLK=MCF_PWM_PWMPRCLK_PCKA(0)
|MCF_PWM_PWMPRCLK_PCKB(0);
//全部使用左对齐
MCF_PWM_PWMCAE=0;
//01级联 23级联 45级联 67级联
MCF_PWM_PWMCTL = MCF_PWM_PWMCTL_CON01
|MCF_PWM_PWMCTL_CON23
|MCF_PWM_PWMCTL_CON45
|MCF_PWM_PWMCTL_CON67;
//对AB进行分频得到SA = SB = 128/(1*2) = 64MHz
MCF_PWM_PWMSCLA=1;
MCF_PWM_PWMSCLB=1;
//frequency = 64MHz/10000 = 6.4KHz
MY_PWMPER01=10000;
MY_PWMDTY01=1000;
MY_PWMPER23=10000;
MY_PWMDTY23=4000;
MY_PWMPER45=10000;
MY_PWMDTY45=7000;
MY_PWMPER67=10000;
MY_PWMDTY67=9000;
MCF_PWM_PWMSDN=MCF_PWM_PWMSDN_IF;
//使能4个通道的PWM波
MCF_PWM_PWME=MCF_PWM_PWME_PWME1
|MCF_PWM_PWME_PWME3
|MCF_PWM_PWME_PWME5
|MCF_PWM_PWME_PWME7;
}
MCF52259 实现PWM波级联,布布扣,bubuko.com
原文:http://blog.csdn.net/csu_stackoverflow/article/details/24035867