[讨论] 【C2000 LaunchPad】让LED闪起来

dontium   2012-11-27 17:07 楼主
先给个PDF文件:

让LED闪起来.pdf (524.38 KB)
(下载次数: 1875, 2012-11-27 23:36 上传)


[ 本帖最后由 dontium 于 2012-11-27 23:36 编辑 ]

回复评论 (73)

2推荐 dontium 

让LED闪起来

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

顶楼主啊

带领我这个菜鸟快速入门C2000 launchpad ,希望楼主能把其他模块的例程也做好方便我们学习啊
点赞  2012-11-27 17:31
顶楼主啊

带领我这个菜鸟快速入门C2000 launchpad ,希望楼主能把其他模块的例程也做好方便我们学习啊



同意上楼
点赞  2012-11-27 18:02
跟着楼主进C2000的门
点赞  2012-11-27 20:42

整个工程的压缩文件

F28027_LED.rar (186.29 KB)
(下载次数: 757, 2012-11-27 21:00 上传)
点赞  2012-11-27 21:00
确实详细!学习了!
点赞  2012-11-27 21:04
看到了谢谢
点赞  2012-11-27 22:27

使用定时器的例程

F28027_LED2.rar (186.55 KB)
(下载次数: 405, 2012-11-27 23:34 上传)



五、使用定时器的LED闪烁
这里使用定时器0,让LED1闪烁,因此就在GPIO初始那里加上一句:
GpioCtrlRegs.GPADIR.bit.GPIO1 = 1;
使它成为输出口。
并且在InitPeripheralClocks()中要打开定时器0的时钟:
SysCtrlRegs.PCLKCR3.bit.CPUTIMER0ENCLK = 1; // CPU Timer-0
使用TI的库对定时器初始化:
InitCpuTimers()
并配置定时器0
ConfigCpuTimer(&CpuTimer0, 60, 500000);
d1.jpg
这里CpuTimer0CPUTIMER_VARS的一个结构体,如下图。60为时钟频率,500000为定时周期数。
如果想定时更长时间,可以修改Timer->RegsAddr->TPR.all的值。
然后设置中断并允许中断。
2、中断函数
TI的例程中,较多的使用中断转向。这里我们采用另一种方法,即修改FP2802x_DefaultIsr.c文件中的中断函数。
在函数
interrupt void  TINT0_ISR(void)      // CPU-Timer 0
中将
           asm ("      ESTOP0");
           for(;;);
这两行删除,用以下代替:
GpioDataRegs.GPATOGGLE.bit.GPIO1 = 1; // Toggle GPIO1 once per 500 milliseconds
    // Acknowledge this interrupt to receive more interrupts from group 1
    PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;
上面最后一句是清除相应的中断位,以便响应下次中断。
最后编译、调试。发现LED0LED按各自的设定闪烁。
点赞  2012-11-27 23:34
哈哈,不错不错,LZ的分享带动了我这个小菜鸟的学习激情~继续关注
点赞  2012-11-28 11:06
QQ截图20121128130253.png

Warnings:
#10247-D creating output section "csm_rsvd" without a SECTIONS specification        test                         C/C++ Problem

#10247-D creating output section "csmpasswds" without a SECTIONS specification        test                         C/C++ Problem

怎么回事儿?
点赞  2012-11-28 13:05

回复 11楼 qinkaiabc 的帖子

这是文件设置错误造成的,
请详细看我的第一篇文章:https://bbs.eeworld.com.cn/thread-360489-1-1.html
点赞  2012-11-28 13:36
那篇文章没有交待F2802x_CSMPasswords.asm文件的处理。
将它设置为DEBUG下不使用就可以了
点赞  2012-11-28 13:41

回复 13楼 dontium 的帖子

解决,但是是什么原理呢?
点赞  2012-11-28 14:48
写的很详细。
点赞  2012-11-28 14:52
谢谢 楼主啊。。。
点赞  2012-11-28 18:46
很不错的,谢谢楼主了
点赞  2012-11-29 11:13
很有用的资料啊,学习
点赞  2012-11-29 12:24

回复 6楼 dontium 的帖子

请教一下楼主,工程导入CCS5能用,但是跟着教程做不行,好像是头文件包含有些混乱了,需要将v210以前的版本的头文件包含进去,但是包含进去之后错误更多了,能不能把上个教程的步骤相关方面详细一些说明下?
点赞  2012-12-4 10:14

回复 19楼 ldlylry 的帖子

刚才我试了六楼和九楼传的两个项目,这两个均可以使用,没有报错、没有警告


我用的是V5版的CCS。

请你注意一下目录设置,将多余的包含目录删了

未命名.jpg

[ 本帖最后由 dontium 于 2012-12-4 11:36 编辑 ]
点赞  2012-12-4 11:33
1234下一页
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复