...
[my-code/atmel.git] / beginners / i2c-eeprom.asm
1 ;
2 ; eeprom via i2c read/write
3 ;
4 ; author: hackbard@hackdaworld.org
5 ;
6
7 ; specify device
8 .include "../include/m32def.inc"
9
10 ; ------------------
11 ; interrupt vectors:
12 ; ------------------
13
14 ; reset
15 nop
16 rjmp RESET
17 ; int0
18 nop
19 reti
20 ; int1
21 nop
22 reti
23 ; int2
24 nop
25 reti
26 ; timer 2 compare
27 nop
28 reti
29 ; timer 2 overflow
30 nop
31 reti
32 ; timer 1 capture
33 nop
34 reti
35 ; timer 1 compare a
36 nop
37 reti
38 ; timer 1 compare b
39 nop
40 reti
41 ; timer 1 overflow
42 nop
43 reti
44 ; timer 0 compare
45 nop
46 reti
47 ; timer 0 overflow
48 nop
49 reti
50 ; spi/stc transfer complete
51 nop
52 reti
53 ; usart rx complete
54 nop
55 reti
56 ; usart data register empty
57 nop
58 reti
59 ; usart tx complete
60 nop
61 reti
62 ; adc complete
63 nop
64 reti
65 ; eeprom ready
66 nop
67 reti
68 ; analog comparator
69 nop
70 reti
71 ; twi 
72 nop
73 reti
74 ; spm ready
75 nop
76 reti
77
78 ; -----
79 ; code:
80 ; -----
81
82 RESET:
83 ; set stackpointer
84 ldi r16,high(RAMEND)    ; write top of ramend (highbyte)
85 out SPH,r16             ; to stackpointer
86 ldi r16,low(RAMEND)     ; write top of ramend (lowbyte)
87 out SPL,r16             ; to stackpointer
88
89 ; rs232 init
90 ldi r16,12      ; "76,8k bps @ 16 mhz" in r16
91 out UBRR,r16    ; write to uart baudrate register
92 ldi r16,(1<<RXEN)|(1<<TXEN)     ; enable rx/tx
93 out UCSRB,r16   ; write to uart control register
94
95 ; two wire (aka i2c) setup
96 ldi r16,20      ; set period
97 out TWBR,r16    ; write to twi bit rate register
98 ;in r16,TWSR    ; get status register
99 ;ori r16,1      ; set last bit -> prescaler = 4
100 ;andi r16,0xfd
101 sbi TWSR,TWPS0
102 cbi TWSR,TWPS1
103 ;out TWSR,r16   ; write to twi status register
104
105 ldi r16,(1<<TWEN|1<<TWINT|)
106 TWCR
107
108
109 ; global interrupt enable
110 sei
111
112
113
114
115 ; transmit 0x23 all the fucking time ...
116 ldi r16, 0x23 ; load 0x23 to register
117 out UDR, r16 ; write that to uart data register port
118 LOOP:
119 sbis USR, UDRE
120 rjmp LOOP
121 ldi r16, 0x0a
122 out UDR, r16
123 rjmp LOOP_H
124
125 LOOP_H:
126 sbis USR, UDRE
127 rjmp LOOP_H
128 ldi r16, 0x68
129 out UDR, r16
130 rjmp LOOP_D
131
132 LOOP_D:
133 sbis USR, UDRE
134 rjmp LOOP_D
135 ldi r16, 0x64
136 out UDR, r16
137 rjmp LOOP_W
138
139 LOOP_W:
140 sbis USR, UDRE
141 rjmp LOOP_W
142 ldi r16, 0x77
143 out UDR, r16
144 rjmp LOOP
145