打印

TMS320C54x DSP CPU与外设(二)

[复制链接]
688|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
FCCdsp|  楼主 | 2016-11-27 21:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
第三章 数据寻址
   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中内容

相关帖子

沙发
FCCdsp|  楼主 | 2016-11-27 22:00 | 只看该作者
第四章 中断系统
 
   硬件和软件驱动都可以使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
保留

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

967

主题

1447

帖子

9

粉丝