TMS320C54x DSP CPU与外设(二)
[复制链接]
第三章 数据寻址 C54x提供七类寻址方式: l 立即数寻址 l 绝对地址寻址 l 累加器寻址 l 直接寻址 l 间接寻址 l 内存映象寄存器寻址 l 堆栈寻址 下面着重介绍以下几种方式。 1 绝对地址寻址 术语解释:dmad-数据存储地址;pmad-程序存储地址;PA-口地址;lk-长整数。 绝对地址寻址包括四类: l dmad寻址 l pmad寻址 l PA寻址 l *(lk)寻址 1.1 dmad寻址 dmad寻址用一标号标记数据空间地址,这类指令有: l MVDK Smem,dmad l MVDM dmad,MMR l MVKD dmad,Smem l MVMD MMR,dmad 如:MVKD SAMPLE,*AR5。此处SAMPLE即是dmad。 1.2 pmad寻址 pmad寻址用一标号标记程序空间地址,这类指令有: l FIRS Xmem,Ymem,pmad l MACD Smem,pmad,src l MACP Smem,pmad,src l MVDP Smem,pmad l MVPD pmad,Smem 如:MVPD TABLE,*AR7-。此处TABLE即为pmad。 1.3 PA寻址 PA寻址用一标号标记外部I/O口地址,这类指令有: l PORTR PA,Smem l PORTW Smem,PA 如:PORTR FIFO,*AR5。此处FIFO即为PA。 1.4 *(lk)寻址 *(lk)寻址也是用标号标记数据空间地址。 如:LD *(BUFFER),A。使用这类指令的好处在于不用修改DP和AR值。但有一点要注意的是,这类指令不能用于重复执行单指令中(RPT,RPTZ)。 2 直接寻址 在这类指令中,指令中的地址标号构成dmad的低7位(DP方式)或作为正向偏移量(SP方式)。所以指令中地址标号不得超过7位,采用DP或SP方式,由ST1中CPL位决定。CPL=0,采用DP方式;CPL=1,采用SP方式。 2.1 DP方式 DP方式,DP中内容作为dmad地址高9位,指令中地址标号作为低7位构成dmad地址。 2.2 SP方式 SP方式,以SP中内容作为dmad基地址,指令中地址标号作为正向偏移量,二者相加构成dmad地址。 3 间接寻址 间接寻址是指dmad由辅助寄存器AR0-AR7内容构成。使用间接寻址的灵活性不仅在于一条指令完成读或写数据存储区(单操作数),还在于一条指令可以完成两个不同存储区的读操作,或两个不同存储区的写操作,或对两个不同位置的一读一写操作。 3.1 对SARAM的访问 对SARAM访问使用寄存器AR0-AR7,其中AR0为变址寄存器。用法见下表: 语 法 | 功 能 | 描 述 | *ARx | dmad=ARx | ARx包含dmad | *ARx- | dmad=ARx ARx=ARx-1 | 访问后,ARx中地址内容减1 | *ARx+ | dmad=ARx ARx=ARx+1 | 访问后,ARx中地址内容加1 | *+ARx | dmad=ARx+1 ARx=ARx+1 | 访问前,ARx中地址内容加1 | *ARx-0B | dmad=ARx ARx=B(ARx-AR0) | 访问后,ARx中内容减去AR0中内容,并产生反向借位翻转(用于FFT算法) | *ARx-0 | dmad=ARx ARx=ARx-AR0 | 访问后,ARx中内容减去AR0中内容 | *ARx+0 | dmad=ARx ARx=ARx+AR0 | 访问后,ARx中内容减去AR0中内容 | *ARx+0B | dmad=ARx ARx=B(ARx+AR0) | 访问后,ARx中内容加上AR0中内容,并产生反向进位翻转(用于FFT算法) | *ARx-% | dmad=ARx ARx=circ(ARx-1) | 访问后,ARx中内容按循环寻址方式减1 | *ARx-0% | dmad=ARx ARx=circ(ARx-AR0) | 访问后,ARx中内容按循环寻址方式减去AR0中内容 | *ARx+% | dmad=ARx ARx=circ(ARx+1) | 访问后,ARx中内容按循环寻址方式加1 | *ARx+0% | dmad=ARx ARx=circ(ARx+AR0) | 访问后,ARx中内容按循环寻址方式加上AR0中内容 | *ARx(lk) | dmad=ARx+lk ARx=ARx | ARx中内容加上16位长偏移(lk)为dmad,ARx不更新 | *+ARx(lk) | dmad=ARx+lk ARx=ARx+lk | ARx中内容加上16位长偏移(lk)为dmad,ARx更新 | *+ARx(lk)% | dmad=circ(ARx+lk) ARx=circ(ARx+lk) | ARx中内容按循环寻址方式加上16位长偏移(lk)为dmad,ARx更新 | *(lk) | dmad=lk | 16位绝对地址寻址 | 循环寻址操作如下: 寄存器BK作为循环缓存区大小(R)。循环缓存区基地址的低N位必须为0。R和N满足以下关系: 。末地址为基地址+R。步进值 。变址index由以下算法确定: 若 ; 若 ; 若 。 3.2 对DARAM的访问 对DARAM访问使用辅助寄存器AR2-AR5,用法见下表: 语 法 | 功 能 | 描 述 | *ARx | dmad=ARx | ARx包含dmad | *ARx- | dmad=ARx ARx=ARx-1 | 访问后,ARx中地址内容减1 | *ARx+ | dmad=ARx ARx=ARx+1 | 访问后,ARx中地址内容加1 | *ARx+0% | dmad=ARx ARx=circ(ARx+AR0) | 访问后,ARx中内容按循环寻址方式加上AR0中内容 | 第四章 中断系统 硬件和软件驱动都可以使C54x产生中断。软件中断是指由程序指令引起的中断,这类指令有:INTR,TRAP,RESET。硬件中断可由外部硬件引发,或由片内外设内部引发。无论软件中断还是硬件中断都可分为可屏蔽中断和不可屏蔽中断。C54x处理中断按以下三个步骤: l 接收中断请求 l 响应中断 l 执行中断服务程序 3.2 中断标志寄存器IFR(以C549为例) 15-14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 保留 | BMINT1 | BMINT0 | BXINT1 | BRINT1 | HPINT | INT3 | TXINT | TRINT | BXINT0 | BRINT0 | TINT | INT2 | INT1 | INT0 | IFR中某位为1表明有相应中断,再次写1清除中断。 3.2 中断屏蔽寄存器IMR(以C549为例) 15-14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 保留 | BMINT1 | BMINT0 | BXINT1 | BRINT1 | HPINT | INT3 | TXINT | TRINT | BXINT0 | BRINT0 | TINT | INT2 | INT1 | INT0 | 要打开某个中断,只需向IMR中相应某位写1。而ST1中INTM位为中断总开关。 3.3 中断位置与优先级(以C549为例) 中断号 | 优先级 | 名 称 | 位 置 | 功 能 | 0 | 1 | RS/SINTR | 0 | 复位(软硬件) | 1 | 2 | NMI/SINT16 | 4 | 非屏蔽中断 | 2 | - | SINT17 | 8 | 软件中断17 | 3 | - | SINT18 | C | 软件中断18 | 4 | - | SINT19 | 10 | 软件中断19 | 5 | - | SINT20 | 14 | 软件中断20 | 6 | - | SINT21 | 18 | 软件中断21 | 7 | - | SINT22 | 1C | 软件中断22 | 8 | - | SINT23 | 20 | 软件中断23 | 9 | - | SINT24 | 24 | 软件中断24 | 10 | - | SINT25 | 28 | 软件中断25 | 11 | - | SINT26 | 2C | 软件中断26 | 12 | - | SINT27 | 30 | 软件中断27 | 13 | - | SINT28 | 34 | 软件中断28 | 14 | - | SINT29 | 38 | 软件中断29 | 15 | - | SINT30 | 3C | 软件中断30 | 16 | 3 | INT0/SINT0 | 40 | 外部中断0 | 17 | 4 | INT1/SINT1 | 44 | 外部中断1 | 18 | 5 | INT2/SINT2 | 48 | 外部中断2 | 19 | 6 | TINT/SINT3 | 4C | 定时器中断 | 20 | 7 | BRINT0/SINT4 | 50 | 带缓存串口0接收中断 | 21 | 8 | BXINT0/SINT5 | 54 | 带缓存串口0发送中断 | 22 | 9 | TRINT/SINT6 | 58 | TDM串口接收中断 | 23 | 10 | TXINT/SINT7 | 5C | TDM串口发送中断 | 24 | 11 | INT3/SINT8 | 60 | 外部中断3 | 25 | 12 | HINT/SINT9 | 64 | HPI口中断 | 26 | 13 | BRINT1/SINT10 | 68 | 带缓存串口1接收中断 | 27 | 14 | BXINT1/SINT11 | 6C | 带缓存串口1发送中断 | 28 | 15 | BMINT0/SINT14 | 70 | BSP0失步检测中断 | 29 | 16 | BMINT1/SINT13 | 74 | BSP1失步检测中断 | 30-31 | - | | 78-7F | 保留 |
|