| ??? 04/01/16 05:39 Modified: 04/01/16 06:07 Read: times |
#190641 - Hmmm Responding to: ???'s previous message |
It's been a while since I tried Atmel firmware + AT Studio programmers, but I recall some version creep & lottery connect issues.
You are probably better to use TSim51 instead ? http://turbo51studio.orgfree.com/downloads...-setup.zip For SPI ISP, the easiest 'blind start' is to use a Bootloader ROM device, (any of AT89LP51Rx2 @ 22.1184MHz) and Assemble/download the code below, using ISP via BootLoader menu. Then, it runs as SPI Bridge firmware, so you change the menu from ISP via BootLoader to ISP via SPI and you can ISP the AT89LP6440 etc.
;------------------------------------------------------------------------------
; TSim51 ISPviaSPI_fwLP51B2.ASM derived from ISPviaSPI_C2051.asm ISP programmer via SPI interface
; TSim51.b504 ~14.74MHz upper Sim speed 89LP51TB2, not Fast.
; TSim51.b600.DLL ~17.55MHz Sims on Terminal & Coms.
; TSim51.b650.DLL 89~100% of 22.1184MHz
;
; This code acts as a Serial <-> SPI bridge, to allow TSim51 Program of ALL Atmel AT89xx devices,
; with SPI ISP feature, using the ISP via SPI menu
;
; Suggested Target Firmware host device is AT89P51RB2-20PC, as the cheapest new variant with ROM BOOTLOADER.
; The ROM loader means you can use any Serial link to program this firmware HEX file into a AT89P51RB2-20PC
;
; and once the BOOT FUSE (BLJB) is flipped, this PGM (Serial<->SPI) bridge runs instead of the BOOT.
; (Holding PSEN low at RESET can still force ROM boot for re-flash firmware updates )
; All other fuses can be left in default (erased) state = [XtalOsc, /2, /12 Compat mode,
;
; ie Run ISP via Bootloader menu to first install this Firmware, and then you can run ISP via SPI menu
;
; Osc: 22.1184 MHz
; Serial: 115200,n,8,1 - fixed with /16/12 (or 57600 with 11.0592MHz xtal)
;
; Pins: P1.0 - Error led
; P1.1 - Ready led
;
; P1.3 - SS ;
; P1.4 - SCK ;
; P1.5 - MOSI ;
; P1.6 - MISO ;
; P1.7 - RESET ;
;
; Resgister usage: R0 - FIFO input pointer
; R1 - FIFO output pointer
; R2 - Command length
; R4 - Bit counter
; R5 - SCK pulse width counter
; R6 - Command temporary storage
;
; Serial Command formats: (used by TSim51 Studio, View.ISPvaiSPI menu)
;
; Header: ':', CommandChar, Length
; Data: [Byte 0] .. [Byte (Length-1)]
;
; Commands: ':R'#2 [Data0] - RST (bit7), SCK (bit4) and CPOL (bit0) control
; [Data1] - SCK pulse width
;
; ':S' [Length] [Data ...] - SPI command with SS release after end
; ':s' [Length] [Data ...] - SPI command without SS release after end
;
; Data length: 1..77 bytes, so if the data is longer then the 's' command must be used,
; prior to the last block.
; The last block, and one block commands with 'S' to start.
;--------------------------------------------------------------------------------------
$PAGING ; Enable title header and paging (default, with width = 72)
$DATE () ; use today's date, and enable on Title
$PAGELENGTH (65535) ; Similar to $NOPAGING, allows useful Title line: AsmVer $TITLE Date
$PAGEWIDTH (118) ; Tune to suit editor and included information. 118 trims here->|
; 118 suits TSim51 @ 1024x768 screen
;$NOPAGING ; totally removes title header, date, and paging, extends Page width 255
$TITLE ( ISP programmer via SPI ISPviaSPI_fwLP51B2 )
$NOMOD51 ; Use Generic 8051 resources
$INCLUDE (AT89LP51RB2.inc)
bseg at 0000h
CPOL: dbit 1
NCPOL: dbit 1
OnTxReady: dbit 1
dseg at 0021h
Pulse: ds 1
CmdChar: ds 1
dseg at 0030h
Header: ds 3
Buffer: ds 77
Baud equ -1 ;115200 baud 22.1184M/12/16 = 115200
Stack equ 07h
LEDRDY equ P1.1
LEDERR equ P1.0
PSS equ P1.3
PSCK equ P1.4
PMOSI equ P1.5
PMISO equ P1.6
PRST equ P1.7
Xtal1 EQU 22.1184e6
Xtal2 EQU 22.118456789123e6
XtalDiff EQU Xtal2-Xtal1
; ~~~~~~~~~~~~~~~~~~~~~~~~ RESET and INTERUPTS ~~~~~~~~~~~~~~~~~~~~~~
cseg at 0000h ;Reset vector
ajmp Start
cseg at 0023h
ajmp SerialInt
cseg at 0040h
; ~~~~~~~~~~~~~~~~~~~~~~~~ Main Code ~~~~~~~~~~~~~~~~~~~~~~
Start: mov P1,#0FFh
mov P3,#0FFh
mov SP,#Stack
mov P0M0,A ;change to QuasiBiDirectional on Pn
mov P1M0,A
mov P2M0,A
mov P3M0,A
setb LEDERR ;no error
clr LEDRDY ;ready
mov TMOD,#00100001b ;T0:mode 1, T1:mode2
orl PCON,#10000000b ;SMOD = 1
mov SCON,#01000000b ;Serial port: mode 1
mov TH1,#Baud ;Set baud (115200 baud)
mov TL1,#Baud
setb TR1
setb REN
setb ES
mov R0,#Header
mov R1,#Header
setb OnTxReady
setb EA
Main: cjne R0,#Header,Main1
sjmp Main
Main1: acall GetChar
acall PutChar
cjne a,#':',Main
acall GetChar
acall PutChar
mov R6,a
acall GetChar
acall PutChar
acall Command
clr LEDRDY
setb LEDERR
mov R0,#Header
mov R1,#Header
sjmp Main
GetChar: mov a,R1
clr c
subb a,R0
jnc GetChar
mov a,@R1
inc R1
ret
PutChar: jnb OnTxReady,$
clr OnTxReady
mov SBUF,a
ret
Command: cjne R6,#'S',Cmd1
sjmp CmdSpi
Cmd1: cjne R6,#'R',Cmd2
sjmp CmdReset
Cmd2: cjne R6,#'s',Cmd3
sjmp CmdSpi
Cmd3: ret
CmdReset: acall GetChar
acall PutChar
mov c,ACC.0
mov CPOL,c
cpl c
mov NCPOL,c
xrl a,#080h
orl a,#6Fh ;MOSI, MISO, SS high
mov P1,a
acall GetChar
acall PutChar
mov Pulse,a
ret
CmdSpi: clr PSS
CmdSpiLoop: mov a,R1
xrl a,R2
jz CmdSpiExit
acall GetChar
acall SpiData
acall PutChar
sjmp CmdSpiLoop
CmdSpiExit: mov a,Header+1
cjne a,#'S',CmdSpiNoClose
setb PSS
CmdSpiNoClose: clr c
ret
SpiData: mov R4,#8
mov R5,Pulse
cjne R5,#0,SpiSlow
SpiLoop: mov c,CPOL
mov PSCK,c
mov c,acc.7
mov PMOSI,c
mov c,NCPOL
mov PSCK,c
mov c,PMISO
rlc a
djnz R4,SpiLoop
setb PMOSI
clr PSCK
ret
SpiSlow: mov c,CPOL
mov PSCK,c
mov c,acc.7
mov PMOSI,c
mov R5,Pulse
djnz R5,$
mov c,NCPOL
mov PSCK,c
mov R5,Pulse
djnz R5,$
mov c,PMISO
rlc a
djnz R4,SpiSlow
setb PMOSI
clr PSCK
ret
; ~~~~~~~~~~~~~ Interrupt Code, Serial ~~~~~~~~~~~~~~~~~~~~~~~~~~
SerialInt: push acc
push psw
jnb RI,SerialIntTI
clr RI
mov @R0,SBUF
cjne R0,#Header,SerialInt1
cjne @R0,#':',SerialInt0
setb LEDRDY
sjmp SerialIntStore
SerialInt0: clr LEDERR
clr LEDRDY
sjmp SerialIntTI
SerialInt1: cjne R0,#Header+1,SerialInt5
cjne @R0,#'R',SerialInt2
sjmp SerialIntStore
SerialInt2: cjne @R0,#'S',SerialInt3
sjmp SerialIntStore
SerialInt3: cjne @R0,#'s',SerialInt4
sjmp SerialIntStore
SerialInt4: mov R0,#Header
mov R1,#Header
sjmp SerialIntTI
SerialInt5: cjne R0,#Header+2,SerialInt6
mov a,@R0
add a,#Buffer
mov R2,a
sjmp SerialIntStore
SerialInt6: mov a,R0
jb ACC.7,SerialInt4
xrl a,R2
jz SerialIntTI
SerialIntStore: inc R0
SerialIntTI: jnb TI,SerialIntExit
clr TI
setb OnTxReady
SerialIntExit: pop psw
pop acc
reti
Version:
DB "Firmware ISPviaSPI_fwLP51B2 v1.01 AT89LP51RB2"
end
;TASMC51 V1.1 ISP programmer via SPI ISPviaSPI_fwLP51B2 PAGE 4
;
; S E G M E N T U S A G E
; =========================
;
; Code : 402 bytes of 24576
; Data : 82 bytes of 128
; IData : 0 bytes of 128
; EData : 0 bytes of 2048
; FData : 0 bytes of 0
; UData : 0 bytes of 512
; XData : 0 bytes of 65536
; Bit : 3 bits of 128
|
| Topic | Author | Date |
| AT89LP ISP Studio | 01/01/70 00:00 | |
| Hmmm | 01/01/70 00:00 | |
thanks, it works | 01/01/70 00:00 | |
| this has been ages and .... | 01/01/70 00:00 |



