📄 sysinit.asm
字号:
;*******************************************************************************
; Module Name: 初始化dsp5402 ,CPL =1(SP模式) ovly =1( 片内SRAM不定位到PROG)
; 中断向量在FF80H,clk =6*clkin , I/0,SRAM,PROGRAM no WAIT ,ARP=0,DP =80,关中断
;
;**********************************************************************
;
;
; 入口
.def _c_int00
.ref _main,_Test_Memory
.global __BootRun,__Boot_lenth,__STACK_SIZE,__Vector_Start
.def _Second_Boot_Run_Init
;
;
.mmregs
;bootload程序存贮地址
__Boot_Store .set 0x3800
;********************************* LOCALS *************************************
; DEFINITIONS:
; PMST_INIT: See 4.1.2 of the CPU and Peripherals manual.
; IPTR (bit 15-7) - 001110111 中断向量高9位
; MP/~MC (bit 6) - 1 内部ROM不映射到程序区中
; OVLY (bit 5) - 1 内部SRAM 映射到程序区中
; AVIS (bit 4) - 0 内部地址不可见
; DROM (bit 3) - 0 内部ROM不映射到数据空间
; CLKOFF (bit 2) - 0 时钟输出充许
; SMUL (bit 1) - 1 Saturate before multiply on MAC
; SST (bit 0) - 0 Do not saturate before store
; -----------------
; 11111 1111 1100 0010 = 0x77E2
PMST_INIT .set 0x3bE2 ;中断向量为3B80H
; BSCR_INIT: See 10.3.2 of the CPU and Peripherals manual.
; BNKCMP (bit 15-12) - 0000 No bank switching
; PS-DS (bit 11) - 1 insert cycles between
; PS-DS accesses
; reserved (bit 12-2)- xxxxxxxxx
; BH (bit 1) - 0 enable bus holder
; EXIO (bit 0) - 0 turn on external-bus-off
; -----------------
; 0000100000000001
BSCR_INIT .set 0x800 ;不能turn off external-bus-off
; SWWSR_INIT:
; XPA (bit 15) - 1 Don't care since one mem chip
; I/O (bits 14-12) - 001 We don't use the IO port, but set to max wait states for noe
; Data1 (bits 11-9) - 000 One Wait state for ASIC interface (0x8000-0xFFFF)
; Data2 (bits 8-6) - 000 No Wait states for DATA memory range (0x0000 - 0x7FFF)
; Prog1 (bits 5-3) - 000 One Wait state for Instruction memory range (0x8000-0xFFFF)
; Prog2 (bits 2-0) - 000 No Wait states for Instruction memory range (0x0000-0x7FFF)
; -----------------
; 1001000000000000 - 0x9000
SWWSR_INIT .set 0x9000
;SWCR_INIT
; reseved(bit15 -1) no used
; swsm(bit0) software wait -state multiplier bit
SWCR_INIT .set 0x1
; CLKMD: See 8.4.2 of the CPU and Peripherals manual.
; See Raman for chematic (CLKMD1,2,3 = 1,0,1 and desired clock frequency = 66 MHz)
; PLLMUL (bit 15-12) - 0010 PLL multiplier = 2 (mult by 3)
; PLLDIV (bit 11) - 0 PLL divider = 0 (div by 1)
; PLLCOUNT (bit 10-3)- 11111111 PLL counter set to max
; PLLONOFF (bit 2) - 1 PLL on
; PLLNDIV (bit 1) - 1 Select PLL mode
; PLLSTATUS (bit 1) - x PLL Status (read only)
; ------------------
; 0010011111111111 = 0x27ff
PLL_INIT_50MHZ .set 04007h
PLL_INIT_60MHZ .set 05007h
PLL_INIT_70MHZ .set 06007h
PLL_INIT_80MHZ .set 07007h
PLL_INIT_90MHZ .set 08007h
PLL_INIT_100MHZ .set 09007h
__stack: .usect ".stack",0
;-------------------------------------------------------------------------
.sect ".HpiText"
_c_int00:
;----------------------------------
; Disable and clear interrupts
;----------------------------------
STM #__stack,SP ; set to beginning of stack memory
ADDM #(__STACK_SIZE-1),*(SP) ; add size to get to top
ANDM #0fffeh,*(SP) ; make sure it is an even address
ssbx INTM ; intm =1 disable all interrupts
stm #0x002, IMR ; 开INT1
stm #0xFFFF, IFR ; Writing a 0 to an IFR bit,
; clears the interrupt flag
;----------------------------------
; 初始化DSP状态
;----------------------------------
LD #(__Vector_Start),A
AND #0XFF80,A
LD #PMST_INIT,B
AND #0X7F,B
ADD A,0,B
STLM B,PMST
;stm #PMST_INIT, PMST
;----------------------------------
;----------------------------------
; 初始化等等周期数
;----------------------------------
stm #SWWSR_INIT , SWWSR
stm #SWCR_INIT , 2BH ;SWCR
;----------------------------------
;----------------------------------
; 初始化段间等等周期数
;----------------------------------
stm #BSCR_INIT, BSCR
;----------------------------------
;初始化ARP
;cxp LD #0,ARP ;指向 AR0
;初始化数据页指针
LD #80H,DP ;指向0X4000
;初始化直接地址引用时,使用的基址由SP还是DP确定
SSBX CPL
; 初始化运行时钟
;----------------------------------
STM #0b, CLKMD ;switch to DIV mode
TstStatu:
LDM CLKMD, A
AND #01b, A ;poll STATUS bit
BC TstStatu, ANEQ
STM #PLL_INIT_60MHZ, CLKMD ;switch to PLL
;测试数据存贮器
CALL _Test_Memory
; 将0x3c00到0x4000 址址的1k程序移到0XFC00开头的运行地址中
RSBX SXM
NOP
NOP
LD #__BootRun, A
STM #__Boot_Store,AR1
STM #__Boot_lenth-1,BRC
RPTB Copy_Boot-1
WRITA *AR1+
ADD #1,A
Copy_Boot:
B _Second_Boot_Run_Init ;二次下载程序开始运行
*************************************
*初始化二次下载程序时的运行环境
*************************************/
; PMST_INIT: See 4.1.2 of the CPU and Peripherals manual.
; IPTR (bit 15-7) - 001110110 中断向量高9位
; MP/~MC (bit 6) - 1 内部ROM不映射到程序区中
; OVLY (bit 5) - 0 内部SRAM不映射到程序区中
; AVIS (bit 4) - 0 内部地址不可见
; DROM (bit 3) - 0 内部ROM不映射到数据空间
; CLKOFF (bit 2) - 0 时钟输出充许
; SMUL (bit 1) - 1 Saturate before multiply on MAC
; SST (bit 0) - 0 Do not saturate before store
; -----------------
; 11111 1111 1100 0010 = 0x77E2
PMST_BOOT .set 0x3b42 ;OVLY = 0,MP/MC=1
.text
_Second_Boot_Run_Init:
;----------------------------------
; Disable and clear interrupts
;----------------------------------
STM #__stack,SP ; set to beginning of stack memory
ADDM #(__STACK_SIZE-1),*(SP) ; add size to get to top
ANDM #0fffeh,*(SP) ; make sure it is an even address
ssbx INTM ;intm =1 disable all interrupts
stm #0x002, IMR ; 开INT1
stm #0xFFFF, IFR ; Writing a 0 to an IFR bit,
; clears the interrupt flag
;----------------------------------
; 初始化DSP状态
;----------------------------------
LD #(__Vector_Start),A
AND #0XFF80,A
LD #PMST_BOOT,B
AND #0X7F,B
ADD A,0,B
STLM B,PMST
;stm #PMST_INIT, PMST
;----------------------------------
;----------------------------------
; 初始化等等周期数
;----------------------------------
stm #SWWSR_INIT , SWWSR
stm #SWCR_INIT , 2BH ;SWCR
;----------------------------------
;----------------------------------
; 初始化段间等等周期数
;----------------------------------
stm #BSCR_INIT, BSCR
;----------------------------------
;初始化ARP
;cxp LD #0,ARP ;指向 AR0
;初始化数据页指针
LD #80H,DP ;指向0X4000
;初始化直接地址引用时,使用的基址由SP还是DP确定
SSBX CPL
; 初始化运行时钟
;----------------------------------
STM #0b, CLKMD ;switch to DIV mode
TstStatu1:
LDM CLKMD, A
AND #01b, A ;poll STATUS bit
BC TstStatu1, ANEQ
STM #PLL_INIT_50MHZ, CLKMD ;switch to PLL
NOP
NOP
B _main
RET
.sect ".exter"
_exti
LDM CLKMD, A
AND #1b,a
RET
.end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -