📄 time_8c-source.html
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"><title>Sample MSP430-4619LCD Project: time.c Source File</title><link href="doxygen.css" rel="stylesheet" type="text/css"><link href="tabs.css" rel="stylesheet" type="text/css"></head><body><!-- Generated by Doxygen 1.5.1 --><div class="tabs"> <ul> <li><a href="main.html"><span>Main Page</span></a></li> <li><a href="annotated.html"><span>Data Structures</span></a></li> <li id="current"><a href="files.html"><span>Files</span></a></li> </ul></div><div class="tabs"> <ul> <li><a href="files.html"><span>File List</span></a></li> <li><a href="globals.html"><span>Globals</span></a></li> </ul></div><h1>time.c</h1><a href="time_8c.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span><a name="l00002"></a>00002 <span class="comment"> * File: time.c</span><a name="l00003"></a>00003 <span class="comment"> * Purpose: Real time clock function and interrupt handler</span><a name="l00004"></a>00004 <span class="comment"> * Author: Peter Ivanov, Olimex Ltd.</span><a name="l00005"></a>00005 <span class="comment"> * Modified by:</span><a name="l00006"></a>00006 <span class="comment"> * Created: 2007-05-19 11:29:32</span><a name="l00007"></a>00007 <span class="comment"> * Last modify: 2007-10-03 21:20:56 ivanovp {Time-stamp}</span><a name="l00008"></a>00008 <span class="comment"> * Copyright: (C) Peter Ivanov, Olimex Ltd., 2007</span><a name="l00009"></a>00009 <span class="comment"> * Licence: GPL</span><a name="l00010"></a>00010 <span class="comment"> */</span><a name="l00016"></a>00016 <span class="preprocessor">#include <msp430xG461x.h></span><a name="l00017"></a>00017 <span class="preprocessor">#include <signal.h></span><a name="l00018"></a>00018 <span class="preprocessor">#include "<a class="code" href="time_8h.html">time.h</a>"</span><a name="l00019"></a>00019 <span class="preprocessor">#include "diskio.h"</span><a name="l00020"></a>00020 <a name="l00021"></a><a class="code" href="time_8h.html#b69c774dad0814fa066f807e4aba7fb7">00021</a> <span class="keyword">volatile</span> uint32_t <a class="code" href="time_8c.html#b69c774dad0814fa066f807e4aba7fb7">jiffies</a> = 0; <span class="comment">// counts milliseconds</span><a name="l00022"></a>00022 <a name="l00028"></a><a class="code" href="time_8c.html#83823ddc481026aea712ce81c4621b4c">00028</a> <span class="keywordtype">void</span> <a class="code" href="time_8c.html#83823ddc481026aea712ce81c4621b4c">RTC_init</a> (<span class="keywordtype">void</span>) <a name="l00029"></a>00029 {<a name="l00030"></a>00030 <span class="comment">// Real-Time Clock Control Register -> ACLK, Counter Mode, 32bit overflow, enable interupt</span><a name="l00031"></a>00031 <span class="comment">//RTCCTL = RTCTEV0 + RTCIE;</span><a name="l00032"></a>00032 <a name="l00033"></a>00033 <span class="comment">// Enable Timer Interupt (RTC in counter mode is like Timer)</span><a name="l00034"></a>00034 <span class="comment">//IFG2 = BTIE;</span><a name="l00035"></a>00035 <a name="l00036"></a>00036 <span class="comment">// 32768</span><a name="l00037"></a>00037 <span class="comment">//RTCNT1 = 0x00;</span><a name="l00038"></a>00038 <span class="comment">//RTCNT2 = 0x80;</span><a name="l00039"></a>00039 <a name="l00040"></a>00040 <span class="comment">// Real-Time Clock Control Register -> ACLK, Calendar Mode, enable interupt</span><a name="l00041"></a>00041 RTCCTL = RTCMODE_3 | RTCTEV_0 | RTCIE | RTCHOLD;<a name="l00042"></a>00042 <a name="l00043"></a>00043 RTCYEARH = <a class="code" href="time_8h.html#af0df2b37a0e27c6f424ab4fcc5cd1c2">TIME_DEFAULT_YEAR</a> >> 8;<a name="l00044"></a>00044 RTCYEARL = <a class="code" href="time_8h.html#af0df2b37a0e27c6f424ab4fcc5cd1c2">TIME_DEFAULT_YEAR</a> & 0xFF;<a name="l00045"></a>00045 RTCMON = <a class="code" href="time_8h.html#9e9f22a3f109f53f87eca0f55816fcf2">TIME_DEFAULT_MONTH</a>;<a name="l00046"></a>00046 RTCDAY = <a class="code" href="time_8h.html#2edf652e64763d5cf7349bee485adb0b">TIME_DEFAULT_DAY</a>;<a name="l00047"></a>00047 RTCHOUR = <a class="code" href="time_8h.html#e3c65bf03d206ac79ddece5ac9ca7a8d">TIME_DEFAULT_HOUR</a>;<a name="l00048"></a>00048 RTCMIN = <a class="code" href="time_8h.html#da6d3e004b838cbcf084ba18f7bb0a4b">TIME_DEFAULT_MIN</a>;<a name="l00049"></a>00049 RTCSEC = <a class="code" href="time_8h.html#6156d1462562f13a0bba6f859477369a">TIME_DEFAULT_SEC</a>;<a name="l00050"></a>00050 <a name="l00051"></a>00051 RTCCTL &= ~RTCHOLD;<a name="l00052"></a>00052 }<a name="l00053"></a>00053 <a name="l00054"></a><a class="code" href="time_8c.html#402f85e5a97ace948beb5af9925d5b76">00054</a> <span class="preprocessor">#define DISK_TIMERPROC_CNT 10 </span><a name="l00055"></a>00055 <span class="preprocessor"></span><a name="l00056"></a>00056 <span class="preprocessor"></span><a name="l00061"></a><a class="code" href="time_8c.html#6ab3646c98bca5b53a9718c05f9a4818">00061</a> <a class="code" href="periphery_8c.html#aef39e368becfc8ede2d7e992660ded8">interrupt</a> (WDT_VECTOR) wakeup watchdog_isr (<span class="keywordtype">void</span>)<a name="l00062"></a>00062 {<a name="l00063"></a>00063 <span class="keyword">static</span> uint8_t cnt = <a class="code" href="time_8c.html#402f85e5a97ace948beb5af9925d5b76">DISK_TIMERPROC_CNT</a>;<a name="l00064"></a>00064 <a name="l00065"></a>00065 <a class="code" href="time_8c.html#b69c774dad0814fa066f807e4aba7fb7">jiffies</a>++;<a name="l00066"></a>00066 <a name="l00067"></a>00067 cnt--;<a name="l00068"></a>00068 <span class="keywordflow">if</span> (cnt == 0)<a name="l00069"></a>00069 {<a name="l00070"></a>00070 cnt = <a class="code" href="time_8c.html#402f85e5a97ace948beb5af9925d5b76">DISK_TIMERPROC_CNT</a>;<a name="l00071"></a>00071 <span class="comment">// call every 10 milliseconds @ 8 MHz</span><a name="l00072"></a>00072 <a class="code" href="mmc_8c.html#045f8898a243c16aca4e64e069c49c03">disk_timerproc</a> ();<a name="l00073"></a>00073 }<a name="l00074"></a>00074 <span class="comment">//LPM3_EXIT;</span><a name="l00075"></a>00075 }<a name="l00076"></a>00076 <a name="l00077"></a><a class="code" href="time_8h.html#c4b4fac5a1f7b28dfa224bcf70b86b50">00077</a> <span class="keywordtype">void</span> <a class="code" href="time_8c.html#c4b4fac5a1f7b28dfa224bcf70b86b50">TIME_init</a> ()<a name="l00078"></a>00078 {<a name="l00079"></a>00079 <a class="code" href="time_8c.html#83823ddc481026aea712ce81c4621b4c">RTC_init</a> ();<a name="l00080"></a>00080 <span class="comment">//FLL_CTL0 |= XCAP18PF; // Set load cap for 32k xtal</span><a name="l00081"></a>00081 <span class="comment">// WDT interrupt in every 0.5 ms @ 1 MHz -> 0.625 us @ 8 MHz</span><a name="l00082"></a>00082 <span class="comment">//WDTCTL = WDTPW | WDTTMSEL | WDTCNTCL | WDTIS1;</span><a name="l00083"></a>00083 <span class="comment">// WDT interrupt in every 8 ms @ 1 MHz -> 1 ms @ 8 MHz</span><a name="l00084"></a>00084 WDTCTL = WDTPW | WDTTMSEL | WDTCNTCL | WDTIS0;<a name="l00085"></a>00085 IE1 |= WDTIE;<a name="l00086"></a>00086 <span class="comment">// Interrupt enable</span><a name="l00087"></a>00087 _EINT ();<a name="l00088"></a>00088 }<a name="l00089"></a>00089 <a name="l00090"></a><a class="code" href="time_8h.html#df0c0774065e86c0b1482b47098a3ac2">00090</a> <span class="keywordtype">void</span> <a class="code" href="time_8c.html#df0c0774065e86c0b1482b47098a3ac2">TIME_getDate</a> (<a class="code" href="structTIME__date__t.html">TIME_date_t</a> *<span class="keyword">const</span> date)<a name="l00091"></a>00091 {<a name="l00092"></a>00092 <span class="comment">//RTCCTL |= RTCHOLD;</span><a name="l00093"></a>00093 date-><a class="code" href="structTIME__date__t.html#6ce98b2a6867fd501719b5fddd108c0a">year</a> = RTCYEARH << 8 | RTCYEARL;<a name="l00094"></a>00094 date-><a class="code" href="structTIME__date__t.html#9493ac8f4f3ae352052773170ad1cf3a">month</a> = RTCMON;<a name="l00095"></a>00095 date-><a class="code" href="structTIME__date__t.html#204037d196305563b2a461d403370f76">day</a> = RTCDAY;<a name="l00096"></a>00096 date-><a class="code" href="structTIME__date__t.html#3d0e06fbc5c43b10e359762a787d685a">hour</a> = RTCHOUR;<a name="l00097"></a>00097 date-><a class="code" href="structTIME__date__t.html#8d6bf7819ad944b1af6d7a73e54e3a7f">min</a> = RTCMIN;<a name="l00098"></a>00098 date-><a class="code" href="structTIME__date__t.html#c7f3987d585bd0bbc271a1490958d8dd">sec</a> = RTCSEC;<a name="l00099"></a>00099 <span class="comment">//RTCCTL &= ~RTCHOLD;</span><a name="l00100"></a>00100 }<a name="l00101"></a>00101 <a name="l00102"></a><a class="code" href="time_8h.html#3694d20c5b1a60d7b75cf58c221705bf">00102</a> <span class="keywordtype">void</span> <a class="code" href="time_8c.html#3694d20c5b1a60d7b75cf58c221705bf">TIME_setDate</a> (<span class="keyword">const</span> <a class="code" href="structTIME__date__t.html">TIME_date_t</a> *date)<a name="l00103"></a>00103 {<a name="l00104"></a>00104 RTCCTL |= RTCHOLD;<a name="l00105"></a>00105 RTCYEARH = date-><a class="code" href="structTIME__date__t.html#6ce98b2a6867fd501719b5fddd108c0a">year</a> >> 8;<a name="l00106"></a>00106 RTCYEARL = date-><a class="code" href="structTIME__date__t.html#6ce98b2a6867fd501719b5fddd108c0a">year</a> & 0xFF;<a name="l00107"></a>00107 RTCMON = date-><a class="code" href="structTIME__date__t.html#9493ac8f4f3ae352052773170ad1cf3a">month</a>;<a name="l00108"></a>00108 RTCDAY = date-><a class="code" href="structTIME__date__t.html#204037d196305563b2a461d403370f76">day</a>;<a name="l00109"></a>00109 RTCHOUR = date-><a class="code" href="structTIME__date__t.html#3d0e06fbc5c43b10e359762a787d685a">hour</a>;<a name="l00110"></a>00110 RTCMIN = date-><a class="code" href="structTIME__date__t.html#8d6bf7819ad944b1af6d7a73e54e3a7f">min</a>;<a name="l00111"></a>00111 RTCSEC = date-><a class="code" href="structTIME__date__t.html#c7f3987d585bd0bbc271a1490958d8dd">sec</a>;<a name="l00112"></a>00112 RTCCTL &= ~RTCHOLD;<a name="l00113"></a>00113 }<a name="l00114"></a>00114 <a name="l00115"></a><a class="code" href="time_8h.html#9af0f4a5c28d65ca84fb763fd91e8731">00115</a> <span class="keywordtype">void</span> <a class="code" href="time_8c.html#9af0f4a5c28d65ca84fb763fd91e8731">mdelay</a> (uint32_t milliseconds)<a name="l00116"></a>00116 {<a name="l00117"></a>00117 uint32_t j = <a class="code" href="time_8c.html#b69c774dad0814fa066f807e4aba7fb7">jiffies</a>;<a name="l00118"></a>00118 <span class="keywordflow">while</span> (<a class="code" href="time_8c.html#b69c774dad0814fa066f807e4aba7fb7">jiffies</a> - j < milliseconds);<a name="l00119"></a>00119 }<a name="l00120"></a>00120 <a name="l00121"></a><a class="code" href="time_8h.html#90a025f7305405a19406dd352b8a5b0d">00121</a> <span class="keywordtype">void</span> <a class="code" href="time_8c.html#90a025f7305405a19406dd352b8a5b0d">delay</a> (uint32_t seconds)<a name="l00122"></a>00122 {<a name="l00123"></a>00123 uint32_t j = <a class="code" href="time_8c.html#b69c774dad0814fa066f807e4aba7fb7">jiffies</a>;<a name="l00124"></a>00124 uint32_t ms = seconds * 1000;<a name="l00125"></a>00125 <span class="keywordflow">while</span> (<a class="code" href="time_8c.html#b69c774dad0814fa066f807e4aba7fb7">jiffies</a> - j < ms);<a name="l00126"></a>00126 }<a name="l00127"></a>00127 </pre></div><hr size="1"><address style="align: right;"><small>Generated on Sun Oct 21 19:25:35 2007 for Sample MSP430-4619LCD Project by <a href="http://www.doxygen.org/index.html"><img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.1 </small></address></body></html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -