diff options
Diffstat (limited to 'demos')
-rw-r--r-- | demos/AVR-AT90CANx-GCC/chcore.c | 15 | ||||
-rw-r--r-- | demos/AVR-AT90CANx-GCC/chcore2.S | 8 |
2 files changed, 15 insertions, 8 deletions
diff --git a/demos/AVR-AT90CANx-GCC/chcore.c b/demos/AVR-AT90CANx-GCC/chcore.c index 2d0a2c0df..53fe296ac 100644 --- a/demos/AVR-AT90CANx-GCC/chcore.c +++ b/demos/AVR-AT90CANx-GCC/chcore.c @@ -19,8 +19,23 @@ #include <ch.h>
+void chSysPause(void) {
+
+ chThdSetPriority(IDLEPRIO);
+
+ asm volatile (
+ "ldi r18, 1 \n\t" // SE bit
+ "out 0x33, r18 \n" // SMCR
+ );
+ while (TRUE) {
+ asm volatile ("sleep\n\t");
+ }
+}
+
void chSysHalt(void) {
+ chSysLock();
+
while (TRUE)
;
}
diff --git a/demos/AVR-AT90CANx-GCC/chcore2.S b/demos/AVR-AT90CANx-GCC/chcore2.S index a9d39690a..d438ffb4f 100644 --- a/demos/AVR-AT90CANx-GCC/chcore2.S +++ b/demos/AVR-AT90CANx-GCC/chcore2.S @@ -19,14 +19,6 @@ #include <avr/io.h>
-.global chSysPause
-chSysPause:
- ldi r18, (1 << SE)
- out _SFR_IO_ADDR(SMCR), r18
-stay:
- sleep
- rjmp stay
-
.global chSysSwitchI
chSysSwitchI:
push r2
|