[ZLG-MCU] 推荐大家采用“IAR + LM LINK + LM3S驱动库”的高效率开发模

[复制链接]
6959|15
 楼主| zlgmcu 发表于 2008-4-17 09:10 | 显示全部楼层 |阅读模式
<big><br />  推荐大家采用“<font color=#0000FF>IAR&nbsp;+&nbsp;LM&nbsp;LINK&nbsp;+&nbsp;LM3S驱动库</font>”的高效率、低成本开发模式,这也是我们公司内部正在采用的开发模式。请大家到这里下载相关文档:<br /><br />IAR&nbsp;+&nbsp;LM&nbsp;LINK&nbsp;安装使用快速入门:<a href="http://www.embedtools.com/pro_kaifa/ARM/lm_link.asp" target=_blank>http://www.embedtools.com/pro_kaifa/ARM/lm_link.asp</a><br />包括以下主要内容:<br />    安装使用方法(重要!).pdf<br />    IAR使用指南.pdf<br />    LM3S驱动库(快速安装)<br />    IAR工程模板(免新建工程)<br /><br />  IAR软件简介:IAR是瑞典的一家著名的软件公司,IAR软件提供对8051、AVR、ARM7、Cortex-M3等等很多单片机的支持。目前适合免费开发Luminary单片机的版本是IAR&nbsp;4.42A,有32KB限制的免费版可用,这给广大初学者提供了极大方便。<br /><br />  LM&nbsp;LINK简介:为配合IAR软件的使用,我们公司专门研制了LM&nbsp;LINK调试器,采用USB2.0接口,小巧玲珑,既可以下载程序又能够在线仿真调试。零售价仅需100元,甚至可以赠送。<br /><br />  LM3S驱动库简介:传统的单片机开发模式为工程师采用汇编或C/C++语言编程,并且要求对单片机的寄存器非常熟悉。但是进入16/32位时代以后,寄存器非常之多,很难短时间内掌握。另外,用寄存器方式编写的应用程序晦涩难懂、容易出错、不易调试、不便互相交流、维护成本高。而驱动库开发模式彻底改变了这一切。LM3S驱动库是Luminary&nbsp;Micro公司官方推出的,对外设寄存器进行了全面封装。开发人员可以在不了解任何底层寄存器的情况下仅用C/C++就能轻松玩转LM3S系列单片机。<br /></big><br /><br />(zlgmcu_wdx)
 楼主| zlgmcu 发表于 2008-4-17 09:15 | 显示全部楼层

采用驱动库编程确实能带来很大好处

<big><br />  LM3S系列单片机采用的是结构简单、性能出众的ARM&nbsp;Cortex-M3处理器内核。Luminary官方免费公开地提供了基于C语言(符合ANSI&nbsp;C标准)的驱动库软件包,并且源代码是公开的。因此用户完全可以摒弃晦涩难懂的汇编语言,也不需要掌握底层寄存器的操作细节,只要懂C语言就能轻松玩转LM3S系列单片机。<br /><br />  下面两个例程完成同样的功能:点亮接在PA3管脚的LED指示灯,一个采用寄存器方式,另一个则利用驱动库。我们可以看出,利用驱动库开发应用程序不仅编写起来简单快速,而且代码简洁、可读性性强。对编写大型程序而言,采用驱动库更能够增强可靠性和安全性,同时显著降低维护成本。<br /></big><br /><br /><br />/*&nbsp;&nbsp;采用底层寄存器操作的示例程序&nbsp;&nbsp;*/<br /><br />#define&nbsp;&nbsp;HWREG(x)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(*((volatile&nbsp;&nbsp;unsigned&nbsp;long&nbsp;&nbsp;*)(x)))<br /><br />#define&nbsp;&nbsp;SYSCTL_BASE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x400FE000<br />#define&nbsp;&nbsp;RCGC2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(SYSCTL_BASE&nbsp;+&nbsp;0x108)<br /><br />#define&nbsp;&nbsp;GPIOA_BASE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x40004000<br />#define&nbsp;&nbsp;GPIOA_DATA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(GPIOA_BASE&nbsp;+&nbsp;0x000)<br />#define&nbsp;&nbsp;GPIOA_DIR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(GPIOA_BASE&nbsp;+&nbsp;0x400)<br />#define&nbsp;&nbsp;GPIOA_AFSEL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(GPIOA_BASE&nbsp;+&nbsp;0x420)<br />#define&nbsp;&nbsp;GPIOA_DR2R&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(GPIOA_BASE&nbsp;+&nbsp;0x500)<br />#define&nbsp;&nbsp;GPIOA_DR4R&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(GPIOA_BASE&nbsp;+&nbsp;0x504)<br />#define&nbsp;&nbsp;GPIOA_DR8R&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(GPIOA_BASE&nbsp;+&nbsp;0x508)<br />#define&nbsp;&nbsp;GPIOA_ODR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(GPIOA_BASE&nbsp;+&nbsp;0x50C)<br />#define&nbsp;&nbsp;GPIOA_PUR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(GPIOA_BASE&nbsp;+&nbsp;0x510)<br />#define&nbsp;&nbsp;GPIOA_PDR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(GPIOA_BASE&nbsp;+&nbsp;0x514)<br />#define&nbsp;&nbsp;GPIOA_SLR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(GPIOA_BASE&nbsp;+&nbsp;0x518)<br />#define&nbsp;&nbsp;GPIOA_DEN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(GPIOA_BASE&nbsp;+&nbsp;0x51C)<br /><br />int&nbsp;&nbsp;main(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;HWREG(RCGC2)&nbsp;&nbsp;|=&nbsp;&nbsp;0x01;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;&nbsp;使能GPIOA端口<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;HWREG(GPIOA_DIR)&nbsp;&nbsp;|=&nbsp;&nbsp;0x08;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;&nbsp;设置方向和模式<br />&nbsp;&nbsp;&nbsp;&nbsp;HWREG(GPIOA_AFSEL)&nbsp;&nbsp;&=&nbsp;&nbsp;~0x08;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;HWREG(GPIOA_DR2R)&nbsp;&nbsp;|=&nbsp;&nbsp;&nbsp;0x08;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;&nbsp;设置驱动强度<br />&nbsp;&nbsp;&nbsp;&nbsp;HWREG(GPIOA_DR4R)&nbsp;&nbsp;&=&nbsp;&nbsp;~0x08;<br />&nbsp;&nbsp;&nbsp;&nbsp;HWREG(GPIOA_DR8R)&nbsp;&nbsp;&=&nbsp;&nbsp;~0x08;<br />&nbsp;&nbsp;&nbsp;&nbsp;HWREG(GPIOA_SLR)&nbsp;&nbsp;&nbsp;&=&nbsp;&nbsp;~0x08;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;HWREG(GPIOA_ODR)&nbsp;&nbsp;&=&nbsp;&nbsp;~0x08;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;&nbsp;设置管脚类型<br />&nbsp;&nbsp;&nbsp;&nbsp;HWREG(GPIOA_PUR)&nbsp;&nbsp;&=&nbsp;&nbsp;~0x08;<br />&nbsp;&nbsp;&nbsp;&nbsp;HWREG(GPIOA_PDR)&nbsp;&nbsp;&=&nbsp;&nbsp;~0x08;<br />&nbsp;&nbsp;&nbsp;&nbsp;HWREG(GPIOA_DEN)&nbsp;&nbsp;|=&nbsp;&nbsp;&nbsp;0x08;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;HWREG(GPIOA_DATA&nbsp;+&nbsp;(0x08&nbsp;&lt&lt&nbsp;2))&nbsp;&nbsp;=&nbsp;&nbsp;0x00;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;&nbsp;点亮LED<br />&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(;;);<br />}<br /><br /><br /><br />/*&nbsp;&nbsp;利用Luminary驱动库的示例程序&nbsp;&nbsp;*/<br /><br />#include&nbsp;&nbsp;&lthw_types.h&gt<br />#include&nbsp;&nbsp;&lthw_memmap.h&gt<br />#include&nbsp;&nbsp;&lthw_sysctl.h&gt<br />#include&nbsp;&nbsp;&lthw_gpio.h&gt<br />#include&nbsp;&nbsp;&ltsysctl.h&gt<br />#include&nbsp;&nbsp;&ltgpio.h&gt<br /><br />#define&nbsp;&nbsp;SysCtlPeriEnable&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SysCtlPeripheralEnable<br />#define&nbsp;&nbsp;GPIOPinTypeOut&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GPIOPinTypeGPIOOutput<br />#define&nbsp;&nbsp;LED_PORT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SYSCTL_PERIPH_GPIOA<br />#define&nbsp;&nbsp;LED_PIN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GPIO_PORTA_BASE&nbsp;,&nbsp;GPIO_PIN_3<br />#define&nbsp;&nbsp;LedOn()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GPIOPinWrite(LED_PIN&nbsp;,&nbsp;0&nbsp;&lt&lt&nbsp;3)<br /><br />int&nbsp;&nbsp;main(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;SysCtlPeriEnable(LED_PORT);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;&nbsp;使能LED所在端口<br />&nbsp;&nbsp;&nbsp;&nbsp;GPIOPinTypeOut(LED_PIN);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;&nbsp;设置LED所在管脚为输出<br />&nbsp;&nbsp;&nbsp;&nbsp;LedOn();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;&nbsp;点亮LED<br />&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(;;);<br />}<br /><br /><br />(zlgmcu_wdx)
hotpower 发表于 2008-4-17 09:17 | 显示全部楼层

是呀~~~再套用个C++也是很爽的~~~

  
winloop 发表于 2008-4-17 15:58 | 显示全部楼层

我是准备采用了

关键是ST的M3的几家代理的技术支持太差。。。<br />他们的开发板根本没资料,就跟自己从头开始研究差不多,但要等到LM出来开放总线的才能用,因为我的应用里必须用总线。
 楼主| zlgmcu 发表于 2008-4-17 16:13 | 显示全部楼层

现在Luminary新出的芯片内部已经以ROM形式固化驱动库函数

<big><br />驱动库函数固化在ROM当中,好处有:<br /><br />1.&nbsp;不会占用用户的任何Flash资源<br /><br />2.&nbsp;最大限度提高代码密度<br /><br />3.&nbsp;加快程序执行速度<br /><br />4.&nbsp;这是Luminary免费提供的,不存在版权问题(royalty-free)<br /></big><br /><br />(zlgmcu_wdx)
mj2008 发表于 2008-4-18 13:27 | 显示全部楼层

ram的占用情况如何?

会不会规定某个地址范围内的ram不让用户用
 楼主| zlgmcu 发表于 2008-4-18 13:45 | 显示全部楼层

基本上不占用RAM资源

在调用库函数时,会临时占用极少量RAM资源,调用后会自动释放。
liujigan 发表于 2008-4-20 11:33 | 显示全部楼层

有一事不明望指教

调用芯片内部的库函数,但是在编译的时候如如果不加载外部的库函数能能通过吗?不知怎么解决这个问题的?
 楼主| zlgmcu 发表于 2008-4-21 08:35 | 显示全部楼层

Luminary公司已经考虑这些问题了

将来开发时,仍然使用IAR、Keil这些软件,库函数以“头文件&nbsp;+&nbsp;《驱动库指南》”的方式提供。用户只需#include相关头文件,就能够调用ROM里的库函数。<br /><br />(zlgmcu_wdx)
hqgboy 发表于 2008-4-21 08:47 | 显示全部楼层

里面的函数会不会有BUG啊?

以后M3都是API???
 楼主| zlgmcu 发表于 2008-4-21 09:13 | 显示全部楼层

作为ROM的程序都是经过考验的,否则不会ROM固化起来

  从最初发布第一版《Stellaris外设驱动库》开始,驱动库的版本就在不断升级和完善当中。到现在驱动库已经非常稳定了,所以Luminary公司才敢将其固化到ROM里。要是万一真的出现bug,我们也可以用自己编写的驱动函数来代替ROM里的库函数,合理规避。<br /><br />(zlgmcu_wdx)
overoo 发表于 2008-4-21 15:52 | 显示全部楼层

lm link慢阿

lm&nbsp;link是真慢阿
hqgboy 发表于 2008-4-21 16:09 | 显示全部楼层

既可以用固化的,也可以自己编写?

要是万一真的出现bug,我们也可以用自己编写的驱动函数来代替ROM里的库函数,合理规避<br />
linghu886 发表于 2008-5-19 18:52 | 显示全部楼层

LM LINK支持 MDK(KEIL 3)吗?

你们也是做KEIL 代理的<br />很清楚KEIL3和IAR4.0版本的差异<br />可能我用KEIL非常习惯了<br />请问你们的LM LINK支持KEIL吗?<br />我大概5周后就有时间弄弄这个LM系列的芯片.<br />还有就是你们带USB功能的开发板(LM5000系列)什么时候面世?<br />预计里面会SD卡或者TFT模块吗?
 楼主| zlgmcu 发表于 2008-5-20 11:36 | 显示全部楼层

在Keil下也可以用LM LINK,不过速度太慢了

Keil对LM&nbsp;LINK的支持不够好,能用但速度太慢,实际上还是无法使用。倒是对自家的U-LINK支持很好!<br /><br />LM3S3xxx系列带USB,5xxx系列带USB+CAN,相关开发板我们会尽快推出的,但估计要在2个月后。<br /><br />(zlgmcu_wdx)
jxb163 发表于 2008-6-13 12:53 | 显示全部楼层

...

  
您需要登录后才可以回帖 登录 | 注册

本版积分规则

81

主题

1146

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部