; Reverse engineering tool for PLL ; in Uniden UH036SX UHF radio ; ; Ross Whenmouth 2007 ; ; ATtiny2313 target ; Atmel ATtiny2313 ; pin 1 RESET ; pin 2 RXD (PD0) UART RXD ; pin 3 TXD (PD1) ***SPARE*** ; pin 4 XTAL2 18.432 MHz XTAL ; pin 5 XTAL1 18.432 MHz XTAL ; pin 6 PD2 ***SPARE*** ; pin 7 PD3 ***SPARE*** ; pin 8 PD4 ***SPARE*** ; pin 9 PD5 ***SPARE*** ; pin 10 GND 0V ; pin 11 PD6 ***SPARE*** ; pin 12 PB0 DATA out ; pin 13 PB1 CLOCK out ; pin 14 PB2 STROBE out ; pin 15 PB3 ***SPARE*** ; pin 16 PB4 ***SPARE*** ; pin 17 PB5/MOSI ***SPARE*** ; pin 18 PB6/MISO ***SPARE*** ; pin 19 PB7/SCK ***SPARE*** ; pin 20 VCC +5V .include "tn2313def.inc" ; Register aliasing ; =r0 ; register for LPM instruction .def A =r20 ; working register A ; SRAM Memory Map ; ; 0x60 - 0x9F 64 byte Stack ; 0xA0 - 0xDF spare .cseg .org 0 ; interrupt table rjmp RESET ; Reset Handler ; rjmp INT0 ; External Interrupt0 Handle ; rjmp INT1 ; External Interrupt1 Handle ; rjmp TIM1_CAPT ; Timer1 Capture Handler ; rjmp TIM1_COMPA ; Timer1 CompareA Handler ; rjmp TIM1_OVF ; Timer1 Overflow Handler ; rjmp TIM0_OVF ; Timer0 Overflow Handler ; rjmp USART0_RXC ; USART0 RX Complete Handler ; rjmp USART0_DRE ; USART0,UDR Empty Handler ; rjmp USART0_TXC ; USART0 TX Complete Handler ; rjmp ANA_COMP ; Analog Comparator Handler ; rjmp PCINT ; Pin Change Interrupt ; rjmp TIMER1_COMPB ; Timer1 Compare B Handler ; rjmp TIMER0_COMPA ; Timer0 Compare A Handler ; rjmp TIMER0_COMPB ; Timer0 Compare B Handler ; rjmp USI_START ; USI Start Handler ; rjmp USI_OVERFLOW ; USI Overflow Handler ; rjmp EE_READY ; EEPROM Ready Handler ; rjmp WDT_OVERFLOW ; Watchdog Overflow Handler RESET: ldi A, 0b10000000 ; disable the analogue comaparator to save power out ACSR, A ldi A, 0b00000000 out DDRB, A ; PortB as inputs for the moment ldi A, 0b00000000 out PORTB, A ; Set all PortB outputs to 0 ldi A, 0x9F ; point the stack pointer at the top of Stack out SPL, A ; Initalise the serial port ldi A, 0 ; set UART speed to 115,200 bps out UBRRH, A ldi A, 9 out UBRRL, A ldi A, 0b00000110 ; set 8 data bits, no parity, 1 stop bit out UCSRC, A ldi A, 0b00011000 ; enable receiver and transmitter out UCSRB, A MAIN: sbis UCSRA, 7 ; check for rx character in UDR rjmp MAIN ; loop until char received in A, UDR ; put RX char into A out UDR, A ; echo RX char back to the terminal DL: cpi A, 'd' ; if rx char = 'd' then data low brne DH sbi DDRB, 0 ; pull data LOW DH: cpi A, 'D' ; if rx char = 'D' then data high brne CL cbi DDRB, 0 ; let data HIGH CL: cpi A, 'c' ; if rx char = 'c' then clock low brne CH sbi DDRB, 1 ; pull clock LOW CH: cpi A, 'C' ; if rx char = 'C' then clock high brne SL cbi DDRB, 1 ; let clock HIGH SL: cpi A, 's' ; if rx char = 's' then strobe low brne SH sbi DDRB, 2 ; pull strobe LOW SH: cpi A, 'S' ; if rx char = 'S' then strobe high brne MAIN cbi DDRB, 2 ; let clock HIGH rjmp MAIN