找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2177|回复: 0
打印 上一主题 下一主题
收起左侧

SPCE061A学习笔记—系统时钟设置引发的血案

[复制链接]
跳转到指定楼层
楼主
ID:128229 发表于 2016-6-29 14:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
今天尝试点亮led,发现点亮一点时间后周期会变长,捣鼓了半天,终于找出问题所在,下面一段文字摘自资料原文:
        此外,32768Hz RTC 振荡器有两种工作方式:强振模式和自动弱振模式。处于强振模式时,
RTC 振荡器始终运行在高耗能的状态下。处于自动弱振模式时,系统在上电复位后的前7.5s 内
处于强振模式,然后自动切换到弱振模式以降低功耗。CPU 被唤醒后默认的时钟频率为Fosc/8,
用户可以根据需要调整该值。CPU 被唤醒后经过32 个时钟周期的缓冲时间后再进行其它的操作,
这样可以避免在系统被唤醒后造成ROM读取错误。
















注意以上文字中的"处于自动弱振模式时,系统在上电复位后的前7.5s 内
处于强振模式,然后自动切换到弱振模式以降低功耗。",这就是为什么开机一段时间后点亮频率会降低的原因了,这段过渡时间刚好在7.5S左右。
结合插图可以看出,*P_SystemClock必须预先设置好,使CPU始终处于强振状态,才能确保芯片按照预期效果正常工作。
下面给出源程序
//main.c
#include"SPCE061A.h"
#defineuchar unsigned char
void delay1ms()
{
   unsigned char i;   
     for(i = 0; i <70; i++)
     *P_Watchdog_Clear =   0x0001;    //清看门狗     
}
void delaynms(unsigned int n)
{
unsigned char i;
for(i=0;i<n;i++)
delay1ms();   
}

void main()
{
//add your code here
unsigned int i;
*P_SystemClock=0x000b;           //fosc=24768khz,CPUClok=fosc/8 ,强振状态,睡眠状态下晶振仍然工作
*P_IOA_Data = 0x0000;            //设置IOA0 ~IOA15 端口为带下拉的低电平输入
*P_IOA_Dir = 0xffff;             //工作方向为输出
*P_IOA_Attrib = 0xffff;          //同相输出,即给1出1,给0出0
*P_IOB_Data= 0xffff;             //设置IOB0~IOB15 端口为带数据缓存的高电平输出
*P_IOB_Dir = 0xffff;             //工作方向为输出
*P_IOB_Attrib = 0xffff;          //同相输出

while(1)
{
for(i=0;i<8;i++)
{
*P_IOB_Data  =  0x0001<<i;     //IOB 端口输出高电平,点亮发光二极管,并保持一段时间
delaynms(1000);
}            
}  

}





分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表