找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2184|回復(fù): 0
收起左側(cè)

SPCE061A學(xué)習(xí)筆記—系統(tǒng)時鐘設(shè)置引發(fā)的血案

[復(fù)制鏈接]
ID:128229 發(fā)表于 2016-6-29 14:58 | 顯示全部樓層 |閱讀模式
今天嘗試點亮led,發(fā)現(xiàn)點亮一點時間后周期會變長,搗鼓了半天,終于找出問題所在,下面一段文字摘自資料原文:
        此外,32768Hz RTC 振蕩器有兩種工作方式:強振模式和自動弱振模式。處于強振模式時,
RTC 振蕩器始終運行在高耗能的狀態(tài)下。處于自動弱振模式時,系統(tǒng)在上電復(fù)位后的前7.5s 內(nèi)
處于強振模式,然后自動切換到弱振模式以降低功耗。CPU 被喚醒后默認的時鐘頻率為Fosc/8,
用戶可以根據(jù)需要調(diào)整該值。CPU 被喚醒后經(jīng)過32 個時鐘周期的緩沖時間后再進行其它的操作,
這樣可以避免在系統(tǒng)被喚醒后造成ROM讀取錯誤。
















注意以上文字中的"處于自動弱振模式時,系統(tǒng)在上電復(fù)位后的前7.5s 內(nèi)
處于強振模式,然后自動切換到弱振模式以降低功耗。",這就是為什么開機一段時間后點亮頻率會降低的原因了,這段過渡時間剛好在7.5S左右。
結(jié)合插圖可以看出,*P_SystemClock必須預(yù)先設(shè)置好,使CPU始終處于強振狀態(tài),才能確保芯片按照預(yù)期效果正常工作。
下面給出源程序
//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 ,強振狀態(tài),睡眠狀態(tài)下晶振仍然工作
*P_IOA_Data = 0x0000;            //設(shè)置IOA0 ~IOA15 端口為帶下拉的低電平輸入
*P_IOA_Dir = 0xffff;             //工作方向為輸出
*P_IOA_Attrib = 0xffff;          //同相輸出,即給1出1,給0出0
*P_IOB_Data= 0xffff;             //設(shè)置IOB0~IOB15 端口為帶數(shù)據(jù)緩存的高電平輸出
*P_IOB_Dir = 0xffff;             //工作方向為輸出
*P_IOB_Attrib = 0xffff;          //同相輸出

while(1)
{
for(i=0;i<8;i++)
{
*P_IOB_Data  =  0x0001<<i;     //IOB 端口輸出高電平,點亮發(fā)光二極管,并保持一段時間
delaynms(1000);
}            
}  

}





回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表