第四章dsp的c语言程序设计.docx
- 文档编号:7599349
- 上传时间:2023-01-25
- 格式:DOCX
- 页数:10
- 大小:24.50KB
第四章dsp的c语言程序设计.docx
《第四章dsp的c语言程序设计.docx》由会员分享,可在线阅读,更多相关《第四章dsp的c语言程序设计.docx(10页珍藏版)》请在冰豆网上搜索。
第四章dsp的c语言程序设计
DSP的C语言程序设计
一、为什么要使用C语言对DSP编程
C语言是高级语言,易学易用。
C语言的编程效率极高,易于调试。
C语言的可移植性好。
二、C程序的结构及组成
完整的C程序是由一个主函数main()和其它的子函数组成的,每一个子函数完成特定的功能。
DSP的C语言的入口地址固定为c_int00,在中定义。
C语言支持丰富的数据类型和数据结构,在ccs集成开发环境中,为C语言提供了完整的支持硬件的底层函数库和支持算法的DSP函数库。
在使用C语言的库函数时,在工程中必须包括相应的函数库和运行时支持库。
下面是一般C语言程序的结构和组成框架。
一般C程序的结构如下:
h头文件
#include“函数库1”
#include<函数库2>
#include“函数库3”
…
*/
/**/
/*Parameters:
*/
/*-port-portaddress(HEX)*/
/**/
/*Return:
*/
/*-returnsvaluereadfromport.*/
/**/
/*Notes:
*/
/**/
/*****************************************************************************/
s16portRead(u16port);
/*****************************************************************************/
/*portWrite(u16port,s16value)*/
/**/
/*Thisroutinewritesawordtothespecifiedport.*/
/**/
/*Parameters:
*/
/*-port-portaddress(HEX)*/
/*-value-16bitwordtowrite.*/
/**/
/*Return:
*/
/*-none*/
/**/
/*Notes:
*/
/**/
/*****************************************************************************/
voidportWrite(u16port,s16value);
#endif/*endof#ifndef_PORTIO_H*/
使用时,先使用宏替换或枚举定义I/O端口的地址,然后使用portRead()和portWrite()函数访问I/O端口
例如:
#include
Variable=portRead(portA);
c5400\cgtools\include目录与c5400\dsk5402\include目录中的头文件类型不同。
c5400\cgtools\include目录下是5000系列DSP的通用头文件,与硬件无关。
c5400\dsk5402\include目录下是硬件专用头文件,包括DSP芯片和dsk板。
头文件和特定的库文件相关联,c5400\cgtools\include目录下的头文件与运行时支持库相关联,c5400\dsk5402\include目录中的部分头文件与dsk板库文件和相关联。
和函数库在c5400\dsk5402\lib目录下,是一个主要的库函数,内部使用了。
五、关于DSP程序中段的定义
一个程序中到底有哪些段定义
一般地,对于固定的硬件应用系统,其存储器的配置也较为固定,存储器的配置需要设计者自己定义,但理解了基本的段如:
.text、.data、.stack、.bss之外,用C语言编程时,对程序中所使用的段并不十分清楚,可以在写.CMD文件时,只将MEMORY部分写出,而暂时省略掉SECTIONS定义,CCS集成开发环境会自动生成.map文件,其中详细记录了存储器和段的配置和使用情况、各个段的绝对地址和重新分配后的全局符号,根据其中的段的描述,我们反过来再重新修改.CMD文件,进行合理地段到存储器的分配。
DSPC语言开发环境所必有的段定义:
·Cinit;C语言初始化段,包括初始化变量和常量表
·text;代码段,包括可执行代码、字符串和常量
·Vectors;中断向量段
·stack;堆栈段,为C的系统堆栈分配存储空间,用于变量的传递
·trap
·const;包括字符串常量和以const关键字定义的常量
·data;数据段
·bss;保留全局和静态变量空间
·cio
·switch;为.const语句建立的表格
·system;为动态存储器函数malloc、calloc、realloc分配存储空间
DSP的C语言程序设计实验
一、分析工程中的程序,了解C语言程序的一般结构以及头文件和函数库的关系,并解读头文件的内容
二、修改程序,使三个发光二极管指示灯依次流水点亮熄灭
例:
编写程序
主要说明:
DSPC程序编制的流程
函数库中函数的使用(例如)
Project的建立、编译、调试、执行
CMD文件的编写
试重新定义.CMD文件,重新对project进行编译运行。
自编写CODEC程序,.h头文件在c5400\dsk5402\include目录下,头文件对应的函数在c5400\dsk5402\lib\和中。
dsk5402是一个主要的库函数,内部使用了。
5402上有两个多通道缓冲串行口(MCBSP0和MCBSP1),其寄存器定义位于头文件和当中。
如果在File菜单中头“loadprogram”项说明目标报未正常连接,注意观察条提示:
VECS:
0080hlength=0080h/*internet
PRAM:
orgin=7600h,length=8000hprogramRan*/
ScratchRAN
5402DSP程序寄存储藏256K如同加载执行
DSP540264K(更多)程序存储器空间
64K(更多)数据存储器空间
64KI/O存储器空间
可以由:
片上ROM,片上RAN,片外floah,片外RAN构成取决定于:
MP/MCOVLYFLASHENB,当map在外部存储器时,由于FLASHE决定访问FLAH=1还是外部RAN=0,OVLYFLASH可以由片上RAM、RAN,片外flashRAM构成取决于DROMDMSEL,当map外部存储器空间时,由DMSEL决定是访问FLASH/RAM(DMSEL=0)还是子报存储器,FLASH——14个等待周期;RAM——1个等待周期。
C5402DeviceSimulater;
Mp/mc=1Ovly=1DRAM=0
5402DSK
loadprogram后:
mp/mc=1OVLY=1DROM=0运行程序后:
mp/mc=0OVLY=1DROM=0与管脚一致,suwsr等待状态寄存器D844
1101100001000100
I/O空间高32K低32K高32K低32K
54104
MCBSP串口以及AD50的初始化,AD50初始化包括以下步骤:
1.打开CODEC获取句柄(指针)
2.设置AD转换的工作方式
3.设置DA转换的工作方式
4.设置模拟输入增益
5.设置模输出增益
6.设置取样率
boardinitFlag
cadeinitFlag
code_setup_serial_port设置串口
code_resetcodee复位
cline_reset
code_disable_tx_isr
code_disable_vx_isr
code_write_regs
code_setup_serical_port
serial_reset
D:
DSPTEST、DTK—fft\
把Project中所用到的所有头文件、库文件、包含文件均方向在Project目录下,解析此工程,了解库函数的定义与源程序,
Code的操作串口(MCBSP)的操作
MCBSP:
TMS320C5000系统DSP系统设计与开发实例,熟悉多通道缓冲串口的结构组成以及各个寄存器的内容工作方式,编程方法:
MCBSP的初始化
串口复位(发送复位、接收复位)
设置所有寄存器的值
SPCR1、SPCR2、RCR1、RCR2、XCR1、XCR2、SPGR1、SPGR2、PCR
CODE(AD50)的初始化
CODEC复位
↓
设置线路输入通道增益
↓
设置输出增益
↓
设置模拟工作方式输入选择LINE
↓
设置数据部分的运行模式
↓
设置电源模式
↓
设置数据格式,CODEC工作于主方式
↓
设置波样率
↓
启动CODEC
另外:
MCBSP的初始化及使用参考头文件的有关函数。
MCBSP的初始化:
接收器复位,SPCR1的D0=0
发送器复位,SPCR2的D0=0
设置SPCR1寄存器:
(0X007)
(D15禁止数字环回:
DLB=0
(D14—D13)接收数据符号扩展和调整方式:
=00右对齐MCBS零填充
(D12—D11)时钟停止模式:
=00时钟停止模式营业
(D10—D08)保留
(D7)DX31脚延迟功能=0关闭DX3脚延时功能
(D6)保留
(D5—D4)接收中断模式=00当RRDY有效时,产生接收中断
(D3)接收帧同步错误标志=0不检测同步错误
(D2)接收移位寄存满过速错误标志=1接收移位寄存器满
(D1)接收就绪标志=1接收器就绪
(D0)接收器复位=1串口接收使能(接收器停止复位)
设置RCR1寄存器(接收控制寄存器官)=0x0040
AD50寄存器的初始化:
(按ENTER功能)
CODEC复位:
ControlREG:
ster1的
设置ADC工作模式为15bit模式
controlRegister2的D4=0
设置DAC的工作模式为15bit模式
controlRegister1的D0=0
设置DODEC的模拟输入增益6db:
controlRegister4的D3D2=01
设置DODEC的模拟输入增益-6db:
controlRegister4的D1D0=01
设置DODEC的取样率为8000HZ:
controlRegister4的D6—04=N=MCLK
128×8000
AD50按寄存器初始化
AD50按功能进行初始化
在CODEC.h头文件中,定义了与CODEC(AD50)功能相关的枚举变量,除了可以调用中提供的函数之外,我们可以利用这些枚举变量重新编写自己的函数,用枚举变量相或产生所需要的寄存器初始化值。
片上外设寄存器的初始化方法:
有两种,一是按要求填表,然后将结果直接写入寄存器;二是用寄存器各部分的宏定义相或,如各寄存器比特的宏定义。
报卡初始化
brdinit(100);
初始化的内容;
#8806h→29单元
↓
OH→XPC
↓
#0a0h→PMST
C1KnD1=0设置CPU的工作频率
C1K2=0↓
C1K3=1设置等待周期SWR=D844H
↓←
设置报卡初始化标志SXM=1
↓INTM=1
↓
*zch=*zchorox2c
↓
对I/O端口0、4、2、3、5、6进行初始化
DSP技术及其应用常见问题
.cmd文件的格式及编写
.cmd文件的编写硬件确定存贮器配置就基本确定了吗
5402DSP存储器配置如何是64KRAM、256kFlash吗
Bootloader过程
如何察看函数库内容,如头文件中的函数
在程序调试中,打开汇编窗口,使用断点、单步方式进行调试。
DSP从复位到运行,MP/MC、OVLY、DROM位的变化
如何知道C程序中有哪些段定义编译时生成并察看.map文件。
AD50的一次通信二次通信如何用软件实现
AD50、AIC23两种codec的操作是否一致是否可调用一个库函数
不一致。
DSK板的初始化包含哪些内容
CSL库是否只能用于dsp_bios编程模式否,可以在非dsp_bios环境下调用CSL库。
AD50的Primary、Second通信对应于MCBSP串口,是如何实现的分两次写,使用了宏函数().吗
5402DSK板上集成了一个并口仿真器,它仿真时装载程序是使用的JTAG接口,还是HPI接口
使用DSK并口仿真器调试DSP时,各控制比特的设置以及memory的map如何此时是否为HPIBootloader方式
并口仿真与HPI引导是否为一回事不是,通过JTAG下载调试程序,程序运行后暂停,此时MP/MC=0,OVLY=1,DROM=0。
I/O空间cpld寄存器如何观察
ram中数据可读可改,ROM中的数据只能读吗
HPI-8的中文翻译
5402上使用了HPI-8增强型的HPI接口,host通过HPI-8可访问DSP所有片上RAM。
在DOS下运行程序utility\evmdskctrl2-cp,能够察看CPLD各个I/O寄存器的值:
CNTL:
0x02
STAT1:
0x13
STAT2:
0x1E(DM_SEL=0选择板上存储器)
CPLDREV:
0x1F
SEM0:
0x1F(FLASHENB=0INTSEL=0FC1CON=1选择SRAM作为外部存储器)
DMSEL:
OFF
SEM1:
0x1F
HINT:
YES
此时,flash位于程序空间的8000H~BFFFFH,ram位于程序和数据空间的低64K,即程序空间的0080H~EFFFH,可同时被程序存储空间和数据存储空间访问,因此在.CMD文件中,必须将程序存储器(PAGE0)和数据存储器(PAGE1)统一分配存储空间。
注意.CMD文件、.map文件与实际程序代码的对应关系。
这相当于冯·纽曼(诺依曼)结构,虽然程序存储器空间和数据存储器空间分属两个不同的逻辑空间,但实际上却对应着同一个物理的存储器空间,高速处理器大多采用这种存储器结构,在5402DSKDSP系统中程序放在Flash中,在计算机中程序放在硬盘、光盘、USB等存储媒介当中。
并口Bootloader时,MP/MC=0、OVLY=1、FLASHEN=1,flash位于数据空间的4000H—EFFFH,片上DARAM位于程序空间的0080H~3FFFH,片外RAM位于程序空间的4000H~EFFFH。
1不到48K,其余的flash如何访问
2Flash一直放在数据空间吗即FLASHEN是否一直为1。
3最大可用的数据RAM是多少哪些范围
FLASHEN置为0的逻辑通过5402的GEL文件,将FLASHEN由1变为0。
如何读I/O空间值在ccs-option选项下,修改memorymap–I/O下的选项。
GEL语言及其文件:
GEL语言,即通用扩展语言(GeneralExtensionLanguage),是在ccs集成开发环境下使用的,通过JTAG硬件仿真接口,对DSP的目标存储器进行访问控制的、类似于C的编程语言。
可以创建新的GEL菜单定制存储器的配置,用于开发调试。
问题:
GEL语言与DSP的其它用户编程语言之间是什么关系
GEL语言主要用于用仿真器调试DSP时配置用户存储器映射,初始化DSP寄存器及数据、I/O存储器,此时对寄存器存储器的初始化工作在用户的程序中可以不做,但在实时脱机运行用户程序时必须在用户程序中包含对DSP寄存器、数据空间、I/O空间及片上外设等对象的初始化内容。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第四 dsp 语言程序设计