您好,欢迎来到百家汽车网。
搜索
您的当前位置:首页DSP实验三、TMS320F28335定时器控制LED亮灭

DSP实验三、TMS320F28335定时器控制LED亮灭

来源:百家汽车网
DSP实验三、TMS320F28335定时器控制LED亮灭

继续我的第三个实验;实现定时器控制LED亮灭:学习⽬的:定时器的寄存器设置及准确定时功能,

F28335共有三个定时器:timer0、timer1、timer2(timer2也可⽤于DSP/BIOS);功能描述:上电默认LD4灭;

初始化完成后,LD4以1HZ(1S)频率做状态翻转;电路连接说明:

LD4设置为通⽤GPIO 上拉输出初始化后默认为输出LD4灭状态;LD4控制LED灯的负极,如下图;

本次实验选⽤定时器0,程序时刻读取计数器的值,当值为0时,LD4状态翻转,计数器重载;程序设计说明:

定时器0的预定标寄存器和计数器设置:定时器时钟为sysclkout=135MHz,预定标寄存器设为1350,计数器设为100000;135Mhz/(1350*100000=1Hz)主要程序如下:

CpuTimer0Regs.TPR.bit.TDDR = 0x546 & 0xFF;//0x546 预定标寄存器(预分频器)CpuTimer0Regs.TPRH.bit.TDDRH =(0x546>>8) & 0x00FF;//0x546 预定标寄存器(预分频器)

注意:在对分配寄存器设置是出现问题,TDDR、TDDRH是两个8位寄存器组成的16位寄存器。源程序如下:

#include\"DSP2833x_Device.h\"// DSP2833x Headerfile Include File#include\"DSP2833x_Examples.h\"// DSP2833x Examples Include File#define LD3_ON() GpioDataRegs.GPACLEAR.bit.GPIO0 = 1#define LD3_OFF() GpioDataRegs.GPASET.bit.GPIO0 = 1

#define LD3_TOGGLE() GpioDataRegs.GPATOGGLE.bit.GPIO0 = 1#define LD4_ON() GpioDataRegs.GPBCLEAR.bit.GPIO34 = 1#define LD4_OFF() GpioDataRegs.GPBSET.bit.GPIO34 = 1

#define LD4_TOGGLE() GpioDataRegs.GPBTOGGLE.bit.GPIO34 = 1#define Key_SW12() GpioDataRegs.GPBDAT.bit.GPIO50/** main.c*/

int main(void) {InitSysCtrl();

DINT;IER = 0x0000;IFR = 0x0000;InitPieCtrl();InitPieVectTable();InitGpio();EALLOW;

//GPIO0 LD3 控制LED负极

GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 0;//0 gpio modeGpioCtrlRegs.GPADIR.bit.GPIO0 = 1;//1 output 0 input

GpioCtrlRegs.GPAPUD.bit.GPIO0 = 0;//1 enable pullup 0 disable pullup//GPIO34 LD4 控制LED负极

GpioCtrlRegs.GPBMUX1.bit.GPIO34 = 0;//0 gpio modeGpioCtrlRegs.GPBDIR.bit.GPIO34 = 1;//1 output 0 input

GpioCtrlRegs.GPBPUD.bit.GPIO34 = 0;//1 enable pullup 0 disable pullup//GPIO50 按键矩阵SW12输⼊端

GpioCtrlRegs.GPBMUX2.bit.GPIO50 = 0;//0 gpio modeGpioCtrlRegs.GPBDIR.bit. GPIO50 = 0;//1 output 0 input

GpioCtrlRegs.GPBPUD.bit. GPIO50 = 0;//1 enable pullup 0 disable pullup GpioCtrlRegs.GPBCTRL.bit.QUALPRD2= 200;//采样周期=2*Tsysclkout*200

GpioCtrlRegs.GPBQSEL2.bit.GPIO50 = 2;//采样窗内3次采样结构相同//GPIO53 按键矩阵负极输出0

GpioCtrlRegs.GPBMUX2.bit.GPIO53 = 0;//0 gpio modeGpioCtrlRegs.GPBDIR.bit. GPIO53 = 1;//1 output 0 input

GpioCtrlRegs.GPBPUD.bit. GPIO53 = 0;//1 enable pullup 0 disable pullupGpioDataRegs.GPBCLEAR.bit.GPIO53 = 1;LD3_ON();//默认输出亮状态LD4_OFF();EDIS;

//定时器0 设为1Hz = 135MHz/(1350*100000)

CpuTimer0Regs.PRD.all = 100000;//0x186A0 周期寄存器

CpuTimer0Regs.TPR.bit.TDDR = 0x546 & 0xFF;//0x546 预定标寄存器(预分频器)CpuTimer0Regs.TPRH.bit.TDDRH=(0x546>>8) & 0x00FF;//0x546 预定标寄存器(预分频器)CpuTimer0Regs.TCR.bit.TSS = 1;//1停⽌定时器⼯作 0启动定时器CpuTimer0Regs.TCR.bit.TRB = 1;//重载定时器计数器和预分频器CpuTimer0Regs.TCR.bit.TSS = 0;//1停⽌定时器⼯作 0启动定时器

while(1){

if(CpuTimer0Regs.TIM.all==0){LD4_TOGGLE() ;

CpuTimer0Regs.TCR.bit.TSS = 1;//1停⽌定时器⼯作 0启动定时器CpuTimer0Regs.TCR.bit.TRB = 1;//重载定时器计数器和预分频器CpuTimer0Regs.TCR.bit.TSS = 0;//1停⽌定时器⼯作 0启动定时器}}}

主循环应该采⽤⽤下⾯的语句更合理,即采⽤判断定时器中断标志的⽅式,来判断计数器为0,计数结束,如下:while(1){

if(CpuTimer0Regs.TCR.bit.TIF==1){ //中断标志位,即使没有使能中断,但是定时计数器减到0时,该位置1,该位写1清0CpuTimer0Regs.TCR.bit.TIF=1;//清中断标志位LD4_TOGGLE() ;}}

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- baijiahaobaidu.com 版权所有 湘ICP备2023023988号-9

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务