145 lines
2.3 KiB
ArmAsm
145 lines
2.3 KiB
ArmAsm
|
; vim: set ft=gas:
|
||
|
|
||
|
#define CPUOFF (1<<4)
|
||
|
#define GIE (1<<3)
|
||
|
|
||
|
#define IE1 0x0000
|
||
|
#define IFG1 0x0002
|
||
|
|
||
|
#define WDTCTL 0x0120
|
||
|
|
||
|
#define USICTL0 0x0078
|
||
|
#define USICTL1 0x0079
|
||
|
#define USICKCTL 0x007a
|
||
|
#define USICNT 0x007b
|
||
|
#define USISR 0x007c
|
||
|
|
||
|
#define BCSCTL3 0x0053
|
||
|
#define BCSCTL2 0x0058
|
||
|
#define BCSCTL1 0x0057
|
||
|
#define DCOCTL 0x0056
|
||
|
|
||
|
#define P2SEL2 0x0042
|
||
|
#define P2REN 0x002f
|
||
|
#define P2SEL 0x002e
|
||
|
#define P2IE 0x002d
|
||
|
#define P2IES 0x002c
|
||
|
#define P2IFG 0x002b
|
||
|
#define P2DIR 0x002a
|
||
|
#define P2OUT 0x0029
|
||
|
#define P2IN 0x0028
|
||
|
|
||
|
#define P1SEL2 0x0041
|
||
|
#define P1REN 0x0027
|
||
|
#define P1SEL 0x0026
|
||
|
#define P1IE 0x0024
|
||
|
#define P1IES 0x0024
|
||
|
#define P1IFG 0x0023
|
||
|
#define P1DIR 0x0022
|
||
|
#define P1OUT 0x0021
|
||
|
#define P1IN 0x0020
|
||
|
|
||
|
.section ".text.startup._start", "ax", %progbits
|
||
|
|
||
|
.global _start
|
||
|
_start:
|
||
|
dint
|
||
|
|
||
|
mov.b #0, &IE1
|
||
|
|
||
|
mov.w #__stack, sp
|
||
|
|
||
|
mov.b #0, &P2IE
|
||
|
mov.b #0, &P2SEL
|
||
|
mov.b #0, &P2SEL2
|
||
|
mov.b #0xff, &P2DIR
|
||
|
|
||
|
; TODO: configure wdt
|
||
|
mov.w #((0x5a<<8)|(1<<4)), &WDTCTL
|
||
|
|
||
|
mov.b #1, &IE1
|
||
|
|
||
|
eint
|
||
|
|
||
|
lockup:
|
||
|
|
||
|
; enter LPM0 for power save stuff
|
||
|
bis #(GIE|CPUOFF), sr
|
||
|
|
||
|
jmp lockup
|
||
|
|
||
|
|
||
|
.section ".text.callback", "ax", %progbits
|
||
|
|
||
|
wdt_callback:
|
||
|
bic.b #1, &IFG1
|
||
|
bis.b #1, &IE1
|
||
|
|
||
|
xor.b #1, &P2OUT
|
||
|
|
||
|
ret
|
||
|
|
||
|
|
||
|
.section ".vectors", "ax", %progbits
|
||
|
|
||
|
_VECTORS:
|
||
|
|
||
|
.2byte ISR_unk ; ffe0
|
||
|
.2byte ISR_unk ; ffe2
|
||
|
.2byte ISR_port1 ; ffe4
|
||
|
.2byte ISR_port2 ; ffe6
|
||
|
.2byte ISR_USI ; ffe8
|
||
|
.2byte ISR_unk ; ffea ; (ADC10, not on this chip)
|
||
|
.2byte ISR_unk ; ffec
|
||
|
.2byte ISR_unk ; ffee
|
||
|
.2byte ISR_timer0 ; fff0
|
||
|
.2byte ISR_timer1 ; fff2
|
||
|
.2byte ISR_wdt ; fff4
|
||
|
.2byte ISR_cmpA ; fff6
|
||
|
.2byte ISR_unk ; fff8
|
||
|
.2byte ISR_unk ; fffa
|
||
|
.2byte ISR_NMI ; fffc
|
||
|
.2byte ISR_RST ; fffe
|
||
|
|
||
|
.section ".text.isr.unk", "ax", %progbits
|
||
|
ISR_unk:
|
||
|
reti
|
||
|
|
||
|
.section ".text.isr.port1", "ax", %progbits
|
||
|
ISR_port1:
|
||
|
reti
|
||
|
|
||
|
.section ".text.isr.port2", "ax", %progbits
|
||
|
ISR_port2:
|
||
|
reti
|
||
|
|
||
|
.section ".text.isr.usi", "ax", %progbits
|
||
|
ISR_USI:
|
||
|
reti
|
||
|
|
||
|
.section ".text.isr.timer0", "ax", %progbits
|
||
|
ISR_timer0:
|
||
|
reti
|
||
|
|
||
|
.section ".text.isr.timer1", "ax", %progbits
|
||
|
ISR_timer1:
|
||
|
reti
|
||
|
|
||
|
.section ".text.isr.wdt", "ax", %progbits
|
||
|
ISR_wdt:
|
||
|
call #wdt_callback
|
||
|
reti
|
||
|
|
||
|
.section ".text.isr.cmpA", "ax", %progbits
|
||
|
ISR_cmpA:
|
||
|
reti
|
||
|
|
||
|
.section ".text.isr.nmi", "ax", %progbits
|
||
|
ISR_NMI:
|
||
|
reti
|
||
|
|
||
|
.section ".text.isr.rst", "ax", %progbits
|
||
|
ISR_RST:
|
||
|
jmp _start
|
||
|
|