高级会员
- 积分
- 830
- 威望
- 412
- 贡献
- 248
- 兑换币
- 261
- 注册时间
- 2012-11-12
- 在线时间
- 85 小时
|
#include <hidef.h> /* common defines and macros */
#include "derivative.h" /* derivative-specific definitions */
void PLL(void)
{
CLKSEL_PLLSEL=0;//选择系统时钟来自晶振
PLLCTL_PLLON=1;//开启锁相环
SYNR=0x40|0x04;//设置fvco=80M; SYNR=4;REFDIV=1; fvco=2*fosc*(SYNPIV+1)/(REFDIV+1)=80M
REFDV=0x80|0x01; //fref=fosc/(REFDIV+1)=16/2=8M处于6~12M之间所以REFDV的前两位是10
_asm(nop);
_asm(nop); //等待PLL稳定
while(!(CRGFLG_LOCK==1));
CLKSEL_PLLSEL=1;//选定锁相环时钟
}
//左对齐时PWM周期=通道时钟周期*PWMPERX 总线时钟40M PWM周期400ms 占空比50%的方波
//PWM初始输出高电平 PWM信号占空比=占空比寄存器值/周期寄存器值
void PWM01_Init(void)
{
PWME_PWME1=0;//禁止PWM的全部通道输出
PWMCTL_CON01=1;//将PWM两两级联
PWMCLK_PCLK1=1;//PWM全部选择SA或SB为时钟源
PWMPRCLK_PCKA=7;//clock A,B=总线时钟/128 总线时钟是40M
PWMSCLA=128;//clock SA=clock A/(2*PWMSCLA)
// 算出时钟周期1220HZ
PWMPOL_PPOL1=1;//开始为高电平,到达占空比计数后输出低电平
PWMCAE_CAE1=0; //左对齐
PWMPER01=488; //PWM周期=通道时钟周期*PWMPER1 400=(1000/1220)*488
PWMDTY01=244;// 设置占空比为50%,PWM初始输出高电平 PWM信号占空比=占空比寄存器值/周期寄存器值 如要设置周期400ms
PWME_PWME1=1;//开启PWM通道
}
void PWM23_Init(void)
{
PWME_PWME3=0;//禁止PWM的全部通道输出
PWMCTL_CON23=1;//将PWM两两级联
PWMCLK_PCLK3=1;//PWM全部选择SA或SB为时钟源
PWMPRCLK_PCKB=7;//clock A,B=总线时钟/128 总线时钟是40M
PWMSCLA=128;//clock SA=clock A/(2*PWMSCLA)
// 算出时钟周期1220HZ
PWMPOL_PPOL3=1;//开始为高电平,到达占空比计数后输出低电平
PWMCAE_CAE3=0; //左对齐
PWMPER23=488; //PWM周期=通道时钟周期*PWMPER1 400=(1000/1220)*488
PWMDTY23=244;// 设置占空比为50%,PWM初始输出高电平 PWM信号占空比=占空比寄存器值/周期寄存器值 如要设置周期400ms
PWME_PWME3=1;//开启PWM通道
}
void PWM45_Init(void)
{
PWME_PWME5=0;//禁止PWM的全部通道输出
PWMCTL_CON45=1;//将PWM两两级联
PWMCLK_PCLK5=1;//PWM全部选择SA或SB为时钟源
PWMPRCLK_PCKA=7;//clock A,B=总线时钟/128 总线时钟是40M
// 算出时钟周期1220HZ
PWMPOL_PPOL5=1;//开始为高电平,到达占空比计数后输出低电平
PWMCAE_CAE5=0; //左对齐
PWMPER45=488; //PWM周期=通道时钟周期*PWMPER1 400=(1000/1220)*488
PWMDTY45=244;// 设置占空比为50%,PWM初始输出高电平 PWM信号占空比=占空比寄存器值/周期寄存器值 如要设置周期400ms
PWME_PWME5=1;//开启PWM通道
}
void PWM67_Init(void)
{
PWME_PWME7=0;//禁止PWM的全部通道输出
PWMCTL_CON67=1;//将PWM两两级联
PWMCLK_PCLK7=1;//PWM全部选择SA或SB为时钟源
PWMPRCLK_PCKB=7;//clock A,B=总线时钟/128 总线时钟是40M
PWMSCLA=128;//clock SA=clock A/(2*PWMSCLA)
// 算出时钟周期1220HZ
PWMPOL_PPOL7=1;//开始为高电平,到达占空比计数后输出低电平
PWMCAE_CAE7=0; //左对齐
PWMPER67=488; //PWM周期=通道时钟周期*PWMPER1 400=(1000/1220)*488
PWMDTY67=244;// 设置占空比为50%,PWM初始输出高电平 PWM信号占空比=占空比寄存器值/周期寄存器值 如要设置周期400ms
PWME_PWME7=1;//开启PWM通道
}
void main(void) {
/* put your own code here */
PLL();
PWM01_Init();
PWM23_Init();
PWM45_Init();
PWM67_Init();
EnableInterrupts;
for(;;) {
PWMDTY01=244;
PWMDTY23=244;
PWMDTY45=244;
PWMDTY67=244;
} /* loop forever */
/* please make sure that you never leave main */
}
不知道哪里有问题 就是出不了波形 求大神指导
|
|