当前位置: 首页 > news >正文

DSP28335:定时器

1.定时器介绍

     1.1 定时器工作原理

      TMS320F28335的CPU Time有三个,分别为Timer0,Timer1,Timer2,其中Timer2是为操作系统DSP/BIOS保留的,当未移植操作系统时,可用来做普通的定时器。这三个定时器的中断信号分别为TINT0, TINT1, TINT2,分别对应于中断向量INT1,INT13,INT14。

       1.2 定时器相关寄存器 

 

1.3.定时器配置步骤 

          定时器相关库函数在DSP2833x_CpuTimers.c文件中

(1)使能定时器时钟

EALLOW;

SysCtrlRegs.PCLKCR3.bit.CPUTIMER0ENCLK = 1; // CPU Timer 0

EDIS;

(2)初始化定时器参数,包括制定定时器寄存器地址、周期寄存器值、预定标计数器值等

//指向定时器0的寄存器地址

CpuTimer0.RegsAddr = &CpuTimer0Regs;

//设置定时器0的周期寄存器值

CpuTimer0Regs.PRD.all  = 0xFFFFFFFF;

//设置定时器预定标计数器值为0

CpuTimer0Regs.TPR.all  = 0; CpuTimer0Regs.TPRH.all = 0;

//确保定时器0为停止状态

CpuTimer0Regs.TCR.bit.TSS = 1;

//重载使能

CpuTimer0Regs.TCR.bit.TRB = 1;

// Reset interrupt counters:

CpuTimer0.InterruptCount = 0;

(3)定时器的设置 TI提供的库函数“DSP2833x_CpuTimers.c”内已经有函数实现

void ConfigCpuTimer(struct CPUTIMER_VARS *Timer, float Freq, float Period)

(4)开启定时器中断功能,并使能定时器

//设置定时器0的中断入口地址为中断向量表的INT0

EALLOW;

PieVectTable.TINT0 = &TIM0_IRQn;

EDIS;

//开始定时器功能

CpuTimer0Regs.TCR.bit.TSS=0;

//开启CPU第一组中断并使能第一组中断的第7个小中断,即定时器0

IER |= M_INT1;

PieCtrlRegs.PIEIER1.bit.INTx7 = 1;

//使能总中断 EINT;

ERTM;

(5)编写定时器中断服务函数

interrupt void TIM0_IRQn(void)

{     ......功能程序 }

实验

  本章所要实现的功能是:通过Timer0中断控制 D2 指示灯闪烁,主函数控制 D1 指示灯闪烁提示系统运行状态。程序框架如下:

(1)初始化定时器0,并使能相应中断

(2)编写定时器0中断函数

(3)编写主函数

LED程序参考前面的博客,写过了

Time.h

#ifndef TIME_H_
#define TIME_H_#include "DSP2833x_Device.h"     // DSP2833x 头文件
#include "DSP2833x_Examples.h"   // DSP2833x 例子相关头文件void TIM0_Init(float Freq, float Period);
interrupt void TIM0_IRQn(void);void TIM1_Init(float Freq, float Period);
interrupt void TIM1_IRQn(void);void TIM2_Init(float Freq, float Period);
interrupt void TIM2_IRQn(void);#endif /* TIME_H_ */

Time.c

#include "Time.h"
#include "leds.h"//定时器0初始化函数
//Freq:CPU时钟频率(150MHz)
//Period:定时周期值,单位us
void TIM0_Init(float Freq, float Period)
{EALLOW;SysCtrlRegs.PCLKCR3.bit.CPUTIMER0ENCLK = 1; // CPU Timer 0EDIS;//设置定时器0的中断入口地址为中断向量表的INT0EALLOW;PieVectTable.TINT0 = &TIM0_IRQn;EDIS;//指向定时器0的寄存器地址CpuTimer0.RegsAddr = &CpuTimer0Regs;//设置定时器0的周期寄存器值CpuTimer0Regs.PRD.all  = 0xFFFFFFFF;//设置定时器预定标计数器值为0CpuTimer0Regs.TPR.all  = 0;CpuTimer0Regs.TPRH.all = 0;//确保定时器0为停止状态CpuTimer0Regs.TCR.bit.TSS = 1;//重载使能CpuTimer0Regs.TCR.bit.TRB = 1;// Reset interrupt counters:CpuTimer0.InterruptCount = 0;ConfigCpuTimer(&CpuTimer0, Freq, Period);//开始定时器功能CpuTimer0Regs.TCR.bit.TSS=0;//开启CPU第一组中断并使能第一组中断的第7个小中断,即定时器0IER |= M_INT1;PieCtrlRegs.PIEIER1.bit.INTx7 = 1;//使能总中断EINT;ERTM;}interrupt void TIM0_IRQn(void)
{EALLOW;LED2_TOGGLE;PieCtrlRegs.PIEACK.bit.ACK1=1;EDIS;
}

main.c

void main()
{int i=0;InitSysCtrl();InitPieCtrl();IER = 0x0000;IFR = 0x0000;InitPieVectTable();LED_Init();TIM0_Init(150,500000);while(1){i++;if(i%2000==0){LED1_TOGGLE;}DELAY_US(100);}
}

相关文章:

DSP28335:定时器

1.定时器介绍 1.1 定时器工作原理 TMS320F28335的CPU Time有三个,分别为Timer0,Timer1,Timer2,其中Timer2是为操作系统DSP/BIOS保留的,当未移植操作系统时,可用来做普通的定时器。这三个定时器的中断信号分…...

系统架构理解

一、统一提前查好所有数据后续逻辑用到啥取啥,还是等用到对应数据的时候再查 1、用到啥查啥: 优势:减少依赖调用次数,减轻服务器压力;代码逻辑清晰,没有太多分支判断 劣势:无法避免串行调用&am…...

uni-app页面的跳转三种方式,功能作用有什么区别?

一、三种方式的作用 1、uni.reLaunch 作用是关闭所有页面,然后打开新的页面 类似于重新启动应用,打开的页面栈会被清空,只显示新打开的页面。使用uni.reLaunch方法可以实现整个应用的重定向 uni.reLaunch({url: /pages/login/login }) 2、…...

React 通信:深层传递(Props、Context、Children Jsx)

在之前的文章 探讨:围绕 props 阐述 React 通信 中总结了关于“父子”组件传值,但是当需要在组件树中深层传递参数以及需要在组件间复用相同的参数时,传递 props 就会变得很麻烦。 实际案例: 下述展示有两种状态:① 详…...

《Windows API每日一练》5.1 键盘基础

本节我们讲述关于键盘的一些基础知识。当我们按下一个键盘按键时,会产生一个键盘按键消息。这一点你能确定吗?假如是一个菜单快捷键消息,或者是一个子窗口控件消息呢?这就超出了本节讨论的范围,我们将在菜单和子窗口控…...

Class.forName()方法总结

Class.forName()方法总结 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!Class.forName()方法是Java反射机制中的一个重要方法,它用于动态加载类并返…...

Python | Leetcode Python题解之第168题Excel表列名称

题目: 题解: class Solution:def convertToTitle(self, columnNumber: int) -> str:ans list()while columnNumber > 0:columnNumber - 1ans.append(chr(columnNumber % 26 ord("A")))columnNumber // 26return "".join(an…...

【ARMv8/ARMv9 硬件加速系列 3.5.2 -- SVE 向量寄存器 有多少位数?】

文章目录 SVE 向量寄存器SVE 向量寄存器大小SVE 可伸缩性的好处SVE 寄存器长度示例SVE 向量寄存器 在 ARMv9 架构中,包括其 Scalable Vector Extension (SVE) 和 Scalable Vector Extension 2 (SVE2) 的增强,向量寄存器(通常称为 Z 寄存器)的大小设计为可伸缩的,以便在不…...

Vulkan入门系列2- 绘制三角形(未完待续)

概述: Vulkan的学习曲线是比较陡峭的,学习Vulkan刚开始像是在爬一个陡坡,等上了这个陡坡之后,后面学习曲线就相对比较平缓了。那么在Vulkan中绘制一个三角形,就相当于是在爬这样一个陡坡,因为绘制三角形需…...

企业UDP文件传输工具测速的方式(下)

在前一篇文章中,我们深入讨论了UDP传输的基本概念和镭速UDP文件传输工具如何使用命令行快速进行速度测试。现在,让我们进一步探索更为高级和灵活的方法,即通过整合镭速UDP的动态或静态库来实现网络速度的测量,以及如何利用这一过程…...

Artalk-CORS,跨域拦截问题

今天重新部署Artalk之后,遇到了CORS——跨域拦截的问题,卡了好一会记录一下。 起因 重新部署之后,浏览器一直提示CORS,之前在其他项目也遇到过类似的问题,原因就在于跨域问题。...

SSL证书怎样配置部署更安全?

在互联网上,SSL证书是用于加密网站与用户之间传输的数据的一种数字证书。它通过建立安全的连接,确保网站的身份和保护用户的隐私,是网站安全的重要组成部分。然而,要想让SSL证书发挥最大的作用,除了检查证书是否过期外…...

M1失效后,哪个是观察A股的关键新指标?

M1失效后,哪个是观察A股的关键新指标? 央地支出增速差(地方-中央支出增速的差值)或许是解释沪深300定价更有效的前瞻指标。该数值扩张,则有利于大盘指数,反之亦然,该指标从2017年至今对大盘指数…...

springboot集成积木报表,怎么将平台用户信息传递到积木报表

springboot集成积木报表后怎么将平台用户信息传递到积木报表 起因是因为需要研究在积木报表做数据筛选的时候需要拿到系统当前登录用户信息做筛选新的模块 起因是因为需要研究在积木报表做数据筛选的时候需要拿到系统当前登录用户信息做筛选 官网有详细介绍怎么集成进去的&…...

Spring Bean详解

Spring Bean作用域 默认情况下,所有的 Spring Bean 都是单例的,也就是说在整个 Spring 应用中, Bean 的实例只有一个 如果我们需要创建多个实例的对象,那么应该将 Bean 的 scope 属性定义为 prototype,如果 Spring 需…...

前端根据环境变量配置网页的title和favicon

前端根据环境变量配置网页的title和favicon 前言流程步骤一、设置environment文件二、在入口文件中配置三、删除index.html中的title和 icon link四、使用对应的打包命令进行部署 注意事项一、angular中,需要在angular.json添加favicon.ico额外的构建 前言 有些项目…...

服务器负载均衡

什么是服务器负载 1. 常见理解的平均负载 每次发现系统变慢时,我们通常做的第一件事,就是执行 top 或者 uptime 命令,来了解系统的负载情况。比如下列情况 [rootkube-node1 ~]# uptime09:44:37 up 74 days, 11:53, 1 user, load average:…...

如何设置Excel单元格下拉列表

如何设置Excel单元格下拉列表 在Excel中设置单元格下拉列表可以提高数据输入的准确性和效率。以下是创建下拉列表的步骤: 使用数据验证设置下拉列表: 1. 选择单元格: 选择你想要设置下拉列表的单元格或单元格区域。 2. 打开数据验证&…...

红队内网攻防渗透:内网渗透之Linux内网权限提升技术:LXDDockerRbash限制型bash

红队内网攻防渗透 1. 内网权限提升技术1.1 Linux系统提权-普通用户-LXD容器1.2 Linux系统提权-普通用户-Docker容器1.3 权限在docker里面1.4 Linux系统提权-普通用户-Rbash限制型bash1. 内网权限提升技术 利用参考 https://gtfobins.github.io/LXD、LXC 和 Docker 是三种不同…...

【笔记】复制Edge的网址粘贴后自动变成中文标题超链接

问题 1、从edge复制的网址粘贴直接显示网页内容名称而不是网址url。 2、复制任何网址粘贴到CSDN里面粘贴时直接转换成标题超链接(很讨厌的功能习惯)。 而如上两种问题不是互相影响的,就算设置了Edge的粘贴方式,复制到CSDN的文章…...

StructBERT-Large本地化部署实战:无需联网、不传数据、隐私安全的语义匹配解决方案

StructBERT-Large本地化部署实战:无需联网、不传数据、隐私安全的语义匹配解决方案 你是不是经常需要判断两句话是不是一个意思?比如,检查用户提交的答案是否和标准答案一致,或者判断两篇新闻稿是不是在说同一件事。过去&#xf…...

Qwen3-4B-Instruct-2507从入门到精通:Chainlit界面定制化教程

Qwen3-4B-Instruct-2507从入门到精通:Chainlit界面定制化教程 1. 引言:为什么选择Qwen3-4B-Instruct-2507? 如果你正在寻找一个既强大又轻量、既能快速部署又能灵活定制界面的AI模型,那么Qwen3-4B-Instruct-2507绝对值得你深入了…...

5分钟完成专业级黑苹果配置:OpCore Simplify终极简化指南

5分钟完成专业级黑苹果配置:OpCore Simplify终极简化指南 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 你是否曾经为黑苹果配置的复杂性…...

保姆级教程:手把手教你安装并激活DevExpress 20.1.3(附资源与注册机使用避坑指南)

深度指南:DevExpress 20.1.3开发环境高效配置与资源管理 在.NET生态系统中,DevExpress始终以其强大的控件库和高效的开发工具占据重要地位。对于刚接触这个工具集的开发者来说,如何快速搭建一个稳定的开发环境往往成为项目启动的第一道门槛。…...

嵌入式pRNG:基于WDT与LFSR的轻量级硬件熵随机数生成器

1. pRNG库概述:面向嵌入式系统的轻量级熵收集型伪随机数生成器pRNG(Pseudo-Random Number Generator)是一个专为资源受限微控制器设计的开源伪随机数生成库,其核心设计哲学是在极小内存开销下,通过硬件时序抖动提取物理…...

HunyuanVideo-Foley实战案例:为纪录片自动匹配环境音效的完整工作流

HunyuanVideo-Foley实战案例:为纪录片自动匹配环境音效的完整工作流 1. 项目背景与需求 在纪录片制作过程中,环境音效的采集和匹配往往需要耗费大量时间和人力成本。传统方式需要音效师实地录制或从音效库中手动挑选,整个过程耗时且难以保证…...

半导体仿真进阶:如何用Silvaco DOPING语句精确控制掺杂分布

半导体仿真进阶:如何用Silvaco DOPING语句精确控制掺杂分布 在半导体器件设计与工艺开发中,精确控制掺杂分布是决定器件性能的关键因素之一。Silvaco TCAD工具链中的DOPING语句,为工程师提供了从简单均匀掺杂到复杂梯度分布的灵活控制能力。…...

高效对接Tiktok电商API:PHP开发者的一站式解决方案指南

高效对接Tiktok电商API:PHP开发者的一站式解决方案指南 【免费下载链接】tiktokshop-php Unofficial Tiktok Shop API Client in PHP. Use API version 202309 and later 项目地址: https://gitcode.com/gh_mirrors/ti/tiktokshop-php 在瞬息万变的电商生态中…...

OpenClaw+Qwen3-32B科研助手:文献综述自动生成与参考文献整理

OpenClawQwen3-32B科研助手:文献综述自动生成与参考文献整理 1. 为什么需要AI科研助手? 作为一名计算机专业的研究生,我每天要处理大量文献。最痛苦的时刻莫过于导师突然说"下周组会做个文献综述",而我手头只有几十篇…...

AI巨头集体“铸Token”:从ChatGPT到“数字员工工厂”,程序员的狂欢还是危机?

想象一下:你早上醒来,打开电脑,不是自己敲代码,而是对着一只“龙虾”说:“帮我把昨天的Bug修了,顺便给老板发份周报。” 这不是科幻——2026年3月,这事儿正在发生。 全球头部科技公司突然集体“…...