| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- ;Incs and Defs---------------------------------------------------------
- .include "atm328p.inc"
- .include "global.inc"
- ;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- ;Main Programm
- .global main
- main:
- ldi main_r, lo8(RAMEND) ;Stackpointer
- out SPL, main_r
- ldi main_r, hi8(RAMEND)
- out SPH, main_r
- clr false ;set Registers
- ser true
- call usart_init; ;init USART
- ldi main_r, (1<<PC0)|(1<<PC1)|(1<<PC2)|(1<<PC3)|(1<<PC4)
- out DDRC, main_r ;init I/O
- out PORTC, false
- sei ;enable Interrupts
- rjmp mode_select ;select Mode
- rjmp .-2 ;Endlosschleife
- cli ;disable Interrupts
- ;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- ;Mode Selection
- mode_select:
- sbi PORTC, PC0 ;delete
- ;Receive Frame----------------------------------------------------------
- ldi X_l, lo8(cmd_ptr) ;set Command-Ptr
- ldi X_h, hi8(cmd_ptr)
- lds usart_r, UCSR0B ;activate Receiver
- sbr usart_r, (1<<RXEN0)|(1<<RXCIE0)
- sts UCSR0B, usart_r
- cpi X_l, 0x03 ;check if Frame rec
- brne .-4
- lds usart_r, UCSR0B ;disable Receiver
- cbr usart_r, (1<<RXEN0)|(1<<RXCIE0)
- sts UCSR0B, usart_r
- sts UDR0, false ;clear UDR
- sbi PORTC, PC1 ;delete
- call cmd_rebuild ;read Cmd
- ;Select Mode------------------------------------------------------------
- ; lds mode, cmd_mode
- ; sbrc mode, fuse_read
- ; rjmp mode_select
- ; sbrc mode, fuse_write
- ; rjmp mode_select
- ; sbrc mode, page_read
- ; rjmp mode_select
- ; sbrc mode, page_write
- ; rjmp mode_select
- ; sbrc mode, prog_read
- ; rjmp mode_select
- ;Send Frame-------------------------------------------------------------
- ldi X_l, lo8(cmd_ptr) ;set Command-Ptr
- ldi X_h, hi8(cmd_ptr)
- lds usart_r, UCSR0B ;enable UDRI
- sbr usart_r, 1<<UDRIE0
- sts UCSR0B, usart_r
- cpi X_l, 0x03 ;check if Frame send
- brne .-4
- lds usart_r, UCSR0B ;disable TX, TXCI
- cbr usart_r, (1<<TXEN0)|(1<<TXCIE0)|(1<<UDRIE0)
- sts UCSR0B, usart_r
- sts UDR0, false ;clear UDR
- sbi PORTC, PC2 ;delete
- rjmp mode_select
- ;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- ;Cmd rebuild
- cmd_rebuild:
- lds main_r, cmd_mode ;set Mode
- andi main_r, nibble_lo
- ldi mode, 0x01
- tst main_r
- breq .+6
- lsl main_r
- dec main_r
- rjmp .-8
- clr option ;set Option
- lds main_r, cmd_opt_lo
- andi main_r, nibble_lo
- or option, main_r
- lds main_r, cmd_opt_hi
- andi main_r, nibble_lo
- swap main_r
- or option, main_r
- sbi PORTC, PC1 ;delete
- ret
|