?? boot5409.asm
字號(hào):
*************************************************************************
***
*** VC5409 Bootloader Software : Version 1.02
*** Origin Date : 4/22/99
*** Author(s) : PMJ2
***
*************************************************************************
***
*** This code sets up and executes the VC5409 Bootloader.
***
*** Revision History:
*** ----------------
*** 1.00 Modified the VC5402 bootloader for use PMJ2 04/22/98
*** on the VC5409. Includes new HPI boot mode,
*** and added McBSP2 code. Includes bug fix
*** in 8bit parallel mode. Includes bug fix
*** in 8-bit I/O mode, Includes the 8bit
*** standard serial mode, by changing the
*** initialization of RCR11 and XCR11 from
*** 040h to 0h. Added a SPI EEPROM bootmode,
*** which is selected via the INT3 flag
*** (See notes on SPI boot mode below).
*** Added code to toggle the BDX2 pin during
*** init, to provide a high-to-low transition
*** that can be used to drive INT3 for selection
*** of the SPI boot mode.
***
*** 1.01 Modified SPI boot. PMJ2 09/23/99
*** If the first 8bits are not (08h),
*** the boot loader will branch to the parallel boot modes.
*** If the second 8bits are not (AAh), the bootloader
*** will branch to the McBSP serial boot initialization.
*** The DX2 pin now toggles instead of the DX1 pin.
***
*** 1.02 Modified Parallel 8-bit. PMJ2 12/06/99
*** Modified I/O 8-bit boot modes.
*** In the parallel 8-bit mode, the AG and AH
*** are forced to zero for correct evaluation.
*** In the 8-bit I/O mode, the XPC
*** destination addr is correclty saved.
*** The BG and BH are forced to zero
*** for correct evaluation. The SPI mode boot
*** branches to the parallel boot after failure
*** of the first condition (08) and second condition (AA).
*** Reset McBSP2 before DX pins toggles. (for debugging)
********************************************************************
*** --------------- Notes on '5409 HPI Boot Mode ---------------
*** The new HPI boot mode allows the host to load the on-chip RAM
*** after the '5409 is reset. The boot-mode also allows the host
*** to specify an entry point at load-time. After completing the
*** bootload process, the host must make another HPI access to load
*** the entry point to location 07Fh of on-chip RAM. This is how it
*** works: after reset, the bootloader initializes address 07Fh to
*** zero, then polls this location for a change while the host is
*** loading the code. When the bootloader detects a change in the
*** contents of address 07Fh, it performs a branch using the contents
*** as the destination address.
*** This new mode doesn't require the INT2 flag for selection. If the
*** INT2 pin is not used to select HPI boot mode, the bootloader
*** periodically checks various boot sources, including HPI, until a
*** boot condition is detected. Alternatively, the INT2 flag can be
*** used to force the bootloader to ignore all boot sources other
*** than HPI. If the INT2 flag is to be used, a high to low transition
*** is required on the INT2 pin within 30 cycles after the '5409 is
*** reset.
*************************************************************************
*** --------------- Notes on '5409 SPI Boot Mode ---------------
*** The SPI boot mode allows the '5409 to boot from an 8-bit serial
*** EEPROM using the SPI protocol. The mode is selected at reset via
*** the INT3 external interrupt . Proper selection of the boot mode
*** requires a high to low transition on the INT3 pin within 30 CPU
*** cycles after the '5409 is reset.
***
*** The EEPROM must be connected to McBSP2 as follows:
*** McBSP2 EEPROM
*** ****** ******
*** BCLKX SCK
*** BFSX /CS
*** BDX SI
*** BDR SO
*** XF /HOLD (Optional - disables EEPROM when done)
***
*** The boot table used for programming the EEPROM is generated
*** using the 8bit serial option of the Hex conversion utility.
*** example:
*** -bootorg SERIAL
*** -memwidth 8
*************************************************************************
.title "bootVC5409"
.mmregs
.version 548
.def boot
.def endboot
.def bootend
.def dest
.def src
.def lngth
.def hbyte
.ref SPI_INIT, SPI_READ, SPI_WRITE
.ref SPI_RDSR, SPI_WRSR
*************************************
pa0 .set 0H ; port address 0h for i/o boot load
xentry .set 61H ; XPC of entry point
entry .set 62H ; entry point
hbyte .set 63H ; high byte of 8-bit serial word
p8word .set 64H ; concatenator for 8-bit memory load
src .set 65H ; source address
dest .set 66H ; destination address (dmov from above)
xdest .set 67H ; XPC of destination address.
lngth .set 68H ; code length
temp0 .set 69H ; temporary register0
temp1 .set 6aH ; temporary register1
temp2 .set 6bH ; temporary register2
temp3 .set 6cH ; temporary register3
HPIentry .set 7Fh ; Entry point for HPI boot.
***********************************************
* MMR definition for c54xlp peripherals *
*------------- MCBSP0 ----------------------*
drr10 .set 21H ; Data Receive Register
dxr10 .set 23H ; Data Transmit Register
SPSA0 .set 0038H ; Serial Port 0 Sub-bank Address Register
SPSD0 .set 0039H ; Serial Port 0 Sub-bank Data Register
*------------- MCBSP1 ----------------------*
drr11 .set 41H ; Data Receive Register
dxr11 .set 43H ; Data Transmit Register
SPSA1 .set 0048H ; Serial Port 1 Sub-bank Address Register
SPSD1 .set 0049H ; Serial Port 1 Sub-bank Data Register
*------------- MCBSP2 ----------------------
drr12 .set 31H ; Data Receive Register
dxr12 .set 33H ; Data Transmit Register
SPSA2 .set 0034H ; Serial Port 2 Sub-bank Address Register
SPSD2 .set 0035H ; Serial Port 2 Sub-bank Data Register
*----------- MCBSP CONTROL REGS --------------*
SPCR1_SUBADDR .set 0000H ; Serial Port Control Register 1 (subaddress)
SPCR2_SUBADDR .set 0001H ; Serial Port 1 Control Register 2 (subaddress)
RCR1_SUBADDR .set 0002H ; Receive Control Register 1 (subaddress)
RCR2_SUBADDR .set 0003H ; Receive Control Register 2 (subaddress)
XCR1_SUBADDR .set 0004H ; Transmit Control Register 1 (subaddress)
XCR2_SUBADDR .set 0005H ; Transmit Control Register 2 (subaddress)
SRGR1_SUBADDR .set 0006H ; Sample Rate Genarator Register 1 (subaddress)
SRGR2_SUBADDR .set 0007H ; Sample Rate Genarator Register 2 (subaddress)
*-------------- Other contants ---------------*
int2msk .set 0004H ; INT2_ bit position on IFR
int3msk .set 0100H ; INT3_ bit position in IFR/IMR
**********************************************************
* bootloader
**********************************************************
.sect "boot"
boot
ssbx intm ; disable all interrupts
stm #0FFFFh,@ifr ; clear IFR flag
ld #0, dp
orm #02b00h, @st1 ; xf=1, hm=0, intm=1, ovm=1, sxm=1
orm #020h, @pmst ; ovly=1
stm #07fffh, swwsr ; 7 wait states for P_,D_, and I_ spaces
stm #0007dh, sp ; Use top part of scratch-pad RAM for stack.
*****************************************************************
* RDP, Modified old HPI boot check to support host loading
* after reset. Initialize HPI boot entry point to 0. The host
* will change the value of this location after loading RAM.
*****************************************************************
stm #0, @HPIentry ; Set HPI entry to known value.
stm #08h, hpic ; Set HINT pin low. Ok to start
; host load.
*****************************************************************
* Toggling the BDX pin on McBSP2. This pin can be used to
* drive /INT3 and select the SPI boot mode, without requiring
* an external signal.
*****************************************************************
stm SPCR2_SUBADDR,SPSA2
stm #0000h,SPSD2 ; DISABLES TRANSMIT. (reset)1.02
stm #PCR_SUBADDR, SPSA2
stm #02000h, SPSD2 ; Set DX low.
stm #PCR_SUBADDR, SPSA2
stm #02020h, SPSD2 ; Set DX high.
rpt #5 ; Keep high a while.
nop
stm #02000h, SPSD2 ; Set DX low.
rpt #5 ; wait several cycles
nop ; before checking INT2
bitf @ifr, #int2msk ; Check if INT2_ flag is set
nop
bc HPI, tc ; If int2 is set then HPI boot.
bitf @ifr, #int3msk ; Else, check if INT3_ flag is set
nop
bc SPIBOOT, tc ; If int3 is set then SPI boot.
b parallel ; Otherwise, check other boot modes.
*****************************************************************
* HPI boot mode selected through int2.
*****************************************************************
HPI ; Else, this is an HPI boot, all
; other boot modes are ignored.
stm #int2msk, ifr ; Clear INT2_ bit in ifr.
ldm HPIentry, a ; Get HPI entry vector.
bc hpiboot, aneq ; If not zero, HPI boot.
b $-3 ; else, keep looping.
*****************************************************************
* Check Parallel Boot
*****************************************************************
parallel
stm #0h, @xentry ; initialize the entry point
stm #boot, @entry ;
portr #0ffffh, @src ; read source address of boot table
mvdk @src, ar1 ; ar1 points at source memory (Data)
ld *ar1+, a ; load accumulator A with BRW
sub #10AAh, a, b ; check 16-bit Boot?
bc par16, beq ; a=010AAh
and #0ffh, a ; check acc AL = 08
sub #8h, a, b ; check 8-bit Boot?
bc chk_data, bneq ; a=08xxh
ld *ar1+, a ; 8-bit mode, LSB
and #0ffh, a ; check acc AL = AAh
sub #0AAh, a ; LSB = 0AAh?
bc par08, aeq ; 8-bit Parallel Boot
chk_data stm #0FFFFh, ar1 ; check data memory 0xFFFF
nop ; prevent pipeline conflict
nop ;
ld *ar1+, a ; load accumulator A with BRW
stlm a, ar1 ; ar1 point at source memory (Data)
nop ; prevent posibble pipeline conflic
nop ;
ld *ar1+, a ; load acculator A with BRW
sub #10AAh, a, b ; check 16-bit Boot?
bc par16, beq ; a=010AAh
stm #0FFFFh, ar1 ; check data memory 0xFFFF & 0xFFFE
nop ; prevent possible pipeline conflic
nop ;
ldu *ar1-, a ; acc A <-- source address
and #0FFh, a ; 0 the high byte
add *ar1, 8, a ;
stlm a, ar1 ;
nop ; prvent possible pipeline conflic
nop ;
ld *ar1+, a ; load accumulator A with BRW
and #0ffh, a ; check acc AL = 08h
sub #8h, a, b ; check 8-bit Boot?
bc ser_ini, bneq ; acc A = 08xxh
ld *ar1+, a ; 8-bit mode, LSB
and #0ffh, a ; check acc AL = AAh
sub #0AAh, a ; LSB = 0AAh?
bc par08, aeq ; 8-bit Parallel Boot
ser_ini
********************************************************************************
*
* Initialization for 5409 McBSPs
*
********************************************************************************
*
* 1. McBSP0 is configured for 16-bit, BCLKX input, BFSX input.
*
********************************************************************************
*
STM SPCR1_SUBADDR,SPSA0
STM #0000h,SPSD0 ; DISABLES RECEIVE.
STM SPCR2_SUBADDR,SPSA0
STM #0000h,SPSD0 ; DISABLES TRANSMIT.
STM RCR1_SUBADDR,SPSA0 ; Set the receive word length to 16-bit.
STM #0040H,SPSD0
STM RCR2_SUBADDR,SPSA0 ; Set the receive word length to 16-bit.
STM #0041H,SPSD0 ; Single Phase, 16-bit, No Compan,1bit
*Delay.
STM SRGR1_SUBADDR,SPSA0
STM #0000H,SPSD0 ; Clear the clkdiv and frame width.
STM SRGR2_SUBADDR,SPSA0
STM #0000H,SPSD0 ; Clksm=0 External source.
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -