📄 90stest.asm
字号:
;====== 'e' - Chip Erase ===================================================
w15:
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
;====== 'l' - Write Lockbits ==============================================
; writes Lockbits in SPI Byte 2 for old "classic" AVR Chips, and in addition
; writes Lockbits in SPI byte 4 for new Mega and Tiny Devices.
; One Type does not care about the other Byte...
; Some more different Adresses for other devices?
w16:
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
;====== 'f' - Write Fusebits ==============================================
w161:
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 =========================================
w17:
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 ====================================
w18:
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
;====== ':' - Universal Command ============================================
w19:
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
;====== '.' - New Universal Command ========================================
w20:
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 ==============================================
w21:
cpi u_data,'r' ; 'r' Read Lockbits
brne w22
ldi s_data,0x58 ; SPI load (byte 1)
rjmp w22a
;====== 'F' - Read Fusebits (lfuse) =========================================
w22:
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
;====== 'N' - Read high Fusebits ==========================================
w23:
cpi u_data,'N' ; 'N' Read high Fusebits
brne w24
ldi s_data,0x58
rcall wrser ; wrser(0x58) SPI write (byte 1)
rjmp w25
;====== 'Q' - Read extendet Fusebits ==============================================
w24:
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
;====== Unknown Command ====================================================
w30: rjmp put_err
;====== Wait for FLASH write in avr910 mode ==================================
wait_S:
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 ...
ws_pol:
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
;====== Wait for FLASH write in page mode ==================================
wait_M:
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
poll_t2313: ; Polling ATTiny2313 is different
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 ======================================================
put_debug: ; shows u_data on serial for debug reason
rcall putc
put_err:
ldi u_data,'?' ; putc('?')
rcall putc ; send '?'
rjmp waitcmd
;====== Reply Command ======================================================
put_ret:
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.
;*
;***************************************************************************
Dev_S: ; byte write
; 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"
; avr910-devcode ,Pagesite in Words
.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!
;Appearance of this Devicecodes does not mean this Devices are or will be fully supported !
; official Devicecodes as matched in AVRProg V1.40
.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
;*
;***************************************************************************
SW_Ver:
.db "38",0,0
HW_Ver:
.db "12",0,0
;***************************************************************************
;*
;* TABLE
;* ID string "AVR ISP"
;*
;***************************************************************************
ID_Str:
.db "AVR ISP",0
;***************************************************************************
;*
;* TABLE
;* Chip ID string to identify the Firmware
;*
;***************************************************************************
ChipID:
.db "Ver.3.8b (AVR109 Mode, 7.3728Mhz, 115.200 baud) for AN910, AT90S2313"
.db "www.mikrocontroller-projekte.de 26.Feb.2006",0
;**** End of File ****
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -