<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > S3C2440 實(shí)時(shí)時(shí)鐘RTC

          S3C2440 實(shí)時(shí)時(shí)鐘RTC

          作者: 時(shí)間:2016-11-21 來源:網(wǎng)絡(luò) 收藏
          實(shí)時(shí)時(shí)鐘RTC)單元可以在當(dāng)系統(tǒng)電源關(guān)閉后通過備用電池工作。RTC可以通過使用STRB/LDRB ARM操

          作發(fā)送8位二-十進(jìn)制交換碼(BCD)值數(shù)據(jù)給CPU。這些數(shù)據(jù)包括年、月、日、星期、時(shí)、分和秒的時(shí)間信息。
          RTC 單元工作在外部32.768kHz晶振并且可以執(zhí)行鬧鐘功能。

          本文引用地址:http://www.ex-cimer.com/article/201611/319202.htm

          RTC操作比較簡(jiǎn)單,寄存器的設(shè)置在數(shù)據(jù)手冊(cè)上寫的很詳細(xì),就不寫了,貼一個(gè)RTC代碼,該程序參考了天翔的RTC程序代碼,主要是他寫的比較好,都模塊化了,我修改了他的代碼,有鬧鐘(利用蜂鳴器),在TQ2440 板子上能運(yùn)行,程序功能:串口每秒顯示一次時(shí)間并且LED1閃一次,在鬧鐘設(shè)置中,秒為20時(shí),顯示鬧鐘時(shí)間并蜂鳴器發(fā)聲幾秒鐘。

          1. #include"2440addr.h"
          2. #include"Option.h"
          3. #include"2440lib.h"
          4. #include"def.h"
          5. #defineLED1_ON(rGPBDAT&=~(1<<5))
          6. #defineLED1_OFF(rGPBDAT|=(1<<5))
          7. void__irqRTC_tickHandler(void);
          8. void__irqRTC_alarmHandler(void);
          9. U8alarmflag=0;
          10. typedefstructDate//定義一個(gè)表示日期時(shí)間的結(jié)構(gòu)體
          11. {U16year;
          12. U8month;
          13. U8day;
          14. U8week_day;
          15. U8hour;
          16. U8minute;
          17. U8second;
          18. }date;
          19. dateC_date;
          20. char*week_num[7]={"SUN","MON","TUES","WED","THURS","FRI","SAT"};//定義一個(gè)指針數(shù)組
          21. voidBeep_Freq_Set(U32freq)
          22. {
          23. rGPBCON&=~3;
          24. rGPBCON|=2;//設(shè)置GPB0為OUT0
          25. rGPBUP=0x0;//使能上拉
          26. rTCFG0&=~0xff;
          27. rTCFG0|=15;//預(yù)分頻值為15
          28. rTCFG1&=~0x0f;
          29. rTCFG1|=0x02;//分頻值為8
          30. rTCNTB0=(PCLK>>7)/freq;//設(shè)定定時(shí)器0計(jì)數(shù)緩沖器的值
          31. rTCMPB0=rTCNTB0>>1;//定時(shí)器0比較緩沖器的值,PWM輸出占空比50%
          32. rTCON&=~0x1f;
          33. rTCON|=0xb;//自動(dòng)重載,關(guān)閉變相,手動(dòng)更新,開啟定時(shí)器0
          34. rTCON&=~2;//清除手動(dòng)更新位
          35. }
          36. voidBeep_Stop(void)
          37. {
          38. rGPBCON&=~3;//setGPB0asoutput
          39. rGPBCON|=1;
          40. rGPBDAT&=~1;//輸出低電平
          41. }
          42. voiddelay(intx)
          43. {
          44. inti,j;
          45. for(i=0;i
          46. for(j=0;j<1000000;j++);
          47. }
          48. /********************************
          49. *
          50. *設(shè)置實(shí)時(shí)時(shí)鐘日期、時(shí)間
          51. *
          52. *********************************/
          53. voidRTC_setdate(date*p_date)
          54. {
          55. rRTCCON=0x01;//RTC讀寫使能,BCD時(shí)鐘、計(jì)數(shù)器、無復(fù)位
          56. rBCDYEAR=p_date->year;
          57. rBCDMON=p_date->month;
          58. rBCDDATE=p_date->day;
          59. rBCDDAY=p_date->week_day;//設(shè)置日期時(shí)間
          60. rBCDHOUR=p_date->hour;
          61. rBCDMIN=p_date->minute;
          62. rBCDSEC=p_date->second;
          63. rRTCCON=0x00;//RTC讀寫禁止,BCD時(shí)鐘、計(jì)數(shù)器、無復(fù)位
          64. }
          65. /********************************
          66. *
          67. *讀取實(shí)時(shí)時(shí)鐘日期、時(shí)間
          68. *
          69. *********************************/
          70. voidRTC_getdate(date*p_date)
          71. {
          72. rRTCCON=0x01;//RTC讀寫使能,BCD時(shí)鐘、計(jì)數(shù)器、無復(fù)位
          73. p_date->year=rBCDYEAR+0x2000;
          74. p_date->month=rBCDMON;
          75. p_date->day=rBCDDATE;
          76. p_date->week_day=rBCDDAY;//讀取日期時(shí)間
          77. p_date->hour=rBCDHOUR;
          78. p_date->minute=rBCDMIN;
          79. p_date->second=rBCDSEC;
          80. rRTCCON=0x00;//RTC讀寫禁止,BCD時(shí)鐘、計(jì)數(shù)器、無復(fù)位
          81. }
          82. /********************************
          83. *
          84. *TICK中斷初始化
          85. *
          86. *********************************/
          87. voidRTC_tickIRQ_Init(U8tick)
          88. {
          89. ClearPending(BIT_TICK);//清除標(biāo)志位
          90. EnableIrq(BIT_TICK);//使能中斷源
          91. pISR_TICK=(unsigned)RTC_tickHandler;//中斷函數(shù)入口地址
          92. rRTCCON=0x00;
          93. rTICNT=(tick&0x7f)|0x80;//使能中斷
          94. }
          95. /********************************
          96. *
          97. *設(shè)置鬧鐘日期、時(shí)間及其鬧鐘喚醒模式
          98. *
          99. *********************************/
          100. voidRTC_alarm_setdate(date*p_date,U8mode)
          101. {
          102. rRTCCON=0x01;
          103. rALMYEAR=p_date->year;
          104. rALMMON=p_date->month;
          105. rALMDATE=p_date->day;
          106. rALMHOUR=p_date->hour;
          107. rALMMIN=p_date->minute;
          108. rALMSEC=p_date->second;
          109. rRTCALM=mode;//RTC鬧鐘控制寄存器
          110. rRTCCON=0x00;
          111. ClearPending(BIT_RTC);//清除標(biāo)志位
          112. EnableIrq(BIT_RTC);//openRTCalarmINTERRUPT
          113. pISR_RTC=(unsigned)RTC_alarmHandler;
          114. }
          115. voidMain(void)
          116. {
          117. SelectFclk(2);//設(shè)置系統(tǒng)時(shí)鐘400M
          118. ChangeClockDivider(2,1);//設(shè)置分頻1:4:8
          119. CalcBusClk();//計(jì)算總線頻率
          120. rGPHCON&=~((3<<4)|(3<<6));
          121. rGPHCON|=(2<<4)|(2<<6);//GPH2--TXD[0];GPH3--RXD[0]
          122. rGPHUP=0x00;//使能上拉功能
          123. Uart_Init(0,115200);
          124. Uart_Select(0);
          125. rGPBCON&=~((3<<10)|(3<<12)|(3<<14)|(3<<16));//對(duì)GPBCON[10:17]清零
          126. rGPBCON|=((1<<10)|(1<<12)|(1<<14)|(1<<16));//設(shè)置GPB5~8為輸出
          127. rGPBUP&=~((1<<5)|(1<<6)|(1<<7)|(1<<8));//設(shè)置GPB5~8的上拉功能
          128. rGPBDAT|=(1<<5)|(1<<6)|(1<<7)|(1<<8);//關(guān)閉LED
          129. Beep_Stop();//蜂鳴器停止發(fā)聲,蜂鳴器用作鬧鐘聲
          130. C_date.year=0x12;
          131. C_date.month=0x05;
          132. C_date.day=0x09;
          133. C_date.week_day=0x03;//設(shè)置當(dāng)前日期時(shí)間
          134. C_date.hour=0x12;
          135. C_date.minute=0x00;
          136. C_date.second=0x10;
          137. RTC_setdate(&C_date);
          138. C_date.second=0x20;
          139. RTC_alarm_setdate(&C_date,0x41);//0x41表示使能RTC鬧鐘,以及使能秒時(shí)鐘鬧鐘
          140. RTC_tickIRQ_Init(127);//設(shè)置1秒鐘tick一次
          141. Uart_Printf("n---實(shí)時(shí)時(shí)鐘測(cè)試程序---n");
          142. while(Uart_GetKey()!=ESC_KEY)
          143. {
          144. LED1_OFF;
          145. RTC_getdate(&C_date);
          146. if(alarmflag)
          147. {
          148. alarmflag=0;
          149. Uart_Printf("nRTCALARM%02x:%02x:%02xn",C_date.hour,C_date.minute,C_date.second);
          150. Beep_Freq_Set(1000);
          151. delay(5);
          152. Beep_Stop();
          153. }
          154. }
          155. }
          156. /********************************
          157. *
          158. *TICK中斷
          159. *
          160. *********************************/
          161. void__irqRTC_tickHandler(void)
          162. {
          163. ClearPending(BIT_TICK);
          164. LED1_ON;//刷新LED1
          165. Delay(500);
          166. RTC_getdate(&C_date);
          167. Uart_Printf("RTCTIME:%04x-%02x-%02x%s%02x:%02x:%02xn",C_date.year,C_date.month,C_date.day,week_num[C_date.week_day],C_date.hour,C_date.minute,C_date.second);
          168. }
          169. /********************************
          170. *
          171. *TICK中斷
          172. *
          173. *********************************/
          174. void__irqRTC_alarmHandler(void)
          175. {
          176. alarmflag=1;
          177. ClearPending(BIT_RTC);
          178. }




          評(píng)論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();