_C54xDSP混合编程及中断的C语言实现
C54x 系列DSP编程方法
汇编程序 汇编程序一般情况下主要包括下列文件:
• vectors.asm: 中断向量表 • example.asm: 主程序.asm文件 • C54x.h: 外围寄存器地址定义的头文件 • example.cmd: 链接命令文件 • example.pjt: 工程文件 • example.out: 程序的执行代码 •example.map: 代码生成工具生成输出的.map文件
2、在C语言中插入汇编语句 要点:使用asm语句将单行的汇编语言插入由编译器产 生的汇编语言文件,asm语句类似调用一个名为asm 的函数,语法格式如下: asm(“ assembler text”); 3、在程序中访问汇编语言变量 要点:a)使用.bss或.usect伪指令定义变量; b)使用.global伪指令将变量声明为外部变量; c)在汇编语言中,在变量名前加一下划线; d)在C中,将变量声明为外部变量,然后正常访问。
混合程序 汇编和C混合编程程序一般情况下主要包括下列文件: cvectors.asm:中断向量表 example_c.c:主程序.C文件 example_c.asm:主程序中调用的.asm文件 C54x _c.h:外围寄存器地址定义的C头文件 C54x.h:外围寄存器地址定义的头文件 example_c.cmd:链接命令文件 example_c.pjt:工程文件 example_c.out:程序的执行代码 example.map:代码生成工具生成输出的.map文件
编程实践
1、编写一个汇编程序控制实验台上的LED灯的亮 灭变化; (一种方法) 2、编写一个C程序控制实验台上的LED灯的亮灭 变化;(两种方法) 3、利用C和汇编的混合编程控制实验台上的LED 灯的亮灭变化。(一种方法)
第四章 C54xDSP汇编语言与混合编程
例:00000000B=0(十进制) 0101010B=42 (十进制) 2、八进制整型常数 后缀加Q或q;或前缀加0 例:10Q=8(十进制) 0226=150 (十进制) 3、十进制整型常数 无后缀 例:1000=1000(十进制) -32768=-32768 (十进制)
4、十六进制整型常数 后缀加H或h;或前缀加0x 例:10H=16(十进制) 0x12=18 (十进制) 5、浮点常数 浮点数表示方法:[+|-][nn].[nn[E|e[+|-]nn]] nn代表十进制数字串,浮点数前可带+或-,必须制定小数 点。 例:4.e5为有效浮点数,但4e5为非法浮点数。 4.0 .4 -.314e13 +314.59e-2
堆栈的使用方法
在用堆栈之前,要在RAM中开辟一个堆栈区.方法: size .set 120 stack .usect “STACK”, size STM # stack + size, SP 前两句是在RAM中定义一个名为STACK的保留空间, 共120个单元.第三句将这个空间的高地址赋给SP. 设置好就可以用了 CALL pmad RET
2、初始化段 .text [段起点] .data [段起点] .sect “段名”[,段起点] 其中,段起点是可选项,若定义就是为段程序计数器(SPC) 定义一个起始值,若缺省,则SPC为0。 3、子段 子段语法:基段名:子段名 例如:在.text段内建立一个名为_fuct的子段 .sect “.text: _fuct”
.lst列表文件
注意: 汇编器遇到.text, .data, .sect命令时立即停止汇编至当前块 中,且开始汇编至相应的块中。当会期遇到.bss, .usect命 令并不结束当前块的开始一个新块,只是暂时离开但前块。 .lst列表文件由四部分组成 第一部分(field1):源程序的行号 第二部分(field2):段程序计数器 第三部分(field3):目标代码 第一部分(field1):源程序
TMS320C54XDSP原理、编程及应用
4.2 汇编源程序格式
汇编语言是DSP应用软件的基础,编写汇编语言必须要符合 相的格式,这样汇编器才能将源文件转换为机器语言的目标 文件。汇编语言指令书写形式有两种:助记符形式和代数式 形式,本章以助记符指令系统为主介绍。TMS320C54X汇编语 言源程序由源说明语句组成,包括汇编语言指令、汇编伪指 令(汇编命令)、宏指令(宏命令)和注释等,一般一句程序占 据编辑器的一行。汇编器每行最多只能读200个字符,因此源 语句的字符数不能超过200个。一旦长度超过200个字符,汇 编器将自行截去行尾的多余字符并给出警告信息。
1.1 指令系统概述
符号 意义
SHFT
4位移位数(0≤SHFT≤15)
SHIFT 5位移位数(-16≤SHFT≤15) Sind Smem SP src ST0 ST1 SXM 使用间接寻址的单数据存储器操作数 16位单数据存储器操作数 堆栈指针 源累加器(A或B) 状态寄存器0 状态寄存器1 ST1中的符号扩展方式位
4.2.2 汇编语言常量
C54X汇编器支持7种类型的常量:二进制整数、八进制整数、十进 制整数、十六进制整数、字符常量、汇编时间常量和浮点数常量。
汇编器在内部把常量作为32位量常量不能进行符号扩展。例如,常量 FFH等同于00FFH(16进制)或255(10进制),但不是-1。
1. 二进制整数常量 二进制整数常量最多由16个二进制数字组成,其后缀为B(或b)。 如果少于16位,汇编器将向右对齐并在左面补零。下列二进制整 数常量都是有效的。
4.2.1 汇编语言语句格式
1. 标号域
标号供本程序的其他部分或其他程序调用。对于所有C54X汇编指令和 大多数汇编伪指令,标号都是可选项,但伪指令.set和.equ除外,二 者需要标号。标号值和它所指向的语句所在单元的值(地址或汇编时 段程序计数器的值)是相同的。 使用标号时,必须从源语句的第一列开始。一个标号允许最多有32个 字符:A~Z、a~z、0~9、_和$,第一个字符不能是数字。标号对大 小写敏感,如果在启动汇编器时,用到了-c选项,则标号对大小写不 敏感。标号后可跟一个冒号“:”,也可不跟。如果不用标号,则第 一列上必须是空格、分号或星号。
c54xx系列DSP汇编指令详解
意义 或运算 异或运算
减1 赋值于 表示一个立即数 x 的补码
|x|
x 的绝对值
0x
十六进制数据
>>
右移
<<
左移
×
乘法
*
指针指向的地址
TMS320C54xx 系列 DSP 的指令一共有 129 条,按功能分为如下几类:算术指令、逻 辑指令、程序控制指令、存储和装入指令以及循环指令。下面根据每种指令功能的不同,
目的累加器的反 if dst=A,then dst_=B if dst=B then dst_=A
E 地址总线 EAB 地址寄存器 23 位立即数表示的程序存储器地址 ST1 寄存器中的分数方式位 十六进制数据 十六进制数据 累加器 A 的高端(位 32~16) ST1 寄存器中的保持方式位 中断标志寄存器 ST1 寄存器中的中断屏蔽位 少于 9 位的短立即数
3 位立即数(0 ≤ k3 ≤ 7 ) 5 位立即数(-16 ≤ k5 ≤ 15 ) 9 位立即数(0 ≤ k9 ≤ 115 )
16 位长立即数 使用长字寻址 32 位单数据存储器操作数 存储器映射寄存器,AR0~AR7 或 SP
存储器映射寄存器,AR0~AR7 或 SP
紧跟 XC 指令的字数,n=1 或 2 指定在 RSBX、SSBX 和 XC 指令中修改的状态寄存器 N=0,状态寄存器 ST0 N=1,状态寄存器 ST1 ST0 寄存器中的累加器 A 的溢出标志 ST0 寄存器中的累加器 B 的溢出标志 目的累加器(A 或 B)的溢出标志 目的累加器反(A 或 B)的溢出标志 源累加器(A 或 B)的溢出标志 ST1 寄存器中的溢出方式位 16 位立即数表示的端口地址
③ 乘法指令
中断在TMS320C54x系列DSP中的应用(精)
中断在TMS320C54x系列DSP中的应用摘要:实现了一种全集成可变带宽中频宽带低通滤波器,讨论分析了跨导放大器-电容(OTA—C)连续时间型滤波器的结构、设计和具体实现,使用外部可编程电路对所设计滤波器带宽进行控制,并利用ADS软件进行电路设计和仿真验证。
仿真结果表明,该滤波器带宽的可调范围为1~26 MHz,阻带抑制率大于35 dB,带内波纹小于0.5 dB,采用1.8 V电源,TSMC 0.18μm CMOS工艺库仿真,功耗小于21 mW,频响曲线接近理想状态。
关键词:Butte摘要:详细分析了TMS320C54x系列DSP的中断机制,以及在扩展地址模式下中断控制所具有的一些特点,并给出了DSP/BIOS下中断的管理。
关键词:中断中断向量表 TMS320C54x DSP/BIOS DSP中断是嵌入式芯片的灵魂,这是因为多数嵌入式系统对实时性都有很高的要求,即对出现事件的响应要极为迅速。
中断与软件查询方式相比有着更高的执行效率。
在TI公司的TMS320C54x系列(以下简称C54x系列)DSP中,同样也提供了很好的中断机制。
1 C54x中的中断机制中断信号实质上是由硬件或者是软件驱动的信号,它能使DSP暂停正在执行的程序并进入中断服务程序(ISR)。
在最典型的DSP系统中,如果A/D转换器需要送数据到DSP中,或者D/A转换器需要从DSP中取走数据,都是通过硬件中断向DSP发出请求的。
C54x系列DSP支持软件中断和硬件中断。
软件中断是由指令(INTR、TRAP、RESET)触发的,硬件中断是由外围器件触发的。
硬件中断实际上又分为两类:一类是由DSP的片外外设(如A/D转换器)触发的,另外一类是由DSP的片内外设(如定时器中断)触发的。
硬件中断又有优先级的区分,这是为了处理同一时刻有多个硬件中断源触发中断的情况。
硬件中断的种类和优先级请参看具体使用的芯片资料。
如果按照可屏蔽情况分类,中断又可分为可屏蔽中断(C54x至多支持16个)和不可屏蔽中断。
最新dsp-第6章-C54x的C语言程序设计教学讲义PPT课件
2020/11/28
DSP原理及应用
10
第6章 TMS320C54xC语言程序设计
6.1.2 C54x C与ANSI C的不同点 C54x C与ANSI C的不同点总的来说有以下几个方面:
1. 所处理数据的性质不同 面向PC机的ANSI C所处理的数据是一些采集好
的、数据量较多的、以数据块为单位的数据。对这 些数据的处理实时性要求并不是很高。
2020/11/28
DSP原理及应用
4
第6章 TMS320C54xC语言程序设计
6.1.1 C54x C与ANSI C的相同点 1. 常量定义
格式:const 类型 符号=数值;
例6-1 const short d1=8;
C54x C也可以用下面的方法定义符号常量 #define d1 8;//程序中出现d1时均会以8来代替
内部出现“死循环”。
C54x C在系统初始化之后安排“死循环”,在“死 循环”内等待各种中断事件(如外部中断事件、定时器 中断事件、通信口的中断事件等)的发生。
2020/11/28
DSP原理及应用
13
第6章 TMS320C54xC语言程序设计
4.语法及数据结构细节上的不同
(1)C54x的C语言数据类型及其表示范围
dsp-第6章-C54x的C语言 程序设计第Biblioteka 章 TMS320C54xC语言程序设计
6.1 C54x C语言介绍 6.2 C54x C语言编程 6.3 C54x C代码优化
2020/11/28
DSP原理及应用
2
第6章 TMS320C54xC语言程序设计
6.1 C54x C语言介绍
C54x C编译器支持美国国家标准委员会 (American Nation Standards Institute ,ANSI)开发 的C语言标准。
第4章TMS320C54xTM DSP汇编语言与混合编程
文件。C54x DSP汇编语言源程序由源说明语句组成,包含汇编
语言指令、汇编伪指令、宏伪指令和注释等,一般一句程序占 据编辑器的一行。由于汇编器每行最多只能读200个字符,因此
源语句的字符数不能超过200个,一旦长度超过200个字符,汇
编器将自行截去行尾的多余字符并给出警告信息。如果截去的 是注释,那么不影响程序的正确执行;但如果截去了语句的执
第4章 TMS320C54xTM DSP汇编语言与混合编程 续表二
符号 k9 1k Lmem mmr MMR MMRx MMRy ( ) [ ] 说 明 9 位立即数(0≤k9≤7) 16 位长立即数 使用长字寻址的 32 位单访问数据存 储器操作数 存储器映射寄存器 存储器映射寄存器, AR0~AR7 或 SP 寄存器或存储单元包含的内容 表示可选项 符号 uns XF XPC Xmem Ymem # ‖ 说 明
缀,将操作数的内容作为地址。
第4章 TMS320C54xTM DSP汇编语言与混合编程 4.2.2 汇编指令介绍 C54x DSP按指令的功能分类,可分为如下四类: * 数据传送指令; * 算术运算指令; * 逻辑运算指令; * 程序控制指令。
第4章 TMS320C54xTM DSP汇编语言与混合编程
第4章 TMS320C54xTM DSP汇编语言与混合编程 (2) 标号为可选项。若要使用标号,则必须从第1列开始。 标号长度最多为32个字符,由A~Z,a~z,0~9,_和$等组成,
但第1个字符不能为数字。标号后可以跟一个冒号(:),但并不
作为标号的一部分。 (3) 每个域必须由1个或多个空格分开,制表符等效于空格。 (4) 注释是可选项,开始于第1列的注释须用星号或分号(*
DSP期末复习题及答案
DSP期末复习题及答案⼀、填空题(每空2分,共20分)1、在C语⾔和C55x汇编语⾔的混合程序设计中,C函数的参数和返回值传递到C55x的寄存器中。
在函数“long func(int *p1, int i2, int i3, int i4)”中,*p1传递到AR0寄存器,i2传递到T0寄存器,i4传递到AR1寄存器,返回值由AC0寄存器传递。
2、汇编语⾔“mov *AR0,AC0”使⽤的寻址⽅式是间接寻址模式,“mov #0x3,DPH”使⽤的寻址⽅式是直接寻址模式,“mov *(#0x011234),T2”使⽤的寻址⽅式是绝对寻址模式。
3、指令执⾏前AC0的值是0012345678,那么汇编语句“AND #0x7f, AC0”,执⾏之后,AC0的值是0000000078。
4、C55x 的链接器命令⽂件中,SECTIONS命令的主要作⽤是告诉链接器如何将输⼊段组合成输出段,以及在存储器何处存放输出。
MEMORY命令的主要作⽤是定义⽬标系统的存储器配置图,包括对存储器各部分的命名,以及规定它们的起始地址和长度。
⼆、简述题(共40分)1、根据你的理解,试列举 DSP 芯⽚的特点?(5分)答:哈佛结构;多总线结构;指令系统的流⽔线操作;专⽤的硬件乘法器;特殊的DSP 指令;快速的指令周期;丰富的外设2、TMS320C55x 芯⽚的总线结构有何特点,主要包括哪些总线?它们的功能是什么?(6分)答:TMS320C55x DSP采⽤先进的哈佛结构并具有⼗⼆组总线,其独⽴的程序总线和数据总线允许同时读取指令和操作数,实现⾼度的并⾏操作。
采⽤各⾃分开的数据总线分别⽤于读数据和写数据,允许CPU在同⼀个机器周期内进⾏两次读操作数和⼀次写操作数。
独⽴的程序总线和数据总线允许CPU同时访问程序指令和数据。
包括12条总线,分别是:PAB和PB、BAB和BB、CAB和CB、DAB和DB、EAB和EB、FAB和FB。
3、DSP 为了降低功耗采取了哪些措施?(6分)答:双电压供电;多种⼯作模式4、TMS320C55x 的总存储空间为多少?可分为哪 3 类,它们的⼤⼩是多少?存储器空间的各⾃作⽤是什么?(6分)答:程序空间16M Byte;I/O空间64K Words;数据空间8M Words5、TMS320C55x有哪些寻址⽅式,它们是如何寻址的?试为每种寻址⽅式列举⼀条指令(6分)答:直接寻址模式,mov #K16,DP;间接寻址模式,mov *AR0,AC0;绝对寻址模式,mov *(#0x011234),T2;MMR寻址模式,mov *abs16(#AR2), T2;寄存器位寻址模式,btstp @30, AC1;圆形寻址模式。
第五章 TMS320C54x DSP的汇编语言程序设计
二、汇编语言中的常数和字符串
常数、字符串和符号是汇编器能识别的数据项 ,是汇编指 令、伪指令和宏指令语句中操作数的基本组成部分。
1. 常数
◆ 汇编器支持6种类型的常数:二进制数、十进制数、八进制 数、十六进制数、字符常数和浮点常数。
2. 字符串
◆ 字符串是由双引号( “ ”)括起来的一 串字符 ,双引号是 字符串的一部分 。串的最大长度是变化的 ,并由每一个使 用字符串的伪指令定义 。字符串与字符常数不同 ,字符常 数代表一个单独的整数值 ,而字符串是字符的列表 。如: “simple ”。
首都师范大学信息工程学院
22
5 .4 汇编器
三、常用汇编伪指令 ◆ TMS320C54x DSP伪指令给程序提供数据和控制汇编过程。
◆ 具体实现以下任务:
(1)将数据和代码汇编进特定的段。 (2) 为未初始化的变量保留存储器空间。 (3)控制展开列表的形式。
(4)存储器初始化。 (5)汇编条件块。
操作
并行存储和相加/减 、并行存储和相乘 、其他加载和存储指令
首都师范大学信息工程学院
14
5 . 2 汇编语言的指令系统
一、指令系统中的符号和缩写 指令和操作码中的符号和缩写。
二、算术运算指令
算术运算指令可分为加法指令、减法指令、乘法指令、 乘加指令、乘减指令、双操作数指令和专用指令。 三、逻辑运算指令
NOP指令 ,还没有操作数。 4. 注释项 ◆ 注释项用来说明一条、几条指令或一段程序的功能 ,可以帮助用
户更快地理解程序 。对于编程者 ,应该重视注释的书写。 ◆ 注释从分号(; )开始 ,可以放在指令或伪指令的后面 ,也可以单
独占一行或数行。
首都师范大学信息工程学院
TMS320C54XX系列DSP中断系统的编程
wo d r
_
0, 0 0,
一
一
一
q 3l
b
r et
np o hp o
it n0
() 1 引用中断服务程序标号 , “e _ IT3 R 如 xf TN 0 S ”。
() 2引用 其 他在 中断 向量 程 序 中使 用 的程 序 标
号 , “rf c it0 ‘e rt 如 ~ n0 … . f e r e”。
放 在 以 0 F 0 默认 ) F S H( 为起 始 地址 的连 续 18B空 2 间 ,S D P可从 中断 向量 表进 入并执 行 复位 中断 服务
.pa e 4 6 s c 1
.pa e 4 6 s c 1
sn 21 .pa e 1 i t s c 4 6
sn 2 it2
sn 2 it3
.pa e 1 s c 4 6
.pa e 4 6 s c 1 .pa e 4 6 s c 1
Re e XF: st RS BX
地由
用于 主程序 修改 WT ( R 中断 向量指 针 寄存 器) 的值 , 指 向中断 向量表 的新位 置 , 实现 中断 向量 表 的重新
定 位 。 而可得 中断 向量表 程序 。 从
.
mmr g es
.
rf e
rt e
.
rf e it0 e n O
.
r f TI e NT0 S I R go lv co lba e t r
s c . t t b e e t i a l n
2 举 例
要 求 : 用 定 时 器 中 断 产 生 一 个 方 波 。 中 断 采 该 系统 的设计包 括 : 中断 服 务 程 序 ; 断 向量 表 ; 程 中 主
DSP中断的C编程步骤
3执行中断服务程序
向对应的PIEACKx位写1,从而使能PIEIFRx分组中的其他中断;
执行相应中断处理代码;
从新置位对应IERx=1位,从而从新使能对应的CPU中断;
externcregister volatileunsigned intIER;
2,初始化各控制寄存器:
CPU寄存器:IER=0x0000;//禁止所有CPU中断;
IFR=0x0000;//清空CPU中断标志寄存器;
DINT asm(" setc INTM");//禁止所有可屏蔽中断
PIECTRL.ENPIE=0;//禁止所有PIE中断;
interruptvoid PIE_RESERVED(void) // Reserved space. For test.
{
asm (" ESTOP0");
for(;;);
}
二:
设
置
PIE
控
制
寄
存
器
1,以cregister声明CPU相关寄存器:
externcregister volatileunsigned intIFR;
PIEIERx =0x0000;//禁止各PIE中断;
PIEIFRx =0x0000;//清楚各PIE中断标志;(不需要)
PIEACK=0xffff;//清除所有PIE组向CPU申请的中断标志位
3,设置开启中断:
在相关外设控制寄存器中使能对应中断,如:
SCIRegsA.SCICTRL2 |=0x03;//使能SCI_A的发送和接收中断;
_C54xDSP混合编程及中断的C语言实现
微 处 理 机M I CROPROCESS ORS’C54x DSP混合编程及中断的C语言实现3陈丽安1,魏宏伟2(1.厦门理工学院,厦门361005;2.东北微电子研究所,沈阳110032) 摘 要:为了充分发挥C语言和汇编语言各自的优势,在对T MS320C54x DSP进行软件开发时,可用两种语言混合编程。
本文介绍了基于T MS320C54x DSP的C语言和汇编语言混合编程的程序设计方法,对用C语言实现DSP的中断功能进行了详细说明。
最后以多尺度三次B样条小波分解算法为例说明T MS320C54x DSP混合编程的方法及步骤,并给出了C语言及汇编语言的源程序代码。
关键词:数字信号处理器(DSP);汇编语言;C语言;混合编程中图分类号:TP368.1,TP312 文献标识码:A 文章编号:1002-2279(2005)03-0052-05The M i xed Language P ro g ramm i ng and the I n te rrup t R ea li za ti o ni n C Language fo r’C54x D S PCHEN L i-an1,W E I Hong-wei2(1.X iam en L ujiang U niversity,X iam en361005,China;2.N ortheast M icroelectronics Institute,Shenyang110032,China) Abstract:The asse mbly language of T MS320C54x DSP is usually conjunct with C code when the DSP p r ojects are devel oped in order t o make full use of the advantage of these t w o types of language.The app r oach and strategy of the m ixed language p r ogra mm ing based on T MS320C54x DSP are intr oduced in this paper and the DSP interrup t functi on based on C language is p r oposed in detail.The decompositi on algorith m of the quadratic B s p line wavelet is taken as an exa mp le t o illustrate the method of m ixed lan2 guage p r ogra mm ing,the C p r ogra m s and the asse mbly language codes are als o listed at the end of this pa2 per.Key words:D igital Signal Pr ocess or(DSP);A sse mbly language;C language;M ixed language p r o2 gra mm ing1 引 言在对T MS320C54x DSP进行软件开发时,既可由汇编语言、也可由C语言实现。
dspC54x的C语言程序设计
2020年2月22日
DSP原理及应用
11
第6章 TMS320C54xC语言程序设计
2.数据出输入输出设备不同
面向PC机的ANSI C所处理的数据来自硬盘、内存等 存储介质,或者是键盘的输入。其输出是显示器、通信口 或者实时输出。对人机界面提出了较高的要求。
本章重点介绍DSP的C语言程序设计的特点、DSP C语 言编程的设计技巧、C与汇编的混合编程实现等
2020年2月22日
DSP原理及应用
1
第6章 TMS320C54xC语言程序设计
6.1 C54x C语言介绍 6.2 C54x C语言编程 6.3 C54x C代码优化
2020年2月22日
DSP原理及应用
21
第6章 TMS320C54xC语言程序设计
3)寄存器变量 DSP的C语言扩展了寄存器变量。在一个C函数内部最
多可以使用两个寄存器变量,编译器在编译这两个寄存器 变量时用AR6和AR7这两个辅助寄存器分别做了对应:
★AR6被赋给第一个寄存器变量 ★AR7被赋给了第二个寄存器变量
寄存器变量的定义格式: register type AR6 或 register type AR7
23
第6章 TMS320C54xC语言程序设计
例如: int sum; int a[8] ={1,2,3,4,5,6,7,8}; for(i=0;i<8;i++) sum=sum+a[i];
在PC机上运行的结果为sum=36。
注意:在DSP上运行,结果可能不是sum=36。 因为变量sum没有初始化,初始值是未知的。
第3章TMS320C54xTM DSP中断系统
第3章 TMS320C54xTM DSP中断系统
2) INTM位清0
ST1的中断模式位(INTM)使能或禁止所有可屏蔽中断。
(1) 当INTM=0,所有非屏蔽中断被使能。
DMAC3 DMAC2
DMAC1
(c) C5402 IFR
15~14 13
12
11
10
9
8
7
6
5
4
3 2 10
Resvd
BXINT1 BRINT1
BXINT2 BRINT2
DMAC5 DMAC4 或
或 HPINT INT3 或
或 BXINT0 BRINT0 TINT0 INT2 INT1 INT0
DMAC3 DMAC2
对于被使能的中断,当产生IACK(中断应答信号)信号时, 在CLKOUT的上升沿,地址位A6~A2会指明中断号。如果中断 向量驻留在片内存储器,并且用户想查看这些地址,C54x DSP 必须在地址可见模式下工作(AVIS=1),以便中断号被译码。如 果当C54x DSP处于Hold模式并且HM=0时,则会产生一个中断。 当 IACK信号有效时,地址不可见。
Resvd
INT1 INT0
(e) C5420 IFR
图3.1 C54x DSP中断标志寄存器(IFR)
第3章 TMS320C54xTM DSP中断系统
图3.2所示为部分常用C54x DSP的IMR,RS 和 NMI都不包括 在IMR中,IMR不能控制这两个中断。
15~12 11
10
'C54x DSP混合编程及中断的C语言实现
'C54x DSP混合编程及中断的C语言实现
陈丽安;魏宏伟
【期刊名称】《微处理机》
【年(卷),期】2005(026)003
【摘要】为了充分发挥C语言和汇编语言各自的优势,在对TMS320C54x DSP进行软件开发时,可用两种语言混合编程.本文介绍了基于TMS320C54x DSP的C语言和汇编语言混合编程的程序设计方法,对用C语言实现DSP的中断功能进行了详细说明.最后以多尺度三次B样条小波分解算法为例说明TMS320C54x DSP混合编程的方法及步骤,并给出了C语言及汇编语言的源程序代码.
【总页数】5页(P52-56)
【作者】陈丽安;魏宏伟
【作者单位】厦门理工学院,厦门,361005;东北微电子研究所,沈阳,110032
【正文语种】中文
【中图分类】TP368.1;TP312
【相关文献】
1.C54x系列DSP的快速双精度平均算法实现 [J], 张华;刘伟;吴友宇
2.TMS320C3xDSP的C和汇编语言混合编程及中断的C语言实现 [J], 齐宗英;陈西宏;苏红潮
3.C54x系列DSP多目标板程序下载方案的实现 [J], 张华
4.基于C54X DSP的实时混响效果器 [J], 马家敏;何建忠
5.FIR滤波器的C54x DSP实现 [J], 呼和牧仁;吴晓庆
因版权原因,仅展示原文概要,查看原文内容请购买。
C54x DSP中断
Copyright © 2003 Texas Instruments. All rights reserved.
中断分类
每个C54x DSP的中断,无论是硬件中断还是软件中断, 可以分成如下两大类: ☆ 可屏蔽中断——这些都是可以用软件来屏蔽或使能 的硬件和软件中断。 C54x DSP最多可以支持16个用户可屏 蔽中断。每种处理器只使用其中的一个子集。 ☆ 非屏蔽中断——这些中断是不能够屏蔽的。 C54x DSP总是响应这一类中断,并从程序转移到中断服务程序。 C54x DSP的非屏蔽中断包括所有的软件中断,以及两个外 部硬件中断/RS和/NMI。 /RS是一个对C54x DSP所有操作 方式产生影响的非屏蔽中断;而/NMI中断不会对C54x DSP 的任何操作模式产生影响。
C54x DSP的中断系统 C54x DSP的中断系统
中断是由硬件驱动或者软件驱动的信号,中断信号使C54x DSP暂停正在执行的程序,并进入中断服务程序(ISR)。 C54x DSP既支持软件中断,也支持硬件中断: ☆ 由程序指令(INTR、TRAP或RESET)请求的软件中断; ☆ 由外部物理设备信号请求的硬件中断,这种硬件中断有 两种形式: ◆ 受外部中断口信号触发的外部硬件中断; ◆ 受片内外设信号触发的内部硬件中断。 当同时有多个硬件中断被触发时, C54x DSP按照中断优 先级别的高低对它们进行服务。
Copyright © 2003 Texas Instruments. All rights reserved.
执行中断服务程序一旦中断被应答c54xdsp执行中断向量地址所指向的分支转移指令并执行中断服务程序执行中断向量地址所指向的分支转移指令并执行中断服务程序isr
TMS320C5000™ : 中断问题
DSP实验-定时器中断实验
实验四 定时器中断实验一:实验目的1。
熟悉定时器初始化的步骤;2。
熟悉定时器控制寄存器(TCR )的含义和使用;3.熟悉定时器的原理和应用。
二:实验内容本实验要求编写一个简单的定时器中断程序,设置一定的周期控制与XF 引脚相连的LCD 指示灯.当定时器中断产生时可以观察到LCD 周期性闪烁。
三:实验原理1.定时器.C54xx 系列的DSP 都具有一个或两个预定标的片内定时器,这种定时器是一个倒数定时器,它可以被特定的状态位实现停止、重启动、重设置或禁止。
定时器在复位后就处于运行状态,为了降低功耗可以禁止定时器工作。
应用中可以用定时器来产生周期性的CPU 中断或脉冲输出.定时器的功能方框图如图9。
1所示,其中有一个主计数器(TIM )和一个预定标计数器(PSC )。
TIM 用于重装载周期寄存器PRD 的值,PSC 用于重装载周期寄存器TDDR 的值。
图5。
1信号,是在器件复位时,DSP 向外围电路(包括定时器)发送的一个信号,此信号将在定时器上产生以下效果:寄存器TIM 和PRD 装载最大值(0FFFFH );TCR 的所有位清0;结果是分频值为0,定时器启动,TCR 的FREE 和SOFT 为0。
定时器实际上是有20bit 的周期寄存器.它对CLKOUT 信号计数,先将PSC (TCR 中的D6~D9位)减1,直至PSC 为0,然后把TDDR (TCR 中的低4位)重新装载入PSC,同时将TIM 减1,直到TIM 减为0.这时CPU 发出TINT 中断,同时在TOUT 引脚输出一个脉冲信号,脉冲宽度与CLKOUT 一致,然后将PRD 重新装入TIM ,重复下去直到系统或定时器复位.定时器产生中断的计算公式如下:TINT t c 为 CLKOUT 的周期)TIM :定时器寄存器,用于装载周期寄存器值并自减1。
PRD :周期寄存器,用于装载定时器寄存器。
TCR :定时器控制寄存器,包含定时器的控制状态位。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
微 处 理 机M I CROPROCESS ORS’C54x DSP混合编程及中断的C语言实现3陈丽安1,魏宏伟2(1.厦门理工学院,厦门361005;2.东北微电子研究所,沈阳110032) 摘 要:为了充分发挥C语言和汇编语言各自的优势,在对T MS320C54x DSP进行软件开发时,可用两种语言混合编程。
本文介绍了基于T MS320C54x DSP的C语言和汇编语言混合编程的程序设计方法,对用C语言实现DSP的中断功能进行了详细说明。
最后以多尺度三次B样条小波分解算法为例说明T MS320C54x DSP混合编程的方法及步骤,并给出了C语言及汇编语言的源程序代码。
关键词:数字信号处理器(DSP);汇编语言;C语言;混合编程中图分类号:TP368.1,TP312 文献标识码:A 文章编号:1002-2279(2005)03-0052-05The M i xed Language P ro g ramm i ng and the I n te rrup t R ea li za ti o ni n C Language fo r’C54x D S PCHEN L i-an1,W E I Hong-wei2(1.X iam en L ujiang U niversity,X iam en361005,China;2.N ortheast M icroelectronics Institute,Shenyang110032,China) Abstract:The asse mbly language of T MS320C54x DSP is usually conjunct with C code when the DSP p r ojects are devel oped in order t o make full use of the advantage of these t w o types of language.The app r oach and strategy of the m ixed language p r ogra mm ing based on T MS320C54x DSP are intr oduced in this paper and the DSP interrup t functi on based on C language is p r oposed in detail.The decompositi on algorith m of the quadratic B s p line wavelet is taken as an exa mp le t o illustrate the method of m ixed lan2 guage p r ogra mm ing,the C p r ogra m s and the asse mbly language codes are als o listed at the end of this pa2 per.Key words:D igital Signal Pr ocess or(DSP);A sse mbly language;C language;M ixed language p r o2 gra mm ing1 引 言在对T MS320C54x DSP进行软件开发时,既可由汇编语言、也可由C语言实现。
汇编语言作为一种面向机器的低级语言,可以最充分地利用DSP所提供的硬件资源,编译效率高,执行速度快,但程序的可读性、可维护性及可移植性均较差,且代码编写繁杂,开发周期较长,不易升级。
C语言作为一种优秀的高级语言,具有丰富的库函数,使用灵活方便。
特别地,由TI公司提供的CCS(Code Co mposer Studi o)集成了优化ANSI C编译器,使DSP的开发调试可在C的源程序级进行。
但即便是经过优化的代码,其效率也无法与手工编写的汇编代码相比。
另外,对DSP某些硬件控制的编程,用C语言不如用汇编语言方便,有些甚至根本无法实现[1]。
为了充分发挥上述两种语言的优势,克服各自的不足,可将它们混合进行编程:对实时性要求较高或需对硬件直接控制的功能,如A/D采样程序及数字信号处理的核心算法等,可由汇编语言实现;而对运行速度和代码效率要求不高但要求可读性强维护容易的程序,如系统初始化、用户操作界面等,则用C语言编写。
因此,混合编程法已成为开发T MS320C54x DSP应用程序的常用方法。
2 混合编程的几种方式对T MS320C54x DSP,C语言与汇编语言混合编程有如下几种方式。
(1)在C程序中直接嵌入汇编语句第3期2005年6月 No.3Jun.,20053基金项目:本课题为福建省教育厅项目(JB03282) 作者简介:陈丽安(1966-),女,福建龙岩人,博士研究生,副教授,主研方向:智能电器。
收稿日期:2004-04-01陈丽安等:’C54x DSP 混合编程及中断的C 语言实现在C 语言程序中可以直接插入DSP 的汇编指令,格式如下:as m (“汇编指令”);用这种方式可在C 程序中直接修改DSP 寄存器值或实现一些硬件控制功能。
但要特别注意不能破坏C 的运行环境。
(2)手工修改C 程序编译后所生成的汇编代码通过控制编译器,由C 程序可生成具有交叉列表的汇编程序。
手工修改该程序并进行汇编,产生目标文件。
用这种方法也应注意不能破坏C 的运行环境。
(3)在C 程序中调用DSP 的内联函数T MS320C54x DSP 的C 编译器支持内联函数的功能。
内联函数实为DSP 的特殊函数,在C 程序中调用时,函数名前需加下划线。
举例如下: #include <intrindefs .h > int x2,x3,y; l ong x1; y =_s macr (x1,x2,x3);s macr ()为DSP 的内联函数,它实现DSP 的MACR 函数功能,调用它就象调用一般的C 函数一样方便。
(4)混合使用独立的C 语言及汇编语言模块独立编写各C 程序及汇编程序,编译或汇编得到各自的目标文件,再将所有目标文件连接起来。
这是最常用的混合编程方法,本文实例用的便是这种。
在CCS 中,编译、汇编、连接等功能集于一体。
图1示出了C 程序file1.c 与汇编程序file2.as m 混合编程时编译、汇编与连接的示意框图[4]。
图1 混合编程时编译、汇编与连接示意框图3 混合编程的接口规则当C 语言与DSP 汇编语言混合编程时,必须遵守有关规则,否则将会得到意料不到的结果。
这些规则包括:命名规则、寄存器规则及函数调用规则等。
它们在文[1-3]中有详细说明,这里不再赘述。
下面仅就函数调用中的参数传递规则作一简要介绍。
按照贯例,C 语言是利用堆栈将参数传递给被调用的子函数(即子程序)的。
但对T MS320C54x DSP 有些特殊,它不仅利用堆栈,而且还利用累加器A 进行参数传递。
传递的规则为:第一个参数传递给累加器A ,其余参数以逆序压入堆栈,即最右边的参数最先入栈,然后自右向左将参数依次压入堆栈。
图2示出了在C 程序中调用汇编子程序wavelet_s1(NS1,x,s1)时堆栈的使用情况。
当被调子程序开始执行时,便从累加器A 及堆栈按约定的顺序取出参数并进行相应的运算。
当被调子程序运行结束后,其返回值(存于累加器A 中)传递给调用函数。
图2 函数调用时堆栈的使用4 T M S320C54x 中断的C 语言实现由于DSP 常常工作在包含多个异步事件的实时环境中,因此中断作为一种有效的处理外界异步事件的方法,在DSP 中得到了广泛的应用。
实现DSP 中断包括如下三个步骤:①对中断进行初始化;②编写中断服务程序;③建立中断矢量表。
下面分别进行详细说明:(1)对中断进行初始化在C 语言程序中对DSP 中断进行初始化的程序片段如下:as m (“ST M #0FFFFh,I FR ”);/3清除所有尚未处理完的中断3/as m (“RS BX I N T M ”);/3开放所有中断3/as m (“ST M #8,I M R ”);/3开放定时器0中断3/上述语句是利用在C 程序行内嵌入汇编语句的方式给中断进行初始化。
本例给I M R 的第三位置1,开放了定时器0中断,若想开放其它类型的中断,只要给I M R 相应的位置1即可。
(2)编写中断服务程序DSP 的中断服务程序可直接用C 语言编写并由C 语言子程序实现。
但要注意,当中断响应时,・35・ 3期微 处 理 机在中断服务程序中,需保护所有使用的寄存器,当中断返回时再一一恢复。
如果中断使用得频繁,中断程序的编写将比较繁杂且效率较低。
另一个简单的方法是在中断服务程序名前加一个关健字“interrup t ”对其进行说明。
当编译时,编译器将自动保护各寄存器值,并随后按顺序自动恢复。
该方法给用户用C 语言编写DSP 中断程序带来极大的方便。
这一方法的格式如下:interrup t void I SR (void ){ …}其中I SR 为中断服务程序名。
用C 语言编写中断服务程序,应注意以下几点:①中断服务程序I SR 不带参数且无返回值;②从中断返回时开中断(RETE );③链接时避免使用-e 或-oe 选项。
(3)建立中断矢量表中断矢量表由汇编语言编写,如果想在某中断响应时执行前面提到的I SR 中断服务程序,只需在cvect ors .as m 中相应的位置添加如下跳转指令即可:B _I SR注:这里中断服务程序名I SR 前一定要加下划线。
5 混合编程实例由于本文以多尺度三次B 样条小波分解算法作为实例,因此下面先对这种算法作一简要介绍。
5.1 三次B 样条小波分解算法简介B 样条小波是对称的半正交小波,它具有显式解析式,算法简洁,支撑集短,可以进行快速分解与重构,其分解的快速递推算法为:S 2j f (n )=∑kh k S 2j -1f (n -2j -1kW 2j f (n )=∑kg k S 2j -1f (n -2j -1k(1)式(1)中S 2j f (n )=与W 2j f (n )=分别为各尺度下小波分解的细节分量和平滑分量。
h k 与g k 为与小波函数对应的低通及带通滤波器系数,如下所示:h -1=h 2=18,h 0=h 1=38,g 0=-2,g 1=2将上面的系数代入式(1)便可得各尺度下三次B 样条小波分解平滑分量及细节分量的具体表达式。
式(2)给出了第一至第三尺度下平滑分量的迭代公式,式(3)为第四尺度细节分量的迭代公式。
S 21f (n )=h -1S 20f (n +1)+h 0S 20f (n )+h 1S 20f (n -1)+h 2S 20f (n -2)S 22f (n )=h -1S 21f (n +2)+h 0S 21f (n )+h 1S 21f (n -2)+h 2S 21f (n -4)S 23f (n )=h -1S 22f (n +4)+h 0S 22f (n )+h 1S 22f (n -4)+h 2S 22f (n -8)(2)W 24f (n )=g 0S 23f (n )+g 1S 23f (n -8)=-2(S 23f (n )-S 23f (n -8)(3)在用定点DSP 进行三次B 样条小波分解算法时,为了提高精度、防止溢出,数值采用Q15格式,即所有参与运算的数值均介于-1到+1之间。