和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,我想我会优先考虑它。