第七章C54x片内外设、接口及应用-主机接口课件.ppt
-
资源ID:69822665
资源大小:2.85MB
全文页数:71页
- 资源格式: PPT
下载积分:20金币
快捷下载
会员登录下载
微信登录下载
三方登录下载:
微信扫一扫登录
友情提示
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
|
第七章C54x片内外设、接口及应用-主机接口课件.ppt
http:/n 主机接口n 定时器n 串行口n 中断系统 第7章 TMS320C54x 片内外设、接口及应用http:/1.概 述u 为满足数据处理的需要,为满足数据处理的需要,C54xC54x器件除提供功能强大的器件除提供功能强大的 CPU CPU、改进的哈佛结构的总线、片内大容量的高速存储、改进的哈佛结构的总线、片内大容量的高速存储 器和大范围的寻址,还提供了丰富的片内外围电路。器和大范围的寻址,还提供了丰富的片内外围电路。http:/ 通用通用I/OI/O引脚(引脚(BIOBIO和和XFXF)定时器定时器 时钟发生器时钟发生器 主机接口主机接口HPIHPI 软件可编程的等待状态发生器软件可编程的等待状态发生器 可编程的分区转换逻辑可编程的分区转换逻辑 直接存储器访问直接存储器访问DMADMA控制器控制器 串行口串行口-标准同步串口、带缓冲的串口标准同步串口、带缓冲的串口BSPBSP、多通道缓冲串口、多通道缓冲串口 McBSP McBSP和时分复用串口和时分复用串口TDMTDMu 不同型号的不同型号的C54xC54x芯片具有不同的外设数量和配置:芯片具有不同的外设数量和配置:http:/2.片内外设的存储器映射寄存器n 片内外设的控制与操作是通过片内外设的控制与操作是通过存取存储器映射的控制和存取存储器映射的控制和 数据寄存器数据寄存器实现;实现;n 这些寄存器可用来与外设交换数据,这些寄存器可用来与外设交换数据,CPUCPU通过访问这些通过访问这些 寄存器来操作和控制外设;寄存器来操作和控制外设;n 置位或清零控制寄存器中的相应位可以使能、禁止、初置位或清零控制寄存器中的相应位可以使能、禁止、初 始化或动态配置外设;始化或动态配置外设;n 片内外设的寄存器映射到数据存储空间的第片内外设的寄存器映射到数据存储空间的第0 0页页20H20H5FH5FH 地址中。地址中。P43P43http:/表表1 VC54021 VC5402的部分片内外设映射寄存器的部分片内外设映射寄存器http:/7.1 主机接口http:/n 主机接口主机接口HPIHPI是是C54xC54x芯片具有的一种芯片具有的一种8 8位或位或1616位的并行接口位的并行接口部件部件1.概述 主机和主机和DSPDSP可独立地对可独立地对HPIHPI接口操作;接口操作;主机和主机和DSPDSP握手可握手可通过中断方式通过中断方式来完成;来完成;主机可通过主机可通过HPIHPI直接访问直接访问CPUCPU的存储空间的存储空间,包括存储器映像,包括存储器映像 寄存器;寄存器;主机还可通过主机还可通过HPIHPI接口装载接口装载DSPDSP应用程序、接收应用程序、接收DSPDSP运行结果运行结果 或诊断或诊断DSPDSP运行状态,为运行状态,为DSPDSP芯片的接口开发提供了一种极为芯片的接口开发提供了一种极为 方便的途径。方便的途径。n 特点:特点:主要用于主要用于DSPDSP与其他主设备或主处理器与其他主设备或主处理器(主机(主机-主控者)主控者)进行通信进行通信http:/图图2 HPI2 HPI接口框图接口框图2.结构1000H-17FFH DARAMhttp:/(1)(1)共用访问模式共用访问模式(SAMSAM)主机和主机和C54xC54x都能访问都能访问HPIHPI存储器。如果存储器。如果C54xC54x与主机的周期与主机的周期发生冲突,发生冲突,主机具有访问优先权主机具有访问优先权,C54xC54x需等待一个周期。需等待一个周期。3.HPI的工作方式(2)(2)仅主机访问模式仅主机访问模式(HOMHOM)只有主机可以访问只有主机可以访问HPIHPI存储器,存储器,C54xC54x则处于复位状态或内则处于复位状态或内外所有时钟都停止工作的空闲状态。外所有时钟都停止工作的空闲状态。此方式下,此方式下,HPIHPI支持更快的主机访问速度,与支持更快的主机访问速度,与C54xC54x的时钟的时钟速度无关。速度无关。HPIHPI具有两种工作方式:具有两种工作方式:http:/图图3 HPI3 HPI与主机设备之间的连接框图与主机设备之间的连接框图4.HPI的基本功能http:/表表3 HPI3 HPI用于主机和用于主机和C54x DSPC54x DSP之间通信的寄存器之间通信的寄存器5.HPI的寄存器名称名称地址地址功能描述功能描述HPIAHPI地址寄存器,主机可直接地址寄存器,主机可直接访问访问HPIC002CHHPI控制寄存器,可由控制寄存器,可由主机或主机或C54X直接直接访问访问,包含,包含HPI操作的控制和状操作的控制和状态态位。位。HPIDHPI数据寄存器,只能由主机数据寄存器,只能由主机访问访问,包含从包含从HPI存存储储器器读读出的数据或要写出的数据或要写到到HPI存存储储器的数据。器的数据。http:/6.HPI-8与HPI的区别n HPI-8 HPI-8是是8 8位增强位增强HPIHPI接口接口n 是用于连接是用于连接C54xC54x芯片与主机设备或主机处理器的并行接口芯片与主机设备或主机处理器的并行接口n 主机与主机与C54xC54x芯片通过芯片通过C54xC54x的片内的片内RAMRAM交换数据。交换数据。n C5402 C5402、C5410C5410带有带有HPI-8HPI-8,C5420C5420为为HPI-16HPI-16。标标准准8位位HPI增增强强型型8位位HPI只允只允许访问许访问片内片内RAM指定的指定的2k字字允允许对许对整个片内整个片内RAM进进行行访问访问在在HOM方式,方式,仅仅能主机能主机寻寻址址HPI存存储储器器主机与主机与C54x都能都能访问访问HPI存存储储器器在在HOM方式,允方式,允许许主机的异步主机的异步访问访问主机主机访问总访问总是与是与C54x的的时钟时钟同步同步表表2 2 标准标准HPIHPI与与HPI-8HPI-8的区别的区别http:/7.2 定时器http:/ C54xDSP C54xDSP的定时器是一个带有的定时器是一个带有4 4位预分频器的位预分频器的1616位定时电路位定时电路(减法计数器),可获得较大范围的定时器频率。(减法计数器),可获得较大范围的定时器频率。定时器计数器每来一个时钟周期自动减定时器计数器每来一个时钟周期自动减1 1,当计数器减至,当计数器减至0 0时时 产生一个定时中断。产生一个定时中断。通过编程设置特定的状态,可使定时器停止、恢复运行、复通过编程设置特定的状态,可使定时器停止、恢复运行、复 位或禁止。位或禁止。VC5402 VC5402有两个片内定时器。有两个片内定时器。一、定时器概述http:/u C54x C54x的定时器是一个可软件编程的计数器,主要包括的定时器是一个可软件编程的计数器,主要包括3 3个存储器映射个存储器映射 寄存器:寄存器:1.1.定时器设定寄存器定时器设定寄存器TIMTIM -1616位减法计数器位减法计数器,映射到数据存储空间的,映射到数据存储空间的0024H0024H单元。复位或定单元。复位或定时器中断(时器中断(TINTTINT)时,)时,TIMTIM内装入内装入PRDPRD寄存器的值(定时时间),并进行寄存器的值(定时时间),并进行自动减自动减1 1操作。操作。2.2.定时器周期寄存器定时器周期寄存器PRD PRD -16 -16位的存储器映像寄存器,位于数据存储空间的位的存储器映像寄存器,位于数据存储空间的0025H0025H单元,用单元,用来来存放定时时间常数存放定时时间常数。复位或。复位或TINTTINT中断时,将定时时间装入中断时,将定时时间装入TIMTIM。3.3.定时器控制寄存器定时器控制寄存器TCR TCR -16 -16位的存储器映像寄存器,位于数据存储空间的位的存储器映像寄存器,位于数据存储空间的0026H0026H单元,用单元,用来来存储定时器的控制位和状态位存储定时器的控制位和状态位,包括定时器分频系数,包括定时器分频系数TDDRTDDR、预标定计、预标定计数器数器PSCPSC、控制位、控制位TRBTRB、TSSTSS等。等。二、定时器寄存器http:/表表2 TCR各位的意义描述各位的意义描述三、定时器控制寄存器位位名称名称功功 能能15-12保留保留读读出出时总为时总为011SOFT和和FREE结结合使用控制定合使用控制定时时器操作器操作10FREEFREE SOFT 定定时时操作操作 0 0 定定时时器立即停止工作器立即停止工作 0 1 计计数器数器TIM减减为为0时时停止工作停止工作 1 x 定定时时器器继续继续运行,运行,PRD重新装入重新装入TIM9-6PSC预标预标定定计计数器(数器(减减1计计数器数器),每个,每个CLKOUT作减作减1操作,减操作,减为为0时时,TDDR值值装入装入PSC,TIM减减1。5TRB定定时时器复位器复位,此位置此位置1,将,将PRD、TDDR分分别别装入装入TIM和和PSC4TSS置置0启启动动定定时时器;器;置置1停止定停止定时时器工作,切断器工作,切断时钟输时钟输入,减少入,减少DSP功耗。功耗。3-0TDDR定定时时器分器分频频系数,系数,最大最大值为值为16,最小,最小值为值为1。按此分。按此分频频系数系数对对CLKOUT进进行行分分频频,以改,以改变变定定时时周期。当周期。当PSC减到减到0时时,将此,将此值值装入装入PSChttp:/图图7.2.1 C54xDSP7.2.1 C54xDSP定时器结构图定时器结构图n C54xDSP C54xDSP的定时器由的定时器由主定时器模块主定时器模块(PRD(PRD和和 TIM)TIM)、预置模块预置模块(TCR(TCR中的中的 TDDR TDDR和和PSCPSC等等)及相应及相应控制电路控制电路组成。组成。三、定时器工作过程http:/n 定时器由定时器由CPUCPU提供时钟,受定时设定寄存器提供时钟,受定时设定寄存器TIMTIM 、周期寄存器、周期寄存器 PRD PRD和控制寄存器和控制寄存器TCRTCR控制。控制。http:/n 工作原理工作原理:当:当CLKOUTCLKOUT信号时钟沿到来时触发减信号时钟沿到来时触发减1 1计数器计数器PSCPSC,直到直到PSCPSC为为0 0,然后用,然后用TDDRTDDR重新装入重新装入PSCPSC;同时用分频时钟对;同时用分频时钟对TIM TIM 作减作减1 1计数,直到计数,直到TIMTIM为为0 0。http:/n TIMTIM减为减为0 0时,时,CPUCPU发出定时器中断信号发出定时器中断信号TINTTINT,同时在,同时在TOUTTOUT管脚管脚 输出一个脉冲,脉宽与主时钟一致,可为外围电路提供时钟;输出一个脉冲,脉宽与主时钟一致,可为外围电路提供时钟;n 同时同时PSCPSC和和TIMTIM重新装入预设值,重复下去至系统或定时器复位。重新装入预设值,重复下去至系统或定时器复位。http:/n 当系统复位或定时器单独复位时,当系统复位或定时器单独复位时,TIMTIM和和PRDPRD被置成最大值被置成最大值FFFFHFFFFH,TDDR TDDR清清0 0,TSSTSS清清0 0启动定时器。并将启动定时器。并将TDDRTDDR的内容重新加载到的内容重新加载到PSCPSC,PRD PRD的值重新加载到的值重新加载到TIMTIM。http:/ 定时器的基准工作脉冲由定时器的基准工作脉冲由CLKOUTCLKOUT提供,每来一个脉冲预提供,每来一个脉冲预定标计数器定标计数器PSCPSC减减1 1,当,当PSCPSC减至减至0 0时,下一个脉冲到来,时,下一个脉冲到来,PSCPSC产产生借位。生借位。借位信号分别控制定时计数器借位信号分别控制定时计数器TIMTIM减减1 1和或门和或门2 2的输出,重的输出,重新将新将TDDRTDDR的内容加载预定标计数器的内容加载预定标计数器PSCPSC,从而完成定时工作的从而完成定时工作的一个基本周期。一个基本周期。定时器的定时时间为:定时器的定时时间为:定时周期定时周期=CLKOUTCLKOUT(TDDR+1)(TDDR+1)(PRD+1)(PRD+1)四、定时器初始化http:/n 使用定时器前,首先应设好定时器的工作方式和计数值,使用定时器前,首先应设好定时器的工作方式和计数值,并设置好中断,即对其初始化。具体步骤如下:并设置好中断,即对其初始化。具体步骤如下:(1)TSS=1(1)TSS=1,停止定时器;,停止定时器;(2)(2)加载加载PRDPRD值;值;(3)(3)重新设置重新设置TCRTCR的值,包括初始化的值,包括初始化TDDRTDDR、TRBTRB位置位置1 1 (TIMTIM为为0 0后,加载定时器时间常数)和后,加载定时器时间常数)和TSSTSS位清位清0 0(启动定(启动定时器)。时器)。http:/n 如果要使用定时器中断如果要使用定时器中断TINT(ST1TINT(ST1的中断模式的中断模式INTM=1INTM=1的情况下的情况下),要做如下设置要做如下设置 :(1)(1)设置中断标志寄存器设置中断标志寄存器(IFR)(IFR)中的中的TINT=1TINT=1,清除定时器中断;,清除定时器中断;(2)(2)设置中断屏蔽寄存器设置中断屏蔽寄存器(IMR)(IMR)中的中的TINT=1TINT=1,激活定时器中断;,激活定时器中断;(3)(3)设置设置STISTI中的中的INTM=0INTM=0,激活全部中断。,激活全部中断。五、定时器中断n 当定时器计数器减少到当定时器计数器减少到0 0时,会产生一个定时器中断时,会产生一个定时器中断TINTTINT,其频率为:,其频率为:式中,式中,tctc为为CPUCPU时钟周期(即时钟周期(即CLKOUTCLKOUT的周期)的周期)http:/ 复位时,复位时,TIMTIM和和PRDPRD被设置为最大值被设置为最大值(0(0FFFFH)FFFFH),TCRTCR中的中的TDDRTDDR置置0 0,定时器可以通过启动定时控制寄存器,定时器可以通过启动定时控制寄存器(TCR)TCR)完成以完成以下操作:下操作:设定定时器的工作方式;设定定时器的工作方式;设定预定标计数器中的当前数值;设定预定标计数器中的当前数值;启动或停止定时器;启动或停止定时器;重新装载定时器;重新装载定时器;设置定时器的分频值。设置定时器的分频值。四、定时器初始化http:/【例【例1 1】定时器自动装载定时。定时器自动装载定时。TSS=0:TSS=0:启动定时器;启动定时器;TRB=1:TRB=1:自动装载;自动装载;TDDR=Ah:TDDR=Ah:分频系数分频系数1010 soft=1soft=1,free=0:free=0:计数器减至计数器减至0 0时,停止工作;时,停止工作;TCR=0AAAHTCR=0AAAH。定时周期:定时周期:01010101H H;关闭定时器中断:关闭定时器中断:IFR=0008HIFR=0008H;开放定时器中断:开放定时器中断:IMR=0008HIMR=0008H。STM#0000H STM#0000H,SWWSRSWWSR STM#0010H STM#0010H,TCRTCR STM#0101H STM#0101H,PRDPRD STM#0AAAH STM#0AAAH,TCRTCR STM#0080H STM#0080H,IFRIFR STM#0080H STM#0080H,IMRIMR RSBX INTM RSBX INTM ;不插等待时间不插等待时间 ;TSS=0TSS=0关闭定时器关闭定时器 ;加载周期寄存器加载周期寄存器(PRD)PRD);装入定时器控制字,启动定时器装入定时器控制字,启动定时器 ;消除尚未处理完的定时器中断消除尚未处理完的定时器中断 ;开放定时器中断开放定时器中断 ;开放中断开放中断http:/ 例如:用例如:用TMS320VC5402TMS320VC5402实现方波发生器。假设时钟频率实现方波发生器。假设时钟频率为为4 4MHz,MHz,在在XFXF端输出占空比为端输出占空比为50%50%的方波,方波的周期由片上的方波,方波的周期由片上定时器确定定时器确定,采用中断方法实现。采用中断方法实现。7.2.2 定时器/计数器的应用 1.1.方波发生器方波发生器 (1)(1)定时器初始化定时器初始化 关闭定时器,关闭定时器,TCRTCR中的中的TSS=1TSS=1;加载加载PRDPRD。设定定时中断周期,每中断一次设定定时中断周期,每中断一次,输出端电输出端电平取反一次;平取反一次;启动定时器,初始化启动定时器,初始化TDDRTDDR,TSS=0TSS=0,TRB=1TRB=1。http:/(2)(2)中断初始化中断初始化 中断允许寄存器中断允许寄存器IFRIFR中的定时中断位中的定时中断位TINT=1,TINT=1,清除未处理完的定时中断;清除未处理完的定时中断;中断屏蔽寄存器中断屏蔽寄存器IMRIMR中的定时屏蔽位中的定时屏蔽位TINT=1,TINT=1,开放定时中断;开放定时中断;状态控制寄存器状态控制寄存器ST1ST1中的中断标志位中的中断标志位INTM=0,INTM=0,开放全部中断。开放全部中断。http:/(3)(3)方波发生器程序清单方波发生器程序清单 周期为周期为8 8msms的方波发生器,定时中断周期为的方波发生器,定时中断周期为4 4ms,ms,每中断一每中断一次,输出端电平取一次反。次,输出端电平取一次反。程序清单:程序清单:;abc1.asmabc1.asm ;定时器定时器0 0寄存器地址寄存器地址 TIM0 TIM0 set 0024Hset 0024H PRD0 PRD0 set 0025Hset 0025H TCR0 TCR0 set 0026Hset 0026H ;K_TCR0K_TCR0:设置定时器控制寄存器的内容设置定时器控制寄存器的内容 K_TCR0_SOFT .set 0bK_TCR0_SOFT .set 0b ;Soft=0Soft=0 K_TCR0_FREE .set 0b K_TCR0_FREE .set 0b ;Free=0Free=0 K_TCR0_PSC .set 1001b K_TCR0_PSC .set 1001b ;PSC=9HPSC=9H K_TCR0_TRB .set 1bK_TCR0_TRB .set 1b ;TRB=1TRB=1 K_TCR0_TSS .set 0b K_TCR0_TSS .set 0b ;TSS=0TSS=0 K_TCR0_TDDR .set 1001b K_TCR0_TDDR .set 1001b ;TDDR=9TDDR=9 K_TCR0 .set K_TCR0_SOFT|K_TCR0_FREE|K_TCR0_PSC|K_TCR0 .set K_TCR0_SOFT|K_TCR0_FREE|K_TCR0_PSC|K_TCR0_TRB|K_TCR0_TSS|K_TCR0_TDDRK_TCR0_TRB|K_TCR0_TSS|K_TCR0_TDDR http:/ ;初始化定时器初始化定时器0 0 ;根据定时长度计算公式:;根据定时长度计算公式:Tt=T*(TDDR+1)*(PRD+1)Tt=T*(TDDR+1)*(PRD+1);给定给定TDDR=9TDDR=9,PRD=1599PRD=1599,CLKOUTCLKOUT主频主频f=4MHzf=4MHz,T=250nsT=250ns ;Tt=250*(9+1)*(1599+1)=4,000,000(ns)=4(ms)Tt=250*(9+1)*(1599+1)=4,000,000(ns)=4(ms)STM#1599STM#1599,TIM0TIM0 STM#1599 STM#1599,PRD0PRD0 STM#K_TCR0STM#K_TCR0,TCR0TCR0 ;启动定时器启动定时器0 0中断中断 RETRET ;定时器定时器0 0的中断服务子程序:通过引脚的中断服务子程序:通过引脚XFXF给出周期为给出周期为8 8msms的占空比的占空比 ;为为50%50%的方波波形的方波波形 t0_flag .usect t0_flag .usect“varsvars”,1 1 ;当前当前XFXF输出电平标志位输出电平标志位 ;若;若t0_flag=1t0_flag=1,则则XF=1XF=1 ;若若t0_flag=0t0_flag=0,则则XF=0XF=0 程序清单:程序清单:http:/ time0_rev time0_rev:PSHM TRN PSHM TRN PSHM T PSHM T PSHM ST0 PSHM ST0 PSHM ST1 PSHM ST1 BITF t0_flag BITF t0_flag,#1#1 BC xf_out BC xf_out,NTCNTC SSBX XF SSBX XF ST#0 ST#0,t0_flagt0_flag B next B next xf_out xf_out:RSBX XF RSBX XF ST#1 ST#1,t0_flagt0_flag next next:POPM ST1 POPM ST1 POPM ST0 POPM ST0 POPM T POPM T POPM TRN POPM TRN RETE RETE http:/ 对于周期信号的周期检测,可在信号的每个周期内发出对于周期信号的周期检测,可在信号的每个周期内发出一个脉冲,然后通过程序计算两个脉冲之间的时间来确定信一个脉冲,然后通过程序计算两个脉冲之间的时间来确定信号的周期。号的周期。当脉冲来临时,触发外部中断当脉冲来临时,触发外部中断INT0INT0。外部中断外部中断INT0INT0用来用来记录脉冲,定时器记录脉冲,定时器0 0用来记录时间。用来记录时间。2.2.周期信号的周期检测周期信号的周期检测 http:/2.2.周期信号的周期检测周期信号的周期检测 为了增加计时长度,可在程序中设置一级计数器。为了增加计时长度,可在程序中设置一级计数器。定时器定时器0 0的寄存器用来记录低位时间,程序中的计数器的寄存器用来记录低位时间,程序中的计数器用来记录高位时间用来记录高位时间,在外部中断服务程序中读取时间。在外部中断服务程序中读取时间。在定时器在定时器0 0中断服务程序中对计数器加中断服务程序中对计数器加1 1,实现低位时间,实现低位时间的进位。的进位。http:/程序清单:程序清单:;abc3.asmabc3.asm ;定时器定时器0 0寄存器地址寄存器地址 TIM0 .set 0024H TIM0 .set 0024H PRD0 .set 0025H PRD0 .set 0025H TCR0 .set 0026H TCR0 .set 0026H TSSSET .set 010H TSSSET .set 010H TSSCLR .set 0ffefH TSSCLR .set 0ffefH ;K_TCR0K_TCR0:设置定时器控制寄存器的内容设置定时器控制寄存器的内容 K_TCR0_SOFT .set 0bK_TCR0_SOFT .set 0b ;Soft=0Soft=0 K_TCR0_FREE .set 0bK_TCR0_FREE .set 0b ;Free=0Free=0 K_TCR0_PSC .set 1111bK_TCR0_PSC .set 1111b ;PSC=15PSC=15 K_TCR0_TRB .set 1bK_TCR0_TRB .set 1b ;TRB=1TRB=1http:/ K_TCR0_TSS .set 0b K_TCR0_TSS .set 0b ;TSS=0TSS=0 K_TCR0_TDDR .set 1111b K_TCR0_TDDR .set 1111b ;TDDR=15TDDR=15 K_TCR0 K_TCR0 .set K_TCR0_SOFT|K_TCR0_FREE|K_TCR0_PSC|set K_TCR0_SOFT|K_TCR0_FREE|K_TCR0_PSC|K_TCR0_TRB|K_TCR0_TSS|K_TCR0_TDDRK_TCR0_TRB|K_TCR0_TSS|K_TCR0_TDDR t_counter .usect t_counter .usect “varsvars”,1 1 t_ptr_counter .uset t_ptr_counter .uset “varsvars”,1 1 tim_ptr_counter .usect tim_ptr_counter .usect “varsvars”,1 1 tcr_ptr_counter .usect tcr_ptr_counter .usect “varsvars”,1 1 ;变量定义变量定义 t_array .usect t_array .usect “varsvars”,1515 tim_array .usect tim_array .usect “varsvars”,1515 tcr_array .usect tcr_array .usect “varsvars”,1515 asg AR7asg AR7,t_ptrt_ptr asg AR6asg AR6,tim_ptrtim_ptr asg AR5asg AR5,tcr_ptrtcr_ptrhttp:/ _inittime _inittime:;初始化定时器初始化定时器0 0,定时长度为,定时长度为T*393,216T*393,216 ;定时长度定时长度=T*(TDDR+1)*(PRD+1)T*(TDDR+1)*(PRD+1),本程序中本程序中TDDR=11TDDR=11,PRD=32767PRD=32767,;主频为;主频为f f,T=1/fT=1/f STM#32767STM#32767,TIM0TIM0 STM#32767 STM#32767,PRD0PRD0 STM#K_TCR0 STM#K_TCR0,TCR0TCR0 ST#0 ST#0,*(t_counter)*(t_counter)ST#t_array ST#t_array,*(t_ptr_counter)*(t_ptr_counter)ST#tim_array ST#tim_array,*(tim_ptr_counter)*(tim_ptr_counter)ST#tcr_array ST#tcr_array,*(tcr_ptr_counter)*(tcr_ptr_counter)RET REThttp:/ ;外部中断外部中断INT0INT0,在脉冲来时被激活并响应服务子程序,从脉冲在脉冲来时被激活并响应服务子程序,从脉冲 ;响应到响应存在延迟;响应到响应存在延迟 int0isrint0isr:PSHM ST0PSHM ST0 PSHM ST1 PSHM ST1 PSHM t_ptr PSHM t_ptr PSHM tim_ptr PSHM tim_ptr PSHM tcr_ptr PSHM tcr_ptr PSHM AL PSHM AL PSHM AH PSHM AH PSHM AG PSHM AG PSHM BL PSHM BL PSHM BH PSHM BH PSHM BG PSHM BG http:/ ;将当前存储地址加载到地址指针即寄存器中;将当前存储地址加载到地址指针即寄存器中 LD *(t_ptr_counter)LD *(t_ptr_counter),A A STM A STM A,t_ptrt_ptr LD *(tim_ptr_counter)LD *(tim_ptr_counter),A A STM A STM A,tim_ptrtim_ptr LD *(tcr_ptr_counter)LD *(tcr_ptr_counter),A A STM A STM A,tcr_ptrtcr_ptr ;用户手册上建议,为精确计时,读寄存器时,先停止定时器用户手册上建议,为精确计时,读寄存器时,先停止定时器 ORM TSSSETORM TSSSET,TCR0TCR0 ;停止定时器停止定时器 LDM TIM0LDM TIM0,A A ;读读TIM0TIM0寄存器,需寄存器,需1 1个个CLKOUTCLKOUT周期周期 LDM TCR0LDM TCR0,B B ;读读TCR0TCR0寄存器,需寄存器,需1 1个个CLKOUTCLKOUT周期周期 ANDM TSSCLRANDM TSSCLR,TCR0TCR0 ;打开定时器,运行该指令需打开定时器,运行该指令需1 1个个 ;CLKOUTCLKOUT周期周期http:/ ;由于读定时器的寄存器,定时器停止计时共;由于读定时器的寄存器,定时器停止计时共3 3个个CLKOUTCLKOUT周期周期 STL ASTL A,*tim_ptr*tim_ptr ;读读TIM0TIM0寄存器,保存寄存器,保存 AND#0FHAND#0FH,B B ;取取TCR0TCR0寄存器的低寄存器的低4 4位,即位,即TDDRTDDR STL BSTL B,*tcr_ptr*tcr_ptr ;保存保存 LD *(t_counter)LD *(t_counter),A A STL ASTL A,*t_ptr t_ptr ;读到的时间读到的时间=脉冲到来的时间脉冲到来的时间+延迟响应时间延迟响应时间t1+t1+停止定时器之前运行停止定时器之前运行程序的时间程序的时间 ADDM#1ADDM#1,*(t_ptr_counter)*(t_ptr_counter)ADDM#1 ADDM#1,*(tim_ptr_counter)*(tim_ptr_counter)ADDM#1 ADDM#1,*(tcr_ptr_counter)*(tcr_ptr_counter)http:/ POPM BG POPM BG POPM BH POPM BH POPM BL POPM BL POPM AG POPM AG POPM AH POPM AH POPM A POPM A POPM tcr_ptr POPM tcr_ptr POPM tim_ptr POPM tim_ptr POPM t_ptr POPM t_ptr POPM ST1 POPM ST1 POPM ST0 POPM ST0 RETE RETE Time0isr Time0isr:ANDM#1ANDM#1,*(t_counter)*(t_counter)RETE RETEhttp:/ 检测输入脉冲频率是通过外部中断请求输入来实现。检测输入脉冲频率是通过外部中断请求输入来实现。定时器的定时时间是根据所检测输入信号的周期来设定。定时器的定时时间是根据所检测输入信号的周期来设定。根据设定时间内所检测脉冲的个数,计算被检测输入根据设定时间内所检测脉冲的个数,计算被检测输入信号的频率。信号的频率。第一个负跳变触发定时器工作,每输入一个负跳变计第一个负跳变触发定时器工作,每输入一个负跳变计一个数。当达到设定时间时,定时器停止工作。则此时定一个数。当达到设定时间时,定时器停止工作。则此时定时器的时间值与所计脉冲数相除,所得的结果就是所测输时器的时间值与所计脉冲数相除,所得的结果就是所测输入信号的周期。入信号的周期。3.3.脉冲频率监测脉冲频率监测 http:/程序清单:程序清单:;abc4.asmabc4.asm .mmregs.mmregs ;定时器定时器0 0寄存器地址寄存器地址 TIM0 .set 0024HTIM0 .set 0024H PRD0 .set 0025H PRD0 .set 0025H TCR0 .set 0026H TCR0 .set 0026H TSSSET .set 010H TSSSET .set 010H TSSCLR .set 0ffefH TSSCLR .set 0ffefH ;K_TCR0K_TCR0:设置定时器控制寄存器的内容设置定时器控制寄存器的内容 K_TCR0_SOFT .set 0b K_TCR0_SOFT .set 0b ;Soft=0Soft=0 K_TCR0_FREE .set 0b K_TCR0_FREE .set 0b ;Free=0Free=0 K_TCR0_PSC .set 1111b K_TCR0_PSC .set 1111b ;PSC=15PSC=15 K_TCR0_TRB .set 1b K_TCR0_TRB .set 1b ;TRB=1TRB=1 K_TCR0_TSS .set 0b K_TCR0_TSS .set 0b ;TSS=0TSS=0 K_TCR0_TDDR .set 1111b K_TCR0_TDDR .set 1111b ;TDDR=15TDDR=15http:/ K_TCR0 K_TCR0 .set K_TCR0_SOFT|K_TCR0_FREE|set K_TCR0_SOFT|K_TCR0_FREE|K_TCR0_PSC|K_TCR0_TRB|K_TCR0_TSS|K_TCR0_TDDRK_TCR0_PSC|K_TCR0_TRB|K_TCR0_TSS|K_TCR0_TDDR t_counter .usect t_counter .usect “varsvars”,1 1 ;变量定义变量定义 t_ptr_counter .usect t_ptr_counter .usect “varsvars”,1 1 tim_ptr_counter .usect tim_ptr_counter .usect “varsvars”,1 1 tcr_ptr_counter .usect tcr_ptr_counter .usect “varsvars”,1 1 t_array .usect t_array .usect “varsvars”,2020 tim_array .usect tim_array .usect “varsvars”,2020 tcr_array .usect tcr_array .usect “varsvars”,2020 .asg AR7 .asg AR7,t_ptrt_ptr .asg AR6 .asg AR6,tim_ptrtim_ptr .asg AR5 .asg AR5,tcr_ptrtcr_ptr t0_time .usect t0_time .usect “varsvars”,1 1 t0_end .usect t0_end .usect “varsvars”,1 1 http:/ intex_subintex_sub:;外部脉冲中断子程序外部脉冲中断子程序 PSHM TRNPSHM TRN PSHM T PSHM T PSHM ST0 PSHM ST0 PSHM ST1 PSHM ST1 ADD tim_ptr_counterADD tim_ptr_counter,#1#1 ;脉冲计数器加脉冲计数器加1 1 POPM ST1POPM ST1 POPM ST0 POPM ST0 POPM T POPM T POPM TRN POPM TRN RETE RETE http:/ Int0_sub Int0_sub:;定时器中断子程序定时器中断子程序 PSHM TRNPSHM TRN PSHM T PSHM T PSHM ST0 PSHM ST0 PSHM ST1 PSHM ST1 LD t0_end LD t0_end,#1#1 POPM ST1 POPM ST1 POPM ST0 POPM ST0 POPM T POPM T POPM TRN POPM TRN RETE RETEhttp:/2023/1/87.3 串行口2023/1/81.1 串行口概述 C54x DSP C54x DSP提供各种类型的提供各种类型的同步串口同步串口,可与双向串口器,可与双向串口器件件 在在全双工方式全双工方式下实现高效的串行通信。下实现高效的串行通信。串口信号可