Use watchdog reset for exiting scratch rom
This commit is contained in:
@@ -10,6 +10,9 @@ volatile uint8_t __xdata __at(0x103D) ECINDAR2;
|
|||||||
volatile uint8_t __xdata __at(0x103E) ECINDAR3;
|
volatile uint8_t __xdata __at(0x103E) ECINDAR3;
|
||||||
volatile uint8_t __xdata __at(0x103F) ECINDDR;
|
volatile uint8_t __xdata __at(0x103F) ECINDDR;
|
||||||
|
|
||||||
|
volatile uint8_t __xdata __at(0x1F01) ETWCFG;
|
||||||
|
volatile uint8_t __xdata __at(0x1F07) EWDKEYR;
|
||||||
|
|
||||||
uint8_t acpi_read(uint8_t addr) {
|
uint8_t acpi_read(uint8_t addr) {
|
||||||
uint8_t data = 0;
|
uint8_t data = 0;
|
||||||
|
|
||||||
@@ -87,6 +90,9 @@ void pmc_event(struct Pmc * pmc) {
|
|||||||
__asm__("nop");
|
__asm__("nop");
|
||||||
__asm__("mov 0xf7, #1");
|
__asm__("mov 0xf7, #1");
|
||||||
__asm__("nop");
|
__asm__("nop");
|
||||||
|
// Attempt to trigger watchdog reset
|
||||||
|
ETWCFG |= (1 << 5);
|
||||||
|
EWDKEYR = 0;
|
||||||
// Exit scratch ROM by going through trampoline
|
// Exit scratch ROM by going through trampoline
|
||||||
__asm__("ljmp 0x1000");
|
__asm__("ljmp 0x1000");
|
||||||
break;
|
break;
|
||||||
|
@@ -10,6 +10,9 @@ volatile uint8_t __xdata __at(0x103D) ECINDAR2;
|
|||||||
volatile uint8_t __xdata __at(0x103E) ECINDAR3;
|
volatile uint8_t __xdata __at(0x103E) ECINDAR3;
|
||||||
volatile uint8_t __xdata __at(0x103F) ECINDDR;
|
volatile uint8_t __xdata __at(0x103F) ECINDDR;
|
||||||
|
|
||||||
|
volatile uint8_t __xdata __at(0x1F01) ETWCFG;
|
||||||
|
volatile uint8_t __xdata __at(0x1F07) EWDKEYR;
|
||||||
|
|
||||||
uint8_t acpi_read(uint8_t addr) {
|
uint8_t acpi_read(uint8_t addr) {
|
||||||
uint8_t data = 0;
|
uint8_t data = 0;
|
||||||
|
|
||||||
@@ -87,6 +90,9 @@ void pmc_event(struct Pmc * pmc) {
|
|||||||
__asm__("nop");
|
__asm__("nop");
|
||||||
__asm__("mov 0xf7, #1");
|
__asm__("mov 0xf7, #1");
|
||||||
__asm__("nop");
|
__asm__("nop");
|
||||||
|
// Attempt to trigger watchdog reset
|
||||||
|
ETWCFG |= (1 << 5);
|
||||||
|
EWDKEYR = 0;
|
||||||
// Exit scratch ROM by going through trampoline
|
// Exit scratch ROM by going through trampoline
|
||||||
__asm__("ljmp 0x1000");
|
__asm__("ljmp 0x1000");
|
||||||
break;
|
break;
|
||||||
|
@@ -10,6 +10,9 @@ volatile uint8_t __xdata __at(0x103D) ECINDAR2;
|
|||||||
volatile uint8_t __xdata __at(0x103E) ECINDAR3;
|
volatile uint8_t __xdata __at(0x103E) ECINDAR3;
|
||||||
volatile uint8_t __xdata __at(0x103F) ECINDDR;
|
volatile uint8_t __xdata __at(0x103F) ECINDDR;
|
||||||
|
|
||||||
|
volatile uint8_t __xdata __at(0x1F01) ETWCFG;
|
||||||
|
volatile uint8_t __xdata __at(0x1F07) EWDKEYR;
|
||||||
|
|
||||||
uint8_t acpi_read(uint8_t addr) {
|
uint8_t acpi_read(uint8_t addr) {
|
||||||
uint8_t data = 0;
|
uint8_t data = 0;
|
||||||
|
|
||||||
@@ -87,6 +90,9 @@ void pmc_event(struct Pmc * pmc) {
|
|||||||
__asm__("nop");
|
__asm__("nop");
|
||||||
__asm__("mov 0xf7, #1");
|
__asm__("mov 0xf7, #1");
|
||||||
__asm__("nop");
|
__asm__("nop");
|
||||||
|
// Attempt to trigger watchdog reset
|
||||||
|
ETWCFG |= (1 << 5);
|
||||||
|
EWDKEYR = 0;
|
||||||
// Exit scratch ROM by going through trampoline
|
// Exit scratch ROM by going through trampoline
|
||||||
__asm__("ljmp 0x1000");
|
__asm__("ljmp 0x1000");
|
||||||
break;
|
break;
|
||||||
|
Reference in New Issue
Block a user