本文主要是介绍DSP28335闪烁2个LED,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
第一章 任务介绍
在这篇文章中,我们将接着上一篇点亮LED灯的工程继续开展。在本篇文章中,我们将实现D1和D2两个LED同时经过1s的点亮后熄灭,并保持熄灭状态1s,再点亮,重复此过程,形成频率为0.5Hz的LED闪烁。
第二章 延时函数DELAY_US()介绍
延时函数DELAY_US()同样也是TI通过汇编文件DSP2833x_usDelay.asm提供给我们的功能。
打开DSP2833x_usDelay.asm文件,在代码最后几行能看到,提供给我们的延时函数DELAY_US(A),“US”代表微秒。
将DELAY_US(A)复制到主函数中,然后点击进去查看,能看到DELAY_US()函数是在DSP2833x_Examples.h头文件中定义的。其中公式中的CPU_RATE是CPU的速度,点进去查看,CPU_RATE的值是通过宏定义确定的,当系统时钟为150MHz时,在宏定义中选择6.667L,这样能保证,DELAY_US(A)中延时参数A的单位是微秒。
第三章 程序解释和测试结果
3.1 程序解释
在核心板上电后,GPIO6和GPIO7保持上拉状态,灯熄灭,初始化完成后,D1和D2点亮,经历1s的延时后,进入while()死循环。进入循环体后第一件事就是通过按位取反运算符“~”将GPIO6和GPIO7的输出电平进行翻转,转为熄灭状态,再经过1s的延时后,循环再翻转,形成LED闪烁的效果。
/*** main.c*/
#include "DSP2833x_Device.h"
#include "DSP2833x_Examples.h"int main(void)
{InitSysCtrl(); //初始化系统时钟EALLOW; //关闭写保护GpioCtrlRegs.GPAMUX1.bit.GPIO6=0; //GPIO6设置为普通I/O功能GpioCtrlRegs.GPADIR.bit.GPIO6=1; //GPIO6设置为输出GpioCtrlRegs.GPAPUD.bit.GPIO6=0; //GPIO6上拉使能GpioCtrlRegs.GPAMUX1.bit.GPIO7=0;GpioCtrlRegs.GPADIR.bit.GPIO7=1;GpioCtrlRegs.GPAPUD.bit.GPIO7=0;EDIS; //打开写保护// GpioDataRegs.GPADAT.all=GpioDataRegs.GPADAT.all | 0x000000C0; //D1和D2都熄灭GpioDataRegs.GPADAT.all=GpioDataRegs.GPADAT.all & 0xFFFFFF3F; //D1和D2都点亮DELAY_US(1e6);while(1){GpioDataRegs.GPADAT.bit.GPIO6= ~GpioDataRegs.GPADAT.bit.GPIO6;GpioDataRegs.GPADAT.bit.GPIO7= ~GpioDataRegs.GPADAT.bit.GPIO7;DELAY_US(1e6);}
}
3.2 测试结果
这篇关于DSP28335闪烁2个LED的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!