博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
DSP_代码笔记(基于TMS320X281x)| CPU定时器0模块
阅读量:6985 次
发布时间:2019-06-27

本文共 2192 字,大约阅读时间需要 7 分钟。

CPU定时器0模块初始化:

#include "DSP28_Device.h"struct CPUTIMER_VARS CpuTimer0; //对用户开放的CPU定时器只有CpuTimer0,CpuTimer1struct CPUTIMER_VARS CpuTimer1; //和CpuTimer2被保留用作实习操作系统OS(例如DSPstruct CPUTIMER_VARS CpuTimer2; //BIOS)//初始化CpuTimer0。void InitCpuTimers(void){    CpuTimer0.RegsAddr = &CpuTimer0Regs; //使得CpuTimer0.RegsAddr 指向定时器寄存器        CpuTimer0Regs.PRD.all  = 0xFFFFFFFF; //初始化CpuTimer0的周期寄存器    CpuTimer0Regs.TPR.all  = 0;          //初始化定时器预定标计数器    CpuTimer0Regs.TPRH.all = 0;        CpuTimer0Regs.TCR.bit.TSS = 1;       //停止定时器           CpuTimer0Regs.TCR.bit.TRB = 1;       //将周期寄存器PRD中的值装入计数器寄存器TIM中                   CpuTimer0.InterruptCount = 0;        //初始化定时器中断计数器}       //Timer(指定的定时器),Freq,Periodvoid ConfigCpuTimer(struct CPUTIMER_VARS *Timer, float Freq, float Period){    Uint32  temp;        Timer->CPUFreqInMHz = Freq;    Timer->PeriodInUSec = Period;    temp = (long) (Freq * Period);    Timer->RegsAddr->PRD.all = temp;  //给定时器周期寄存器赋值    Timer->RegsAddr->TPR.all  = 0;    //给定时器预定标寄存器赋值    Timer->RegsAddr->TPRH.all  = 0;        // 初始化定时器控制寄存器:    Timer->RegsAddr->TCR.bit.TIF=1;   //清除中断标志位    Timer->RegsAddr->TCR.bit.TSS = 1; //停止定时器     Timer->RegsAddr->TCR.bit.TRB = 1; //定时器重装,将定时器周期寄存器的值装入定时器计数器寄存器    Timer->RegsAddr->TCR.bit.SOFT = 1;    Timer->RegsAddr->TCR.bit.FREE = 1;         Timer->RegsAddr->TCR.bit.TIE = 1; //使能定时器中断        Timer->InterruptCount = 0;        //初始化定时器中断计数器}

主函数模块:

#include "DSP28_Device.h"void main(){    InitSysCtrl();    DINT;    IER = 0x0000;    IFR = 0x0000;    InitPieCtrl();    InitPieVectTable();    InitPeripherals();    InitGpio();    PieCtrl.PIEIER1.bit.INTx7 = 1;    IER |= M_INT1;    EINT;    ERTM;    ConfigCpuTimer(&CpuTimer0, 150, 1000000);    StartCpuTimer0();    for(;;)    {    }}

CPU定时器0周期中断函数:

interrupt void  TINT0_ISR(void)      // CPU-Timer0中断函数{   CpuTimer0.InterruptCount++;      if(CpuTimer0.InterruptCount==1)     {      GpioDataRegs.GPFCLEAR.bit.GPIOF14=1;  //XF引脚低电平,D3亮   }      if(CpuTimer0.InterruptCount==2)   {      GpioDataRegs.GPFSET.bit.GPIOF14=1;    //XF引脚高电平,D3灭      CpuTimer0.InterruptCount=0;   }      CpuTimer0Regs.TCR.bit.TIF=1;  //清除定时器中断标志位   PieCtrl.PIEACK.bit.ACK1=1;    //响应同组其他中断   EINT;  //开全局中断}

转载地址:http://ietpl.baihongyu.com/

你可能感兴趣的文章
linux目录结构简析
查看>>
VMware ESXi部署OVF模板
查看>>
2上的svn部署
查看>>
《***测试实践指南》D03
查看>>
Site Definition和Web Template的区别
查看>>
细说linux挂载
查看>>
阿里资深系统架构师九峰谈云计算
查看>>
Android的多任务之路
查看>>
Autochk program not found - skipping auocheck
查看>>
☆聊聊Spring系列_Index
查看>>
我的友情链接
查看>>
不用软件,手动修复双系统引导进win7,xp的多种方法
查看>>
python 访问需要HTTP Basic Authentication认证的资源
查看>>
java中比较字符串的大小用String的compareTo()
查看>>
plist使用
查看>>
Linux RAR 安装和使用
查看>>
【OC】【一秒就会】【collectionView 头部吸住功能】
查看>>
51CTO下载 好资料分享
查看>>
linux 下转换UTC到本地时间
查看>>
Linux的起源与各发行版的基本知识
查看>>