1.24k likes | 1.41k Views
第 7 章 TMS320C54x 片内外设及其应用. C54x 片内集成了大量外部设备,包括 : 通用 I/O 引脚、定时器、主机接 口、串行口、时钟产生逻辑、等待状态产生器、直接存储器访问和外部总线接口等。. TMS320C54x DSP CPU and Peripherals Reference Set Volume 1 _spru131g.pdf Volume 5 Enhanced Peripherals Set spru302.pdf. 第 7 章 TMS320C54x 片内外设及其应用.
E N D
第7章 TMS320C54x片内外设及其应用 C54x片内集成了大量外部设备,包括: 通用I/O引脚、定时器、主机接 口、串行口、时钟产生逻辑、等待状态产生器、直接存储器访问和外部总线接口等。 • TMS320C54x DSP CPU and Peripherals Reference Set Volume 1_spru131g.pdf • Volume 5 Enhanced Peripherals Set spru302.pdf
第7章 TMS320C54x片内外设及其应用 以TMS320VC5402A芯片为例,它包含了下列一些片内外设: 软件可编程的等待状态产生器 可编程的分区转换逻辑 1个主机接口(HPI8/HPI16) 3个多通道缓冲串行口(McBSPs)
第7章 TMS320C54x片内外设及其应用 1个硬件定时器 带有锁相环(PLL)的时钟产生器 1个DMA控制器(DMA) 增强型的外部并行接口(XIO2) 26条通用I/O引脚(GPIO)
第7章 TMS320C54x片内外设及其应用 其功能结构如图7-1所示 : C5402A
第7章 TMS320C54x片内外设及其应用 本章主要介绍GPIO引脚、定时器、HPI-8、McBSP和DMA的工作原理。 目录: • 7.1 通用I/O引脚(GPIO) • 7.2 定时器 • 7.3 主机接口HPI • 7.4 直接存储器访问DMA • 7.5 多通道缓冲串行口(McBSP)
第7章 TMS320C54x片内外设及其应用 7.1 通用I/O引脚(GPIO) 在C54x芯片中主要提供了两条通用I/O(General Purpose I/O,简称GPI/O)引脚: • 外部标志输出XF • 跳转控制输入BIO 本节将以TMS320VC5402A为例介绍这种引脚。
第7章 TMS320C54x片内外设及其应用 7.1.1 XF和BIO引脚 1. XF引脚 XF是一个输出引脚,输出电平可通过对ST1的D13位(XF)进行控制。此外,XF引脚有一定的驱动能力。 BIO引脚 它是一个输入引脚。 可以作为查询引脚; 也可作为外部中断申请引脚.
第7章 TMS320C54x片内外设及其应用 例7-1 采用XF引脚组成的告警电路。 告警时,用指令:SSBX XF,点亮LED; 不告警时,用指令:RSBX XF,熄灭LED。
第7章 TMS320C54x片内外设及其应用 例7-2 观察下列指令的执行情况。 BC 1500h, TC, NC, BIO; ;当TC=1、C=0且 BIO为低时,程序转移,PC=1500h。
第7章 TMS320C54x片内外设及其应用 7.1.2 其它GPIO引脚 以TMS320VC5402A芯片为例,下列一些引脚可以在不使用片内外设时被配置成为GPIO引脚: • 8条主机接口(HPI)的数据引脚: HD0~HD7。 • 18条多缓冲串行口(McBSP)引脚: BCLKR0/1/2、BCLKX0/1/2、BDR0/1/2、 BDX0/1/2、BFSR0/1/2 、BFSX0/1/2
第7章 TMS320C54x片内外设及其应用 配置方法: 1)令SPCR1.0位RRST=0,使McBSP的接收部分复位; 2)令SPCR2.0位XRST=0,使McBSP的发送部分复位; 1.多缓冲串行口(McBSP)的引脚作为GPIO 3)令PCR.13位XIOEN=1,使DX作为通用输出引脚;FSX和CLKX作为通用I/O。 4)令PCR.12位RIOEN=1,使DR和CLKS作为通用输入引脚;FSR和CLKR作为通用I/O。 CLKS :Serial port clock reference,C5402无
第7章 TMS320C54x片内外设及其应用 2. 主机接口(HPI)的数据引脚作为GPIO 当HPI被用作HPI16模式(引脚HPI16 = 1),或是禁用HPI(引脚HPIENA = 0)时,HPI的数据线HD0~HD7可以作为GPIO来使用。 通过两个通用I/O控制寄存器(GPIOCR)和通用I/O状态寄存器(GPIOSR)来完成操作设置。
第7章 TMS320C54x片内外设及其应用 • GPIOCR(MMR地址003Ch)用来将HD0~HD7配置为输入或输出引脚。GPIOCR结构如图: • DIRx=0 配置输入;DIRx=1 配置输出 通用I/O控制寄存器
第7章 TMS320C54x片内外设及其应用 • GPIOSR(MMR地址003Dh)用来反映GPI/O引脚的输入状态(当HD0~HD7被配置为输入引脚时), • 或是用来给出引脚的输出电平(当HD0~HD7被配置为输出引脚时)。 通用I/O状态寄存器
例7-3 将HPI的HD0–3 设为输入引脚, HD4–7为输出引脚, HD0–3 的状态存储到 AR3; 设置 HD4–7 为 0101b. GPIOCR .set 3Ch;MMR GPIOCR address is 3Ch GPIOSR .set 3Dh;MMR GPIOSR address is 3Dh .text STM #0F0h, GPIOCR ; HD0-3 输入,HD4-7 输出 . . . LDM GPIOSR, A ;得到 GPIOSR值. AND #0Fh, A;Mask off MSBs. STLM A, AR3;Store value of HD0-3 in AR3. STM #050h, GPIOSR;Set HD4-7 to 0101b. . . .
7.2 定时器 7.2.1 定时器的工作原理 定时器用于定时控制、延时、外部事件的计数等。C54x片内集成了1~4个可编程的定时器,下图示出了一个片内定时器的结构: synchronized reset 定时器控制寄存器TCR
第7章 TMS320C54x片内外设及其应用 定时器的组成: • 定时寄存器TIM(timer register) • 周期寄存器PRD(period register) • 预分频计数器PSC(Timer prescaler counter) • 预分频系数TDDR(Timer divide-down ratio)及控制逻辑电路等 主定时模块 预分频模块
第7章 TMS320C54x片内外设及其应用 它分为两个模块: • 主定时模块:包括TIM和PRD,地址分别是0024h和0025h。 • 预分频模块:由PSC和TDDR组成,它们分别位于定时器控制寄存器TCR的D9~D6、D3~D0位。
11 10 15-12 9-6 5 4 3-0 第7章 TMS320C54x片内外设及其应用 1.定时器控制寄存器TCR TCR地址为0026h。它包含了定时器的控制与状态信息以及预分频计数器PSC、预分频系数TDDR等。 其结构如下图所示 :
第7章 TMS320C54x片内外设及其应用 2. 定时器的工作原理 计数器的初值装入: SRESET (Synchronized reset)是DSP的复位信号, TRB为定时器的复位信号,两者中有一个为1,就可使或门3输出使能信号,并通过或门1和或门2产生使能信号,将PRD的值装入TIM;将TDDR的值装入PSC。这就是计数器的初值装入。
第7章 TMS320C54x片内外设及其应用 在DSP复位时(TSS为0)或将TSS清0时,与门5被使能,CPU clock将作为计数源送入PSC的计数端。 PSC在计数初值的基础上每来一个计数脉冲就减1计数,当减至0时,在下一个脉冲到来时会产生一个借位,该借位脉冲将作为TIM的计数脉冲,使TIM减1,同时通过或门2使能,将TDDR值重新装入PSC,PSC在此初值下继续减1计数。
第7章 TMS320C54x片内外设及其应用 当将TSS位置1时,与门5关闭,不允许CPU clock输入,并且停止定时器的工作。 TIM的计数源是PSC的溢出借位信号。TIM在计数初值的基础上每来一个计数脉冲就减1计数,当减至0时会产生一个借位,并引发下列行为: 1)向主机发出中断申请信号TINT;
定时器定时时间的计算公式如下: 定时周期=CLKOUT×(TDDR+1)×(PRD+1) 其中:CLKOUT是CPU的时钟周期。 第7章 TMS320C54x片内外设及其应用 TIM减至0时产生一个借位,并引发下列行为: 1)向主机发出中断申请信号TINT; 2)通过驱动门4和引脚TOUT输出信号; 3)通过或门1使能,将PRD的值重新装入TIM, 作为TIM的计数初值。从而完成定时工作的一个基本过程。
第7章 TMS320C54x片内外设及其应用 7.2.2 定时器的编程 在应用编程中应该掌握的三个关键点: • 怎样计算计数初值 • 怎样对定时器进行初始化 • 怎样配置定时器的中断
第7章 TMS320C54x片内外设及其应用 1.怎样计算计数初值 例:若要求定时周期=1ms,设时钟周期CLKOUT=1/80M=12.5ns,求TDDR及PRD。 12.5ns×65536=819200ns=0.8192ms 解: 定时周期 =CLKOUT×(TDDR+1)×(PRD+1) 1ms = 12.5×(9+1) ×(PRD+1) =1×106ns 求得:PRD=7999(10)=1F3FH; 先假定:分频系数TDDR=9
第7章 TMS320C54x片内外设及其应用 2.怎样对定时器进行初始化 通过下列步骤对定时器进行初始化: 1)将TCR的TSS置1,关闭定时器 2)装载PRD 3)初始化TDDR:将TRB置1去重新装载定时器的 初值,将TSS清0以使能定时器。
11 10 15-12 9-6 5 4 3-0 第7章 TMS320C54x片内外设及其应用 例:对定时器进行初始化程序: STM #0010H,TCR;TSS=1,关闭定时器 STM #1F3FH,PRD;加载周期寄存器PRD STM #0E69H,TCR;TDDR=9,TRB=1,装载 ;TIM及PSC ,TSS=0,启 ;动定时器
第7章 TMS320C54x片内外设及其应用 3.怎样配置定时器的中断 假定INTM=1 (ST1的D11位),定时器中断的设置方法如下: 1)给IFR的TINT位写入1,以清除没有处理完的定时器中断; 2)给IMR的TINT位写入1,以使能定时器的中断; 3)INTM位清0,使能全部可屏蔽中断。
第7章 TMS320C54x片内外设及其应用 例:若INTM=1,定时器中断设置程序: STM #0008H,IFR;清除没处理完的定时器1中断 STM #0008H,IMR;开放定时器1中断 RSBX INTM ;开总中断INTM=0 TINT IFR、IMR
第7章 TMS320C54x片内外设及其应用 7.2.2 定时器的编程 【例7-4】采用片内定时器实现方波信号发生器。在引脚XF端输出周期为2s、占空比为50%的方波信号。设时钟周期CLKOUT=1/80M=12.5ns,通过中断方式完成编程。 解: 定时周期 =CLKOUT×(TDDR+1)×(PRD+1) 1ms =12.5×(9+1)×(PRD+1) =1×106ns 求得:PRD=7999(10)=1F3FH 用中断次数进行计数1000,完成总定时周期:1000×1ms=1s 12.5ns×65536×16=13. 1072ms 取定时周期=1ms,分频系数TDDR=9;
7.2.2 定时器的编程 (1)主程序清单 .file "timer.asm" .mmregs ;54X 存储器影像寄存器定义 .global main ;声明 main为全局符号 .deftimer_iserv TIM0 .set 0x0024 ; 定时器0定时寄存器 PRD0 .set 0x0025 ; 定时器0周期寄存器0 TCR0 .set 0x0026 ; 定时器0控制寄存器 TIM0_VAL .set 0x1F3F ; 定时0定时寄存器赋值为1F3Fh ; ;(此程序没有使用 );(十进制7999) PRD0_VAL .set 0x1F3F ;周期寄存器赋值为1F3Fh (7999) TCR0_VAL .set 0x0E69 ; 控制寄存器赋值为0E69h,0000 11100110 1001 ; 即free.soft=11b, PSC=1001b,TRB=1,TSS=0, TDDR=1001b
7.2.2 定时器的编程 (1)主程序清单 ;SWWSR .set 0x0028 ; software wait-state register SWWSR_VAL .set 0x36DB ; (0011011011011011b)三个空间都插入了3个等待周期 SWCR .set 0x002B ; 软件等待状态控制寄存器 SWCR_VAL .set 0x0001 ; 三个空间都插入的3个等待周期都乘以2 TINT0_ENBL .set 0x0008 ;开放TIMER0中断 ;CLKMD .set 0x0058 ;锁相环PLL软件控制时钟方式寄存器MMR地址 PLLX5 .set 0x43EF ;锁相环PLL软件控制时钟方式寄存器CLKMD的设置字: ; 01000011 1110 1111,外部时钟16MHz, 5倍频到80MHz, PLLCOUNT=125 (见第九章347页) (见第九章348页) (见第九章337页)
7.2.2 定时器的编程 OVLY_1 .set 0x00A0 ;PMST中: 0000 00001010 0000 IPTROVLY stack_size .set 100 stack .usect ".stack" , stack_size sys_stack .set stack+stack_size .bss XF_FLAG, 1 .bss LED_DISP, 1 ;此程序没有使用 .text main: STM #sys_stack, SP ANDM #0fffeh, *(SP) ; 堆栈指针长字(双字)对齐, *(SP)可换成SP STM #OVLY_1, PMST ; 置OVLY=1, MP/MC=0, DROM=0 STM #SWWSR_VAL, SWWSR ;插入三个等待周期
7.2.2 定时器的编程 * ; PLL的倍频,分频切换(见第九章339页) STM #0,CLKMD;切换到DIV方式 DIV_Status: LDM CLKMD,B AND #01h,B;测试PLLSTATUS位, BC DIV_Status,BNEQ ;若B=0, 则已切换到DIV方式 STM PLLX5,CLKMD;设置锁相环为PLL×5方式 PLL_Status: LDM CLKMD,B AND #01h,B;测试PLLSTATUS位, BC PLL_Status,BEQ ;若B≠0,则已切换到倍频方式 外部时钟16MHz, 5倍频到80MHz 时钟周期CLKOUT=1/80M=12.5ns
7.2.2 定时器的编程 * ;配置和启动定时器 STM #TINT0_ENBL, IMR ; 开TINT中断TINT0_ENBL=0x08 STM #XF_FLAG, AR1 ; AR1中是XF状态XF_FLAG的地址 ST #0, *AR1 ; 复位XF状态为0 STM #03E8h, AR2 ; 倒计时中断次数1000(03E8h) STM #PRD0_VAL, PRD ; 装入主定时模块计数初值1F3Fh STM #TCR0_VAL, TCR ;装入预分频模块计数初值9, TSS=0,启动定时器 RSBX INTM ;开总中断 WAIT: BD WAIT NOP NOP NOP
7.2.2 定时器的编程 * ;中断服务程序 timer_iserv: BANZ EXIT_ISERV, *AR2- ;倒计时中断次数1000(03E8h) STM #03E8h, AR2 ; 重载倒计时中断次数1000(03E8h) BITF *AR1, #1h ;位测试XF_FLAG的最低位,AR1中是 XF_FLAG的地址 BC XF_0, TC ;若TC=1则XF_FLAG最低位为1, 转XF_0 SSBX XF ;XF置1 ST #01h, *AR1 ;标志位XF_FLAG置1 B EXIT_ISERV XF_0: RSBX XF ;XF清0 ST #00h, *AR1 ;标志位XF_FLAG清0 EXIT_ISERV: RETE .end
7.2.2 定时器的编程 (2)中断向量程序清单 VECTORS.ASM .mmregs ;54X 存储器影像寄存器定义 .ref main ;声明 main为其他函数定义符号 .ref timer_iserv .sect ".vectors" IV_RESET: BD main ;复位中断,跳转到主程序入口 nop nop IV_NMI: rete ;NMI中断,开中断返回 nop nop nop SINT17:rete ;SINT17中断,开中断返回 nop nop nop
7.2.2 定时器的编程 (2)中断向量程序清单 SINT18: rete nop nop nop SINT19: rete nop nop nop SINT20: rete nop nop nop SINT21: rete nop nop nop SINT22: rete nop nop nop SINT23: rete nop nop nop SINT24: rete nop nop nop SINT25: rete nop nop nop SINT26: rete nop nop nop SINT27: rete nop nop nop SINT28: rete nop nop nop SINT29: rete nop nop nop
7.2.2 定时器的编程 SINT30: rete nop nop nop INT0: rete nop nop nop INT1: rete nop nop nop INT2: rete nop nop nop TINT0: b timer_iserv nop nop BRINT0: rete nop nop nop BXINT0: rete nop nop nop DMAC0: rete nop nop nop
7.2.2 定时器的编程 TINT1: rete nop nop nop INT3: rete nop nop nop HPINT: rete nop nop nop BRINT1: rete nop nop nop BXINT1: rete nop nop nop DMAC4: rete nop nop nop DMAC5: rete nop nop nop RESERVED .space 8*16 .end
7.2.2 定时器的编程 MEMORY { PAGE 0 : PROG: origin = 0x2400, length = 0x1b80 VECT: origin = 0x0080, length = 0x80 PAGE 1 : DARAM: origin = 0x0100, length = 0x1f80 STACK: origin = 0x2000, length = 0x400 } (3)命令文件清单 ucdos.CMD SECTIONS { .text : load = PROG page 0 .data : load = PROG page 0 .bss : load = DARAM page 1 .stack : load = STACK page 1 .vectors : >VECT page 0 }
第7章 TMS320C54x片内外设及其应用 7.3 主机接口HPI • C54x的主机接口HPI(Host Port Interface)是一个并行接口,用来实现DSP与外部主机芯片或其它微处理器的并行通信。 • 根据数据线的宽度不同,HPI又分为8位的或者16位的;根据功能的不同,又分为标准型HPI或是增强型 HPI。 • 标准型HPI:主机访问片内固定的2kRAM,异步; 增强型HPI:主机和DSP都能访问片内所有RAM,同步。 (C542,545,548和549) (C54XX系列,例如C5402)
7.3.1 HPI-8的结构 8位的主机接口HPI-8主要由三个寄存器HPIC、HPID和HPIA以及HPI控制逻辑组成。其结构如下图所示 :
第7章 TMS320C54x片内外设及其应用 2. HPI的寄存器 HPI有三个寄存器 : • 地址寄存器HPIA • 数据寄存器HPID • 16位控制寄存器HPIC
第7章 TMS320C54x片内外设及其应用 1.有关引脚(20PIN)及信号 • HD0~HD7:输入/输出/高阻,双向并行数据总线 • HCNTL0、HCNTL1:输入,主机通过这两个引脚 来选择要访问的HPI寄存器。 • HBIL:输入,字节(第一(HBIL =0)、二字节)识别信号。 • HCS :输入,片选信号输入端。 • HDS1、HDS2:输入,数据选通信号。
第7章 TMS320C54x片内外设及其应用 1.有关引脚(20PIN)及信号(续) • HAS:输入,地址选通信号。 • HR/W:输入,HPI的读/写信号。 • HINT:输出/高阻,中断输出信号。 • HRDY:输出/高阻,HPI准备好信号。 • HPIENA:输入,HPI模式选择信号。 • HPI16(对16位HPI接口):输入, HPI16模式选择信号。 (C5402A是HPI8/16接口,有HPI16 ; C5402是HPI8接口,无HPI16)
第7章 TMS320C54x片内外设及其应用 • 注意: 1)对主机来说,HPIC的高8位和低8位内容相同。而对DSP来说,只使用HPIC的低8位,不使用高8位。 2)DSP可以写HINT位,而主机读HPIC要分两次字节读完成。 3)主机对HPIC的读/写和DSP对HPIC的读/写会有不同的位定义。这反映在下图中: