控制/MCU
01 MCU的时钟
对于单片机来说,时钟是必不可少的模块,如果将MCU比作是人,那时钟就是人的心脏。没有时钟,MCU是动不起来的,所以时钟是非常重要的。时钟单元是MCU工作的基础单元。今天就来分享一下菱沃铂MCU芯片上不同时钟源的配置方法。
02 时钟电路
时钟信号产生的过程其实很简单,只需要一个振荡电路就可以了,如下图所示。
03 芯片内部常见的时钟单元
菱沃铂MCU内部都会有不同的时钟单元可供我们选择。(以Rb58F175A系列为例)
1、配置IHRC为MCLK
void ihrc()
{
SPKEY = 0X36; //解密
CKEN |= 0X01; //开启内部高频 IHRC
while(!(CKSS & 0X08)) //等待内部高频起振稳定
{
}
SPKEY = 0X36;
CKSS = 0X00; //选择系统时钟源 IHRC/2
while(CKSS & 0X80) //确保时钟切换不出错
{
}
SPKEY = 0X36;
CKEN &= 0XC0; //关闭不使用的时钟源
}
2、配置ILRC为MCLK
void ilrc()
{
SPKEY = 0X36; //解密
CKEN |= 0X02; //开启内部低频 ILR
while(!(CKSS & 0X10)) //等待内部低频起振稳定
{
}
SPKEY = 0X36;
CKSS = 0X02; //选择系统时钟源 ILRC
while(CKSS & 0X80) //确保时钟切换不出错,否则一直等待,可以进中断处理
{
}
SPKEY = 0X36;
CKEN &= 0XC0; //关闭不使用的时钟源
}
3、配置LCRY为MCLK
void lcry()
{
if(!P06) //选择不同的外部低频输入方式
{
SPKEY = 0X36;
CKEN |= 0X10; //P5.3用作IO端口,P5.2的IO输入功能失效,开启外部低频晶振LXOUT端时钟输入功能。
}
else
{
SPKEY = 0X36;
CKEN |= 0X30; //P5.3/P5.2用作LXIN/LXOUT端口,开启外部低频晶振。
}
while(!(CKSS & 0X20)) //等待外部低频起振稳定
{
}
SPKEY = 0X36;
CKSS = 0X03; //选择系统时钟源 LCRY
while(CKSS & 0X80) //确保时钟切换不出错,否则一直等待,可以进中断处理
{
}
SPKEY = 0X36;
CKEN &= 0XC0; //关闭不使用的时钟源
}
4、配置HCRY为MCLK
void hcry()
{
if(!P05) //选择不同的外部高频输入方式
{
SPKEY = 0X36;
CKEN |= 0X04; //P5.0 用作IO端口,P5.1的IO 输入功能失效,开启外部高频晶振 HXOUT 端时钟输入功能。
}
else
{
SPKEY = 0X36;
CKEN |= 0X0c;// P5.0/P5.1 用作 HXIN/HXOUT 端口,开启外部高频晶振。
}
while(!(CKSS & 0X40)) //等待外部高频起振稳定
{
}
SPKEY = 0X36;
CKSS = 0X01; //选择系统时钟源 HCRY
while(CKSS & 0X80) //确保时钟切换不出错,否则一直等待,可以进中断处理
{
}
SPKEY = 0X36;
CKEN &= 0XC0; //关闭不使用的时钟源
}
说明:不同的时钟选择可以针对于不同的情况,相对于一些需要低功耗待机应用的场景,就可以使用内部低频时钟保证芯片在PD模式下也可以进行WT钟表计数器计数。
04 时钟切换
在同一程序内,也可以进行时钟源切换得到,来选择不同的时钟频率进行工作。
高频切换低频:
低频切换高频:
1分频切换4分频:
由于篇幅有限,本文只介绍了一些菱沃铂MCU时钟的基础内容,更多介绍内容和Demo,请详细参考产品的用户手册。
全部0条评论
快来发表一下你的评论吧 !