2812中有三个定时器,结构都是一样的。

一般的操作就是设置周期,使能中断,启动计时器。

我们先定义定时器的基类,然后对每个定时器再分别定义各自的子类。

一般地,我们都将特定芯片的类申明在一个命名空间内。

namespace NF281x{class CTimer{CTimer( const CTimer& );
public:CTimer( volatile unsigned long& tim,volatile unsigned long& prd,volatile unsigned int& tcr,volatile unsigned int& tpr,volatile unsigned int& tprh );
protected:volatile unsigned long& m_tim;volatile unsigned long& m_prd;volatile unsigned int& m_tcr;volatile unsigned int& m_tpr;volatile unsigned int& m_tprh;
};

为定时器添加方法:

 inline const volatile unsigned long& getCounter()const{return m_tim;}inline void setCounter( const unsigned long& count ){m_tim = count;}inline const volatile unsigned long& getPeriod()const{return m_prd;}inline void setPeriod( const unsigned long& prd ){m_prd = prd;}/*** 定时器计时到0是否发生* @return*/inline bool isTimerZeroFlag()const{return NDm::isBitSet<volatile unsigned int,15,unsigned int>(m_tcr);}inline void clrTimerZeroFlag(){NDm::bitSet<volatile unsigned int,15,unsigned int>(m_tcr);}/*** 定时器中断是否使能* @return*/inline bool isInterruptEn()const{return NDm::isBitSet<volatile unsigned int,14,unsigned int>(m_tcr);}inline void enInterrupt(){NDm::bitSet<volatile unsigned int,14,unsigned int>(m_tcr);}inline void disInterrupt(){NDm::bitClr<volatile unsigned int,14,unsigned int>(m_tcr);}/*** 定时器重新开始运行*/inline void restart(){NDm::bitClr<volatile unsigned int,4,unsigned int>(m_tcr);}/*** 听事情停止*/inline void stop(){NDm::bitSet<volatile unsigned int,4,unsigned int>(m_tcr);}/*** 定时器是否已经运行* @return*/inline bool isStarting()const{return 0==NDm::getBit<volatile unsigned int,4,unsigned int>(m_tcr);}/*** 重新加载*/inline void reload(){NDm::bitSet<volatile unsigned int,5,unsigned int>(m_tcr);}/*** 获取时钟周期* 没SysCycle个系统时钟周期,定时器计数减1* @return*/inline unsigned int getSysCycle()const{return (m_tprh<<8)|(m_tpr&0x00FF);}/*** 设置时钟周期* @param cycle*/inline void setSysCycle( const unsigned int& cycle ){m_tpr = (cycle&0x00FF);m_tprh = (cycle>>8);}

下面添加一个对timer0子类的实现:

namespace NF281x{/*** CPU定时器0* 使用中断INT1.7*/
class CTimer0:public CTimer{
public:CTimer0();
};}

下面举个例子来看看,定时器在代码中如何使用的。其中也使用了PIE模块的使用。

这个例子是使用定时器,产生定时中断,来测试LED。

首先定义中断函数:

extern "C" interrupt void myTimer(){CLed::ins().testOnce();CPieCtl::ins().ack_tInt0();
}

其中CLed对LED的操作进行了封装。一般是使用GPIO控制的。

CPIeCtl::ins()是CPie类的一个对象。

在中断处理函数中一定要对Timer0中断进行ack。

下面对定时器进行初始化操作

void timerTaskInit(){CTimer0 timer0;timer0.stop();CPieCtl& pie = CPieCtl::ins();pie.setIrs_tInt0( myTimer );timer0.setSysCycle(48000);timer0.setPeriod(100);timer0.enInterrupt();timer0.reload();timer0.clrTimerZeroFlag();timer0.restart();
}

DSP 2812: 使用C++封装定时器及应用举例相关推荐

  1. java dsp_GitHub - Onemeaning/JavaDsp: 数字信号处理(DSP)方面的Java封装,包含常用的一些处理方法,如滤波、信号变换等等。...

    JavaDsp 数字信号处理(DSP)方面的Java封装,包含常用的一些处理方法,如滤波.信号变换等等. 该类库是我本科毕业设计中的一部分,绝大部分都是我自己写实现的,很少部分算法有我另外几个朋友参与 ...

  2. DSP—2812、28335串行通信接口SCI

    文章来自:http://blog.csdn.net/wu159632/article/details/7996886 SCI(Serial Communication Interface),即串行通信 ...

  3. html使用定时器timer,jquery插件jTimer jquery定时器的用法举例

    本节内容: jquery插件jTimer,jQuery定时器. 需求: 按时间间隔执行一个任务,当满足一定条件时停止执行. 1,插件用法: 复制代码 代码示例: (function ($) { $.e ...

  4. Springboot实现定时器quartz应用举例。

    上一篇中我们说明了Springboot实现定时器quartz中文文档说明, 在开写主要内容前,我们来说明其他方式. 两者都是针对较简单的情况下.其一是,SpringBoot自带定时注解.其二是,定时线 ...

  5. DSP TMS320F2803x、TMS320F2806x CPU Timer定时器开发笔记(代码基于TMS320F28069 详解)

    详解DSP F28069的 CPU Timer定时器模块,及代码讲解 32-Bit CPU Timers 0/1/2 代码讲解 timer.h /** Timer.h** Created on: 20 ...

  6. 在Spring中使用JDK定时器实现调度任务

    在Spring中使用JDK定时器实现调度任务 作者:chszs,转载需注明.博客主页: http://blog.csdn.net/chszs 本文探讨Spring如何集成JDK的Timer定时器,实现 ...

  7. 基于ARM+DSP进行应用开发-经验共享

    针对当前应用的复杂性,SOC芯片更好能能满足应用和媒体的需求,集成众多接口,用ARM做为应用处理器进行多样化的应用开发和用户界面和接口,利用DSP进行算法加速,特别是媒体的编解码算法加速,既能够保持算 ...

  8. RK3399封装(CPU+GPU)Mali-T860 Codec架构(十六)

    开发者的困惑: 不少Android系统开发者或者多媒体编解码开发者,对与Codec编解码芯片,所处于的位置很是困惑,到底是在GPU?还是在别的DSP芯片里封装.拿RK3399举例,Codec编解码芯片 ...

  9. TI基于DSP+ARM的双核架构如何相互通信

    1 通信结构简介 针对当前应用的复杂性,SOC芯片更好能能满足应用和媒体的需求,集成众多接口,用ARM做为应用处理器进行多样化的应用开发和用户界面和接口,利用DSP进行算法加速,特别是媒体的编解码算法 ...

最新文章

  1. 项目开发之git配置
  2. C语言中return和exit的区别
  3. 图形学opengl实验二-桌子的矩阵变换
  4. Python编程学习笔记:列表
  5. 【spring】spring源码搭建
  6. java简历 技术能力_java后台开发简历专业技能怎么写
  7. python爬虫小说实例源码_Python下载网络小说实例代码
  8. 卡方检验的统计量推导_卡方检验如何计算?
  9. word去除标题前的小黑点
  10. scan camera
  11. 令人比较失落的IT圈子-关于华为裁员
  12. [gdc17]寒霜引擎的HDR渲染探索
  13. ValueError X has 2 features, but LogisticRegression is expecting 5 features as input
  14. 离散数学 --- 特殊关系 --- 偏序关系,哈斯图和特殊元素以及其它次序关系
  15. 【会议笔记】第五届中国健康信息处理大会(CHIP2019)Day02
  16. 微信支付SDK(python版)
  17. 行人属性识别一:训练PA100k数据集
  18. 我国AI医学影像新成果:人工智能可为肝癌患者无创分级
  19. 简单有效又有用的关闭antimalware service executable的方法·备份记录
  20. android studio 自定义控件

热门文章

  1. java中的super()是什么?
  2. CANoe Ethernet TC8Test
  3. 毫米波雷达与视觉融合综述
  4. AD09 DXP保姆级教程系列——001、汉化与新建工程
  5. VMWare虚拟机最新版的下载与安装
  6. 《15寸移动式心电监测仪》制作纪实 : 白话ECG导联原理、身体位置与连接
  7. 体表心电标准十二导联信号转换
  8. java基础语法(精简版)
  9. 面经 | Java 基础 整理
  10. 【智慧水利】水文自动测报系统组成及作用