实验3 锁相环、定时器与中断实验(2012.4.12)

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验3:锁相环、定时器与中断实验

一.实验目的

1.深刻理解C55x芯片支持库(CSL)的作用,掌握CSL的安装和基本使用方法。

2. 掌握TMS320VC5509A数字锁相环PLL的配置方法。

3.掌握TMS320VC5509A的定时器的使用方法。

4. 熟悉TMS320VC5509A中断程序设计方法。

二.实验设备

PC兼容机一台,操作系统为Windows2000,安装Code Composer Studio 4.2,SDUST-CEE- C55X DSP实验系统箱,示波器(选用)。

三.实验原理

1. 片上支持库(CSL)的安装和使用

片上支持库(CSL)提供配置及控制片上外设的函数、宏等工具,可以通过程序实现这些函数和宏的调用,使外设更易于使用。

(1)CSL的安装

CCS4没有集成CSL库,当DSP程序涉及CSL使用时,在程序编译前请检查CSL库的安装情况。CSL安装过程如下:运行,根据提示设定相应的目录即可。本实验

CSL的安装路径为:D:\Program Files\C55xxCSL。

(2)在CCS4中修改工程属性,添加CSL库

选中工程,右键->properties,弹出对话框选择C/C++ build。

●C5500 Compiler:

在Predefined Symbols中添加“CHIP_5509”和“_CSL5509_LIB_”两项,Include Options中添加CSL库中include文件夹的路径(D:\Program Files\C55xxCSL \include)。

●C5500 linker:

在File Search Path,Include library file …栏中添加“rts55x.lib”和“csl5509ax.lib”两项,Add

to libra ry…栏中添加上面两个库文件所在路径("D:\Program Files\Texas Instruments\ccsv4\tools\compiler\c5500\lib"和"D:\Program Files\C55xx CSL\lib")。

2.数字锁相环(DPLL)的使用

DPLL的功能是将CLKIN引脚接收输入时钟信号(本实验中为晶体振荡器提供的12MHz方波信号)变换为CPU及其外设所需的工作时钟(称为CPU时钟,本实验中设置为144MHz)。

使用DPLL的CSL需要包含csl_pll.h。CSL提供了多种方法可实现对DPLL的配置,本实验采取的方法如下:

(1)在main()函数前,创建PLL配置结构:

PLL_Config myPLLConfig = {

0, //IAI:

1, //IOB:

24, //mult

1 //div

/* CPU时钟频率=(mult/div+1)输入晶振时钟频率,本实验中(mult/div+1)=12.

由于晶振时钟频率为12MHz,因此CPU时钟频率=144MHz */ };

(2)在main()函数中,运行函数PLL_config()完成PLL 参数配置:

PLL_config(&myPLLConfig);

3.中断的使用

在CSL 使用中断需要包含csl_irq.h 。可通过函数IRQ_setVecs((Uint32) (&VECSTART))设置中断向量入口地址,本实验中,VECSTART 和中断向量表的定义在汇编模块vectors.s55中完成,在C 语言main 函数中要将其声明为外部函数:extern void VECSTART(void)。

全局中断的禁止或使能分别通过函数IRQ_globalDisable()或IRQ_globalEnable()实现。涉及各具体中断源(如定时器)的相应操作见下。

4.通用定时器的使用

C55x 芯片提供了两个通用定时器,可为CPU 提供周期性中断信号或向DSP 芯片外的器件提供周期信号。每个定时器有两个计数寄存器(PSC ,TIM )和两个周期寄存器(TDDR ,PRD ),在定时器初始化或定时值重新装入过程中,周期寄存器的内容将复制到计数寄存器中。定时器发送中断信号或同步事件信号的频率可用下式计算:

()()

1PRD 1TDDR TINT +⨯+=输入时钟频率频率 使用通用定时器的CSL 需要包含csl_timer.h ,在CSL 使用定时器的基本方法如下:

(1)在main 函数前通过TIMER_TCR_RMK 定义定时器控制器的各控制位,本实验中:

#define TIMER_CTRL TIMER_TCR_RMK(\

TIMER_TCR_IDLEEN_DEFAULT, /* IDLEEN == 0 */ \ TIMER_TCR_FUNC_OF(0), /* FUNC == 0 */ \ TIMER_TCR_TLB_RESET, /* TLB == 1 */ \ TIMER_TCR_SOFT_BRKPTNOW, /* SOFT == 0 */ \ TIMER_TCR_FREE_WITHSOFT, /* FREE == 0 */ \ TIMER_TCR_PWID_OF(0), /* PWID == 0 */ \ TIMER_TCR_ARB_RESET, /* ARB == 1 */ \ TIMER_TCR_TSS_START, /* TSS == 0 */ \ TIMER_TCR_CP_PULSE, /* CP == 0 */ \ TIMER_TCR_POLAR_LOW, /* POLAR == 0 */ \ TIMER_TCR_DATOUT_0 /* DATOUT == 0 */ \

)

(2)在main 函数前,利用TIMER_Config 创建定时器配置结构。本实验中:

TIMER_Config myTimerCfg = {

TIMER_CTRL, /* 定义TCR 的有关控制位 */

0x464fu, /* 设定PRD 的值,本实验取为0x464fu,即17999 */ 0x0000 /* 设定PRSC 的值,本实验取为 0 */

/*定时器定时时间=(PRD+1)(PRSC+1)*CPU 时钟周期,因此本实验定时器定时时间=18000*1/144(us)=125us */

};

(3)在main()函数或其它功能函数中,运行函数mhTimer0 = TIMER_open(TIMER_ DEV0,TIMER_OPEN_RESET)打开定时器(这里为定时器0),获得相应的句柄mhTimer0;通过函数TIMER_config(mhTimer0,&myTimerCfg)完成定时器的参数配置。

当使用定时器中断时,需要编写相应的中断服务程序,本实验中:

interrupt void timer0Isr(void )

{

相关文档
最新文档