From faba451aadcb0c9a0a485eaa37df46417e34a857 Mon Sep 17 00:00:00 2001
From: hackbard <hackbard>
Date: Sat, 10 Jun 2006 11:08:00 +0000
Subject: [PATCH] ...

---
 beginners/i2c-eeprom.asm | 145 +++++++++++++++++++++++++++++++++++++++
 1 file changed, 145 insertions(+)
 create mode 100644 beginners/i2c-eeprom.asm

diff --git a/beginners/i2c-eeprom.asm b/beginners/i2c-eeprom.asm
new file mode 100644
index 0000000..d7d2229
--- /dev/null
+++ b/beginners/i2c-eeprom.asm
@@ -0,0 +1,145 @@
+;
+; eeprom via i2c read/write
+;
+; author: hackbard@hackdaworld.org
+;
+
+; specify device
+.include "../include/m32def.inc"
+
+; ------------------
+; interrupt vectors:
+; ------------------
+
+; reset
+nop
+rjmp RESET
+; int0
+nop
+reti
+; int1
+nop
+reti
+; int2
+nop
+reti
+; timer 2 compare
+nop
+reti
+; timer 2 overflow
+nop
+reti
+; timer 1 capture
+nop
+reti
+; timer 1 compare a
+nop
+reti
+; timer 1 compare b
+nop
+reti
+; timer 1 overflow
+nop
+reti
+; timer 0 compare
+nop
+reti
+; timer 0 overflow
+nop
+reti
+; spi/stc transfer complete
+nop
+reti
+; usart rx complete
+nop
+reti
+; usart data register empty
+nop
+reti
+; usart tx complete
+nop
+reti
+; adc complete
+nop
+reti
+; eeprom ready
+nop
+reti
+; analog comparator
+nop
+reti
+; twi 
+nop
+reti
+; spm ready
+nop
+reti
+
+; -----
+; code:
+; -----
+
+RESET:
+; set stackpointer
+ldi r16,high(RAMEND)	; write top of ramend (highbyte)
+out SPH,r16		; to stackpointer
+ldi r16,low(RAMEND)	; write top of ramend (lowbyte)
+out SPL,r16		; to stackpointer
+
+; rs232 init
+ldi r16,12 	; "76,8k bps @ 16 mhz" in r16
+out UBRR,r16 	; write to uart baudrate register
+ldi r16,(1<<RXEN)|(1<<TXEN)	; enable rx/tx
+out UCSRB,r16	; write to uart control register
+
+; two wire (aka i2c) setup
+ldi r16,20	; set period
+out TWBR,r16	; write to twi bit rate register
+;in r16,TWSR	; get status register
+;ori r16,1	; set last bit -> prescaler = 4
+;andi r16,0xfd
+sbi TWSR,TWPS0
+cbi TWSR,TWPS1
+;out TWSR,r16	; write to twi status register
+
+ldi r16,(1<<TWEN|1<<TWINT|)
+TWCR
+
+
+; global interrupt enable
+sei
+
+
+
+
+; transmit 0x23 all the fucking time ...
+ldi r16, 0x23 ; load 0x23 to register
+out UDR, r16 ; write that to uart data register port
+LOOP:
+sbis USR, UDRE
+rjmp LOOP
+ldi r16, 0x0a
+out UDR, r16
+rjmp LOOP_H
+
+LOOP_H:
+sbis USR, UDRE
+rjmp LOOP_H
+ldi r16, 0x68
+out UDR, r16
+rjmp LOOP_D
+
+LOOP_D:
+sbis USR, UDRE
+rjmp LOOP_D
+ldi r16, 0x64
+out UDR, r16
+rjmp LOOP_W
+
+LOOP_W:
+sbis USR, UDRE
+rjmp LOOP_W
+ldi r16, 0x77
+out UDR, r16
+rjmp LOOP
+
-- 
2.39.5