-
Notifications
You must be signed in to change notification settings - Fork 0
/
tplWDT.cpp
79 lines (70 loc) · 2.82 KB
/
tplWDT.cpp
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
/*=============================================================================
* tplWDT.cpp - source code for WDT using TPL5010
*
*******************************************************************************/
// Copyright (c) 2016, Liminal System Designs
//
// **********************************************************************************
// License
// **********************************************************************************
// This program is free software; you can redistribute it
// and/or modify it under the terms of the GNU General
// Public License as published by the Free Software
// Foundation; either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will
// be useful, but WITHOUT ANY WARRANTY; without even the
// implied warranty of MERCHANTABILITY or FITNESS FOR A
// PARTICULAR PURPOSE. See the GNU General Public
// License for more details.
//
// You should have received a copy of the GNU General
// Public License along with this program.
// If not, see <http://www.gnu.org/licenses/>.
//
// License can be viewed at
// http://www.gnu.org/licenses/gpl-3.0.txt
//
// Please maintain this license information along with authorship
// and copyright notices in any redistribution of this code
// **********************************************************************************
//======================================================================
#include <Arduino.h>
#include <tplWDT.h>
volatile bool
bWake_IRQ=false;
static uint8_t
_wakePin=0,
_donePin=0;
//==================================================================
//
//==================================================================
static void WAKE_IRQ_HANDLER(void)
{
bWake_IRQ = true;
}
//==================================================================
//
//==================================================================
void initTPL(uint8_t wakePin, uint8_t donePin)
{
_wakePin = wakePin;
_donePin = donePin;
digitalWrite(_donePin,LOW);
pinMode(_donePin, OUTPUT);
pinMode(_wakePin, INPUT);
bWake_IRQ = false;
attachInterrupt(digitalPinToInterrupt(_wakePin), WAKE_IRQ_HANDLER, RISING);
signalDone();
}
//==================================================================
//
//==================================================================
void signalDone(void)
{
bWake_IRQ = false;
digitalWrite(_donePin,HIGH);
delayMicroseconds(2); // need to guarantee 100nS minimum, this will do it for all processor clock frequencies
digitalWrite(_donePin,LOW);
}