aboutsummaryrefslogtreecommitdiffstats
path: root/libmaple/iwdg.c
diff options
context:
space:
mode:
authorMarti Bolivar <mbolivar@leaflabs.com>2011-05-06 20:11:57 -0400
committerMarti Bolivar <mbolivar@leaflabs.com>2011-05-06 20:11:57 -0400
commitb0a0002b2e4b9dd795afc571748d91353df15fa6 (patch)
tree0ae9b3c024c9134192080179dcbde4550ea2e6c3 /libmaple/iwdg.c
parentf432df24764cee2f7d1590650eeac4f3a121f25e (diff)
downloadlibrambutan-b0a0002b2e4b9dd795afc571748d91353df15fa6.tar.gz
librambutan-b0a0002b2e4b9dd795afc571748d91353df15fa6.zip
Independent watchdog refactor.
Diffstat (limited to 'libmaple/iwdg.c')
-rw-r--r--libmaple/iwdg.c41
1 files changed, 22 insertions, 19 deletions
diff --git a/libmaple/iwdg.c b/libmaple/iwdg.c
index 82a0151..3d67ee8 100644
--- a/libmaple/iwdg.c
+++ b/libmaple/iwdg.c
@@ -23,34 +23,37 @@
*****************************************************************************/
/**
- * @file iwdg.c
- *
- * @brief Independent watchdog support
+ * @file iwdg.c
+ * @brief Independent watchdog (IWDG) support
*/
-#include "libmaple.h"
#include "iwdg.h"
-#define IWDG_UNLOCK 0x5555
-#define IWDG_START 0xCCCC
-#define IWDG_FEED 0xAAAA
-
/**
- * @brief Initialise and start the watchdog
+ * @brief Initialise and start the watchdog
+ *
+ * The prescaler and reload set the timeout. A prescaler of 3 divides
+ * the 40 kHz clock by 32 and gives roughly 1 ms per reload.
*
- * The prescaler and reload set the timeout. A prescaler of 3 divides
- * the 40 kHz clock by 32 and gives roughly 1 ms per reload.
+ * @param prescaler Prescaler for the 40 KHz IWDG clock.
+ * @param reload Independent watchdog counter reload value.
*/
-void iwdg_init(uint8 prescaler, uint16 reload) {
- __write(IWDG_KR, IWDG_UNLOCK);
- __write(IWDG_PR, prescaler);
- __write(IWDG_RLR, reload);
+void iwdg_init(iwdg_prescaler prescaler, uint16 reload) {
+ IWDG_BASE->KR = IWDG_KR_UNLOCK;
+ IWDG_BASE->PR = prescaler;
+ IWDG_BASE->RLR = reload;
- /* Start things off */
- __write(IWDG_KR, IWDG_START);
- __write(IWDG_KR, IWDG_FEED);
+ /* Start things off */
+ IWDG_BASE->KR = IWDG_KR_START;
+ iwdg_feed();
}
+/**
+ * @brief Reset the IWDG counter.
+ *
+ * Calling this function will cause the IWDG counter to be reset to
+ * its reload value.
+ */
void iwdg_feed(void) {
- __write(IWDG_KR, IWDG_FEED);
+ IWDG_BASE->KR = IWDG_KR_FEED;
}