c语言定时器实验程序,C语言定时器实验.doc[通俗易懂]

c语言定时器实验程序,C语言定时器实验.doc[通俗易懂]C语言定时器实验实验三C语言定时器实验一、实验目的1.进一步熟悉DSP的中断机制2.在掌握中断服务程序编写的基础上进一步熟悉定时器的运用3.进一步掌握如何编写DSP中断服务子程序二、实验设备1.具有USB接口的PC机一台2.USB仿真器一台3.ARM/DSP/FPGA实验箱一台三、实验原理本实验是在我们基本上掌握DSP中断机制的基础上,进一步学习如何在DSP内部实现定时器的正确操作以及定时器中…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

C语言定时器实验

实验三 C语言定时器实验

一、实验目的

1.进一步熟悉DSP的中断机制

2.在掌握中断服务程序编写的基础上进一步熟悉定时器的运用

3.进一步掌握如何编写DSP中断服务子程序

二、实验设备

1.具有USB接口的PC机一台

2.USB仿真器一台

3.ARM/DSP/FPGA实验箱一台

三、实验原理

本实验是在我们基本上掌握DSP中断机制的基础上,进一步学习如何在DSP内部实现定时器的正确操作以及定时器中断服务程序的编写。

在TMS320VC5410A中,有一个16位的硬件定时器,该定时器有一个4位的预分频器,由CLKOUT来驱动,也就是说在CLKOUT时钟的作用下进行递减计数。当计数器递减到0的时候,会产生一个定时器中断。通过控制定时器相关寄存器,该定时器可以被停止、重新启动、复位或禁止。

与该定时器有关的寄存器有定时计数寄存器(TIM)、定时周期寄存器(PRD)以及定时器控制寄存器(TCR)。

下面对这几个寄存器作简要介绍:

TIM:该寄存器是一个存储器映射的寄存器,地址为0x0024。该寄存器中保存了定时器当前的计数值,并且该寄存器的值会在预分频器中的计数器递减至0的时候递减1。当TIM寄存器中的至递减至0的时候,定时器复位,TIM重新加载PRD寄存器中的值,开始下一轮计数,与此同时,当该寄存器中的值递减至0的时候,产生定时器中断。

PRD:该寄存器是一个存储器映射的寄存器,地址为0x0025。该寄存器用于控制定时器的周期。

TCR:该寄存器是一个存储器映射的寄存器,地址为0x0026。该寄存器主要用于控制定时器的启动、停止、复位以及初始化定时器的预分频器等操作。该寄存器的具体内容如表3-1所示。

表3-1 TCR寄存器

TCR寄存器中的具体内容意义如下:

TDDR:定时器的4位预分频器,TDDR的值为0~15。

TSS:定时器启动/停止位。‘1’可停止定时器计数;‘0’可启动定时器。

TRB:向该位写入‘1’可复位定时器。

PSC:预分频器的递减计数器。该计数器会在CLKOUT的作用下递减,当递减至0的时候,TIM的值便会递减1,同时PSC会重新加载TDDR的预分频值。

Free:该位用来配置定时器是否工作在Soft制定的工作方式。当该位为‘0’时,选定Soft位所指定的工作模式;当该位为‘1’时,定时器将会正常运行,而不会采取Soft位所指定的工作模式。

Soft:该位用来配置定时器在遇到程序中断时的工作方式。当该位为‘0’时,遇到中断定时器会立即停止运行;当该位为‘1’时,定时器将会正常运行,遇到中断定时器会在递减到0后停止运行。

根据以上讲述,可以得到DSP中定时器的中断频率为

fT中断 = (fCLKOUT/(TDDR+1))/(PRD+1)

要对定时器正确配置和操作,可以通过以下步骤来实现:

1)首先通过写TCR寄存器中的TSS位来停止寄存器。

2)初始化定时器的预分频器TDDR。

3)初始化定时器周期PCR。

4)编写定时器中断服务函数。

5)在中断向量表中相应的位置放置中断跳转指令,指向4)中定义的函数。

6)通过写IFR将定时器中断标志清零,通过写IMR寄存器使能定时器中断。

7)使能全局中断INTM。

8)通过设置BSCR寄存器中的DIVFCT(见表3-2)设置CLKOUT的时钟频率,具体为fCLKOUT =fDSPCLK/(DIVFCT + 1)。

9)启动定时器。

表3-2 BSCR寄存器

本实验要完成的任务就是利用定时器中断配合定时器中断服务函数,学习定时器的具体使用方法。在定时器中断服务子程序中,点亮LED和关灭LED以表示定时器工作正常,同时在CCS的消息输出窗口输出相应的中断信息。

四、实验内容

用C语言编写定时器实验:两个灯以不同频率闪烁,并用示波器读频率

五、实验步骤

第一步骤:新建项目fangbo.pjt及编写定时中断文件( Timer.c,vectors.asm,c54_zzh.cmd),在对各个文件进行编译及运行,其文件分别如下。

/**********************************************/

/* Title: Timer.c */

/* Author: ZZH */

/* Data: 2005-8-25 */

/**********************************************/

#include

#include

#include “c54xx.h”

#include “fpg

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/158858.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • linux中的ldd命令简介

    linux中的ldd命令简介在linux中,有些命令是大家通用的,比如ls,rm,mv,cp等等,这些我觉得没有必要再细说了。而有些命令,只有开发人员才会用到的,这类命令,作为程序员的我们,是有必要了解的,有的甚至需要熟练使用。有的人总说,这些命令不重要,用的时候去查就行了,这么多么扯淡的说法啊。具体用法细节是可以可查,但至少得知道有ldd这个东西吧。连ldd都不知道,怎么知道ldd是干啥的呢?

  • uIP介绍[通俗易懂]

    uIP介绍[通俗易懂]下面内容都是参考英文文档uip是一个开源的微型协议栈,主要用于8位,16位MCU,占用内存少,并且代码少,容易移植。它既可以用于多任务的操作系统中,如ucos。也能单独存在,传说中的裸奔。uip的主循环uip主循环中重复做着两件事情。查看是否收到数据包查看周期性超时是否发生如果有数据包到达,则会在主循环中调用输入处理函数,uip_input(),

  • Python读取excel文件数据并插入数据库[通俗易懂]

    Python读取excel文件数据并插入数据库[通俗易懂]目的:将excel文件StudentInfo.xls的学生信息插入到test库中的student表中一、连接mysql数据库安装第三方库pymysql:pipinstallpymysql调用pymysql.connect()方法连接数据库,代码如下importpymysql#打开数据库连接conn=pymysql.connect(host=’localhost’,#MySQL服务器地址user=’root’,#MySQL服务器端口号p

  • java去重复元素并打印_Java打印数组中重复元素

    java去重复元素并打印_Java打印数组中重复元素Java打印数组中重复元素1说明在此程序中,我们需要打印数组中存在的重复元素。这可以通过两个循环来完成。第一个循环将选择一个元素,第二个循环将通过将所选元素与其他元素进行比较来遍历整个数组。如果找到匹配项,则打印重复的元素。在上面的数组中,第一个重复项将在索引4处找到,它是索引1处存在的元素(2)的重复项。因此,上面的数组中的重复元素是2、3和8。2算法思路步骤1:开始步骤2:初始化arr[…

  • a标签属性 rel=noopener noreferrer

    a标签属性 rel=noopener noreferrer

  • java将Word转换成PDF

    java将Word转换成PDF网上有很多将Word转换成PDF的方式,这里找了两种比较简单的工具:jacob和aspose。1.jacob使用Jacob需要一些环境的准备,首先需要Jacob的jar包:然后还需要将jacob版本对应的ddl文件放到jdk或jre的bin目录里:下面只需要使用写好的工具类就可以了:publicclassWord2PdfJacobUtil{ /*转PDF格…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号