forked from LairdCP/RM1xx-Applications
-
Notifications
You must be signed in to change notification settings - Fork 0
/
rtc.MCP79410.sb
150 lines (133 loc) · 5.29 KB
/
rtc.MCP79410.sb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
//******************************************************************************
// Copyright (c) 2017, Adam Pierce
// Modified by Laird
//
// Permission to use, copy, modify, and/or distribute this software for any
// purpose with or without fee is hereby granted, provided that the above
// copyright notice and this permission notice appear in all copies.
//
// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
// IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
//
// SPDX-License-Identifier:ISC
//
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// +++++ ++
// +++++ When UwTerminal downloads the app it will store it as a filename ++
// +++++ which consists of all characters up to the first . and excluding it ++
// +++++ ++
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//
// MCP79410 RTC sample application, requires the RTC I2C pins to be connected
// to the RM1xx (SIO_29 - SCL, SIO_30 - SDA) with pull-up resistors on both pins
// (~2.2K Ohm).
// Optionally connect the RTC alarm pin to SIO_4 or another pin and change the
// define below.
//
// Port of Sensorian RTC_RTCC Driver to smartBASIC
// source: https://github.com/sensorian/sensorian-firmware
//
//******************************************************************************
//******************************************************************************
// Definitions
//******************************************************************************
#define AlarmPin 4
//******************************************************************************
// Includes
//******************************************************************************
#include "MCP79410.sblib"
//******************************************************************************
// Global Variable Declarations
//******************************************************************************
DIM gpiostate
DIM rc
DIM tsec
DIM tmin
DIM thour
DIM tweekday
DIM tdate
DIM tmonth
DIM tyear
//******************************************************************************
// Initialise Global Variable
//******************************************************************************
tsec = 0
tmin = 0
thour = 0
tweekday = 0
tdate = 0
tmonth = 0
tyear = 0
//******************************************************************************
// Function and Subroutine definitions
//******************************************************************************
FUNCTION HandlerUartRx() as integer
//Exit application
ENDFUNC 0
//==============================================================================
//==============================================================================
SUB ZeroPad(Fig)
//Pads the number with a 0 if the value is below 10
if (Fig < 10) then
print "0"
endif
print Fig
ENDSUB
//==============================================================================
//==============================================================================
FUNCTION GeneralTimerTick()
//Pass in the varibles to be set with the new date time data
RTC_GetTime(tsec, tmin, thour, tweekday, tdate, tmonth, tyear)
gpiostate = gpioread(AlarmPin)
print "Alarm Pin Status: ";gpiostate; "\n"
if gpiostate == 0 then
//Clear RTC interrupt
RTC_ClearInterrupt(0)
endif
//Output time/date with padding
ZeroPad(tdate)
print "/"
ZeroPad(tmonth)
print "/";tyear;" "
ZeroPad(thour)
print ":"
ZeroPad(tmin)
print ":"
ZeroPad(tsec)
print "\n"
ENDFUNC 1
//==============================================================================
//==============================================================================
FUNCTION StartUp()
//Initialise the RTC
RTC_Initialize()
//Set the date and time
RTC_SetTime(45, 59, 23, 3, 30, 8, 17)
//Setup the alarm pin
rc = GpioSetFunc(AlarmPin, 1, 2)
//Set alarm time
RTC_SetAlarmTime(0, 1, 0, 0, 0, 0, 0)
RTC_SetAlarmMatch(0, 0)
//Configure Alarm pin polarity as HIGH
RTC_SetAlarmMFPPol(0, 0)
RTC_SetMFP_Func(1)
ENDFUNC 0
//------------------------------------------------------------------------------
// Enable synchronous event handlers
//------------------------------------------------------------------------------
ONEVENT EVUARTRX CALL HandlerUartRx
ONEVENT EVTMR0 CALL GeneralTimerTick
//******************************************************************************
// Equivalent to main() in C
//******************************************************************************
rc = StartUp()
TimerStart(0,1000,1)
//------------------------------------------------------------------------------
// Wait for a synchronous event.
//------------------------------------------------------------------------------
WAITEVENT