Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс. e-mail:jobsmp@pochta.ru |
;**** includes ****
.include "2313def.inc"
;***************************************************************************
;*
;* CONSTANTES
;*
;***************************************************************************
;**** Constant declarations Data Rate ****
;******** Chrystals for maximum Baudrates
.equ XTAL = 7373 ; XTAL frequency, Khz (7.3728 Mhz)
;********
.equ BAUD = 115200 ; Data rate, bauds
.equ N = 3 ; for 7.3728 Mhz/115.200Baud
;********
;.equ BAUD = 38400 ; Data rate, bauds
;.equ N = 11 ; for 7.3728 Mhz/38.400Baud
;********
;.equ BAUD = 19200 ; Data rate, bauds
;.equ N = 23 ; for 7.3728 Mhz/19.200 Baud
;*********
;**** definitions for different chrystals and 115.200 baud ****
;.equ XTAL = 3686 ; XTAL frequency, Khz (3.6864 Mhz)
;*********
;.equ BAUD = 115200 ; Data rate, bauds
;.equ N = 1 ; for 3.6864 Mhz/115.200Baud
;*********
;
;********* Baudrates for 8 Mhz Chrystal
;.equ XTAL = 8000 ; XTAL frequency, Khz (8.000 Mhz)
;*********
;.equ BAUD = 38400 ; Data rate, bauds
;.equ N = 12 ; for 8.00 Mhz/38.400 Baud
;*********
;.equ BAUD = 19200 ;Data rate, bauds
;.equ N = 25 ; for 8.00 Mhz/19.200 Baud
;*********
;.equ BAUD = 9600 ; Data rate, bauds ! Not valid for AVRProg, use for avrdude only !
;.equ N = 51 ; for 8.00 Mhz/9.600 Baud
;*********
;********* Baudrates for 4 Mhz Chrystal
;.equ XTAL = 4000 ; XTAL frequency, Khz (4.000 Mhz)
;*********
;.equ BAUD = 19200 ; Data rate, bauds
;.equ N = 12 ; for 4.00 Mhz/19.200 Baud
;*********
;.equ BAUD = 9600 ; Data rate, bauds ! Not valid for AVRProg, use for avrdude only !
;.equ N = 25 ; for 4.00 Mhz/9.600 Baud
;*********
.equ RAMSTART = 0x60 ; first SRAM Adress of 2313
.equ PAGESIZE = 0x10 ; default Page size for Programming
.equ BUFSIZE = 0x40 ; 64 bytes internal RAM for Buffer
;***************************************************************************
;*
;* PORTS
;* Ports Definitions
;*
;* DESCRIPTION
;* Change the following definitions if the RESET pin to the
;* target moves and/or if the SCK/MISO/MISO/LED moves.
;*
;***************************************************************************
.equ LEDH = PB3 ; dual color LED output, anode green (output)
.equ LED = PB0 ; LED output, active low, dual color LED Kathode green (output)
.equ MISO = PB6 ; MISO pin of the target (input)
.equ MOSI = PB5 ; MOSI pin of the target (output)
.equ RESET = PB4 ; RESET pin of the target (output)
.equ SCK = PB7 ; SCK pin of the target (output)
.equ RXD = PD0 ; UART RXD line
.equ TXD = PD1 ; UART TXD line
;***************************************************************************
;*
;* MACROS
;* Program Macros
;*
;* DESCRIPTION
;* Change the following macros if the RESET pin to the
;* target moves and/or if the SCK/MISO/MISO/LED moves.
;*
;***************************************************************************
.macro init_ports ; init ports
ldi temp2,0xff
out PORTD,temp2
ldi temp2,0xff
out PORTB,temp2
.endm
.macro catch_ports ; catch ports .macro release_ports ; release ports .macro pas_RESET ; set RESET passive .macro act_RESET ; set RESET active .macro set_LED ; set LED Port -> Standart LED off, dual LED green .macro clr_LED ; clear LED Port --> Standart LED on, dual LED red .macro LED_off ; for dual color LED, not in use .macro sbic_MISO ; skip if MISO cleared .macro set_MOSI ; set MOSI .macro clr_MOSI ; clear MOSI .macro clr_SCK ; clear SCK .macro pulse_SCK ; pulse SCK .macro table ; load Z pointer ;*************************************************************************** ;r0 used with lpm instruction ;*************************************************************************** .CSEG ;*************************************************************************** u_init: ;*************************************************************************** getc: ;*************************************************************************** putc: ;*************************************************************************** ;*************************************************************************** ;*************************************************************************** bel_table: ;*************************************************************************** set_pagesize: ;*************************************************************************** set_pollcode: ;*************************************************************************** delay: ;*************************************************************************** spi123: ;*************************************************************************** ;*************************************************************************** rdser: ;*************************************************************************** ;*************************************************************************** ;*************************************************************************** adiw addrl,1 ; Auto increment address ;*************************************************************************** shift_s_data3: healthcheck: ; for dual color LED LEDloop: ; Pulse for yellow LED ;*************************************************************************** INIT: waitcmd: ;====== 'T' - Device Type ================================================== cpi u_data,'T' ; 'T' Device type ;====== 'S' - Return Software Identifier =================================== w0: ;====== 'V' - Return Software Version ====================================== w1: w2: ;====== 't' - Show Supported Devices ======================================= w3: ;====== 'p' - Return Programmer Type ======================================= w4: ;====== 'a' - Return autoincrement address support ========================= w5: ;====== 'M' - Return enhanced Mode support (Note 14) ======================== w51: ;====== 'i' - Return Chip ID (Note 14) ====================================== w52: ;====== 'b' - Return Block write Mode support (Note 17) ======================== w53: ;====== 'x' - Set LED ====================================================== w6: ;====== 'y' - Clear LED ==================================================== w61: ; We require that the device code be selected before any of the other commands w7: ;====== 'P' - Enter Programming Mode ======================================= w71: ;====== 'c' - Write Program Memory, Low Byte =============================== w8: ;====== 'C' - Write Program Memory, High Byte ============================== w9: ;====== 'B' Block Write Memory (see Note 17) ====================== w92: w94: ; write Data (EEPROM) Memory ;Entry Point for Flash Block write w96b: ; Code for 89S8252 ;====== 'R' - Read Program Memory ========================================== w10: w10B: w10B2: ;====== 'A' - Load Address ================================================= w11: ;====== 'D' - Write Data Memory ============================================ w12: ;====== 'd' - Read Data Memory ============================================= w13: w14: ;====== 'E' - Exit , release all Ports, inhibit AVR910 ===================== w142: w15: ;====== 'l' - Write Lockbits ============================================== ; writes Lockbits in SPI Byte 2 for old "classic" AVR Chips, and in addition ; Some more different Adresses for other devices? w16: ;====== 'f' - Write Fusebits ============================================== w161: w17: w18: ;====== ':' - Universal Command ============================================ w19: ;====== '.' - New Universal Command ======================================== w20: w21: ;====== 'F' - Read Fusebits (lfuse) ========================================= w22: ;====== 'N' - Read high Fusebits ========================================== w23: ;====== 'Q' - Read extendet Fusebits ============================================== w24: ;====== Unknown Command ==================================================== w30: rjmp put_err ;====== Wait for FLASH write in avr910 mode ================================== wait_S: ws_pol: ;====== Wait for FLASH write in page mode ================================== wait_M: poll_t2313: ; Polling ATTiny2313 is different put_debug: ; shows u_data on serial for debug reason put_ret: ;*************************************************************************** Dev_S: ; byte write ; avr910-devcode ,Pagesite in Words ;Appearance of this Devicecodes does not mean this Devices are or will be fully supported ! ; official Devicecodes as matched in AVRProg V1.40 ;*************************************************************************** SW_Ver: ;*************************************************************************** ID_Str: ;*************************************************************************** ChipID: ;**** End of File ****
ldi temp2,(1<
ldi temp2,(1<
.endm
ldi temp2,(1<
ldi temp2,(1<
.endm
tst device
brmi m2 ; S89 device
sbi PORTB,RESET
rjmp m3
m2: cbi PORTB,RESET
m3:
.endm
tst device
brmi m4 ; S89 device
cbi PORTB,RESET
rjmp m5
m4: sbi PORTB,RESET
m5:
.endm
sbi PORTB,LED
cbi PORTB,LEDH ; added for dual color support
.endm
cbi PORTB,LED
sbi PORTB,LEDH ; added for dual color support
.endm
cbi PORTB,LED
cbi PORTB,LEDH
.endm
sbic PINB,MISO
.endm
sbi PORTB,MOSI
.endm
cbi PORTB,MOSI
.endm
cbi PORTB,SCK
.endm
sbi PORTB,SCK
ldi temp2,(XTAL/750+1) ; had to slow down for ATTiny2313 (internal clock) default was (XTAL/1500+1)
m0: dec temp2
brne m0
cbi PORTB,SCK
ldi temp2,(XTAL/1500+1) ; had to slow down for ATTiny2313 (internal clock) default was (XTAL/3000+1)
m1: dec temp2
brne m1
.endm
ldi ZL,low(@0*2) ; low
ldi ZH,high(@0*2) ; high
.endm
;*
;* Global Register Variables
;*
;***************************************************************************
.def cmd1 = r1 ; Universal commands params
.def cmd2 = r2 ; ..
.def cmd3 = r3 ; ..
.def pol_al = r4 ; Polling address low
.def pol_ah = r5 ; Polling address high
.def Bcnt1 = r6 ; Block Mode Counter1
.def Bcnt2 = r7 ; Block Mode Counter2
.def Bcnt3 = r8 ; Block Mode Counter2
.def B_Flag = r9 ; Flag for ws_del Routine
.def B_Mode = r10 ; Marks Block Mode commands (See Note 16)
.def Memtype = r11 ; Flag for Memorytype for Block Commands (See Note 16)
.def Pagewords = r12 ; Size of Controller page to program in Page Mode (Words!)
.def PollcodeF = r13 ; Code for Polling Flash
.def temp1 = r16 ; Temporary register 1
.def temp2 = r17 ; Temporary register 2
.def temp3 = r18 ; Temporary register 3
.def s_data = r19 ; SPI data
.def u_data = r20 ; UART data
.def device = r21 ; Device code
;.def lockmode = r22 ; Param to set correct lockbit read/write mode
.def rd_s_data = r23 ; Read data on SPI
.def pol_cmd = r24 ; Polling command
.def p_data = r25 ; Polling data
;r26,r27 used as X register
.def addrl = r28 ; (YL) Low order byte of address
.def addrh = r29 ; (YH) High order byte of address
;r30,r31 used as Z register
;*
;* Interrupt Vectors
;*
;***************************************************************************
rjmp INIT ; Reset Handle
;*
;* FUNCTION
;* u_init
;*
;* DESCRIPTION
;* Initialize UART.
;*
;***************************************************************************
ldi temp1,N ; set baud rate
out UBRR,temp1
ldi temp1,(1<
ret
;*
;* FUNCTION
;* getc
;*
;* DESCRIPTION
;* Wait for start bit and receive a character on the UART Rx line.
;*
;***************************************************************************
sbis USR,RXC ; wait until a character has been received
rjmp getc
in u_data,UDR ; Read byte from the UART
ret
;*
;* FUNCTION
;* putc
;*
;* DESCRIPTION
;* Send a character on the UART Tx line.
;*
;***************************************************************************
sbis USR,UDRE ; test for TX register empty
rjmp putc ; loop until TX empty
out UDR,u_data ; send the byte
ret
;*
;* FUNCTION
;* put_string
;*
;* DESCRIPTION
;* Send Z - pointed null-terminated string on the UART Tx line.
;*
;***************************************************************************
put_string:
lpm
tst r0
breq ps_ret ; check for end of string (0x00)
mov u_data,r0
rcall putc ; putc(char)
adiw ZL,1 ; next char
rjmp put_string
ps_ret: ret
;*
;* FUNCTION
;* put_table
;*
;* DESCRIPTION
;* Send Z - pointed table on the UART Tx line.
;*
;***************************************************************************
put_table:
lpm
tst r0
breq pt_ret ; check for end of table (0x00)
mov u_data,r0
rcall putc ; putc(Byte)
adiw ZL,2 ; skip MSB
rjmp put_table
pt_ret: ret
;*
;* FUNCTION
;* bel_table
;*
;* DESCRIPTION
;* C=0 if device belongs to table.
;*
;***************************************************************************
lpm ; read table
tst r0 ; check for end of table
breq c1_ret
cp device,r0
breq c0_ret ; C=0
adiw ZL,2 ; skip MSB
rjmp bel_table
c1_ret: sec ; C=1
c0_ret: ret
;*
;* FUNCTION
;* set_pagesize
;*
;* DESCRIPTION
;* sets programming Page size for selected Device.
;*
;***************************************************************************
lpm ; read table
tst r0 ; check for end of table
breq spa_end ; no Pagesize to set
cp device,r0
breq spa_set ; C=0
adiw ZL,2 ; skip MSB
rjmp set_pagesize
spa_set:
adiw ZL,1 ; Point to high Byte of Word
lpm ; get Pagesize to R0
mov Pagewords,r0
mov Bcnt3,Pagewords ; initiate Counter
spa_end:
ret
;*
;* FUNCTION
;* set_pollcode
;*
;* DESCRIPTION
;* sets Code for Polling Flash for selected Device.
;*
;***************************************************************************
lpm ; read table
tst r0 ; check for end of table
breq spo_end ; no Pollcode to set
cp device,r0
breq spo_set ; C=0
adiw ZL,2 ; skip MSB
rjmp set_pollcode
spo_set:
adiw ZL,1 ; Point to high Byte of Word
lpm ; get Pagesize to R0
mov PollcodeF,r0 ; Set Pollcode for Flash Rom
spo_end:
ret
;*
;* FUNCTION
;* delay
;*
;* DESCRIPTION
;* Make delay 1mS (x temp1).
;*
;***************************************************************************
ldi temp2,40
dl2: ldi temp3,(XTAL/120)
dl1: dec temp3
brne dl1
dec temp2
brne dl2
dec temp1
brne delay
ret
;*
;* FUNCTION
;* spi123
;*
;* DESCRIPTION
;* Write bytes 1 to 3 on the SPI. Byte 1 must be loadet into s_data
;* Byte 2 ist addrh, Byte 3 ist addrl
;*
;***************************************************************************
rcall wrser ; wrser(s_data) SPI write (byte 1)
mov s_data,addrh
rcall wrser ; wrser(addrh) SPI write (byte 2)
mov s_data,addrl
rcall wrser ; wrser(addrl) SPI write (byte 3)
ret
;*
;* FUNCTION
;* w1234 (for Code simplification,)
;*
;* DESCRIPTION
;* Write SPI bytes 1 to 4.
; Byte 1 must be loadet into cmd1
; Byte 2 must be loadet into cmd2
; Byte 3 must be loadet into cmd3
; Byte 4 must be loadet into u_data
;*
;***************************************************************************
w1234:
mov s_data,cmd1
rcall wrser
mov s_data,cmd2
rcall wrser
mov s_data,cmd3
rcall wrser
mov s_data,u_data ; get Byte 4 from serial
rcall wrser
ret
;*
;* FUNCTION
;* w123r4 (for Code simplification)
;*
;* DESCRIPTION
;* Write SPI bytes 1 to 3, read Byte 4 to serial.
; Byte 1 must be loadet into cmd1
; Byte 2 must be loadet into cmd2
; Byte 3 must be loadet into cmd3
;*
;***************************************************************************
w123r4:
mov s_data,cmd1
rcall wrser
mov s_data,cmd2
rcall wrser
mov s_data,cmd3
rcall wrser
rcall rdser
mov u_data,s_data ; put Byte 4 to serial
rcall putc
ret
;***************************************************************************
;*
;* FUNCTION
;* rdser, wrser
;*
;* DESCRIPTION
;* Write and read bytes on the SPI.
;*
;***************************************************************************
clr s_data
wrser:
ldi temp1,8 ; load bit counter
ldi rd_s_data,0
wrs0:
rol s_data
brcc wrs1
set_MOSI ; MOSI = 1
rjmp wrs2
wrs1:
clr_MOSI ; MOSI = 0
wrs2:
lsl rd_s_data
sbic_MISO ; read MISO
ori rd_s_data,1
pulse_SCK ; pulse SCK
dec temp1 ; advance bit counter
brne wrs0 ; loop
mov s_data,rd_s_data
ret
;*
;* FUNCTION
;* read_send_progmem
;*
;* DESCRIPTION
;* Read one adress (2 Byte) from Program Memory and send it through UART
;*
;***************************************************************************
read_send_progmem:
tst device
brmi rsp1 ; S89 device
ldi s_data,0x20 ; read low Byte
rcall wrser ; wrser(0x28) SPI write (byte 1)
mov s_data,addrh
rjmp rsp2
rsp1:
mov s_data,addrh ; s_data = (addrh << 3) | 0x01;
rcall shift_s_data3
ori s_data,0x01
rsp2:
rcall wrser ; wrser(addrh) SPI write (byte 2) (S89=byte1)
mov s_data,addrl
rcall wrser ; wrser(addrl) SPI write (byte 3)
rcall rdser ; SPI read (byte 4)
mov u_data,s_data
rcall putc ; send data
tst device
brmi rsp3 ; S89 device
ldi s_data,0x28 ; read High Byte
rcall wrser ; wrser(0x20) SPI write (byte 1)
mov s_data,addrh
rcall wrser ; wrser(addrh) SPI write (byte 2)
mov s_data,addrl
rcall wrser ; wrser(addrl) SPI write (byte 3)
rcall rdser ; SPI read (byte 4)
mov u_data,s_data
rcall putc ; send data
rsp3:
adiw addrl,1 ; Auto increment address
ret
;*
;* FUNCTION
;* read_send_datamem
;*
;* DESCRIPTION
;* Read one Byte from Data Memory (eeprom) and send it through UART
;*
;***************************************************************************
read_send_datamem: ; Subroutine to read one eeprom Address
tst device
brmi rsd1 ; S89 device
ldi s_data,0xa0
rcall wrser ; wrser(0xa0) SPI write (byte 1)
mov s_data,addrh
rjmp rsd2
rsd1:
cpi device,0x87 ; if (device == S53)
breq rsd3 ; no Support for 89S53 device due to Bug in AVRProg V1.37
mov s_data,addrh
rcall shift_s_data3
ori s_data,0x05
rsd2:
rcall wrser ; wrser(addrh) SPI write (byte 2)
mov s_data,addrl
rcall wrser ; wrser(addrl) SPI write (byte 3)
rcall rdser ; SPI read (byte 4)
mov u_data,s_data
rcall putc ; send data
adiw addrl,1 ; Auto increment address
ret
rsd3:
pop temp1 ; remove return Adress from Stack in case of Error
pop temp1
rjmp put_err
;*
;* FUNCTION
;* eeprom_write
;*
;* DESCRIPTION
;* Write u_data to Data Memory (eeprom)
;*
;***************************************************************************
eeprom_write:
tst device
brmi eew1 ; S89 device
ldi s_data,0xc0
rcall wrser ; wrser(0xc0) SPI write (byte 1)
mov s_data,addrh
rjmp eew2
eew1:
cpi device,0x87 ; if (device == S53)
breq eew3
mov s_data,addrh
rcall shift_s_data3
ori s_data,0x06
eew2:
rcall wrser ; wrser(addrh) SPI write (byte 2)
mov s_data,addrl
rcall wrser ; wrser(addrl) SPI write (byte 3)
mov s_data,u_data
rcall wrser ; wrser(u_data) SPI write (byte 4)
ldi temp1,10 ; delay 10mS
rcall delay
ret
eew3:
pop temp1 ; remove return Adress from Stack in case of failure
pop temp1
rjmp put_err
;*
;* FUNCTION
;* shift_s_data3
;*
;* DESCRIPTION
;* Shift s_data 3 times left for S89 device.
;*
;***************************************************************************
lsl s_data
lsl s_data
lsl s_data
brcc s3_ret
cpi device,0x87 ; if (device != S53)
brne s3_ret
sbr s_data, 4 ; a13 +
s3_ret: ret
;***************************************************************************
;*
;* FUNCTION
;* healthcheck
;*
;* DESCRIPTION
;* changes color of dual color led.
;*
;***************************************************************************
clr_LED ; LED red
ldi temp1,200 ; 200 ms
rcall delay
ldi temp1,200 ; again 200 ms
rcall delay
ldi s_data,200 ; counter Register
set_LED ; LED green
ldi temp1,2 ; 2 ms
rcall delay
clr_LED ; LED red
ldi temp1,1 ; 1 ms
rcall delay
dec s_data ; dec. counter
brne LEDloop
set_LED ; LED green
ret
;***************************************************************************
;***************************************************************************
;*
;* INIT
;*
;* DESCRIPTION
;* Initialization
;*
;***************************************************************************
;***************************************************************************
;***************************************************************************
ldi temp1,RAMEND
out SPL,temp1 ; Locate stack
ldi temp1,PAGESIZE ; default Pagesize
mov Pagewords,temp1
mov Bcnt3,Pagewords ; set counter for Pagesize
ldi device,0x20 ; S2313 as default
clr B_Mode ; Flag for Block Modes (see Note 16)
clr B_Flag ; Flag for eNhanced Block write
init_ports ; Initialize ports
release_ports ; Release ports
rcall u_init ; Initialize UART
rcall healthcheck ; show that Prog is working after Powerup (LED test)
;***************************************************************************
;*
;* PROGRAM
;* waitcmd -> main
;*
;* DESCRIPTION
;* Wait for and execute commands.
;*
;***************************************************************************
rcall getc ; while (getc() == ESC) {};
cpi u_data,0x1b
breq waitcmd
brne w0
rcall getc
mov device,u_data ; get device type
table Dev_M ; prepare to set Pagesize
rcall set_pagesize ; If device has Page Mode support, set Pagesize
ldi temp1,0xFF
mov PollcodeF,temp1 ; preset PollcodeF with 0xFF, will be overwritten if Pollcode known
table Dev_S ; prepare to set Polling Code
rcall set_pollcode ; If device has no Page Size support, set code for Polling Flash
rjmp put_ret
cpi u_data,'S' ; 'S' Return software identifier
brne w1
table ID_Str
rcall put_string ; put string "AVR ISP"
rjmp waitcmd
cpi u_data,'V' ; 'V' Return software version
brne w2
table SW_Ver
rcall put_string ; put software version
rjmp waitcmd
;====== 'v' - Return Hardware Version ======================================
cpi u_data,'v' ; 'v' Return hardware version
brne w3
table HW_Ver
rcall put_string ; put hardware version
rjmp waitcmd
cpi u_data,'t' ; 't' Show supported devices
brne w4
table Dev_S
rcall put_table ; put supported devices codes
table Dev_M
rcall put_table ; put supported devices codes
ldi u_data,0x00 ; putc(0x00) - end of device list
rcall putc
rjmp waitcmd
cpi u_data,'p' ; 'p' Return programmer type
brne w5
ldi u_data,'S' ; putc('S') - serial programmer
rcall putc
rjmp waitcmd
cpi u_data,'a' ; 'a' Return address auto increment
brne w51
ldi u_data,'Y' ; putc('Y') - supports autoinc
rcall putc
rjmp waitcmd
; cpi u_data,'M' ; 'M' Return enhanced mode Support
; brne w52
; ldi u_data,'Y' ; putc('Y') - supports enhanced Mode
; rcall putc
; rjmp waitcmd
cpi u_data,'i' ; 'i' Return Chip ID
brne w53
table ChipID
rcall put_string ; put Chip ID string
ldi u_data,0x0a ; putc(LF)
rcall putc
rjmp put_ret
cpi u_data,'b' ; 'b' Return enhanced mode Support
brne w6
ldi u_data,'Y' ; putc('Y') - supports enhanced Mode
rcall putc
ldi u_data,high(BUFSIZE); putc((BUFSIZE>>8) & 0xff);
rcall putc
ldi u_data,low(BUFSIZE) ; putc(BUFSIZE&0xff);
rcall putc
rjmp waitcmd
cpi u_data,'x' ; 'x' Set LED (LED off or green)
brne w61
rcall getc ; get parameter
set_LED
rjmp put_ret
cpi u_data,'y' ; 'y' Clear LED (LED on or red)
brne w7
rcall getc ; get parameter
clr_LED
rjmp put_ret
;===========================================================================
table Dev_S ; load pointer
rcall bel_table
brcc w71 ; device belongs to table
table Dev_M
rcall bel_table
brcc w71 ; device belongs to table
rjmp put_err ; not match, goto put_err();
cpi u_data,'P' ; 'P' Enter programming mode
breq w70
rjmp w8
w70:
clr_LED ; LED on
catch_ports ; catch ports
clr_SCK ; clear SCK
pas_RESET ; set RESET passive
ldi temp1,50 ; delay 50mS;
rcall delay
act_RESET ; set RESET active
ldi temp1,50 ; delay 50mS;
rcall delay
ldi s_data,0xac
rcall wrser ; wrser(0xac) SPI write (byte 1)
ldi s_data,0x53
rcall wrser ; wrser(0x53) SPI write (byte 2)
; SPI Synchronization (fix!)
cpi device,0x20 ; if ( (device >= 0x20) && (device <= 0x7F) )
brlo s2
tst device
brmi s2
ldi temp3,32 ; count = 32;
s1: rcall rdser ; SPI read (byte 3)
cpi s_data,0x53 ; if (rdser == 0x53)
breq s3 ; break
ldi s_data,0x00
rcall wrser ; wrser(0x00) SPI write (byte 4)
pulse_SCK ; pulse SCK
ldi s_data,0xac
rcall wrser ; wrser(0xac) SPI write (byte 1)
ldi s_data,0x53
rcall wrser ; wrser(0x53) SPI write (byte 2)
dec temp3 ; count-1
brne s1 ; loop
rjmp s3 ; else
s2: ldi s_data,0x00
rcall wrser ; wrser(0x00) SPI write (byte 3)
s3: tst device
brmi s4 ; S89 device
ldi s_data,0x00
rcall wrser ; wrser(0x00) SPI write (byte 4)
s4: ldi temp1,4 ; delay 4mS;
rcall delay
rjmp put_ret
cpi u_data,'c' ; 'c' Write program memory, low byte
brne w9
rcall getc ; get data byte
w8b: ldi s_data,0x40
mov pol_cmd,s_data ; save command for polling
tst device
brmi w81 ; S89 device
rcall wrser ; wrser(0x40) SPI write (byte 1)
mov s_data,addrh
rjmp w82
w81:
mov s_data,addrh ; s_data = (addrh << 3) | 0x02;
rcall shift_s_data3
ori s_data,0x02
w82:
rcall wrser ; wrser(addrh) SPI write (byte 2)
mov s_data,addrl
rcall wrser ; wrser(addrl) SPI write (byte 3)
mov s_data,u_data
rcall wrser ; wrser(u_data) SPI write (byte 4)
mov p_data,u_data ; save data for polling
mov pol_al,addrl ; save address for polling
mov pol_ah,addrh
tst device
brpl w83
adiw addrl,1 ; Auto increment address for S89 device
w83:
rjmp wait_S ; write FLASH delay
cpi u_data,'C' ; 'C' Write program memory, high byte
brne w92
rcall getc ; get data byte
w9a: tst device
brmi w91 ; S89 device
ldi s_data,0x48
mov pol_cmd,s_data ; save command for polling
rcall wrser ; wrser(0x48) SPI write (byte 1)
mov s_data,addrh
rcall wrser ; wrser(addrh) SPI write (byte 2)
mov s_data,addrl
rcall wrser ; wrser(addrl) SPI write (byte 3)
mov s_data,u_data ; wrser(u_data) SPI write (byte 4)
rcall wrser
mov p_data,u_data ; save data for polling
mov pol_al,addrl ; save address for polling
mov pol_ah,addrh
adiw addrl,1 ; Auto increment address
rjmp wait_S ; write FLASH delay
w91:
rjmp put_err ; S89 device have byte wide program memory!
cpi u_data,'B' ; 'B' Block Write Program Memory
breq w92a
rjmp w10
w92a:
rcall getc ; get count High Byte
tst u_data
breq w92b
ldi u_data,1
rjmp put_err
w92b:
rcall getc ; get count Low Byte
cpi u_data,BUFSIZE+1 ; check maximum count
brlo w92c
ldi u_data,2
rjmp put_err
w92c:
mov Bcnt1, u_data ; ignore BUFSIZE high Byte (must be 0 here)
mov Bcnt2, u_data
rcall getc ; get Memory type to write
mov Memtype,u_data ; Flag for Memtype
clr XH
ldi XL, RAMSTART ; set X pointer to SRAM begin
w93:
rcall getc ; get data until Bcnt1 is reached
st X+, u_data ; store data to SRAM
dec Bcnt1
brne w93
clr XH
ldi XL, RAMSTART ; set X pointer to SRAM begin
ldi temp3,1
mov B_Mode,temp3 ; B_Mode != 0
mov u_data,Memtype ; restore Memtype
cpi u_data,'F' ; 'F' Flash Memory ist to write
breq w94a
cpi u_data,'E' ; 'E' eeprom Memory ist to write
breq w94 ; Entry Point for Data Memory Block write
ldi u_data,3
rjmp put_err
ld u_data,X+
rcall eeprom_write
dec Bcnt2
brne w94
rjmp put_ret
w94a:
table Dev_M
rcall bel_table
brcc w95 ; device belongs to table
rjmp w96 ; not match, goto "non Paged" Mode
w95: ; Entry Point for AVRProg Block Flash write
ldi s_data,0x40 ; write low byte
rcall spi123
ld s_data, X+
rcall wrser ; wrser(s_data) SPI write (byte 4)
ldi s_data,0x48 ; write high byte
mov pol_cmd,s_data ; save command for polling
rcall spi123
ld s_data, X+
mov p_data,s_data ; save data for polling
mov pol_al,addrl ; save address for polling
mov pol_ah,addrh
rcall wrser ; wrser(u_data) SPI write (byte 4)
adiw addrl,1 ; Auto increment address
dec Bcnt2
breq w95b
dec Bcnt2
breq w95b
tst B_Mode
breq w95 ; Loop for "Block Mode Commands" see Note 16
dec Bcnt3 ; count Bytes for Pagesize
brne w95
w95b:
tst B_Mode
brne w95c
rjmp put_ret
w95c:
dec Bcnt3 ; Bcnt3 will be set correct after write
ldi s_data,0x4c ; write Memory Page
rcall wrser ; wrser(0x4c) SPI write (byte 1)
mov s_data,pol_ah ; last written Adress is in Page to be programmed!
rcall wrser ; wrser(addrh) SPI write (byte 2)
mov s_data,pol_al ; last written Adress is in Page to be programmed!
rcall wrser ; wrser(addrl) SPI write (byte 3)
ldi s_data,0x00
rcall wrser ; wrser(0x00) SPI write (byte 4)
mov Bcnt3,Pagewords ; reload Counter fГјr Pagesize
rjmp wait_M
;#@KL4 test for 89S8252 Device
w96: ; Non Page Mode Flash write
tst device
brmi w96b ; S89 device
ld p_data, X+ ; load byte to Poll data
cpi p_data,0xFF ; if (p_data == 0xFF)
breq w961 ; skip burning
ldi s_data,0x40 ; write low byte
mov pol_cmd,s_data ; save command for polling
rcall spi123
mov s_data,p_data ; reload data from Poll data
rcall wrser ; wrser(s_data) SPI write (byte 4)
mov pol_al,addrl ; save address for polling
mov pol_ah,addrh
rcall Bws_pol
w961:
dec Bcnt2
ld p_data, X+ ; load byte to Poll data
cpi p_data,0xFF ; if (p_data == 0xFF)
breq w962
ldi s_data,0x48 ; write high byte
mov pol_cmd,s_data ; save command for polling
rcall spi123
mov s_data,p_data ; reload data from Poll data
rcall wrser ; wrser(u_data) SPI write (byte 4)
w96a: mov pol_al,addrl ; save address for polling
mov pol_ah,addrh
rcall Bws_pol
w962:
adiw addrl,1 ; Auto increment address
dec Bcnt2
brne w96
rjmp put_ret ; reply
; ldi s_data,0x40
; mov pol_cmd,s_data ; save command for polling
mov s_data,addrh ; s_data = (addrh << 3) | 0x02;
rcall shift_s_data3
ori s_data,0x02
rcall wrser ; wrser(addrh) SPI write (byte 1)
mov s_data,addrl
rcall wrser ; wrser(addrl) SPI write (byte 2)
ld s_data, X+
mov p_data,s_data ; save data for polling
rcall wrser ; wrser(u_data) SPI write (byte 3)
rjmp w96a
cpi u_data,'R' ; 'R' Read program memory
brne w10B
tst device
brmi rpm1 ; S89 device
ldi s_data,0x28 ; read high Byte (order is different from Block Read!)
rcall wrser ; wrser(0x28) SPI write (byte 1)
mov s_data,addrh
rjmp rpm2
rpm1:
mov s_data,addrh ; s_data = (addrh << 3) | 0x01;
rcall shift_s_data3
ori s_data,0x01
rpm2:
rcall wrser ; wrser(addrh) SPI write (byte 2)
mov s_data,addrl
rcall wrser ; wrser(addrl) SPI write (byte 3)
rcall rdser ; SPI read (byte 4)
mov u_data,s_data
rcall putc ; send data
tst device
brmi rpm3 ; S89 device
ldi s_data,0x20 ; read Low Byte
rcall wrser ; wrser(0x20) SPI write (byte 1)
mov s_data,addrh
rcall wrser ; wrser(addrh) SPI write (byte 2)
mov s_data,addrl
rcall wrser ; wrser(addrl) SPI write (byte 3)
rcall rdser ; SPI read (byte 4)
mov u_data,s_data
rcall putc ; send data
rpm3:
adiw addrl,1 ; Auto increment address
rjmp waitcmd ; goto waitcmd();
;====== 'g' - Block Read Memory (See Note 17) ======================
cpi u_data,'g' ; 'g' Block Read Program Memory
brne w11
rcall getc ; XH = getc();
mov XH,u_data
rcall getc ; XL = getc();
mov XL,u_data
rcall getc ; getc(Memorytype);
cpi u_data,'F'
breq w10B2
cpi u_data,'E'
breq w10B1
rjmp put_err
w10B1:
rcall read_send_datamem
sbiw XL, 1
brne w10B1
rjmp waitcmd ; goto waitcmd();
rcall read_send_progmem
tst device
brmi w10B3
sbiw XL, 2
brne w10B2
rjmp waitcmd
w10B3:
sbiw XL, 1
brne w10B2
rjmp waitcmd ; goto waitcmd();
cpi u_data,'A' ; 'A' Load address
brne w12
rcall getc ; addrh = getc();
mov addrh,u_data
rcall getc ; addrl = getc();
mov addrl,u_data
rjmp put_ret ; goto reply();
cpi u_data,'D' ; 'D' Write data memory
brne w13
rcall getc ; get data
rcall eeprom_write
rjmp put_ret
cpi u_data,'d' ; 'd' Read data memory
brne w14
rcall read_send_datamem
rjmp waitcmd ; goto waitcmd();
;====== 'L' - Leave Programming Mode =======================================
cpi u_data,'L' ; 'L' Leave programming mode
brne w142
w141:
pas_RESET ; set RESET passive
release_ports ; release ports
set_LED ; LED off
rjmp put_ret
cpi u_data,'E' ; 'E' xit
brne w15
rjmp w141 ; exit command for AVR Prog
;====== 'e' - Chip Erase ===================================================
cpi u_data,'e' ; 'e' Chip erase
brne w16
ldi s_data,0xac
rcall wrser ; wrser(0xac) SPI write (byte 1)
tst device
brmi w151 ; S89 device
ldi s_data,0x80
rcall wrser ; wrser(0x80) SPI write (byte 2)
w151:
ldi s_data,0x04
rcall wrser ; wrser(0x04) SPI write (byte 3)
ldi s_data,0x00
rcall wrser ; wrser(0x00) SPI write (byte 4)
ldi temp1,40 ; delay 40mS
rcall delay
rjmp put_ret
; writes Lockbits in SPI byte 4 for new Mega and Tiny Devices.
; One Type does not care about the other Byte...
cpi u_data,'l' ; 'l' Write Lockbits
brne w161
rcall getc ; get data
ldi s_data,0xac
rcall wrser ; wrser(0xac) SPI write (byte 1)
tst device
brmi w163 ; S89 device
mov s_data,u_data
ori s_data,0xe0
rcall wrser ; wrser(u_data) SPI write (byte 2)
rjmp w162
cpi u_data,'f' ; 'f' Write Fusebits
brne w17
rcall getc ; get data
ldi s_data,0xac
rcall wrser ; wrser(0xac) SPI write (byte 1)
ldi s_data,0xa0
rcall wrser ; wrser(0xa0) SPI write (byte 2)
w162:
clr s_data
rcall wrser ; wrser(0x00) SPI write (byte 3)
mov s_data,u_data
rcall wrser ; wrser(u_data) SPI write (byte 4)
rjmp w164
w163:
mov s_data,u_data
andi s_data,0xe0 ; S89 device
ori s_data,0x07
rcall wrser ; SPI write (byte3)
ldi s_data,0x00
rcall wrser ; wrser(0x00) SPI write (byte 4)
w164:
ldi temp1,10 ; delay 10mS
rcall delay
rjmp put_ret
;====== 's' - Read Signature Bytes =========================================
cpi u_data,'s' ; 's' Read signature bytes
brne w18
tst device
brmi w171 ; S89 device
ldi temp3,0x30
mov cmd1,temp3
clr cmd2
ldi temp3,0x02
mov cmd3,temp3
rcall w123r4
dec cmd3
rcall w123r4
clr cmd3
rcall w123r4
rjmp waitcmd
w171:
rjmp put_err
;====== 'm' - Write Program Memory Page ====================================
cpi u_data,'m' ; 'm' Write Program Memory Page
brne w19
ldi s_data,0x4c
rcall wrser ; wrser(0x4c) SPI write (byte 1)
; mov s_data,addrh ; original, reload address
mov s_data,pol_ah ; for speeding up transfer
rcall wrser ; wrser(addrh) SPI write (byte 2)
; mov s_data,addrl ; original, reload address
mov s_data,pol_al ; for speeding up transfer
rcall wrser ; wrser(addrl) SPI write (byte 3)
ldi s_data,0x00
rcall wrser ; wrser(0x00) SPI write (byte 4)
rjmp wait_M ; write FLASH delay
cpi u_data,':' ; ':' Universal Command
brne w20
rcall getc ; get data1
mov cmd1,u_data ; cmd1 = data1
rcall getc ; get data2
mov cmd2,u_data ; cmd2 = data2
rcall getc ; get data3
mov cmd3,u_data ; cmd3 = data3
rcall w123r4
ldi temp1,50 ; delay 50mS
rcall delay
rjmp put_ret
cpi u_data,'.' ; '.' New Universal Command
brne w21
rcall getc ; get data1
mov cmd1,u_data ; cmd1 = data1
rcall getc ; get data2
mov cmd2,u_data ; cmd2 = data2
rcall getc ; get data3
mov cmd3,u_data ; cmd3 = data3
rcall getc ; get data4
rcall w1234
mov u_data,rd_s_data
rcall putc ; send data
ldi temp1,50 ; delay 50mS
rcall delay
rjmp put_ret
;====== 'r' - Read Lock Bits ==============================================
cpi u_data,'r' ; 'r' Read Lockbits
brne w22
ldi s_data,0x58 ; SPI load (byte 1)
rjmp w22a
cpi u_data,'F' ; 'F' Read Fusebits
brne w23
ldi s_data,0x50 ; SPI load (byte 1)
w22a:
rcall wrser ; wrser(0x5n) SPI write (byte 1)
clr s_data ; SPI load (byte 2)
rjmp w26
cpi u_data,'N' ; 'N' Read high Fusebits
brne w24
ldi s_data,0x58
rcall wrser ; wrser(0x58) SPI write (byte 1)
rjmp w25
cpi u_data,'Q' ; 'Q' Read extendet Fusebits
brne w30
ldi s_data,0x50 ; SPI load (byte 1)
rcall wrser ; wrser(0x50) SPI write (byte 1)
w25:
ldi s_data,0x08 ; SPI load (byte 2)
w26:
rcall wrser ; wrser(0x00) SPI write (byte 2)
clr s_data
rcall wrser ; wrser(0x00) SPI write (byte 3)
rcall rdser ; SPI read (byte 4)
mov u_data,s_data
rcall putc ; send data
rjmp waitcmd
table Dev_M
rcall bel_table
brcs ws_pol ; No Page Mode, poll last Byte
rjmp put_ret ; in Byte Mode time is long enougt to get next Byte...
Bws_pol: ; entry adress for Block mode delay
ldi temp3,1
mov B_Flag,temp3 ; set Flag that ws_poll comes back with ret ...
tst PollcodeF ; if polling not applicable, standart delay
breq ws_del ; polling not used
ws_def:
cp p_data,PollcodeF ; if (data == PollcodeF)
breq ws_del ; wait default delay
andi pol_cmd,0x0f ; write command: 0x48, 0x40
ori pol_cmd,0x20 ; read command: 0x28, 0x20
clr temp3 ; clear polling counter
ws_cy:
tst device
brmi ws_89 ; S89 device
mov s_data,pol_cmd
rcall wrser ; wrser(pol_cmd) SPI write (byte 1)
mov s_data,pol_ah
rjmp ws_90
ws_89:
mov s_data,pol_ah ; s_data = (pol_ah << 3) | 0x01;
rcall shift_s_data3
ori s_data,0x01
ws_90:
rcall wrser ; wrser(pol_ah) SPI write (byte 2) (S89=byte1)
mov s_data,pol_al
rcall wrser ; wrser(pol_al) SPI write (byte 3) (S89=byte2)
rcall rdser ; SPI read (byte 4) (S89=byte3)
tst device
brpl ws_cb
andi s_data,0x80 ; compare only MSB for S89 device
andi p_data,0x80
ws_cb:
cp s_data,p_data
breq ws_ok ; s_data = p_data
dec temp3
brne ws_cy ; loop
ws_del: ; 256 polling cycles are over, give additional standart Time
ldi temp1,10 ; delay 10mS
rcall delay
ws_ok:
tst B_Flag
breq put_ret
clr B_Flag ; Reset B_Flag for normal operation
ret
cpi device,0x41
breq wm_del ; polling inapplicable for m103
cpi device,0x23
breq poll_t2313 ; polling different for t2313
cpi p_data, 0xFF ; if last Byte was 0xFF give standart delay
breq wm_del
andi pol_cmd,0x0f ; write command: 0x48, 0x40
ori pol_cmd,0x20 ; read command: 0x28, 0x20
clr temp3 ; clear polling counter
wm_cy:
mov s_data,pol_cmd
rcall wrser ; wrser(pol_cmd) SPI write (byte 1)
mov s_data,pol_ah
rcall wrser ; wrser(pol_ah) SPI write (byte 2)
mov s_data,pol_al
rcall wrser ; wrser(pol_al) SPI write (byte 3)
rcall rdser ; SPI read (byte 4)
cp s_data,p_data
breq wm_ok ; s_data = p_data
dec temp3
breq wm_del ; 256 polling cycles are over, give another 50ms delay...
rjmp wm_cy ; loop
wm_del:
ldi temp1,50 ; delay 50mS
rcall delay
wm_ok:
tst B_Mode
breq wm_end
tst Bcnt2
breq wm_end
rjmp w95
wm_end:
clr B_Mode ; Reset Block Mode Flag
rjmp put_ret
ldi pol_cmd,0xf0 ; Byte1= 0xF0
clr temp3 ; clear polling counter
mov pol_ah,temp3 ; Byte2= 0x00
p2313_1:
mov s_data,pol_cmd
rcall wrser ; wrser(pol_cmd) SPI write (byte 1)
mov s_data,pol_ah
rcall wrser ; wrser(pol_ah) SPI write (byte 2)
mov s_data,pol_al
rcall wrser ; wrser(pol_al) SPI write (byte 3)
rcall rdser ; SPI read (byte 4)
andi s_data,0x01 ; last Bit tells if polling OK
breq wm_ok ; s_data = p_data
dec temp3
breq wm_del ; 256 polling cycles are over, give another 50ms delay...
rjmp p2313_1 ; loop
;====== Command Error ======================================================
rcall putc
put_err:
ldi u_data,'?' ; putc('?')
rcall putc ; send '?'
rjmp waitcmd
;====== Reply Command ======================================================
ldi u_data,0x0d ; putc(0x0D)
rcall putc ; send CR
rjmp waitcmd
;*
;* TABLE
;* device codes
;*
;* DESCRIPTION
;* The following device codes must be used by the host computer. Note
;* that the device codes are arbitrary selected, they do not have any
;* thing in common with the signature bytes stored in the device.
;* This are the device Codes recognized by the AVRprog Software. Some
;* Devices may require special hardware or a different, not yet
;* implemented Protocol! Use at your own risk.
;*
;***************************************************************************
; avr910-devcode ,Code during polling Flash. 0x00: no polling supported, program default time
; .db 0x10 ,0x00 ;AT90S1200A No support for this type
; .db 0x11 ,0x00 ;AT90S1200B No support for this type
; .db 0x12 ,0x00 ;AT90S1200C No support for this type
.db 0x13 ,0x00 ;AT90S1200
.db 0x20 ,0x7F ;AT90S2313A
.db 0x28 ,0x7F ;AT90S4414A
.db 0x30 ,0xFF ;AT90S4433A
.db 0x34 ,0xFF ;AT90S2333A
.db 0x38 ,0x7F ;AT90S8515A
.db 0x48 ,0xFF ;AT90S2323A
.db 0x4c ,0xFF ;AT90S2343A
.db 0x51 ,0xFF ;tn10
.db 0x55 ,0xFF ;tn12
.db 0x56 ,0xFF ;tn15
.db 0x68 ,0xFF ;AT90S8535
.db 0x6c ,0xFF ;AT90S4434
.db 0x86 ,0xFF ;AT89S8252 bug in avrprog in Block write Mode!(See Note 18 for Workaround)
.db 0x87 ,0xFF ;AT89S53 bug in avrprog
.dw 0 ;End of table
Dev_M: ; Devices which support Page Programming. Dont forget the Page Size
; of different Devices.
; Maximum ist 0x40 due to limitated RAM in 2313 Chip.
; (Pages with bigger Pages are programmed multiple times)
; unofficial Device Codes. Match avrdude.conf with tis "avr910-devcode"
.db 0x01 ,0x40 ;m640 avr910-Devicecode not official!
; .db 0x02 ,0x40 ;m644 avr910-Devicecode not official!
; .db 0x03 ,0x40 ;m645 avr910-Devicecode not official!
.db 0x04 ,0x40 ;m649 avr910-Devicecode not official!
.db 0x05 ,0x40 ;m6490 avr910-Devicecode not official!
.db 0x06 ,0x40 ;90PWM2 avr910-Devicecode not official!
.db 0x07 ,0x40 ;90PWM3 avr910-Devicecode not official!
.db 0x08 ,0x40 ;m1280 avr910-Devicecode not official!
.db 0x09 ,0x40 ;m1281 avr910-Devicecode not official!
; .db 0x0a ,0x40 ;m2560 avr910-Devicecode not official!
; .db 0x0b ,0x40 ;m2561 avr910-Devicecode not official!
; .db 0x0c ,0x40 ;m3250 avr910-Devicecode not official!
; .db 0x0d ,0x40 ;m6450 avr910-Devicecode not official!
.db 0x0e ,0x10 ;tn24 avr910-Devicecode not official!
.db 0x1a ,0x10 ;tn25 avr910-Devicecode not official!
.db 0x0f ,0x20 ;tn44 avr910-Devicecode not official!
.db 0x1b ,0x20 ;tn45 avr910-Devicecode not official!
.db 0x14 ,0x20 ;tn84 avr910-Devicecode not official!
.db 0x1c ,0x20 ;tn85 avr910-Devicecode not official!
.db 0x1d ,0x40 ;CAN128 avr910-Devicecode not official!
.db 0x23 ,0x10 ;tn2313 avr910-Devicecode not official! (STK500 Code used)
.db 0x31 ,0x20 ;m48 avr910-Devicecode not official!
.db 0x33 ,0x20 ;m88 avr910-Devicecode not official!
.db 0x35 ,0x40 ;m168 avr910-Devicecode not official!
; .db 0x36 ,0x40 ;m165 avr910-Devicecode not official!
.db 0x37 ,0x40 ;m164 avr910-Devicecode not official!
.db 0x39 ,0x40 ;m324 avr910-Devicecode not official!
; .db 0x3c ,0x40 ;m325 avr910-Devicecode not official!
.db 0x3d ,0x40 ;m329 avr910-Devicecode not official!
.db 0x3e ,0x40 ;m3290 avr910-Devicecode not official!
.db 0x57 ,0x10 ;tn13 avr910-Devicecode not official!
.db 0x3a ,0x20 ;m8515, Pagesize 32 words (0x20)
.db 0x3b ,0x20 ;m8515boot Bootloader Mode untested!
.db 0x41 ,0x40 ;m103
.db 0x43 ,0x40 ;m128
.db 0x44 ,0x40 ;m128boot Bootloader Mode untested!
.db 0x45 ,0x40 ;m64
.db 0x46 ,0x40 ;m64boot Bootloader Mode untested!
.db 0x5e ,0x10 ;tn26
.db 0x60 ,0x40 ;m161
.db 0x61 ,0x40 ;m161boot Bootloader Mode untested!
.db 0x62 ,0x40 ;m162
.db 0x63 ,0x40 ;m162boot Bootloader Mode untested!
.db 0x64 ,0x40 ;m163
.db 0x66 ,0x40 ;m163boot Bootloader Mode untested!
.db 0x69 ,0x20 ;m8535
.db 0x6a ,0x20 ;m8535boot Bootloader Mode untested!
.db 0x72 ,0x40 ;m32
.db 0x73 ,0x40 ;m32boot Bootloader Mode untested!
.db 0x74 ,0x40 ;m16
.db 0x75 ,0x40 ;m16boot Bootloader Mode untested!
.db 0x76 ,0x20 ;m8
.db 0x77 ,0x20 ;m8boot Bootloader Mode untested!
.db 0x78 ,0x40 ;m169
.db 0x79 ,0x40 ;m169boot Bootloader Mode untested!
.dw 0 ;End of Table
; Devices with known avr910 Devicecodes, but not supported with this Programmer
; .db 0x42 ,0x40 ;m603 obsolete
; .db 0x50 ;tn11 Needs additional High Voltage Hardware and uses different Protocoll! No Support!
; .db 0x58 ;tn19 Obsolete
; .db 0x5c ;tn28 Only supported in parallel Programming Mode!
; .db 0x65 ,0x20 ;m83 obsolete
; .db 0x67 ,0x20 ;m83boot obsolete
; .db 0x70 ;AT90C8534 unknown Hardware, untested!
; .db 0x71 ;AT90C8544 unknown Hardware, untested!
; .db 0x80 ;AT89C1051 unknown Hardware, untested!
; .db 0x81 ;AT89C2051 unknown Hardware, untested!
;*
;* TABLE
;* revision codes
;*
;***************************************************************************
.db "38",0,0
HW_Ver:
.db "12",0,0
;*
;* TABLE
;* ID string "AVR ISP"
;*
;***************************************************************************
.db "AVR ISP",0
;*
;* TABLE
;* Chip ID string to identify the Firmware
;*
;***************************************************************************
.db "Ver.3.8b (AVR109 Mode, 7.3728Mhz, 115.200 baud) for AN910, AT90S2313"
.db "www.mikrocontroller-projekte.de 26.Feb.2006",0
Ответы