【研旭TMS320F28335 DSP实用板试用体验】+定时器

  • Jason_Lee
  • LV3工程师
  • |      2018-02-06 20:19:40
  • 浏览量 1542
  • 回复:1
本帖最后由 Jason_Lee 于 2018-2-6 20:21 编辑 TMS320F28335 片上有 3 个 32 位 CPU 定时器,分别被称为 CPU 定时器 0、1 和 2。每个定时器中均有一个 32 位减计数器,当计数器减到 0 时,产生一个中断。在此实验中,使用的是定时器 1,当定时器 1计时到 100ms 的时候,程序进入定时器 1 中断服务函数,用户可以在中断函数中来改变 LED 的状态,从而实现 LED 闪烁的效果。 每来一个时钟信号,预定标计数器 PSCH:PSC 就会减 1,直到减到 0 后,它将会重载TDDRH:TDDR 的值,同时 TIMH:TIM 计数器将会减 1。这个过程将重复进行,直到 TIMH:TIM 计数器的值减到 0 时,定时器将会产生一个中断信号,同时 TIMH:TIM 计数器重载周期寄存器PRDH:PRD 的值。通过对定时器控制寄存器(TIMERxTCR)的设置,可以让定时器工作在不同 的方式。 TIF:定时器中断标志位,写 1 时将清除中断标志; TIE:定时器中断使能位,写 1 时使能中断,写 0 时不使能中断; FREE、SOFT:定时器仿真模式选择位:00 硬件停止;01 软件停止;10 自由运行;11 自由运行 TRB:重载控制位,当写入 1 时,PSCH:PSC 重载 TDDRH:TDDR 的值、TIMH:TIM 重载 PRDH:PRD的值; TSS:定时器开启位,写入 0,开启定时器;写入 1,关闭定时器; 设计程序: #include "DSP2833x_Device.h" #include "DSP2833x_Examples.h" #define LED4 GpioDataRegs.GPADAT.bit.GPIO0 #define LED3 GpioDataRegs.GPADAT.bit.GPIO1 #define LED1 GpioDataRegs.GPADAT.bit.GPIO6 #define LED2 GpioDataRegs.GPADAT.bit.GPIO7 interrupt void ISRTimer1(void); void configtestled(void); void main(void) { InitSysCtrl(); InitXintf16Gpio(); //zq DINT; InitPieCtrl(); IER = 0x0000; IFR = 0x0000; // PIE 向量表指针指向中断服务程(ISR)完成其初始化. // 即使在程序里不需要使用中断功能,也要对 PIE 向量表进行初始化. // 这样做是为了避免PIE引起的错误. // The shell ISR routines are found in DSP2833x_DefaultIsr.c. // This function is found in DSP2833x_PieVect.c. InitPieVectTable(); // Interrupts that are used in this example are re-mapped to // ISR functions found within this file. EALLOW; // This is needed to write to EALLOW protected registers //PieVectTable.TINT0 = &ISRTimer0; PieVectTable.XINT13 = &ISRTimer1; //PieVectTable.TINT2 = &cpu_timer2_isr; EDIS; // This is needed to disable write to EALLOW protected registers InitCpuTimers(); // For this example, only initialize the Cpu Timers ConfigCpuTimer(&CpuTimer1, 150, 500000); StartCpuTimer1(); IER |= M_INT13; CpuTimer1Regs.TCR.all = 0x4001; // Use EINT; // 总中断 INTM 使能 ERTM; // 使能总实时中断 DBGM configtestled(); LED1=1; DELAY_US(10); LED2=0; DELAY_US(10); LED3=1; DELAY_US(10); LED4=0; DELAY_US(10); for(; ;); } interrupt void ISRTimer1(void) { PieCtrlRegs.PIEACK.all = PIEACK_GROUP1; //0x0001赋给12组中断ACKnowledge寄存器,对其全部清除,不接受其他中断 CpuTimer1Regs.TCR.bit.TIF=1; // 定时到了指定时间,标志位置位,清除标志 CpuTimer1Regs.TCR.bit.TRB=1; // 重载Timer1的定时数据 LED1=~LED1; LED2=~LED2; LED3=~LED3; LED4=~LED4; } void configtestled(void) { EALLOW; GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 0; // GPIO0复用为GPIO功能 GpioCtrlRegs.GPADIR.bit.GPIO0 = 1; // GPIO0设置为输出 GpioCtrlRegs.GPAMUX1.bit.GPIO1 = 0; // GPIO1 = GPIO1 GpioCtrlRegs.GPADIR.bit.GPIO1 = 1; GpioCtrlRegs.GPAMUX1.bit.GPIO6 = 0; // GpioCtrlRegs.GPADIR.bit.GPIO6 = 1; GpioCtrlRegs.GPAMUX1.bit.GPIO7 = 0; // GpioCtrlRegs.GPADIR.bit.GPIO7 = 1; EDIS; } 实验现象:
  • 0
  • 收藏
  • 举报
  • 分享
我来回复

登录后可评论,请 登录注册

所有回答 数量:1
wg3613 2018-02-23
很好的经验分享,支持
0   回复
举报
发布
x
收藏成功!点击 我的收藏 查看收藏的全部帖子