首页 理论教育 单片机项目实践:LED闪烁调速控制

单片机项目实践:LED闪烁调速控制

时间:2023-11-19 理论教育 版权反馈
【摘要】:方案设计此项目中,设计方案与7.5.1项目1相同,区别在于ICG模块的配置和小灯的闪烁控制,具体如下。ICGC2寄存器各状态位是:LOLRE=0,MFD2=0,MFD1=0,MFD0=0,LOCRE=0,RFD2=0,RFD1=1,RFD0=1。

单片机项目实践:LED闪烁调速控制

1.实践要求与方案设计

(1)要求

单片机的GPIO接口连接一LED小灯,通过ICG模块改变系统时钟频率,要求使用4MHz晶振做外部时钟源,实现不同内部总线频率控制下小灯闪烁速度的变化。其中总线时钟频率分别为1MHz、4MHz、10MHz,每种频率下小灯闪烁次数为10次。

(2)方案设计

此项目中,设计方案与7.5.1项目1相同,区别在于ICG模块的配置和小灯的闪烁控制,具体如下。

1)在时钟配置方面,ICG模块选择外部参考时钟源,使用4MHz晶振,使能FLL功能将时钟信号倍频,然后通过时钟分频分别得到1MHz、4MHz和10MHz的内部总线频率。在设置时每个总线频率对应一种配置信息,可将每种配置包含的控制寄存器设置编写成一个独立的函数,使用时调用不同的ICG配置函数即可完成不同总线频率的设定。

2)由于要求每种频率下小灯闪烁次数为10次,因而可以定义一个统计变量来记录当前小灯闪烁的次数,当次数累计超过10次后,调用不同的ICG配置函数改变总线时钟频率以实现闪烁速度的变化。

这种方法可以在不改变延时函数的情况下,完成项目要求,体现了不同时钟频率对系统执行速度的影响,加深了ICG模块功能的应用理解。

2.硬件电路设计

与7.5.1项目1 ICG模块基础实践的硬件电路一致。

3.软件设计与调试

按照设计方案,我们对ICG模块按总线时钟频率的不同分别进行设置,并将设置信息封装成3个不同的函数,具体如下。

1)1MHz总线时钟频率。

①“Source CPU clock”选择内部时钟源“External clock”。

②“External clock”选择外部时钟源,即选择“Enabled”项。

③“Clock source”选择外部晶体振荡器“External crysyal”。

④“Clock frequency[MHz]”设置为4,即4MHz晶振。

⑤“Clock range”为高频率范围选项,即“High frequency”。

⑥“Clock divider”分频选项自动,即“auto select”。

⑦“FLL clock”选项使能,即单击其右侧按键,将其值设置为“Enabled”。(www.xing528.com)

⑧在“Internal bus clock”选项框内按要求输入所需的总线时钟频率1MHz。

此时PE工具计算出通过FLL倍频后当前CPU时钟为16MHz,经自动频率分频8分频后得到ICG模块输出时钟ICGOUT=2MHz,再经二分频后可得到总线时钟频率1MHz。将这些设置封装成第一个频率设置函数void icg_1mhz(),其中

ICGC1寄存器各状态位是:

HGO=0,RANGE=1,REFS=1,CLKS1=1,CLKS0=1,OSCSTEN=1,LOCD=0。

ICGC2寄存器各状态位是:

LOLRE=0,MFD2=0,MFD1=0,MFD0=0,LOCRE=0,RFD2=0,RFD1=1,RFD0=1。得到1MHz总线时钟频率设置函数如下:

2)4MHz总线时钟频率。

设置步骤同1MHz总线时钟频率步骤,只需将“Internal bus clock”选项框内按要求设置为4MHz。此时FLL倍频后当前CPU时钟也为16MHz,但自动频率分频项变为2分频,即ICG模块输出时钟ICGOUT=8 MHz,得到总线时钟频率4MHz。此时,ICGC1寄存器各状态位是:

HGO=0,RANGE=1,REFS=1,CLKS1=1,CLKS0=1,OSCSTEN=1,LOCD=0

ICGC2寄存器各状态位是:

LOLRE=0,MFD2=0,MFD1=0,MFD0=0,LOCRE=0,RFD2=0,RFD1=0,RFD0=1。得到4MHz总线时钟频率设置函数如下:

3)10MHz总线时钟频率。

设置步骤同上,将“Internal bus clock”选项框内按要求设置为10MHz,经FLL倍频后CPU时钟为40MHz,经自动分频后,得到ICG模块输出时钟ICGOUT=20MHz,进而得到总线时钟频率10MHz。此时,

ICGC1寄存器各状态位是:

HGO=0,RANGE=1,REFS=1,CLKS1=1,CLKS0=1,OSCSTEN=1,LOCD=0

ICGC2寄存器各状态位是:

LOLRE=0,MFD2=0,MFD1=1,MFD0=1,LOCRE=0,RFD2=0,RFD1=0,RFD0=1。得到10MHz总线时钟频率设置函数如下。

对于每种频率下小灯闪烁次数为10次的控制,通过设计方案中的思路,可以编写如下主函数代码:

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈