高级会员
- 积分
- 806
- 威望
- 565
- 贡献
- 191
- 兑换币
- 0
- 注册时间
- 2010-1-10
- 在线时间
- 25 小时
|
不知道有没有放对版块,错了提醒下.~
// PLL初始化子程序 BUS Clock=40M
void setbusclock(void)
{
CLKSEL=0X00; //disengage PLL to system //这里是不是指使用外部晶振?32M的?还是...
PLLCTL_PLLON=1; //turn on PLL
SYNR=4;
REFDV=1; //pllclock=2*osc*(1+SYNR)/(1+REFDV)=80MHz; //osc是多少?
_asm(nop); //BUS CLOCK=40M
_asm(nop);
while(!(CRGFLG_LOCK==1)); //when pll is steady ,then use it;
CLKSEL_PLLSEL =1; //engage PLL to system;
}
//PWM
void InitPWM(void)
{
PWME=0x00;//PWM输出禁止
PWMCTL=0xf0;//高八位置1,PWM通道级连,PWM1、PWM3、PWM5、PWM7为对应16bPWM输出
PWMPOL=0xaa;//对应通道输出
PWMCAE=0x00;//输出波形左对齐,即从周期原点开始计时
PWMPRCLK=0x44;//预分频 CLOCKA=40MHZ/16=2.5MHZ,CLOCKB=40MHZ/16=2.5MHZ
PWMSCLA=0x64;//CLOCKSA=CLOCKA/(2*100)=12.5kHZ
PWMSCLB=0x64;//CLOCKSB=CLOCKB/(2*100)=12.5kHZ
//0,1要求是100hz,则输出频率=时钟频率/(x+1)=100hz,得x=124,换成16进制0x7c
PWMPER1=0x7c;
//3,5要求是10khz,得x=249,即0xF9,7不做要求
PWMPER3=0xF9;
PWMPER5=0xF9;
PWMCLK=0x82;//PWM1选择CLOCKSA,PWM5选择CLOCKA,PWM3选择CLOCKB,PWM7选择CLOCKSB
PWME=0x2a;//1,3,5输出使能
PACTL=0x50;// 脉冲累加器使能,事件计数模式,上升沿计数,中断禁止 //此处,使能16位脉冲累加器,对PT7口计数.不知道该怎么写
//实时中断RTI
//------------------------------------------------------------
void InitRTI(void)
{
RTICTL=0x6c; //时间T=(1/40MHZ)*(12.5*2^15)=10.24ms,12.5取13,所以得T=10.64ms //这里能否做到精确地10.24ms?
CRGINT=0x80; //开实时中断
}
//模数计数器
void SetMDC(void)
{
//启用模数计数器,并实现自定义的时钟变量1s自增1. 这个也不怎么懂~~~~大虾们打救
}
这个是要求
1.将总线时钟(BUSCLOCK)设置为40M.
2.PWM输出使能。通道0,1级联,频率100hz;
通道2,3级联,频率10khz;
通道4,5级联,频率10khz;
3.使能16位脉冲累加器,对PT7口计数.
4.启用实时中断RTI,设置周期为10.24ms
5.启用模数计数器,并实现自定义的时钟变量1s自增1.
还剩几个实在是资料不足无法完成,而且还要忙着期末考,大家有空帮帮忙啊.最迟要在14号交的说,可惜15号才考完期末考 |
|