TITI C54xx DSP 十天速成讲义文档格式.docx
《TITI C54xx DSP 十天速成讲义文档格式.docx》由会员分享,可在线阅读,更多相关《TITI C54xx DSP 十天速成讲义文档格式.docx(37页珍藏版)》请在冰豆网上搜索。
![TITI C54xx DSP 十天速成讲义文档格式.docx](https://file1.bdocx.com/fileroot1/2023-1/29/8aad98a6-9d5c-40cc-876c-3ed0ca2f1221/8aad98a6-9d5c-40cc-876c-3ed0ca2f12211.gif)
数码管、LED显示,流水灯
第三天
中断的原理
中断向量表、中断向量指针
定时器中断程序设计、
外部中断程序设计
实验四:
中断实验
4.1定时器中断:
方波发生器
4.2外部中断:
频率计
键盘接口
4.3键盘接口
第四天
AD/DA
McBSP,AIC23语音芯片
实验五:
语音采集与回放
5.1实时采集、回放
5.2复读机:
采集存贮、回放
第五天
DMA原理与程序设计
实验六:
DMA实验
6.1用DMA传送内部存贮器数据
6.2用DMA接收McBSP数据
FIR的基本原理
FIR滤波器系数设计
介绍通常FIR如何编写程序
介绍利用DSP的特殊结构与指令如果提高运效率。
软件仿真IO输入的技巧
图形方式仿真算法的技巧
实验七数字信号处理实验
实验7.1FIR实验
第六天
IIR的基本原理
IIR滤波器系数设计
IIR滤波器程序设计
调试仿真技巧
实验7.2IIR实验
FFT的基本原理:
蝶形运算
DSP针对蝶形运算优化的寻址方式:
位倒序寻址
FFT程序设计
实验7.3FFT实验
第七天
计算三角函授的常用方法:
查表法、泰勒级数展开法
泰勒级数展开法程序设计
实验7.4DDS:
查表法输出正弦波
实验7.5泰勒级数展开法计算三角函数
程序加载Bootloader的原理
多种加载方式
加载的流程
BootTable的结构
创建BootROM的过程
相关编译选项设置
HEX500实用程序及配置文件
创建Boottable
第八天
Flash烧写原理,Boot表烧写方法
Flash烧写实验
C语言程序设计初步
用C语言改写前面的部分程序
第九天
C5000系列其它DSP与C5402的异同
TI其它系列DSP简介:
C2000、C6000
第十天
综合实验的设计思想
实验7.2IIR
.mmregs
.globalcodestart
K_DATA_SIZE.set256;
输入数据个数
K_BUFFER_SIZE.set8;
缓冲大小,需是2的整数次幂,并大于a、b的个数
K_STACK_SIZE.set256;
堆栈大小
K_A.set3;
a向量个数
K_B.set4;
b向量的个数
K_CIR.set4;
>
=a、b的长度,也可以设为K_BUFFER_SIZE-1
STACK.usect"
stack"
K_STACK_SIZE
SYSTEM_STACK.setK_STACK_SIZE+STACK
.data
DATA_DP:
.alignK_BUFFER_SIZE
bufferdatax:
.spaceK_BUFFER_SIZE*16;
sizeinbits
bufferdatay:
sizeinbits
inputdata:
.word0
filterdata:
.word0
.text
.asgAR2,ORIGIN
.asgAR3,INPUT
.asgAR4,FILTER
.asgAR5,OUTPUT
codestart:
SSBXFRCT
SSBXINTM
LD#DATA_DP,DP
STM#SYSTEM_STACK,SP
CALLfilter_start
NOP
LOOP:
BLOOP
.defb0,b1,b2,b3,a1,a2,a3;
.deffilter_start
b0.set1456H;
b1=0.1589*2^15
b1.set3D07H;
b2=0.4768
b2.set3D07H;
b3=0.4768
b3.set1456H;
b4=0.1589
a1.set-103AH;
a1=-0.1268
a2.set430FH;
a2=0.5239
a3.set-1016H;
a3=-0.1257
;
=================================================================
滤波子程序:
filter_start
=================================================================
filter_start:
STM#K_CIR,BK;
设置环形buffer的大小
STM#1,AR0;
和步长
STM#inputdata,ORIGIN;
AR2
STM#bufferdatax,INPUT;
AR3
STM#bufferdatay,FILTER;
AR4
STM#filterdata,OUTPUT;
AR5
初始化
RPT#K_B-1-1;
ST#0,*INPUT+0%;
x(-1)、x(-2)、x(-3)设为0
RPT#K_A-1
ST0,*FILTER+%;
y(-1)、y(-2)、y(-3)设为0
STM#bufferdatay,FILTER
STM#K_DATA_SIZE-1,BRC;
块循环次数,头三个值已经直接通过了
RPTBfilter_end-1;
块循环结束位置
可以把块循环改成中断调用,有新数据就中断一次。
nop;
数据从件导入点,加nop保证数据在使用前导入
nop
MVDD*ORIGIN,*INPUT;
新数据
MAR*+INPUT(-K_B+1)%
MPY*INPUT+0%,#b3,B;
B=x(n-3)*b3,i=i+1
LDB,A
MPY*INPUT+0%,#b2,B;
B=x(n-2)*b2,i=i+1
ADDB,A
MPY*INPUT+0%,#b1,B;
B=x(n-1)*b1,i=i+1
MPY*INPUT+0%,#b0,B;
B=x(n)*b0,i=i+1
MPY*FILTER+0%,#a3,B;
B=y(n-3)*a3,j=j+1j=n-3为y的指针
MPY*FILTER+0%,#a2,B;
B=y(n-2)*a2,j=j+1
MPY*FILTER+0%,#a1,B;
B=y(n-1)*a1,j=j+1
ADDB,A
STHA,*FILTER;
传送y(n)至y区,;
16位小数相乘得到的是32位小数
STHA,*OUTPUT;
传送y(n)至结果区;
取前16位就行了
MAR*+FILTER(-K_A+1)%
数据文件导出点,加nop保证数据在导出前已更新
filter_end:
NOP;
循环结束
RET
.end
十天速成-[实验八
程序加载]2005-12-413:
57:
实验八程序加载
C5000DSP没有内部提供掉电保存程序的ROM/EPROM/Flash,上电时需要从外部加载应用程序。
C5000DSP提供了多种程序加载方式,满足不同应用的需要:
串行加载、并行加载、HPI加载等,实际应用最多的是并行加载,本实验主要介绍8位并行存贮器加载。
加载过程:
DSP上电时,如果MP/MC引脚为低电平,则跳转到内部ROM的FF80中断向量表的Reset中断,该处有一个跳转指令转到称为Bootloader的加载程序执行,该程序的功能是按照一定顺序查找可用的加载方式,如果找到,则开始加载应用程序,加载完毕转向应用程序执行。
实现并行存贮器加载的关键是建立一个加载表(boottable),该表包括:
一个或多个程序代码段、部分需要初始化的寄存器值、程序入口等信息。
CCS附带有一个应用程序(C5000系列是hex500.exx)可以把.out程序转成.hex格式的加载表,然后可以烧录到非易失性存贮器中,如OTP/EPPOM/EEPROM/Flash中。
具体步骤:
1.修改项目的编译选顶,使其生成可以转化成加载表的.out文件格式
2.为hex500.exe建立一个配置文件
3.用hex500.exe把*.out转化成加载表*.hex
4.在.hex未尾加上加载表起始地址
5.烧录到非易失性存贮器中
6.安到目标板上进行加载实验
各步骤详述如下:
在Project/BuildOption…/Complier里面加一个选项:
-v548,或在Basic/Processverson一栏中填写:
548,然后点确定。
注意:
如果不加这个选项,用hex500程序转化出来的hex文件无法加载。
这个配置文件包含了hex500程序执行所需要的选顶,下面是一个样板配置文件hex.cmd:
sample.out
/*待转化的程序文件*/
-maphex.map
/*生成一个map文件便于查看转化结果*/
-ohex.hex
/*输出文件名*/
-i
/*输出文件为IntelHex文件格式*/
-memwidth8
/*目标系统的存贮器为8位*/
-romwidth8
/*存贮器芯片的位宽为8位*/
-boot
/*生成加载表*/
-bootorg0000h
/*加载表在存贮芯片中的起始位置*/
-e80h
/*程序入口,即加载完毕后跳转执行程序位置*/
初学者容易弄错的是memwidth、romwidth和bootorg这三个选项。
不同存贮器配置下设置不同,并且要注意的是上文注释的(包括TI资料中的解释)是程序脱机烧写的设置,而在系统烧录(EEPROM、Flash、NVSRAM可以支持)与脱机烧写又会有所不同。
脱机烧写指的是将存贮芯片放置在编程器里烧写,优点是直接可以利用hex500转化出来的hex文件,缺点是普通编程器无法烧写贴片封装的芯片。
在系统烧写相对灵活,但对不同系统,不同芯片需要编写专用的烧录程序,并且需要将hex文件进一步进行格式转换成烧录程序可以识别的程序。
不同情况设置方法如下表:
存贮器配置方案
脱机烧写
在系统烧写
8位存贮器
-memwidth8
-romwidth8
16位存贮器
-memwidth16
-romwidth16
两片8位贮器并行组成16位存贮器
bootorg
芯片中的起始地址
系统中的起始地址
在dos窗口下执行:
hex500hex.cmd
如果hex500.exe与hex.cmd以及待转化的程序文件不在同一目录下,需加上路径或设置path环境变量。
4.在FFFFH加上加载表起始地址
当开始并行加载时,Bootloader程序会在外部程序空间的FFFFH(如果是8位系统,同时也会查FFFEH)寻找加载表的地址,如果熟悉hex文件格式可以直接在hex文件末尾加一条纪录,也可以烧录器软件中加。
应用实例:
本实验箱是用于程序加载的是8位EPROM或EEPROM,可以用脱机方式,如用EEPROM也可以用在系统方式。
Hex500程序的配置文件如前hex.cmd文件,只需要把第一行的sample.out换成实际的程序名称。
EPROM/EEPROM在程序空间的地址为8000H,并且由于是8位系统,则要在FFFEH和FFFFH的值分别设为80H、00H。
可以在生成的.hex文件倒数第二行加上:
:
027FFE00800001
也可以在烧录器软件中修改FFFEH-FFFFH处的值,然后就可以烧写了。
烧写好后,将芯片安置在IC座中,确认MP/MC跳线置为低电平,INT3、INT2的跳线置于悬空后,打开电源,就可以看到程序运行的状况。
.mmregs
.globalcodestart
K_DATA_SIZE
.set256
;
K_BUFFER_SIZE
.set8
K_STACK_SIZE
K_A
.set3
K_B
.set4
K_CIR
STACK
.usect"
SYSTEM_STACK
.setK_STACK_SIZE+STACK
.data
.alignK_BUFFER_SIZE
sizeinbits
.word0
.text
.asgAR2,ORIGIN
.asgAR3,INPUT
.asgAR4,FILTER
.asgAR5,OUTPUT
SSBXFRCT
SSBXINTM
LD#DATA_DP,DP
STM#SYSTEM_STACK,SP
CALLfilter_start
NOP
BLOOP
.defb0,b1,b2,b3,a1,a2,a3;
.deffilter_start
b0
.set1456H
b1=0.1589
*2^15
b1
.set3D07H
b2
b3
a1
.set-103AH;
a2
.set430FH
a3
.set-1016H;
=================================================================
STM#K_CIR,BK
STM#1,AR0
STM#inputdata,ORIGIN
STM#bufferdatax,INPUT
STM#bufferdatay,FILTER;
STM#filterdata,OUTPUT
RPT#K_B-1-1
ST#0,*INPUT+0%
RPT#K_A-1
ST
0,*FILTER+%
STM#bufferdatay,FILTER
STM#K_DATA_SIZE-1,BRC
RPTBfilter_end-1
nop
nop
MVDD*ORIGIN,*INPUT
MAR*+INPUT(-K_B+1)%
MPY*INPUT+0%,#b3,B
LD
B,A
MPY*INPUT+0%,#b2,B
ADDB,A
MPY*INPUT+0%,#b1,B
B=x(n-1)*b1,i=i+1
MPY*INPUT+0%,#b0,B
B=x(n)*b0,i=i+1
MPY*FILTER+0%,#a3,B
B=y(n-3)*a3,j=j+1j=n-3为y的指针
MPY*FILTER+0%,#a2,B
B=y(n-2)*a2,j=j+1
MPY*FILTER+0%,#a1,B
B=y(n-1)*a1,j=j+1
ADDB,A
STHA,*FILTER
传送y(n)至y区,
STHA,*OUTPUT