2016-06-14 21:27:30 +03:00
|
|
|
// Main starting point for SAM3x8e boards.
|
|
|
|
//
|
2017-05-07 05:29:08 +03:00
|
|
|
// Copyright (C) 2016,2017 Kevin O'Connor <kevin@koconnor.net>
|
2016-06-14 21:27:30 +03:00
|
|
|
//
|
|
|
|
// This file may be distributed under the terms of the GNU GPLv3 license.
|
|
|
|
|
2017-03-11 07:00:17 +03:00
|
|
|
#include "command.h" // DECL_CONSTANT
|
2016-06-14 21:27:30 +03:00
|
|
|
#include "sam3x8e.h" // WDT
|
|
|
|
#include "sched.h" // sched_main
|
|
|
|
|
2017-03-11 07:00:17 +03:00
|
|
|
DECL_CONSTANT(MCU, "sam3x8e");
|
|
|
|
|
2016-06-14 21:27:30 +03:00
|
|
|
|
|
|
|
/****************************************************************
|
|
|
|
* watchdog handler
|
|
|
|
****************************************************************/
|
|
|
|
|
2017-05-26 16:14:26 +03:00
|
|
|
void
|
2016-06-14 21:27:30 +03:00
|
|
|
watchdog_reset(void)
|
|
|
|
{
|
|
|
|
WDT->WDT_CR = 0xA5000001;
|
|
|
|
}
|
|
|
|
DECL_TASK(watchdog_reset);
|
|
|
|
|
2017-05-26 16:14:26 +03:00
|
|
|
void
|
2016-06-14 21:27:30 +03:00
|
|
|
watchdog_init(void)
|
|
|
|
{
|
2017-08-08 06:47:34 +03:00
|
|
|
uint32_t timeout = 500 * 32768 / 128 / 1000; // 500ms timeout
|
2016-06-14 21:27:30 +03:00
|
|
|
WDT->WDT_MR = WDT_MR_WDRSTEN | WDT_MR_WDV(timeout) | WDT_MR_WDD(timeout);
|
|
|
|
}
|
|
|
|
DECL_INIT(watchdog_init);
|
|
|
|
|
|
|
|
|
|
|
|
/****************************************************************
|
|
|
|
* misc functions
|
|
|
|
****************************************************************/
|
|
|
|
|
2017-04-03 06:16:20 +03:00
|
|
|
void
|
|
|
|
command_reset(uint32_t *args)
|
|
|
|
{
|
|
|
|
NVIC_SystemReset();
|
|
|
|
}
|
|
|
|
DECL_COMMAND_FLAGS(command_reset, HF_IN_SHUTDOWN, "reset");
|
|
|
|
|
2016-06-14 21:27:30 +03:00
|
|
|
// Main entry point
|
|
|
|
int
|
|
|
|
main(void)
|
|
|
|
{
|
|
|
|
SystemInit();
|
|
|
|
sched_main();
|
|
|
|
return 0;
|
|
|
|
}
|