新手上路
- 积分
- 37
- 金钱
- 37
- 注册时间
- 2015-1-5
- 在线时间
- 0 小时
|
楼主 |
发表于 2015-1-6 11:26:55
|
显示全部楼层
这里用到预分频计数器,看资料是说Timer1 configured to overflow at 1/3 the rate defined by SMB_FREQUENCY,但是为什么scl的最大频率为timer1的溢出频率的三分之一啊? 现在已经可以随意改时钟了,就是这个问题没解决,代码如下
void Timer1_Init(ulong SMB_FQ)
{
PCA0MD &= ~0x40; //stop WDT
OSCICN |= 0x83; //SYSCLK为内部高频正当期输出
RSTSRC = 0x04; //使能丢失时钟监测器
uchar SCALE = 1;
if ((SYSCLS/SMB_FQ/3) < 255)
{
SCALE = 1;
CKCON |= 0x08 ;
}
else if ((SYSCLS/SMB_FQ/3/4) < 255)//使用4分频
{
SCALE = 4;
CKCON |= 0x01;
CKCON &= ~0x0A;
}
else if ((SYSCLS/SMB_FQ/3/8) < 255)//使用8分频
{
SCALE = 8;
CKCON |= 0x03;
CKCON &= ~0x08;
}
else if ((SYSCLS/SMB_FQ/3/12) < 255)//使用12分频
{
SCALE = 12;
CKCON |= 0x03;
CKCON &= ~0x0B;
}
else if ((SYSCLS/SMB_FQ/3/48) < 255)//使用48分频
{
SCALE = 48;
CKCON |= 0x03;
CKCON &= ~0x09;
}
CKCON |= 0x08 ;
TMOD = 0x20;
TH1 = -(SYSCLS/SMB_FQ/3/SCALE);
TL1 = TH1;
TR1 = 1;
}
|
|