DSP编程的关键问题分析
(4)使能FRST(FRST=1)(如果需要DSP内部产生帧同步)。
(5)等待2个R/T CLK时钟周期后,收或发端便会有效。
4 汇编语言程序中的变量
汇编语言程序中的公用变量应在文件中定义,如.def carry。汇编语言程序中使用的局部变量不需定义,可直接声明,例如trn_num .word 00h。如果在两个asm文件中有两个都没有定义的同名变量,则编译程序会认为分他们不是同一变量。在汇编程序的开头应有.mmregs宏语句。它一方面表示对默认定义的确认(ah,bh,trn等),另一方面可以对所用寄存器重新定义。如:.mmregs DMPREC .set 54h ;定义DMA优先和使能寄存器地址在54h DMSA .set 55h DMSDN .set 57h DXR10 .set 23h ;定义串口1的发送寄存器地睛在23h。
5 ST1寄存器中CPL位的影响
CPL位是编译模式控制位,它表示在相对直接寻址时采用哪种指针。当CPL=0时,使用页指针DP;当CPL=1时,使用堆栈指针SP。实际使用中二者没有什么差别,但使用SP寻址的程序更易读。在程序中经常使用CPL=1。
6 指令的歧义
6.1 比较下面指令STLM B,AR4 ;把bl内容送入寄存器AR4 (×)
STLM B,*AR4 ;把bl内容送入寄存器AR4 (√)
前者实际执行的是把bl内容送入一个系统用的缓冲区,后者也可用:MVDM BL,AR4 ;把bl内容送入寄存器AR4 (√)
其他易导致歧义的语句还有:
LD AR5,A ;把AR5的内容送入寄存器A (×)
LDM AR5,A ;把AR5的内容送入寄存器A (√)
ANDM #0x107e,AR4;把#107e加到寄存器AR4 (×)
ANDN #0x107e,*AR4;把#107e加到寄存器AR4 (√)
仅对某些寄存器有效的指令:
MVDD * AR2+,*AR3+ ;把以AR2为地址的内容拷入AR3的地址中此类指令用作数据块搬移特别有效,但仅对AR2、AR3、AR4、AR5有效。
易错语句中对程序运行危害最大的是:
ST #0,*(bsp0_out_sign) ;bsp0_out_sign是一个变量名(√)
STM #0,bsp0_out_sign ;此语句被编译为STM #0,PMST或STM #0,IMR (×)
这种语句会导致程序运行中的随机故障,且极难发现。
- 基于赛灵思Spartan-3A DSP的安全视频分析(02-17)
- 关于Linux操作系统的NTFS和内核分析(05-19)
- Linux 2.4.x内核软中断机制(04-06)
- 基于DSP的人脸识别系统设计(04-26)
- 3D图形芯片的算法原理分析(07-16)
- 解析:视频图像智能分析处理技术(08-08)
