; ; PGA2310PA controler with AVR ATtiny26L ; ; ver 1.0 ; by UENO Tomohiro 2004/07/06 .include "tn26def.inc" .def tmp = R16 .def vol = R17 .def prev_raw_vol = R18 .def prev_vol = R19 .def data_l = R20 .def data_r = R21 .equ vr = 0 ; portA .equ zcen = 1 ; portA .equ cs = 2 ; portA .equ sdi = 3 ; portA .equ sck = 4 ; portA .equ mute = 5 ; portA .equ select = 7 ; portA rjmp reset ; $000 reset vector reti ; $001 EXT_INT0 reti ; $002 PIN_CHG reti ; $003 TIMER1 COMPA reti ; $004 TIMER1 COMPB reti ; $005 TIMER1 OVF1 reti ; $006 TIMER1 OVF0 reti ; $007 USI_STRT reti ; $008 USI_OVF reti ; $009 EE_RDY reti ; $00A ANA_COMP reti ; $00B ADC reset: ldi tmp, LOW(RAMEND) out SP,tmp ; portA initialize ldi tmp,0b11111110 ; 5-1:output, 7-6,0:input out DDRA,tmp ldi tmp,0b11011110 ; bit 7-6:pullup out PORTA,tmp ; portB initialize ldi tmp,0b00000000 ; bit 7-0 input (no use) out DDRB,tmp ldi tmp,0b11111111 ; bit 2-0 pullup out PORTB,tmp ; AD converter initialize ldi tmp,0b00100000 ; REFS1=0,REFS0=0(AVCC),ADLAR=1(left adjust),convert=ADC0 out ADMUX,tmp ldi tmp,0b11100111 ; ADEN=1,ADSC=1,ADFR=1(continue),ADIF=0,ADIE=0,ASPS2-0=111 out ADCSR,tmp sbi PINA,zcen ldi vol,0 mov data_r,vol mov data_l,vol rcall write ldi tmp,255 wait_loop: nop nop nop nop nop nop nop nop nop nop dec tmp brne wait_loop sbi PORTA,mute ldi prev_vol,0 ldi prev_raw_vol,0 main_loop: ldi tmp,255 nop nop dec tmp brne PC-3 in vol,ADCH mov tmp,vol inc tmp cp tmp,prev_raw_vol brlo PC+6 mov tmp,vol dec tmp cp prev_raw_vol,tmp brlo PC+2 rjmp main_loop mov prev_raw_vol,vol in tmp,PINA bst tmp,select brtc PC+4 ldi ZL,LOW(vol_data_1) ldi ZH,HIGH(vol_data_1) rjmp PC+3 ldi ZL,LOW(vol_data_2) ldi ZH,HIGH(vol_data_2) lsl ZL rol ZH ldi tmp,0 add ZL,vol adc ZH,tmp lpm vol,Z cp vol,prev_vol breq main_loop mov prev_vol,vol mov data_l,vol mov data_r,vol rcall write rjmp main_loop write: cbi PORTA,sck cbi PORTA,cs ldi tmp,16 write_loop: cbi PORTA,sdi sbrc data_r,7 sbi PORTA,sdi sbi PORTA,sck nop nop nop nop nop nop cbi PORTA,sck lsl data_l rol data_r dec tmp brne write_loop sbi PORTA,cs ret vol_data_1: .db 32,32,33,34,34,35,36,36,37,38,38,39,40,40,41,42,42,43,44,44,45,46,46,47,48,48,49,50,50,51,52,52 .db 53,54,54,55,56,56,57,58,58,59,60,60,61,62,62,63,64,64,65,66,66,67,68,68,69,70,70,71,72,72,73,74 .db 74,75,76,76,77,78,78,79,80,80,81,82,82,83,84,84,85,86,86,87,88,88,89,90,90,91,92,92,93,94,94,95 .db 96,96,97,98,98,99,100,100,101,102,102,103,104,104,105,106,106,107,108,108,109,110,110,111,112,112,113,114,114,115,116,116 .db 117,118,118,119,120,120,121,122,122,123,124,124,125,126,126,127,128,128,129,130,130,131,132,132,133,134,134,135,136,136,137,138 .db 138,139,140,140,141,142,142,143,144,144,145,146,146,147,148,148,149,150,150,151,152,152,153,154,154,155,156,156,157,158,158,159 .db 160,160,161,162,162,163,164,164,165,166,166,167,168,168,169,170,170,171,172,172,173,174,174,175,176,176,177,178,178,179,180,180 .db 181,182,182,183,184,184,185,186,186,187,188,188,189,190,190,191,192,192,193,194,194,195,196,196,197,198,198,199,200,200,201,202 vol_data_2: .db 72,72,73,74,74,75,76,76,77,78,78,79,80,80,81,82,82,83,84,84,85,86,86,87,88,88,89,90,90,91,92,92 .db 93,94,94,95,96,96,97,98,98,99,100,100,101,102,102,103,104,104,105,106,106,107,108,108,109,110,110,111,112,112,113,114 .db 114,115,116,116,117,118,118,119,120,120,121,122,122,123,124,124,125,126,126,127,128,128,129,130,130,131,132,132,133,134,134,135 .db 136,136,137,138,138,139,140,140,141,142,142,143,144,144,145,146,146,147,148,148,149,150,150,151,152,152,153,154,154,155,156,156 .db 157,158,158,159,160,160,161,162,162,163,164,164,165,166,166,167,168,168,169,170,170,171,172,172,173,174,174,175,176,176,177,178 .db 178,179,180,180,181,182,182,183,184,184,185,186,186,187,188,188,189,190,190,191,192,192,193,194,194,195,196,196,197,198,198,199 .db 200,200,201,202,202,203,204,204,205,206,206,207,208,208,209,210,210,211,212,212,213,214,214,215,216,216,217,218,218,219,220,220 .db 221,222,222,223,224,224,225,226,226,227,228,228,229,230,230,231,232,232,233,234,234,235,236,236,237,238,238,239,240,240,241,242