让LED闪起来
让LED闪起来
这次讨论一下TI的编程特点,特别是文件组织结构。
这是建立在前一个项目《打造自己的C2000 LaunchPad项目》基础上的。首先
使用延时函数来控制切换IO口状态,使LED闪光,然后使用定时器控制它的闪光。
一、部分文件介绍
1、F2802x_Device.h
此文件是常用的宏的定义,里面定义了数据类型,包含了必要的头文件,还
有所使用器件的定义:
#define TARGET 1
// User To Select Target Device:
……
#define DSP28_28027PT TARGET
……
如果使用其它器件,可以在这里更改。
2、F 2802x_Examples.h
它是为了设置PLL,系统时钟,而定义的常数。
#define DSP28_DIVSEL 2 // Enable /2 for SYSCLKOUT
//#define DSP28_DIVSEL 3 // Enable /1 for SYSCLKOUT
#define DSP28_PLLCR 12 // Uncomment for 60 MHz devices [60 MHz = (10MHz * 12)/2]
……
此文件中的约定值使时钟设置为60MHz。
3、F2802x_CodeStartBranch.asm
一看名字就知道,是控制启动时转向的。它关闭看门狗并转向程序入口。
4、F2802x_DefaultIsr.c
它是缺省的中断程序,包括了所有中断程序的框架,如:
当进入中断时,将什么也不做,并停留在那里。用户编程时,可以重新定义中断
函数并转向它,如:
PieVectTable.XINT1 = &UserInttruptFunction
也可以修改这个文件中的函数。
5、F2802x_GlobalVariableDefs.c
这个文件是是定义F28027内部寄存器的,与CMD文件一道分配寄存器地址,并定
义寄存器文件结构变量。如
从这里可以看到,要定义一个寄存器是很麻烦的,如果定义某个变量到绝对地址
也是采用这种办法。但TI说了,这个方法使用起来灵活。
6、F2802x_PieVect.c
这个文件是定义中断矢量表的。并且包括了一个初始化函数。在初始化时,要
用到它们。
7、F2802x_SysCtrl.c
系统的时钟控制,在这个文件中完成。
8、F2802x_MemCopy.c
这是对于烧写到FLASH中的程序,拷贝到RAM中运行时使用的。因为在flash中
运行程序,需要插入等待时间,在RAM中运行不需要等待。
9、F2802x_usDelay.asm
这是个延时函数,很简单。这个文件中还有个“ramfuncs”(具体细节将在其它
文章中叙述),这样定义后就可以使用MemCopy()将它拷贝到RAM中运行:
MemCopy(&RamfuncsLoadStart, &RamfuncsLoadEnd, &RamfuncsRunStart)
10、模块文件
如PWM、I2C、SPI等。文件中给出了基本的实现设置方法,应用程序中可以
根据具体情况,作适当修改。
二、F28027程序基本结构(流程)
F2802x_CodeStartBranch.asm关闭看门狗、并跳至C程序
|
三、用延时函数控制的LED程序
程序如下
void main(void)
{
InitSysCtrl();
InitGpio();
DINT;
InitPieCtrl();
IER = 0x0000;
IFR = 0x0000;
InitPieVectTable();
for (;;)
{
GpioDataRegs.GPATOGGLE.bit.GPIO0 = 1;
DELAY_US(100000L);
}
}
1、InitSysCtrl()
前面提到了这个函数。这里,使用内部振荡器,60MHz,仅打开GPIO时钟。
SysCtrlRegs.PCLKCR3.bit.GPIOINENCLK = 1; // GPIO
2、InitGpio()
这里,需要将LaunchPad上的几个灯(或某一个)设置为输出,本例程只用LED0,
因此只需要在后面加一句:
GpioCtrlRegs.GPADIR.bit.GPIO0 = 1;
3、PIE
本程序不使用中断,所以仅初始化中断表就行了。
4、IO控制
IO的控制,可以使用GPIO data寄存器,也可以使用GPIO Clear或Set寄存器,这里
使用的是GPIO Toggle寄存器。使用这个寄存器在流水线作业中有它的好处,可以参考
数据手册。
GpioDataRegs.GPATOGGLE.bit.GPIO0 = 1;
四、调试
现在的程序,不对flash操作,因此,原来板子上的程序将不受影响。
对项目进行编译后,将LaunchPad接上电脑,点编译器中的“锤子”,即进入调试
状态,在这里可以单步等调试。具体情况从略。