DSP的C语言实验指导书上.docx
- 文档编号:12255403
- 上传时间:2023-04-17
- 格式:DOCX
- 页数:29
- 大小:1.15MB
DSP的C语言实验指导书上.docx
《DSP的C语言实验指导书上.docx》由会员分享,可在线阅读,更多相关《DSP的C语言实验指导书上.docx(29页珍藏版)》请在冰豆网上搜索。
DSP的C语言实验指导书上
C语言程序设计实验
实验一HelloWorld实验
一试验目的
1.熟悉ARM/DSP/FPGA实验箱
2.熟悉整个DSP软件开发流程
3.熟悉如何使用DSP的USB仿真器配合CCS软件进行DSP开发
二实验设备
1.具有USB接口的PC机一台
2.USB仿真器一台
3.ARM/DSP/FPGA实验箱一台
三实验原理
本实验是个入门实验,主要是为了让用户了解如何利用本实验系统配合DSP软件以及DSP的USB仿真器来完成代码的开发、下载和验证。
在本实验中,首先利用CCS软件创建工程,并加入相应的DSP相关文件,然后对其进行编译、下载、调试以及结果验证等。
在进行代码开发之前,首先对本系统中的DSP模块作一些简要介绍。
本系统中的DSP采用了TI的TMS320C5410A,该芯片可以稳定工作在160MHz主频;内部具有128KB片内RAM和32KB片内ROM;该芯片内部包含有一个16位定时器,1个6通道DMA控制器,3个McBSP串行口和1个增强型HPI控制器。
对于本实验系统上的DSP模块,板上提供了512KB的FlashROM,用于存放用户代码。
令外由于该DSP内部已经拥有很大的片内RAM,所以本模块没有外扩SRAM。
DSP模块的数据和地址总线、I/O相关控制总线均与FPGA相连接,另外对于McBSP0和McBSP1也连接到了FPGA,这些都为DSP通过FPGA控制板上资源创造了非常灵活的条件。
由于板上没有扩展外部SRAM,所以在程序设计的时候需要把可执行代码区、数据区以及中断向量表等全部放到DSP的SRAM中,考虑到DSP中还有一些存储器映射的寄存器,所以以上的代码必须放在DSP中的0x0080~0x7FFF之间。
具体的分配可以参考本实验的C54xx.cmd文件。
前面已提到,本实验是一个入门实验,旨在让学生了解整个DSP的开发流程,所以本实验中将不对程序中的代码以及实现过程作过多的说明,后续的实验将会告诉用户如何配置内部的寄存器以及如何正确的操作DSP的片内外设。
四实验步骤
1.将DSP的USB仿真器连接到实验系统的DSP模块上的JTAG接口。
2.系统上电后,将USB仿真器的USB连接线插入到计算器的USB接口。
3.双击桌面上的CCS(‘C5000)图标(也可以按照图4.1.1所示的方式打开),开打CCS软件。
图4.1.1从开始菜单打开CCS软件
4.在CCS中创建一个工程——HelloWorld,如图4.1.2所示。
图4.1.2创建HelloWorld工程
5.将实验系统配套光盘上实验例程中DS文件夹下面的实验一(Exp1)中的HelloWorld.c、C54xx.h、vectors.asm、rts.lib以及C54xx.cmd文件全部拷贝到刚刚创建的工程文件夹下面。
6.将步骤5中拷贝的文件全部加入到当前工程——HelloWorld中如图4.1.3,点击【打开】即可。
加入文件后的工程如图4.1.4所示。
图4.1.3添加文件到当前工程
图4.1.4添加了文件的工程界面
7.双击c54xx.cmd文件,可以看到如下文件内容:
MEMORY
{
PAGE0:
EPROG:
origin=0x4000,len=0x3f80
VECT:
origin=0x7f80,len=0x80
PAGE1:
SYSREGS:
origin=0x00,len=0x60
BIOSREGS:
origin=0x60,len=0x20
IDATA:
origin=0x80,len=0x3f00
EDATA:
origin=0x8000,len=0x8000
}
SECTIONS
{
.vectors:
{}>VECTPAGE0
.sysregs:
{}>BIOSREGSPAGE1
.text:
{}>PAGE0
.cinit:
{}>EPROGPAGE0
.bss:
{}>IDATAPAGE1
.const:
{}>IDATAPAGE1
.switch:
{}>IDATAPAGE1
.sysmem:
{}>IDATAPAGE1
.stack:
{}>IDATAPAGE1
}
从cmd文件的内容中可以看到,中断向量表(.vectors)放在PAGE0的VECT段,也就是0x7F80~0x7FFF;系统存储器映射寄存器(.sysregs)放在PAGE1的BIOSREGS段,即0x00~0x60的位置;可执行代码(.text)放在PAGE0的EPROG段,即0x4000~0x7F7F……
这些内容就是告诉编译器将源文件中的资源按照cmd文件制定的方式存放。
8.vectors.asm中存放的是中断入口地址,如果程序中涉及到中断,就需要在vectors.asm中相应的地址放置跳转指令,跳转到相应的中断服务子程序便可。
9.HelloWorld.c即使本工程中的主文件,该文件中有本实验的功能实现代码,所有的用户要实现的功能都可以写在该文件中。
当然对于比较复杂的工程,可以写多个.c或.s文件,只需要将其包含到同一个工程中即可。
从本实验的HelloWorld.c中可以看出,本实验仅仅实现一个简单的printf打印功能,打印信息会在stdout窗口显示出来。
10.将整个文件之间的关系和本实验要实现的功能理清楚后,即可对本工程进行编译,编译结果如图4.1.5所示。
图4.1.5工程编译结果
11.点击File下面的LoadProgram,选择本工程目录下Debug文件夹下面的HelloWorld.out文件(如图4.1.6所示),点击【打开】,即可将该工程编译后的可执行文件下载到DSP内部的SRAM中。
图4.1.6打开本工程编译的DSP执行代码(.out文件)
12.点击“执行”,便可启动DSP执行本工程编译的代码,执行结果如图4.1.7所示。
图4.1.7实验运行结果
思考题:
⏹1.一个C工程中通常包括那几个文件,这些文件在工程中分别起着什么功能?
⏹2.中断向量表起什么功能的?
⏹3.如何改变CCS中的output窗口中的输出内容?
让其输出自己名字的全拼。
能不能输出中文?
如何让输出的数字递减?
⏹4.如何改变输出频率?
实验二GPIO实验
一试验目的
1.熟悉ARM/DSP/FPGA实验箱的DSP模块
2.熟悉整个DSP的GPIO的使用
3.进一步掌握如何使用DSP的USB仿真器配合CCS软件进行DSP开发
二实验设备
1.具有USB接口的PC机一台
2.USB仿真器一台
3.ARM/DSP/FPGA实验箱一台
三实验原理
本实验是在学生基本上了解DSP开发流程的基础上,进一步熟悉使用DSP内部的外设资源,控制实验系统的LED、按键和拨挡开关,从而更加直观的让学生体会DSP的工组流程。
本实验中采用DSP的McBSP0和McBSP1两个接口的引脚来作为GPIO,部分用来作为按键和拨挡开关的输入,另外一部分作为LED的输出驱动LED显示。
DSP的McBSP接口和HPI的数据接口均可以作为GPIO来使用。
当下面的条件满足的时候,McBSP接口即可工作在GPIO模式:
1)相关的串行端口均处于复位状态,即将SPCR1n和SPCR2n(n代表串口号,即0、1和2)中的RRST位和XRST位清0。
具体内容见表4.2.1和表4.2.2。
2)使能相关端口位通用I/O,即将PCRn中的RIOEN位和XIOEN位置1。
具体内容见表4.2.3。
表4.2.1SPCR1寄存器
图4.2.2SPCR2寄存器
表4.2.3PCR寄存器
在引脚控制寄存器(PCR)中,可以把McBSP的引脚配置为输入或者输出(除某些只能作为输入或输出的引脚外)。
表4.2.4列出了具体的引脚功能与寄存器相关位的关系。
表4.2.4McBSP引脚功能与寄存器关系表
从表4.2.4中可以看出,对于FSX引脚而言,如果将FSXM位清零,即可将该引脚配置为输入;如果将FSXM置1,即可将其配置为输出。
当该引脚被配置为输出的时候,它输出的电平将由PCRn寄存器中FSXP的值来决定;当该引脚配置为输入的时候,FSXP就会变成一个只读位,该位存储的即使FSX输入的信号电平。
需要注意的是,McBSP接口中的DX引脚只能被作为输出端口使用,而DR引脚只能被作为输入引脚使用。
在本实验中,首先写FPGA控制字,将拨挡开关的K1~K3和按键的S1~S3映射到DSP的McBSP口的输入,将LED的D1~D3、D5~D7映射到McBSP口的输出,在DSP程序中读取按键和拨挡开关的状态,然后用LED显示其当前状态。
具体的对应关系见表4.2.5。
输入
输出
K1
DR0
D1
DX0
K2
FSR0
D2
FSX0
K3
CLKR0
D3
CLKX0
S1
DR1
D5
DX1
S2
FSR1
D6
FSX1
S3
CLKR1
D7
CLKX1
表4.2.5资源对应表
另外说明一点,由于实验系统中的资源模块全部与FPGA直接连接,ARM和DSP在使用板上资源之前必须先写FPGA的命令字,以便将板上资源映射到ARM或DSP相应的功能引脚上。
四实验步骤
1.将实验箱配套光盘上的DSP实验中的实验二(Exp2)拷贝到计算机硬盘上。
2.将DSP的USB仿真器连接到实验系统的DSP模块上的JTAG接口。
3.系统上电后,将USB仿真器的USB连接线插入到计算器的USB接口。
4.打开CCS软件,并打开刚刚拷贝的Exp2文件夹下面的GPIO工程。
5.查看本实验中的相关代码,查看如何正确的将McBSP接口配置为GPIO口。
6.对代码整体结构和流程清楚后,编译代码。
7.编译通过后,下载代码到DSP。
8.查看代码执行结果是否正确(正确的实验结果是:
拨动K1~K3,相应的D1~D3会体现出它的状态;按下S1~S3,相应的D5~D7会体现出它的状态)。
思考题:
⏹1.一个键控制6个灯。
⏹2.编写楼道灯。
实验三中断设计实验
一试验目的
1.熟悉ARM/DSP/FPGA实验箱的DSP模块
2.熟悉DSP的中断的原理
3.掌握如何编写DSP中断服务子程序
二实验设备
1.具有USB接口的PC机一台
2.USB仿真器一台
3.ARM/DSP/FPGA实验箱一台
三实验原理
本实验是在学生基本上了解DSP的GPIO使用的基础上,进一步学习如何在DSP内部实现中断服务程序的编写。
在TMS320VC5410A的DSP中,可以管理多达29个中断,其中包括1个非屏蔽中断(NMI)、14个软件中断(SINT)、4个外部中断(EINT)、1个定时器中断(TINT)、3个串口接收中断(RINT)、3个串口发送中断(XINT)、2个DMA中断(DMAC)以及1个主机接口中断(HINT)等,表4.3.1是该芯片中支持的所有中断类型、中断好、相对中断偏移地址以及中断优先级等。
要正确的完成整个中断服务程序有以下几种方式:
1)在中断向量表中对应的中断向量处放置中断跳转命令,跳转至相应的中断服务程序(该方式实现最直接、最易理解,本实验机采用该方式实现中断,)。
2)利用CCS的CSL库中的函数来实现。
3)利用DSP/BIOS来实现。
第二种和第三种方式在后面的实验中会介绍并使用到。
完成一个完整的中断过程可以分为以下几步:
1)首先在C文件或者asm文件中编写好相应的中断服务子程序。
2)在中断向量表(vectors.asm)中相应的中断处放置中断跳转指令,转到1)中编写的函数处(需要注意的是,如果是在C文件中编写的函数,在汇编中调用是需要在函数名称前加下划线‘_’)。
3)在主程序中初始化相应的中断屏蔽寄存器(IMR)和中断标志寄存器(IFR),在IFR中清除相应中断标志,并在IMR中使能相应中断。
4)使能全局中断,即将ST1寄存器中的INTM位清零。
5)根据中断向量表在SRAM中的位置,设置PMST中的中断重映射寄存器(IPTR),使其指向正确的中断向量表入口地址。
具体计算公式为
中断程序指针PC=(IPTR)<<7+(Vector[n])<<2
上是中Vector[n]表示表4.3.1中对应的中断偏移量。
IFR和IMR的操作均通过寄存器的方式进行操作,即对地址0x0000和0x0001两个地址的存储空间进行操作,而对INTM的操作则可以通过“ssbxINTM”的命令来置位;通过“rsbxINTM”的命令来清零。
上述的IMR、IFR以及INTM均只对可屏蔽中断有效,对于非屏蔽中断NMI不起任何作用。
表4.3.2是IFR、IMR寄存器的具体内容。
表4.3.3是PMST寄存器的具体内容。
表4.3.1DSP中断一览表
表4.3.2IMR和IFR寄存器
表4.3.3PMST寄存器
四实验步骤
1.将实验箱配套光盘上的DSP实验中的实验三(Exp3)拷贝到计算机硬盘上。
2.将DSP的USB仿真器连接到实验系统的DSP模块上的JTAG接口。
3.系统上电后,将USB仿真器的USB连接线插入到计算器的USB接口。
4.打开CCS软件,并打开刚刚拷贝的Exp3文件夹下面的ExINT工程。
5.查看本实验中的相关代码,学习如何实现中断跳转,如何编写中断服务子程序等。
6.对代码整体结构和流程清楚后,编译代码。
7.编译通过后,下载代码到DSP。
8.查看代码执行结果是否正确(正确的实验结果是:
按下S1~S3,相应的D5~D7会点亮一会儿然后灭,同时CCS的Stdout窗口会显示相应按键按下的信息,如图4.3.1所示)。
图4.3.1CCS打印的按键中断信息
思考题:
⏹按键流水灯。
⏹单键控制:
按一下亮,在按灭。
⏹简述DSP中断执行的过程
实验四定时器实验
一试验目的
1.进一步熟悉DSP的中断机制
2.在掌握中断服务程序编写的基础上进一步熟悉定时器的运用
3.进一步掌握如何编写DSP中断服务子程序
二实验设备
1.具有USB接口的PC机一台
2.USB仿真器一台
3.ARM/DSP/FPGA实验箱一台
三实验原理
本实验是在学生基本上掌握DSP中断机制的基础上,进一步学习如何在DSP内部实现定时器的正确操作以及定时器中断服务程序的编写。
在TMS320VC5410A中,有一个16位的硬件定时器,该定时器有一个4位的预分频器,由CLKOUT来驱动,也就是说在CLKOUT时钟的作用下进行递减计数。
当计数器递减到0的时候,会产生一个定时器中断。
通过控制定时器相关寄存器,该定时器可以被停止、重新启动、复位或禁止。
与该定时器有关的寄存器有定时计数寄存器(TIM)、定时周期寄存器(PRD)以及定时器控制寄存器(TCR)。
下面对这几个寄存器作简要介绍:
●TIM:
该寄存器是一个存储器映射的寄存器,地址为0x0024。
该寄存器中保存了定时器当前的计数值,并且该寄存器的值会在预分频器中的计数器递减至0的时候递减1。
当TIM寄存器中的至递减至0的时候,定时器复位,TIM重新加载PRD寄存器中的值,开始下一轮计数,与此同时,当该寄存器中的值递减至0的时候,产生定时器中断。
●PRD:
该寄存器是一个存储器映射的寄存器,地址为0x0025。
该寄存器用于控制定时器的周期。
●TCR:
该寄存器是一个存储器映射的寄存器,地址为0x0026。
该寄存器主要用于控制定时器的启动、停止、复位以及初始化定时器的预分频器等操作。
该寄存器的具体内容如表4.4.1所示。
表4.4.1TCR寄存器
TCR寄存器中的具体内容意义如下:
●TDDR:
定时器的4位预分频器,TDDR的值为0~15。
●TSS:
定时器启动/停止位。
‘1’可停止定时器计数;‘0’可启动定时器。
●TRB:
向该位写入‘1’可复位定时器。
●PSC:
预分频器的递减计数器。
该计数器会在CLKOUT的作用下递减,当递减至0的时候,TIM的值便会递减1,同时PSC会重新加载TDDR的预分频值。
●Free:
该位用来配置定时器是否工作在Soft制定的工作方式。
当该位为‘0’时,选定Soft位所指定的工作模式;当该位为‘1’时,定时器将会正常运行,而不会采取Soft位所指定的工作模式。
●Soft:
该位用来配置定时器在遇到程序中断时的工作方式。
当该位为‘0’时,遇到中断定时器会立即停止运行;当该位为‘1’时,定时器将会正常运行,遇到中断定时器会在递减到0后停止运行。
根据以上讲述,可以得到DSP中定时器的中断频率为
fT中断=(fCLKOUT/(TDDR+1))/(PRD+1)
要对定时器正确配置和操作,可以通过以下步骤来实现:
1)首先通过写TCR寄存器中的TSS位来停止寄存器。
2)初始化定时器的预分频器TDDR。
3)初始化定时器周期PCR。
4)编写定时器中断服务函数。
5)在中断向量表中相应的位置放置中断跳转指令,指向4)中定义的函数。
6)通过写IFR将定时器中断标志清零,通过写IMR寄存器使能定时器中断。
7)使能全局中断INTM。
8)通过设置BSCR寄存器中的DIVFCT(见表4.4.2)设置CLKOUT的时钟频率,具体为fCLKOUT=fDSPCLK/(DIVFCT+1)。
9)启动定时器。
表4.4.2BSCR寄存器
本实验要完成的任务就是利用定时器中断配合定时器中断服务函数,学习定时器的具体使用方法。
在定时器中断服务子程序中,点亮LED和关灭LED以表示定时器工作正常,同时在CCS的消息输出窗口输出相应的中断信息。
四实验步骤
1.将实验箱配套光盘上的DSP实验中的实验四(Exp4)拷贝到计算机硬盘上。
2.将DSP的USB仿真器连接到实验系统的DSP模块上的JTAG接口。
3.系统上电后,将USB仿真器的USB连接线插入到计算器的USB接口。
4.打开CCS软件,并打开刚刚拷贝的Exp4文件夹下面的Timer工程。
5.查看本实验中的相关代码,学习如何实现中断跳转,如何编写定时器中断服务子程序等。
6.对代码整体结构和流程清楚后,编译代码。
7.编译通过后,下载代码到DSP。
8.查看代码执行结果是否正确(正确的实验结果是:
LED1~LED3和LED5~LED7会周期性的量和灭,同时CCS的Stdout窗口会显示相应按键按下的信息,如图4.4.1所示)。
图4.4.1CCS打印的定时器中断信息
思考题:
⏹1.灯以10HZ闪烁
⏹2.灯以1HZ闪烁
⏹3.两个灯以不同频率闪烁,并用示波器读频率。
实验五DMA实验
一试验目的
1.进一步熟悉DSP的中断机制
2.了解DSP中DMA工作原理
3.掌握如何正确的配置和使用DMA
二实验设备
1.具有USB接口的PC机一台
2.USB仿真器一台
3.ARM/DSP/FPGA实验箱一台
三实验原理
本实验是在学生基本上掌握DSP中断机制的基础上,进一步学习如何使用DSP内部的DMA控制器。
在TMS320VC5410A中,有1个6通道的DMA控制器,它可以在存储器之间传输数据而不打断CPU的正常运行。
这些DMA允许数据在内部存储单元、内部外设、外部设备以及HPI接口等之间进行传递。
该DMA可以完成如下操作:
●读传输:
DMA从存储单元、外设、当前程序、数据以及I/O空间读取一个数据单元。
●写传输:
DMA向存储单元、外设、当前程序、数据以及I/O空间写入一个数据单元。
●单次传输:
DMA向存储单元、外设、当前程序、数据以及I/O空间写入一个数据单元或DMA从存储单元、外设、当前程序、数据以及I/O空间读取一个数据单元,且以上操作仅执行一次。
●帧传输:
每个通道可以有一些数据单元数可编程的数据块,在完成一个帧传输过程中,DMA移动该帧中所有的数据单元。
●块传输:
每个通道可以有一些帧数可编程的数据块,在完成一个块传输过程中,DMA移动该块中所有的帧单元。
DSP中的DMA具有以下特性:
●后台运行:
DMA的整个操作无须CPU干预。
●六通道:
DMA可以同时传输6个独立通道中的数据内容。
●主机接口(HPI)访问:
DMA为HPI的数据提供了一个到存储区的通道,整个过程无须CPU干预。
这个特点允许HPI从内存中传递大量的数据。
●多帧传输:
每个块传输可以包含很多长度可编程的帧。
●可编程优先级:
每个通道均可独立地被编程为高优先级或低优先级。
●可编程地址:
每个DMA通道的源地址和目标地址均可被程序改写。
这些地址可以是固定地址、递增地址或递减地址。
●满地址范围操作:
DMA可以访问到所有的内部存储区、外部存储区、扩展存储区、片内外设、程序空间、数据空间以及I/O空间等。
●可编程传输宽度:
每个通道均可独立的被配置为单字(16位)传递或双字(32位)传递模式。
●自动初始化:
当一个块传输结束后,该DMA通道可以自动的重新初始化自己,以便进行下一次块传输。
●事件同步:
每个数据单元的传输均可被初始化为与某个时间同步,如McBSP接收中断、发送中断和定时器中断等。
●中断机制:
在DMA的帧传输和块传输结束后,每个DMA通道均可给CPU发送一个中断请求。
与DMA控制器相关的寄存器见表4.5.1、表4.5.2、表4.5.3
表4.5.1MDA通道优先级及使能控制寄存器(DMPREC)
表4.5.2DMA同步事件和帧数寄存器(DMSFCn)(n表示通道号)
表4.5.3DMA传输模式控制寄存器(DMMCRn)
由于涉及寄存器数量太多,加之本实验指导书内容篇幅有限,所以具体的寄存器内容及其意义请查阅CCS的帮助文档。
通常要完成正确的DMA操作,可以分为以下几个步骤:
1)设定DMA源地址
2)设定DMA目标地址
3)设定DMA传输长度
4)设定DMA工作模式
5)编写DMA中断服务子程序(如有DMA中断)
6)重映射中断向量表(如果不在0xFF80~0xFFFF位置)
6)在中断向量表中对应的位置写中断跳转指令
7)清除DMA中断标志
8)使能DMA中断
9)使能全局中断
10)启动DMA传输
在本实验中,首先在DSP内部开辟两个缓冲区,一个用于存放用户初始化数据,而另一个同样大小的缓冲区在开始的时候全部清零,然后利用DMA将被初始化的缓冲区中的数据传输到被清零的缓冲区中。
在DMA传输结束后,在其中断服务程序中修改DMA传输的标志位,以告诉main函数DMA传输结束。
在DMA传输结束后,在对以上两个缓冲区的数据逐个比较,如有不同,则累加错误计数器。
最后在程序末尾,根据错误计数器判断传输的数据是否正确,然后打印相关信息。
表4.5.4DMA寄存器一览
四实验步骤
1.将实验箱配套光盘上的DSP实验中的实验五(Exp5)拷贝到计算机硬盘上。
2.将DSP的USB仿真器连接到实验系统的DSP模块上的JTAG接口。
3.系统上电后,将USB仿真器的USB连接线插入到计算器的USB接口。
4.打开CCS软件,并打开刚刚拷贝的Exp5文件夹下面的DMA工程。
5.查看本实验中的相关代码,学习如何实现中断跳转,如何正确
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- DSP 语言 实验 指导 书上