starting uart stuff
[my-code/atmel.git] / beginners / season_junior.asm
index 540c152..8380e92 100644 (file)
@@ -9,7 +9,7 @@
 ; vcc card --- atmel vcc
 ; vcc cam  --- 
 ; rst cam  --- atmel int0 (pd2)
-; rst card --- atmel (pb4)
+; rst card --- atmel (pd4)
 ; clk card -\ 
 ;            -  atmel t1 (pd5)
 ; clk cam  -/
@@ -83,35 +83,30 @@ INIT:
 ldi r16,low(RAMEND)
 out SPL,r16
 
-;
-; hier weiter ....
-;
-
 ; enable interrupts int0,int1
 ldi r16,((1<<INT0)|(1<<INT1))
 out GIMSK,r16
 ; int0/1 setup
 ldi r16,((1<<ISC01)|(1<<ISC00)|(1<<ISC10)|(1<<ISC11))
 out MCUCR,r16
-in r16,MCUCR
-sbic PORTD,PD2
-cbr r16,ISC00
-out MCUCR,r16
-sbic PORTD,PD3
-cbr r16,ISC10
-out MCUCR,r16
 
-; enable t/c overflow interrupt
-ldi r16,(1<<TOIE1)
+; enable t/c overflow interrupt and icp
+ldi r16,((1<<TOIE1)|(1<<TICIE1))
 out TIMSK,r16
-; setup t/c
-ldi r16,((1<<CS12)|(1<<CS11)|(1<<CS10))
+; setup t/c and icp
+ldi r16,((1<<CS12)|(1<<CS11)|(1<<CS10)|(1<<ICNC1))
 out TCCR1B,r16
 
+; configure uart - interrupt enabled when i/o
+ldi r16,3
+out UBRR,r16
+sbi UCR,TXEN
+
 ; init bitcounter and overflow counter
 ldi r20,0 ; bitcounter
 ldi r21,0 ; register for constructing the byte
 ldi r22,0 ; overflow counter
+ldi r23,0 ; temp reg
 
 ; constant 1 in r1
 ldi r16,1
@@ -120,44 +115,68 @@ mov r1,r16
 ; enable interrupts (global)
 sei
 
+; jump to mainloop
+rjmp MAIN
+
+;
+; main routine
+;
+
+MAIN:
+
+rjmp MAIN
+
 ;
 ; rec_card routines
 ;
 
 REC_CARD:
 
-; int0 -> input, int1 -> output
-ldi r16,(1<<DDD3)
-out DDRD,r16
-
 ; decide what to do
-sbic PORTD,PD2
+sbic PORTD,PD6
 rjmp REC_CARD_HIGH
 rjmp REC_CARD_LOW
 
 REC_CARD_HIGH:
 
+; save counter
+in r24,ICR1L
+in r25,ICR1H
+
 ; output high on port to cam
-ldi r16,(1<<PD3)
-out PORTD,r16
+sbi PORTD,PD3
 
-; toggle int0 sense
-in r16,MCUCR
-cbr r16,ISC00
-out MCUCR,r16
+; toggle icp sense
+cbi TCCR1B,ICES1
+;in r16,TCCR1B
+;cbr r16,ICES1
+;out TCCR1B,r16
+
+; status tu submit
+ldi r26,1
+
+; enable uart dre interrupt
+sbi UCR,UDRIE
 
 reti
 
 REC_CARD_LOW:
 
+; save counter
+in r27,ICR1L
+in r28,ICR1H
+
 ; output low on port to cam
-ldi r16,0
-out PORTD,r16
+cbi PORTD,PD3
 
-; toggle int0 sense
-in r16,MCUCR
-cbr r16,ISC00
-out MCUCR,r16
+; toggle icp sense
+sbi TCCR1B,ICES1
+
+; status to submit
+ldi r26,0
+
+; enable uart dre interrupt
+sbi UCR,UDRIE
 
 reti
 
@@ -167,10 +186,6 @@ reti
 
 REC_CAM:
 
-; int1 -> input, int0 -> output
-ldi r16,(1<<DDD2)
-out DDRD,r16
-
 ; decide what to do
 sbic PORTD,PD3
 rjmp REC_CAM_HIGH
@@ -179,8 +194,7 @@ rjmp REC_CAM_LOW
 REC_CAM_HIGH:
 
 ; output high on port to card
-ldi r16,(1<<PD2)
-out PORTD,r16
+sbi PORTD,PD6
 
 ; toggle int1 sense
 in r16,MCUCR
@@ -192,12 +206,11 @@ reti
 REC_CAM_LOW:
 
 ; output low on port to card
-ldi r16,0
-out PORTD,r16
+cbi PORTD,PD6
 
 ; toggle int 1 sense
 in r16,MCUCR
-cbr r16,ISC10
+sbr r16,ISC10
 out MCUCR,r16
 
 reti
@@ -212,3 +225,47 @@ add r22,r1 ; inc counter overflow register
 
 reti
 
+;
+; rst_cam routine
+;
+
+RST_CAM:
+
+; decide what to do
+sbic PORTD,PD2
+rjmp RST_CAM_HIGH
+rjmp RST_CAM_LOW
+
+RST_CAM_HIGH:
+
+; output high on rst port to card
+sbi PORTD,PD4
+
+; toggle int0 sense
+in r16,MCUCR
+cbr r16,ISC00
+out MCUCR,r16
+
+reti
+
+RST_CAM_LOW:
+
+; output low on rst port to cam
+cbi PORTD,PD4
+
+; toggle int0 sense
+in r16,MCUCR
+sbr r16,ISC00
+out MCUCR,r16
+
+reti
+
+;
+; uart_out routines
+;
+
+UART_OUT:
+
+;
+; hier weiter ...
+;