OSDN Git Service

V208 Modified ACCEPT COLD WARM ?ABORT, S".
[fast-forth/master.git] / MSP430-FORTH / RTC.f
1
2 ; --------------------
3 ; RTC.f
4 ; --------------------
5 \
6 \ ==============================================================================
7 \ routines RTC for MSP430fr5xxx and MSP430FR6xxx families only
8 \ your target must have a LF_XTAL 32768Hz
9 \ if no present, add a LF_XTAL line for your target in ThingsInFirst.inc.
10 \ ==============================================================================
11 \
12 \ to see kernel options, download FastForthSpecs.f
13 \ FastForth kernel options: MSP430ASSEMBLER, CONDCOMP
14 \
15 \ TARGET SELECTION
16 \ MSP_EXP430FR5739  MSP_EXP430FR5969    MSP_EXP430FR5994    MSP_EXP430FR6989
17 \ MSP_EXP430FR4133  CHIPSTICK_FR2433    MSP_EXP430FR2433    MSP_EXP430FR2355
18 \
19 \ REGISTERS USAGE
20 \ R4 to R7 must be saved before use and restored after
21 \ scratch registers Y to S are free for use
22 \ under interrupt, IP is free for use
23 \
24 \ PUSHM order : PSP,TOS, IP,  S,  T,  W,  X,  Y, rEXIT,rDOVAR,rDOCON, rDODOES, R3, SR,RSP, PC
25 \ PUSHM order : R15,R14,R13,R12,R11,R10, R9, R8,  R7  ,  R6  ,  R5  ,   R4   , R3, R2, R1, R0
26 \
27 \ example : PUSHM #6,IP pushes IP,S,T,W,X,Y registers to return stack
28 \
29 \ POPM  order :  PC,RSP, SR, R3, rDODOES,rDOCON,rDOVAR,rEXIT,  Y,  X,  W,  T,  S, IP,TOS,PSP
30 \ POPM  order :  R0, R1, R2, R3,   R4   ,  R5  ,  R6  ,  R7 , R8, R9,R10,R11,R12,R13,R14,R15
31 \
32 \ example : POPM #6,IP   pop Y,X,W,T,S,IP registers from return stack
33 \
34 \
35 \ FORTH conditionnals:  unary{ 0= 0< 0> }, binary{ = < > U< }
36 \
37 \ ASSEMBLER conditionnal usage with IF UNTIL WHILE  S<  S>=  U<   U>=  0=  0<>  0>=
38 \ ASSEMBLER conditionnal usage with ?JMP ?GOTO      S<  S>=  U<   U>=  0=  0<>  0<
39 \
40 \ use :
41 \ to set date, type : d m y DATE!
42 \ to view date, type DATE?
43 \ to set time, type : h m s TIME!, or h m TIME!
44 \ to view time, type TIME?
45 \
46 \ allow to write a file on a SD_Card with a valid date and a valid time
47 \
48
49 PWR_STATE
50
51 [DEFINED] {RTC} [IF] {RTC} [THEN]     \ remove application
52
53 MARKER {RTC}
54
55 [UNDEFINED] MAX [IF]
56
57 CODE MAX    \    n1 n2 -- n3       signed maximum
58     CMP @PSP,TOS    \ n2-n1
59     S<  ?GOTO FW1   \ n2<n1
60 BW1 ADD #2,PSP
61     MOV @IP+,PC
62 ENDCODE
63
64 CODE MIN    \    n1 n2 -- n3       signed minimum
65     CMP @PSP,TOS     \ n2-n1
66     S<  ?GOTO BW1    \ n2<n1
67 FW1 MOV @PSP+,TOS
68     MOV @IP+,PC
69 ENDCODE
70
71 [THEN]  \ MAX
72
73 [UNDEFINED] U.R [IF]
74 : U.R                       \ u n --           display u unsigned in n width (n >= 2)
75   >R  <# 0 # #S #>  
76   R> OVER - 0 MAX SPACES TYPE
77 ;
78 [THEN]  \ U.R
79
80 CODE DATE?
81     SUB     #6,PSP
82     MOV     TOS,4(PSP)
83     BEGIN
84         BIT.B #RTCRDY,&RTCCTL1  \ test RTCRDY flag
85     0<> UNTIL                   \ wait until RTCRDY high
86     MOV     &RTCYEARL,2(PSP)    \ year
87     MOV.B   &RTCMON,TOS
88     MOV     TOS,0(PSP)          \ month
89     MOV.B   &RTCDAY,TOS         \ day
90 COLON
91     2 U.R $2F EMIT
92     2 U.R $2F EMIT . 
93 ;
94
95 : DATE!
96 DEPTH 2 > IF
97     HI2LO
98     MOV     TOS,&RTCYEARL   \ year
99     MOV.B   @PSP,&RTCMON    \ month     \ @PSP+ don't work because byte format !
100     MOV.B   2(PSP),&RTCDAY  \ day       \ @PSP+ don't work because byte format !
101     ADD     #4,PSP
102     MOV     @PSP+,TOS       \
103     LO2HI
104 THEN
105     ." we are on " DATE? 
106 ;
107
108 CODE TIME?
109     SUB     #6,PSP
110     MOV     TOS,4(PSP)      \ save TOS
111     BEGIN
112         BIT.B #RTCRDY,&RTCCTL1 \
113     0<> UNTIL               \ wait until RTCRDY high
114     MOV.B   &RTCSEC,TOS
115     MOV     TOS,2(PSP)      \ seconds
116     MOV.B   &RTCMIN,TOS
117     MOV     TOS,0(PSP)      \ minutes
118     MOV.B   &RTCHOUR,TOS    \ hours
119 COLON
120     2 U.R $3A EMIT 
121     2 U.R $3A EMIT 2 U.R 
122 ;
123
124 : TIME!
125 DEPTH 2 > IF
126     HI2LO
127     MOV     TOS,&RTCSEC     \ seconds
128     MOV.B   @PSP,&RTCMIN    \ minutes   \ @PSP+ don't work because byte format !
129     MOV.B   2(PSP),&RTCHOUR \ hours     \ @PSP+ don't work because byte format !
130     ADD     #4,PSP
131     MOV     @PSP+,TOS       \
132     LO2HI
133 THEN
134     ." it is " TIME? 
135 ;
136
137 PWR_HERE
138
139 \ create a word to test DEFERred words
140 : [DEFERRED]    \ [DEFERRED] <name>         -- flag
141     ' @ $4030 = \ CFA of <name> = MOV @PC+,PC ? 
142 ; IMMEDIATE
143
144 CREATE ABUF 20 ALLOT
145
146 : GET_TIME
147 PWR_STATE   \ after PWR_HERE, all will be lost
148 CR CR ."    DATE (DMY): "
149 ABUF ABUF 20 
150      [DEFERRED] ACCEPT 
151      [IF] ['] ACCEPT >BODY EXECUTE   \   execute default part of ACCEPT
152      [ELSE] ACCEPT
153      [THEN]
154 EVALUATE CR 3 SPACES DATE!
155 CR CR ."    TIME (HMS): "
156 ABUF ABUF 20 
157      [DEFERRED] ACCEPT 
158      [IF] ['] ACCEPT >BODY EXECUTE   \   execute default part of ACCEPT
159      [ELSE] ACCEPT
160      [THEN]
161 EVALUATE CR 3 SPACES TIME!
162 CR
163 ;
164
165 ECHO GET_TIME