一篇好文章(TI LM3S)

expressme   2012-5-8 13:30 楼主
和STM32相比,LM3S确实有不少特点,集成MAC+PHY的以太网控制器,带SDRAM的EBI外部总线,这些对于同类芯片来说,已经是很好很强大了。

当然它的发光点还不仅仅是这两处:
单周期FLASH,最高达100M的主频,内置固件函数库,多种方式bootloader,IO位屏蔽,SPI和串口带FIFO等等。

下面是学习过程中的一些记录,旨在如何应用,分析得还不够深入,供参考。

一、 LM3S的Bootloader
    D:\StellarisWare\boot_loader 文件夹下是lm3s bootloader源码,支持usb ssi 以太网 串口方式boot,通过bl_config.h配置;

这个目录里包含了bootloader应用的所有文件,就像一个库一样,当需要用到bootloader时,只需要建一个工程把这个文件夹里需要用到的文件加进来,再修改一下bl_config.h文件就可以了,具体可参考范例。
这里面还有一个bl_config.c文件,需要说明一下,它不是一个标准C语法的文件,我们不需要把它包含到工程中去,它的目的是为了和bl_config.h文件一起生成bl_config.inc文件,因为bl_config.h中定义了的这些配制参数,在bl_startup_rvmdk.s文件中用到,而在keil中汇编文件又不能直接#include "bl_config.h",它只能include bl_config.inc。所以需要用keil的armcc工具将bl_config.h和bl_config.c文件生成bl_config.inc文件,注意该文件要在代码编译前产生。
   在 run user programs before build/rebuildl输入 armcc --device DLM -I . -E -o bl_config.inc ..\..\..\boot_loader\bl_config.c(bl_config.h在当前目录,bl_config.c在..\..\..\boot_loader 目录),并在RUN处打勾,如下图:






..\boards\ek-lm3s8962目录下有两个范例
boot_eth是以太网方式boot
boot_serial是串口方式boot
bl_config.h文件在这两个范例的工程下。

有一个文件需要说明一下:
bl_link.sct是内存地址分配的一个文件,在boot的keil工程 options for target 的linker栏 scatter file处输入bl_link.sct的路径。注意,这里分配了app区的起始地址,在app工程设置中应与其的一致。

bootloader库适应于多个编译环境,由于是使用keil,所以需要在 options for target 的C/C++栏 Define栏里输入 rvmdk 。

..\docs文件夹下有bootloader的介绍。

二、 LM3S的中断
Lm3S的中断函数没有像STM32那样将所有的中断函数在汇编文件里做声明,并全部整理到stm32f103_it.c里来,而是需要用户自已修改汇编文件进行声明,如下图用到的定时器中断:






然后在你的主程序里写上







就是中断入口了。其实和STM32是一样,只是写法不同。

三、 LM3S的位操作
Bitband是位操作的范例,LM3S的库有几个宏非常有用,在hw_types.h下





当访问寄存器,或位操作时,需要用到这些宏,如对某变量的某位置1:
static volatile unsigned long g_ulValue;
HWREGBITW(&g_ulValue, 31) =  0;
HWREGBITW(&g_ulValue, 7) =  0;  //给 g_ulValue第31位和第7位置0

四、 LM3S的时钟设置
下面两种设置,相信一看就明白了
1、
   //
    // Set the clocking to run directly from the crystal.
    //
   SysCtlClockSet ( SYSCTL_USE_OSC  |                    // 系统时钟设置,不采用PLL         
                    SYSCTL_OSC_MAIN  |                    //主振荡器                        
                    SYSCTL_XTAL_8MHZ  |                    // 外接8MHz晶振                  
                    SYSCTL_SYSDIV_1 ) ;                //不分频,结果为8M   

   2、
//
    // Set the clocking to run directly from the crystal.
    //
SysCtlClockSet ( SYSCTL_USE_PLL  |                    // 系统时钟设置,采用PLL         
                    SYSCTL_OSC_MAIN  |                    //主振荡器                        
                    SYSCTL_XTAL_8MHZ  |                    // 外接8MHz晶振                  
                    SYSCTL_SYSDIV_4 ) ;                //4分频,结果为50M     
     //Fury家族PLL固定为400MHz Sandstorm家族为200MHz,软件里计算都是按200M算
   //所以4分频后不是100M而是50M
   符件里的例程是在光盘例程的基础上,加了一些注释和一些修改,DOC文件夹里加了几个网上下载的资料。
结语:
   初识LM3S,还有很多不懂,不过至少保证可以将LM3S的片子用起来,弄熟它不是一朝一夕,需要在项目中去体会,去深入,如果在项目中需要用到以太网、或者需要挂大容量SDRAM,我想我会优先考虑它。

回复评论 (2)

回复 楼主 expressme 的帖子

看不到图片 请补充
加油!在电子行业默默贡献自己的力量!:)
点赞  2012-5-8 13:59
mark,坐等楼主补图
点赞  2012-5-8 15:16
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复