一、实验目的
熟悉定时器的基本结构,学习定时器的功能和控制方法,并实现基于定时器中断方式控制程序。
二、实验原理
定时器
TMS320CC6748有4个定时器/计数器,均可配置为64位计数器、两个独立32位计数器及自动重装32位计数器,可以产生周期中断DMA事件及外部事件。定时器/计数器还可以用于捕获外部输入信号边缘并计数。此外,定时器1还可以用作64位看门狗计数器。本实验使用的是定时器2。
定时器的功能
(1)定时
时钟源一般来源于DSP内部,当然也可以选择来自于外部。
(2)计数
可以利用它的功能来计算外部脉冲在一段时间内到来的次数,所以叫做计数器(记录外部脉冲的次数)。因为内部有一个计数的count,如果用作定时就是先输入一个数字,然后在来了一个时钟之后count自动减一。如果用成计数就是在一个脉冲到来之后count自动加一。
(3)看门狗
一些定时器设计有信号连接到内部器件的复位,因此可用于看门狗定时器模式。
定时器的特性
(1)64 位自增计数器
(2)定时器模式:
64 位通用定时器模式(低32位定时器叫Timer12,高32位定时器叫Timer34)
双 32 位非链式通用定时器模式模式
双 32 位链式定时器模式
看门狗定时器模式
(3)2种时钟源:
内部时钟
外部时钟/事件输入定时器的相连引脚
(4)3种工作模式:
一次工作 (定时器运行一个周期然后停止)
持续工作 (定时器在每个周期结束自动清零并继续工作)
持续工作周期性重载(定时器在每个周期自动获取重载寄存器的值并继续工作)
(5)产生 CPU 中断
(6)产生输出事件让设备复位(仅看门狗模式)
(7)产生 DMA 同步事件
(8)产生输出事件到定时器输出引脚(如果引脚可用)
(9)外部事件捕获相连的定时器引脚(如果引脚可用)
定时器的时钟源
时钟信号可分为分为内部时钟和外部时钟输入,定时器0和定时器1的时钟为PLL0_AUXCK(旁路时钟,24MHz),定时器2和定时器3默认状态下使用的时钟为PLL0_SYSCLK2(为系统频率的二分之一,228MHz),可通过定时器配置将其时钟设置为PLL1_SYSCLK2(可以避免因CPU主频变化对设备产生的不利影响)。
定时器时钟源由定时器控制寄存器 (TCR) 时钟源 (CLKSRC12) 位选择。复位后,时钟源为内部时钟。两个时钟源都可以驱动定时器时钟:
• 设置 CLKSRC12 = 0 为内部时钟。
• 设置 CLKSRC12 = 1 为输入引脚 TM64P_IN12 外部时钟。
实验中使用的是定时器 2,默认情况下定时器 2 使用 PLL0SYSCLK2,所以时钟固定为 CPU 频率二分频。即时钟为:PLL0_SYSCLK2=CPU 频率/2=456MHz/2=228MHz
所以64位定时器的时间间隔:T=计数周期*(1/PLL0_SYSCLK2) =0x0D970100/228000000s=1s
其中0x0D970100 是程序中设定的计数周期,在main.c的宏定义中设定。
程序流程
程序流程设计中首先要进行外设使能配置,接着进行管脚复用配置和定时器初始化,然后进行DSP中断初始化,接着初始化定时器中断,触发中断后在中断中控制LED闪烁。
源码
管脚复用源码
基于StarterWare控制外设时可调用对应的API接口,无需配置复杂的寄存器。GPIO管脚复用配置的函数源码可以查看GPIO.c。
管脚复用配置。
GPIO复用配置操作直接封装成了函数,使用时,直接包含“TL6748.h”文件 即可。
StarterWare API 接口。
GPIOBank0Pin0PinMuxSetup();
定时器配置源码
配置定时器的函数源码和函数使用说明可以查看timer.c。其中,第一个参数是定时器模块寄存器的基地址,第二个参数是用于配置定时器模块。
定时器配置
使用 StarterWare 的库来配置定时器。
使用时,直接包含“timer.h”文件 即可。
StarterWare API 接口。
void TimerConfigure(unsigned int baseAddr, unsigned int config)
周期配置源码
配置定时器周期的函数源码和函数使用说明可以查看timer.c。其中,第一个参数是定时器模块寄存器的基地址,第二个参数是要设置周期的定时器,第三个参数是设置的周期大小。
定时器周期配置。
使用 StarterWare 的库来配置定时器周期。
使用时,直接包含“timer.h”文件 即可。
StarterWare API 接口。
void TimerPeriodSet(unsigned int baseAddr, unsigned int timer, unsigned int period)
定时器使能源码
配置使能定时器的函数源码和函数使用说明可以查看timer.c。其中,第一个参数是定时器模块寄存器的基地址,第二个参数是要使能的定时器,第三个参数是配置使能定时器的模式。
定时器使能配置。
使用 StarterWare 的库来使能定时器。
使用时,直接包含“timer.h”文件 即可。
StarterWare API 接口。
void TimerEnable(unsigned int baseAddr, unsigned int timer, unsigned int enaMode)
三、操作现象
实验设备
本实验使用的硬件接口为LED,所需硬件为实验板、仿真器和电源。
硬件连接
(1)连接仿真器和电脑的USB接口,
(2)将拨码开关拨到DEBUG模式01111,连接实验箱电源,拨动电源开关上电。
软件操作
导入工程,选择Demo文件夹下的对应工程
编译工程
将CCS连接实验箱并加载程序
点击运行程序,底板4个LED会同时闪烁
实验结束后,先点击黄色按钮暂停程序运行,再点击红色按钮退出CCS与实验箱的连接,最后实验箱断电即可。