娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

s3c2440的rtc操作

發布者:快樂舞動最新更新時間:2024-08-30 來源: cnblogs關鍵字:s3c2440  rtc操作  寄存器 手機看文章 掃描二維碼
隨時隨地手機看文章

實時時鐘(RTC)其主要功能是電源故障的制度下,使用后備電源,時鐘繼續。為了不浪費時間信息。


s3c2440內部集成了RTC模塊,并且用起來也十分簡單。


其內部的寄存器BCDSEC,BCDMIN,BCDHOUR,BCDDAY。BCDDATE,BCDMON和BCDYEAR分別存儲了當前的秒,分,小時。星期,日,月和年,表示時間的數值都是BCD碼。


這些寄存器的內容可讀可寫。而且僅僅有在寄存器RTCCON的第0位為1時才干進行讀寫操作。為了防止誤操作。當不進行讀寫時。要把該位清零。當讀取這些寄存器時。可以獲知當前的時間;當寫入這些寄存器時,可以改變當前的時間。


另外須要注意的是。由于有所謂的“一秒


誤差”,因此當讀取到的秒為0時,,才干保證時間的正確(關于這點能夠看s3c2440文檔)。


以下給出一個簡單的程序。當剛上電的時候讀取當前時間值,通過串口顯示出來。并設置當前的時間為 2014年8月25日,21點40分 33秒:


write_date(0x14,0x8,0x25,0x1,0x21,0x40,0x33);

read_date();

printf('year:%4d,month:%2d,day:%2d,week:%2d,hour:%2d,minute:%2d,second:%2drn',

rYear, rMonth,rDay,rDayOfWeek,rHour,rMinute,rSecond);

//參數須要是BCD形式的

void write_date(UINT8 year,UINT8 month,UINT8 day,UINT8 dayofweek,UINT8 hour,UINT8 minute,UINT8 second)

{

rRTCCON = 1;

rBCDYEAR = year;            //年

rBCDMON  = month ;           //月

rBCDDAY  = dayofweek;            //日

rBCDDATE = day; //星期

rBCDHOUR = hour;            //小時

rBCDMIN  = minute;                   //分

rBCDSEC  = second;            //秒

rRTCCON = 0;

}


void read_date(void)

{

rRTCCON = 1 ;

if(rBCDYEAR==0x99)

rYear = 1999;

else

rYear    = (2000 + FROM_BCD(rBCDYEAR));

rMonth  = FROM_BCD(rBCDMON & 0x1f);

rDayOfWeek = FROM_BCD(rBCDDAY & 0x0f);

rDay = FROM_BCD(rBCDDATE&0x3f);

rHour   = FROM_BCD(rBCDHOUR & 0x3f);

rMinute     = FROM_BCD(rBCDMIN & 0x7f);

rSecond     = FROM_BCD(rBCDSEC & 0x7f);

rRTCCON = 0 ;

}


發懶了,竟然沒有考慮到一秒誤差。這算是個簡單的 小功能。能夠在我github上clone。


除了簡單的計時之外RTC還提供了2種時鐘中斷功能:報警中斷和時間節拍中斷,時間節拍中斷。顧名思義。就像一個節拍器。能夠等時性的控制節拍。


因此它類似于定時器中斷


但時間節拍中斷是毫秒級的,而定時器中斷能夠達到微秒,甚至更小級別。時間節拍中斷的周期公式為:(n+1)÷128。單位是秒,即每隔這么長時間,會中斷一次。


當中n的值為1~127,它存儲在寄存器TICNT的低6位中,當寄存器TICNT的第7位被置1時,表示開啟時間節拍中斷。這時n遞減,當減為0時,進入時間節拍中斷。一般在ucos里面的節拍就是ms級別,作為ucos的節拍比較合適。


報警中斷能夠實現當實時時間達到預置的時間后。引起報警。預置的時間是存儲在報警時間數據寄存器中的(rtc有2套時間有關的寄存器,都是BCD形式存儲。當前時間用一套,),包含ALMYEAR(年)、ALMMON(月)、ALMDATE(日)、ALMHOUR(小時)、ALMMIN(分)和ALMSEC(秒)。而怎樣報警。是由報警控制寄存器RTCALM控制的。


它的   第6位置1表示全局報警,而第5位到第0位置1分別表示年、月、日、小時、分和秒報警。

7a232f64e28cd7186adb029c2db99833_SouthEast.png

比方,我們想要在2010年4月5日22時30分0秒報警。那么把這個時間分別存儲到對應的報警時間數據寄存器中,然后設置RTCALM為0x7F,這樣當實時時鐘到達這個時刻時,會引起報警中斷;


又比方我們想要系統具有鬧鐘的功能,讓它每天早上6點提醒我們起床。那么我們能夠設置ALMHOUR為6,RTCALM為0x44。


假設我們僅僅想讓系統在4月份的時候提醒我們6點起床,那該怎么辦呢?這個問題對于s3c2440來說就是小菜一碟,僅僅要我們再在ALMMON里寫入4,然后把RTCALM改為0x54就可以。


總之,就是系統依據RTCALM所置1的相應位來比較相相應的當前時間與報警時間數據寄存器中的值。假設相等就進入中斷,不論設置什么形式的鬧鐘中斷全局使能須要置位。


能夠依據這個實現一些功能:時間節拍中斷設置為1s一次,每次節拍中斷向串口寫一串字符'beat int'。而   剛上電之后設置鬧鐘中斷   則是在上電之后1分鐘之后向串口寫字符


串'alarm int'。



void Task2(void *pdata)

{

int i=0;

write_date(0x14,0x8,0x25,0x1,0x21,0x40,0x33);

set_alarm(0x14,0x8,0x25,0x21,0x41,0x33);


while(1)

{

i++;

if(i>99)i=0;

read_date();

printf('year:%4d,month:%2d,day:%2d,week:%2d,hour:%2d,minute:%2d,second:%2drn',

rYear, rMonth,rDay,rDayOfWeek,rHour,rMinute,rSecond);


OSTimeDly( 5 );

OSTimeDly(OS_TICKS_PER_SEC);

}

}



void init_rtc(void)

{

rINTMSK &= ~( (1<<8) | (1<<30) );

pIRQ_RTC = (UINT32)alarm_rtc;

pIRQ_TICK=(UINT32)tick_rtc;


rTICNT=(0x7f)|0x80;    //使能中斷   tick=127

rRTCALM = 0x41;     //RTC鬧鐘控制寄存器   //0x41表示使能RTC鬧鐘,以及使能秒時鐘鬧鐘   

}


void tick_rtc(void)

{

printf('beat intrn');

}


void alarm_rtc(void)

{

printf('alarm intrn');

}


關鍵字:s3c2440  rtc操作  寄存器 引用地址:s3c2440的rtc操作

上一篇:uboot在s3c2440上的移植(6)
下一篇:s3c2440 地址分配講解

推薦閱讀最新更新時間:2025-04-23 16:37

s3c2440 中斷掛起寄存器INTPND
中斷掛起寄存器INTOND包括32個比特位,其中每一個比特位均表示相應中斷請求是否擁有最高優先級,它們處于等待中斷服務狀態并且沒有被屏蔽。INTPNd寄存器在優先級仲裁結束之后,僅有一個比特位被置1,并且被置1的中斷請求向CPU產生IRQ,在執行IRQ中斷服務時,可以讀取寄存器來確定32個中斷源中哪個中斷源被執行。 同SRCPND一樣,INTPND也需要在中斷服務程序中加入清0操作,位于SRCPND寄存器清0操作之后。可以通過向INTPND寄存器寫入一個數據對相應位清0.僅將需要位清除,其余保持原值不變。 清除INTPND寄存器時應該注意:INTPND寄存器通過寫1清0。如果INTPND寄存器設置為1的比特位通過寫0清0,那么
[單片機]
s3c2440裸機-I2c編程-2-i2c控制器
1.I2c主控與從設備關系 對于寫操作,主控作為transmitter,從設備作為receiver 對于讀操作,主控作為receiver, 從設備作為transmitter 2.I2c控制器 2.1總框圖 Pclk = 50Mhz, 經過prescaler分頻,可以得到SCL。 IICSTAT:發出S(start)信號或者P(stop)信號。 Data Bus可以把數據寫入IICDS寄存器,然后會自動產生SCL,并且會將8位數據從SDA同步給slave dev, 在數據發送出去后,在第9個SCL時鐘,會受到slave dev的ack應答,可以通過查詢IICSTAT來判斷是否有ACK回應。 當slave dev回應ACK
[單片機]
s3C2440 Memory controller
硬件設計篇 首先是BANK0 的選擇, 如果是把BANK0 選擇連接NAND Flash,需要引腳OM1 和OM0的狀態 如果是都設置成0 是NAND FLASH 模式。。 NANDFlash 模式會自動的 NANDFLASH前4MB的內容拷貝到內存中來。 其次是S3C2440 的SDRAM的引腳如下: nSRAS: SDRAM行選擇引腳  nSCAS: SDRAM 列選擇引腳 nSCS: 片選信號 DQM : 掩碼,就是為了屏蔽不需要的位, 比如一個連接了32位的芯片需要寫入一個8bit的數據,那么其他的的位就會被掩碼屏蔽 SCLK:時鐘 SCKE: 時鐘使能 nBE :DATA mask。 因為每次SDRAM只能從內核
[單片機]
S3C2440開發板學習——openjtag下載BootLoader
首先,將oflash.exe和FTD2XX.dll放置于C:WindowsSystem32文件夾中,使Dos可以執行oflash命令; 其次,在DOS命令中進入BootLoader所在的文件夾,使用cd+絕對路徑,選擇uboot.bin的文件路徑; 然后,執行oflash命令,選擇eeprom、IC、address、下載程序(u-boot.bin)等參數; 最后,啟動程序程序通過openjtag口,將程序下載到開發板。 注意問題: 1、nand/nor flash的異同。相似點:nor flash 和nand flash均屬于eeprom,可以進行反復的程序擦拭和讀寫。區別點
[單片機]
S3C2440裸機實驗(1)-----clock
時鐘對于電子設備來說都是非常重要的,它是傳輸數據的一個基準,如果沒有這個基準的話將導致系統的混亂。 S3C2440的頻率有兩種輸入方式:外部時鐘源和內部晶振(如下圖) 輸入的頻率一般是比較低的比如2440的就只有12M,而2440的主頻可以達到460M,這就需要對輸入頻率通過PLL鎖相環進行倍頻 先來看下這個CLOCK的結果圖: 從上面的結果圖可以看出輸入頻率OSC首先經過MPLL倍頻 整個系統時鐘主要有幾個組成:FCLK,HCLK,PCLK FCLK:是個cpu提供時鐘 HCLK:用于AHB總線,中斷控制器,LCD控制器,內存控制器提供時鐘 PCLK:用于APB總線,通常給IIC,WDT,IIS,
[單片機]
關于S3C2440 u-boot支持nand hw ecc
https://blog.csdn.net/hurry_liu/article/details/8741565 ---這篇文章(文章1)講的很詳細。 http://www.xuebuyuan.com/zh-hant/916448.html ----這篇文章(文章2)也講的差不多。 文章1和文章2的描述是一樣的,只是代碼內容不一樣。 一開始我是看到了文章1,按照那個代碼來修改自己的代碼,結果還是不成功,總是在讀取的時候出現如下錯誤。 S3C NAND: ECC uncorrectable errordetected. Not correctable. NAND read from offset 0 failed -74 后來看
[單片機]
關于<font color='red'>S3C2440</font> u-boot支持nand hw ecc
S3C2440 啟動流程及匯編代碼知識
1、框架 2、啟動過程 大多數ARM芯片從0地址啟動 NOR啟動:NOR Flash 基地址為0,片內 RAM 地址為 0X4000,0000 CPU 讀出Nor上第一個指令(前四個字節),執行 CPU繼續讀出其他指令執行 Nand啟動:片內 4K RAM 基地址為0,Nor Flash 不可訪問 2440硬件把Nand前4K內容復制到片內 RAM 然后 CPU 從0地址取出第一條指令 例如:(匯編代碼) ldr sp, =4096 /* nand啟動 */ ldr sp, =0x40000000+4096 /* nor啟動 */ 3、幾條常用匯編指令 LDR: 讀內存 LDR R0, 讀取地
[單片機]
<font color='red'>S3C2440</font> 啟動流程及匯編代碼知識
S3C2440定時器匯編程序
S3C2440定時器源程序如下: ;************口地址及數據符號化定義區********************** pWTCON EQU 0x53000000 pLOCKTIME EQU 0x4c000000 pCLKDIVN EQU 0x4c000014 pUPLLCON EQU 0x4c000008 pMPLLCON EQU 0x4c000004 pBWSCON EQU 0x48000000 pSRCPND EQU 0x4a000000 ;中斷源懸掛寄存器地址 pINTPND EQU
[單片機]
小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 甘谷县| 温泉县| 勐海县| 西林县| 山西省| 鄂托克旗| 淮安市| 灌云县| 沾益县| 东丰县| 金川县| 民权县| 北碚区| 西吉县| 咸阳市| 瓦房店市| 盐边县| 三都| 梨树县| 乌拉特后旗| 田阳县| 卓尼县| 凌源市| 绩溪县| 绥滨县| 黎川县| 佳木斯市| 五河县| 甘谷县| 盐源县| 青川县| 丹巴县| 普格县| 英山县| 九龙县| 江孜县| 正宁县| 乐业县| 德惠市| 红原县| 大邑县|