第6章 DSP片内外设教学提示:TMS320C54x DSP的片内外设是集成在芯片内部的外部设备。
本章将以C5402 DSP为主详细介绍其可编程定时器、串行口、主机接口、通用I/O以及软件等待状态发生器和分区转换逻辑。
教学要求:掌握可编程定时器、标准同步串行口、标准8位主机接口、通用I/O的特点和操作过程,能够应用。
了解多通道缓冲串口(McBSP)、8位增强主机接口HPI-8、软件等待状态发生器和分区转换逻辑。
6.1 DSP片内外设概述TMS320C54x DSP的片内外设是集成在芯片内部的外部设备。
CPU核对片内外设的访问是通过对相应的控制寄存器的访问来完成的。
外部设备集成在芯片内部主要有以下优点:(1) 片内外设访问速度快。
因为片外外设必须通过与程序、数据总线共用的外部总线来访问,访问速度慢,而片内外设的访问或操作速度大大快于外部I/O空间中的片外外设。
(2) 可以简化电路板的设计。
如将A/D转换、D/A转换、定时器集成在片内。
(3) 提供一些必须的特殊功能。
这些特殊功能必须以片内外设的方式来实现,如JTAG 口、等待状态发生器等。
TI公司将相关的片内外设分为两大类:片内外设和增强型片内外设。
其中片内外设主要包括串行接口、定时器、通用I/O引脚和标准主机接口(HPI8)。
增强型外设主要包括多通道缓冲串口(McBSP)、主机接口(8位增强HPI-8、16位增强HPI-16)、DMA控制器。
所有的C54x DSP的CPU结构及功能完全相同,但是片内的外设配置多少不同。
任何一款C54x DSP拥有的片内外设都只是以上列举的片内外设的一部分。
片内外设的操作是通过相关的控制寄存器来实现的,寄存器被映射到数据存储空间的第0页(地址20h~5Fh)。
具体的映射关系如表6-1所示。
表6-1 C5402外设存储器映像寄存器地址(十六进制) 名称描述McBSP0数据接收寄存器220 DRR20McBSP0数据接收寄存器121 DRR10McBSP0数据发送寄存器222 DXR20McBSP0数据发送寄存器123 DXR10定时器0寄存器24 TIM定时器0周期计数器25 PRDDSP技术及应用·164·续表地址(十六进制) 名称描述定时器0控制寄存器26 TCR27 ―保留软件等待状态寄存器28 SWWSR块切换控制寄存器29 BSCR2A ―保留软件等待状态控制寄存器2B SWCRHPI控制寄存器2C HPIC2D~2F ―保留定时器1寄存器30 TIM1定时器1周期计数器31 PRD1定时器1控制寄存器32 TCR133~37 ―保留McBSP0 串口子块地址寄存器38 SPSA0McBSP0 串口子块数据寄存器39 SPSD03A~3B ―保留通用I/O引脚控制寄存器3C GPIOCR通用I/O引脚状态寄存器3D GPIOSR3E~3F ―保留McBSP1数据接收寄存器240 DRR21McBSP1数据接收寄存器141 DRR11McBSP1数据发送寄存器242 DXR21McBSP1数据发送寄存器143 DXR1144~47 ―保留McBSP1串口子地址寄存器48 SPSA1McBSP1串口子数据寄存器49 SPSD14A~53 ―保留DMA通道容许与优先控制寄存器54 DMPRECDMA子块地址寄存器55 DMSA带子块地址递增的DMA数据寄存器56 DMSDIDMA子地址寄存器57 DMSDN时钟模式寄存器58 CLKMD59~5F ―保留·164·第6章 DSP片内外设·165·6.2 可编程定时器C5402有两个片内定时器,主要用来产生周期性的中断。
它们的动态范围由16位计数器和4位预定标计数器来确定。
计数频率来自于CPU的时钟频率。
每个定时器都具有软件可编程的3个控制寄存器。
6.2.1 定时器的结构及特点C5402内部有定时器0和定时器1两个定时器。
这两个定时器的结构都是一样的,每个定时器有3个控制寄存器,它们是:z TIM定时器寄存器,是减1计数器,可加载周期寄存器PRD的值,并随计数减少。
z PRD定时器周期寄存器,PRD中存放定时器的周期计数值,提供TIM重载用。
z TCR定时器控制寄存器,TCR包含定时器的控制和状态位,控制定时器的工作过程。
这3个寄存器都是存储器映像寄存器,其所在的地址如表6-1所示。
图6.1所示为定时器的逻辑框图,它由两个基本的功能块组成,即主定时器模块(由PRD 和TIM组成)和预定标器模块(由TCR的TDDR和PSC位组成)。
图6.1 定时器的逻辑框图定时器是一个片内向下(递减)计数器。
预定标器PSC由CPU提供时钟,TIM由PSC 减为0后产生的信号为时钟。
每次当计数器TIM减少到0时,会产生一个定时器中断(TINT),计数器同时重载周期值。
DSP定时器有以下的主要特点:(1) 由16位计数器和4位预分频计数器组成。
16位计数器的触发脉冲由预分频计数器提供,预分频计数器由CPU工作时钟决定。
(2) 定时器是一个减计数器。
(3) 有复位功能。
(4) 可以选择调试断点时定时器的工作方式。
·165·DSP技术及应用·166·6.2.2 定时器的控制寄存器DSP核通过访问或控制TIM、PRD和TCR这3个寄存器来控制定时器的工作。
其中TCR控制定时器的工作过程,其各位的意义描述如表6-2所示。
表6-2 TCR定时器控制寄存器位名称复位值功能15~12 Reserved -保留11 10 SoftFreeSoft和Free位一起决定在调试中遇到断点时的定时器工作状态。
Free Soft 定时器状态0 0 定时器立即停止工作0 1 当计数器减到0时停止工作1 x 定时器继续运行9~6 PSC -定时器预定标计数器。
当PSC中的数值减到0后,TDDR中的数加载到PSC,TIM减15 TRB -定时器重新加载控制位。
复位片内定时器。
当TRB置位时,TIM 重新装载PRD的值,PSC重新装载TDDR中的值。
TRB总是读为04 TSS 0 定时器停止位,TSS=0 定时器开始工作,TSS=1 定时器停止3~0 TDDR 0000 当PSC减为0时,TDDR中的值被装载到PSC中6.2.3 定时器的操作过程1. 定时器的工作过程主定时器模块由PRD和TIM组成。
在正常工作情况下,当TIM减计数到0后,PRD 中的内容自动地加载到TIM。
当系统复位(SRESET输入信号有效)或者定时器单独复位(TRB 有效)时,PRD中的内容重新加载到TIM。
TIM由预定标器PSC提供时钟,每个来自预定标块的输出时钟使TIM减l。
主计数器块的输出为定时器中断(TINT)信号,该信号被送到CPU和定时器输出TOUT引脚。
预定标模块由预定标计数器(PSC)和定时器分频系数(TDDR)组成。
PSC和TDDR都是定时器控制寄存器(TCR)的位。
在正常工作情况下,当PSC减计数到0时,TDDR的内容加载到PSC。
当系统复位或者定时器单独复位时,TDDR的内容重新加载到PSC。
PSC由CPU提供时钟,每个CPU时钟信号将使PSC减1。
通过读TCR,可以读取PSC,但是它不能直接被写。
通过TSS位的控制可以关闭定时器的时钟输入,停止定时器的运行。
当不需要定时器时,停止定时器的操作以降低DSP功耗。
2. 定时时间的计算每次当定时器计数器减少到0时,会产生一个定时器中断(TINT),定时器中断(TINT)·166·第6章 DSP 片内外设·167·周期可由如下公式计算:定时器的中断周期 CLK TDDR PRD =T (T 1)(T 1)×+×+通过读TIM ,可以读取定时器的当前值;读TCR 可以读取PSC 。
由于读这两个寄存器需要两条指令,就有可能在两次读之间因为计数器减而发生读数变化。
因此,如果需要精确的定时测量,就应当在读这两个值前先停止定时器。
3. 定时器的初始化初始化定时器可采用如下步骤:(1) 将TCR 中的TSS 位置1,停止定时器。
(2) 加载PRD 。
(3) 重新加载TCR 以初始化TDDR 。
(4) 重新启动定时器。
通过设置TSS 位为0,并设置TRB 位为l 以重载定时器周期值,使能定时器。
使能定时器中断的操作步骤如下(假定INTM=1):(1) 将IFR 中的TINT 位置1,清除尚未处理完(挂起)的定时器中断。
(2) 将IMR 中的TINT 位置l ,使能定时器中断。
(3) 可以将ST1中的INTM 位清0,使能全局中断。
复位时,TIM 和PRD 被设置为最大值FFFFh ,定时器的分频系数(TCR 的TDDR 位)清0,并且启动定时器。
注意复位后定时器是工作的,如果不用可以在初始化中停止其运行。
6.2.4 定时器应用举例【例6.1】 利用定时器Timer0在XF 引脚产生周期为1s 的方波。
设f=100MHz ,定时最大值是:=10(ms),要输出1s 的方波,可定时5ms ,再在中断程序中加个100计数器,定时器周期=10ns×(1+9)×(1+49999)=5ms 来完成。
4110(ns)22××6程序如下:CounterSet .set 100;定义计数次数 PERIOD .set 49999;定义计数周期 .asg AR1,Counter;AR1做计数指针,重新命名以便识别 STM #CounterSet,Counter;设计数器初值 STM #0000000000001000B,TCR;停止计数器 STM #PERIOD,TIM;给TIM 设定初值49999 STM #PERIOD,PRD;PRD 与TIM 一样 STM #0000001001101001B,TCR;开始定时器的工作 STM #0008H,IMR;开TIME0的中断 RSBX INTM;开总中断 End: NOPB End中断服务程序: T INT0_ISRTINT0_ISR:PSHM ST0;保护ST0,因要改变TC ·167·DSP技术及应用·168·BANZ Next,*Counter- ;计数器不为0,计数器减1,退出中断STM #CounterSet,Counter ;计数器为0, 根据当前XF的状态,分BITF *AR2,#1 ;别到setXF或ResetXFBC ResetXF,TCsetXF:;置XF为高SSBX XFST #1,*AR2B NextResetXF:;置XF为低RSBX XFST #0, *AR2Next:POPM ST0RETEend6.3 串行口一般TI公司的DSP都有串行口,C54x系列DSP集成在芯片内部的串口分为4种:标准同步串口(SP)、带缓冲的串行接口(BSP)、时分复用(TDM)串行口和多通道带缓冲串行接口(McBSP)。