TMS320F280049学习5:CPU timer中断

TMS320F280049学习5:CPU timer中断

文章目录

  • TMS320F280049学习5:CPU timer中断
  • 前言
  • 一、工程代码
  • 二、CPU timer时钟
  • 总结


前言

DSP的内部有3个CPU timer,分别是CUP timer0 / 1 / 2,传说CPU timer2一般在跑系统时用,类似单片机跑系统时使用滴答定时器一样,不过CPU timer2一样也可以像其他定时器一样使用。
以下例程代码基于之工程编写的,具体看文章《TMS320F280049学习1:新建工程》。

一、工程代码

#include "driverlib.h"
#include "device.h"
#include "f28004x_pievect.h"

#define DRV_LED2_PIN                        23
#define DRV_BUTTON_PIN                      24
#define DELAY_MS(MS)                        DEVICE_DELAY_US((long double)MS * 1000)

__interrupt void timer0_interrupt(void);

/*******************************************************************************
* 函 数 名         : led_init
* 输    入         : 空
* 输    出         : 空
* 函数功能         : LED初始化
* 详细描述         : 空
*******************************************************************************/
void led_init(void)
{
    //设置GPIO模式
    GPIO_setPadConfig(DRV_LED2_PIN, GPIO_PIN_TYPE_STD);
    //设置GPIO方向
    GPIO_setDirectionMode(DRV_LED2_PIN, GPIO_DIR_MODE_OUT);
}

/*******************************************************************************
* 函 数 名         : timer_init
* 输    入         : 空
* 输    出         : 空
* 函数功能         : 定时器按钮初始化
* 详细描述         : 空
*******************************************************************************/
void timer_init(void)
{
    //设置计数周期
    CPUTimer_setPeriod(CPUTIMER0_BASE, 1000000);
    //设置分频系数
    CPUTimer_setPreScaler(CPUTIMER0_BASE, 50 - 1);
    //停止计数
    CPUTimer_stopTimer(CPUTIMER0_BASE);
    //复位计数器
    CPUTimer_reloadTimerCounter(CPUTIMER0_BASE);
    //设置定时器模式
    CPUTimer_setEmulationMode(CPUTIMER0_BASE, CPUTIMER_EMULATIONMODE_STOPAFTERNEXTDECREMENT);
    //绑定中断函数
    Interrupt_register(INT_TIMER0, &timer0_interrupt);
    //使能定时器中断
    CPUTimer_enableInterrupt(CPUTIMER0_BASE);
    //使能定时器中断
    Interrupt_enable(INT_TIMER0);
    //启动计数
    CPUTimer_startTimer(CPUTIMER0_BASE);
}

/*******************************************************************************
* 函 数 名         : main
* 输    入         : 空
* 输    出         : 空
* 函数功能         : 主函数
* 详细描述         : 空
*******************************************************************************/
void main(void)
{
    //初始化时钟和外设
    Device_init();
    //解锁GPIO配置
    Device_initGPIO();
    //初始化PIE并清空PIE寄存器,关闭CPU中断
    Interrupt_initModule();
    //初始化PIE向量表
    Interrupt_initVectorTable();
    //LED初始化
    led_init();
    //定时器初始化
    timer_init();
    //使能中断
    EINT;
    //使能调试事件
    ERTM;

    while(1)
    {
        DELAY_MS(100);
    }
}

__interrupt void timer0_interrupt(void)
{
    GPIO_togglePin(DRV_LED2_PIN);

    //清中断
    Interrupt_clearACKGroup(INTERRUPT_ACK_GROUP1);
}

二、CPU timer时钟

1、代码中定时器分频值50-1,将计数频率分频成1M,+1操作原因看下图CPUTimer_setPreScaler函数。
在这里插入图片描述
2、分频值50,是原因是CPU timer时钟源是PERx.SYSCLK,PERx.SYSCLK时钟来自SYSCLK,SYSCLK是50M(按我现在的理解也许要达到100M系统时钟,需要上20M的晶振)。

CPU timer0时钟源:
CPU timer0时钟源

CPU timer时钟来自SYSCLK:
CPU timer时钟来自SYSCLK

SYSCLK时钟配置:
SYSCLK时钟配置

总结

下一步,GPIO输入中断。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/716608.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Unity】RPG2D龙城纷争(一)搭建项目、导入框架、前期开发准备

更新日期:2024年6月12日。 项目源码:后续章节发布 免责声明:【RPG2D龙城纷争】使用的图片、音频等所有素材均有可能来自互联网,本专栏所有文章仅做学习和教程目的,不会将任何素材用于任何商业用途。 索引 【系列简介】…

DSP教学实验箱_数字图像处理_操作教程:5-1 图像旋转

一、实验目的 学习图像旋转的原理,掌握图像的读取方法,并实现图像旋转。 二、实验原理 图像旋转 图像的旋转是指以图像的某一点为原点以逆时针或顺时针旋转一定的角度。其本质是以图像的中心为原点,将图像上的所有像素都旋转一个相同的角…

PHP邮箱验证码功能优化的策略?怎么配置?

PHP邮箱验证码服务怎么样?如何保障邮箱的安全性? PHP邮箱验证码是验证用户身份的常见方法之一,它通过向用户注册的邮箱发送一次性验证码来确认用户的身份。然而,为了确保这一过程既安全又用户友好,需要一些优化策略来…

hadoop/hive/DBeaver启动流程

hadoop 启动 cd到指定目录下 cd /opt/module/hadoop-3.3.0/sbin/启动文件 ./start-all.shjps一下,查看显示的内容 应该显示以下内容 NameNode SecondaryNameNode DataNode ResourceManager NodeManager如果缺少namenode,那么执行 rm -rf /tmp/hadoo…

flink1.12.0学习笔记(一)-部署与入门

flink1.12.0学习笔记(1)-部署与入门 1-1-Flink概述 Flink诞生 Flink 诞生于欧洲的一个大数据研究项目 StratoSphere。该项目是柏林工业大学的一个研究性项目。早期, Flink 是做 Batch 计算的,但在 2014 年, StratoS…

Linux_应用篇(19) V4L2 摄像头应用编程

ALPHA/Mini I.MX6U 开发板配套支持多种不同的摄像头,包括正点原子的 ov5640(500W 像素)、ov2640(200W 像素)以及 ov7725(不带 FIFO、 30W 像素)这三款摄像头,在开发板出厂系统上&…

30岁想自学PLC转变职业规划,行业空间如何?

在开始前刚好我有一些资料,是我根据网友给的问题精心整理了一份「PLC的资料从专业入门到高级教程」, 点个关注在评论区回复“888”之后私信回复“888”,全部无偿共享给大家!!!30岁想自学PLC转变职业规划是…

ollama模型CPU轻量化部署

一、定义 ollama 定义环境部署demo加载本地模型方法基本指令关闭开启ollamaollama 如何同时 运行多个模型, 多进程ollama 如何分配gpu修改模型的存储路径 二、实现 ollama 定义 ollama 是llama-cpp 的进一步封装,更加简单易用,类似于docker. 模型网址…

HTTP协议版本历程

HTTP协议的发展历程 版本推出年份当前状态HTTP/0.91991年已过时HTTP/1.01996年已过时HTTP/1.11997年标准HTTP/2.02015年标准HTTP/3.02022年标准 HTTP/0.9 HTTP/0.9非常简单,并不涉及数据包传输,通过请求和响应的交换达成通信,请求由单行指…

深度解析量水堰:结构、分类与设计要点

量水堰,作为水工测量中的关键设施,其精确度和多样性对于水位和流量的测量至关重要。其工作原理基于通过堰顶断面上的进水口,将水位引导至堰体内部,从而实现水位和流量的平衡。量水堰通常采用高强度、耐久的材料构建,如…

ABBYY Finereader 15中文版安装包下载及安装教程

​ABBYY FineReader 是一款功能强大的 OCR(Optical Character Recognition)软件,可以将扫描的文档转换为可编辑的文本文件。它不仅可以识别文本,还可以识别表格、图像和布局,使得文档的转换更加准确和方便。 安 装 包 …

考试系统提供源码能做什么?

考试系统提供源码,无疑为现代教育领域注入了新的活力。源码,作为软件开发的基石,其开放与共享的特性使得考试系统具备了前所未有的灵活性和可定制性。那么,考试系统提供源码究竟能做什么呢?本文将详细探讨其多重功能与…

如何警用root用户登录ssh

使用tail指令,可以动态查看日志信息。 (tail -f /var/log/secure或messages) 使用>符号,可以清空日志内容,不删除文件本身。 禁用root用户为以下步骤: 首先使用useradd创建用户(可以修改为其…

不可思议!这款 Python 库竟然能自动生成GUI界面:MagicGUI

目录 什么是MagicGUI? ​编辑 MagicGUI的工作原理 安装MagicGUI 创建你的第一个GUI ​编辑 其他案例 输入值对话框 大家好,今天我们来聊一聊一个非常有趣且实用的Python库——MagicGUI。这个库可以让你用最少的代码,快速创建图形用户…

ArcGIS Pro SDK (三)Addin控件 2 窗格界面类

15 ArcGIS Pro 后台选项卡 15.1 添加控件 15.2 Code 15.2.1 选项卡按钮 BackstageTabTestButton.cs using ArcGIS.Desktop.Framework.Contracts; using ArcGIS.Desktop.Framework.Dialogs;namespace WineMonk.Demo.ProAppModule.Code14_BackstageTab {internal class Backs…

aardio实战篇) 下载微信公众号文章为pdf和html

首发地址: https://mp.weixin.qq.com/s/w6v3RhqN0hJlWYlqTzGCxA 前言 之前在PC微信逆向) 定位微信浏览器打开链接的call提过要写一个保存公众号历史文章的工具。这篇文章先写一个将文章保存成pdf和html的工具,后面再补充一个采集历史的工具&#xff0c…

python安装包中的.dist-info作用

在使用pip install 包名 进行python第三方库的时候,安装完库之后通常会出现一个库名,还有一个.dist-info的文件,以安装yolov8所依赖的框架ultralytics为例,成功安装后会出现以下文件夹: 第一个ultralytics是概该框架包…

移动操作系统更新管理

移动操作系统更新管理是大多数移动设备管理(MDM)解决方案中提供的一项功能,它允许组织管理移动设备上的操作系统更新。MDM解决方案定期扫描设备以检查可用的移动操作系统更新,并根据配置的策略管理操作系统更新。操作系统更新管理…

Java I/O操作

引言 在Java编程中,输入和输出(I/O)操作是必不可少的部分。Java I/O通过一系列流(Stream)类和方法,支持文件操作、控制台输入输出、网络I/O等多种I/O操作。本文将详细介绍Java I/O的基础概念、文件操作、字…

C++之函数重载

函数重载概念&#xff1a; 是函数的一种特殊情况&#xff0c; C 允许在 同一作用域中 声明几个功能类似 的同名函数 &#xff0c;这 些同名函数的 形参列表(参数个数 或 类型 或 类型顺序)不同 &#xff0c;常用来处理实现功能类似数据类型 不同的问题。 #include<iostre…