刚开始学2812,以前学过点54xx,想动手写2812的汇编。
下面是一段54xx代码:
.mmregs ;54X 存储器影射寄存器定义
.global _main ;声明_main为全局符号
_main:
nop
;-----------------------------------------------------
;----------------------初始化 CPU---------------------
;-----------------------------------------------------
ssbx INTM ; INTM=1,禁止所有可屏蔽中断
ld #0, DP ; 设置数据页指针DP=0
stm #0, CLKMD ; 切换CPU内部PLL到分频模式
;-------------------------------------------------------------------
;CLKMD DEFINITIONS:
; PLLMUL (bit 15-12) - 0000 PLL multiplier = 0 (mult by 1)
; 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)
; ------------------
; 0000011111111111 = 0x07ff CLKMD=1 X CLKIN
;--------------------------------------------------------------------
Statu1:
ldm CLKMD, A
and #01b, A
bc Statu1, ANEQ ;检查是否已经切换到分频模式?
stm #0x07ff,CLKMD ;设置DSP 时钟 10MHZ
;--------------------------------------------------------------------
nop
stm #0x3FF2,PMST
;--------------------------------------------------------------------
;PMST DEFINITIONS
; IPTR (bit 15-7) - 001111111 Run-time Interrupt vector location = 0x3f80 (for now)
; MP/~MC (bit 6) - 1 Turn off internal Instruction ROM (use RAM)
; OVLY (bit 5) - 1 Turn on internal RAM
; AVIS (bit 4) - 1 Address visibility on
; DROM (bit 3) - 0 Data ROM of FF00~FFFF is external
; CLKOFF (bit 2) - 0 Clockout enabled,only for use clkout=cpu clock
; SMUL (bit 1) - 1 Saturate before multiply on MAC
; SST (bit 0) - 0 Do not saturate before store
; -----------------
; 0011 1111 1111 0010 = 0x3ff2
;*---------------------------------------------------------------------*/
想请教下老手,如果用纯汇编在2812上写类似的东西,有几点不明白:
1、 .mmregs是否还要
2、2812里面是不是没有了,对位的操作了。
3、对2812频率的设置是不是,不需要再跳向分频模式,再切换频率,也不要再判断了。
4、另外能不能解答下dsp是怎么跳向_main的,这个问题在学54xx的时候也没完全搞清楚。知道54xx从ff80开始执行,然后中断向量表可以搬移,是不是在编译的时候选的参数就是确定_main是主程序的入口地址。还是CCS自动找.TEXT段的第一句的代码。 |