9512|13

73

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

像51一样操作LM3S的I/O,很小很小的技巧 [复制链接]

 

       刚从沈阳出差回来,终于看到心仪已久的板子了,太兴奋了。哈哈哈

    学TIARM有段时间了,总感觉操作I/O不方便,写起来字太多,累得慌。没事的时候就研究了一下寄存器和驱动库的代码,

总算找到一种比较方便的操作方式,和51操作差不多了,呵呵。废话不错说了,先看代码吧:

 

#define RA(x) HWREGBITW(0x400043FC,x)

#define RB(x) HWREGBITW(0x400053FC,x)

#define RC(x) HWREGBITW(0x400063FC,x)

#define RD(x) HWREGBITW(0x400073FC,x)

#define RE(x) HWREGBITW(0x400243FC,x)

#define RF(x) HWREGBITW(0x400253FC,x)

#define RG(x) HWREGBITW(0x400263FC,x)

 

利用BIT的操作方法HWREGBITW(),效率比较高,里面的地址可以在芯片里的头文件中找到:

#define GPIO_PORTA_DATA_R       (*((volatile unsigned long *)0x400043FC))

 

这是引用的lm3s8962.h文件里面的一段,我们只需要后面的16进制地址就可以了,然后后面的操作就简单多了。

比如我们想点亮一个LED,在PF0上,那么我们就这样

int main(void)

{

       clockInit();                                //  时钟初始化:晶振,6MHz

   

       SysCtlPeriEnable(SYSCTL_PERIPH_GPIOF);          //使能

       GPIOPinTypeOut(PORTF,PIN0);                              //端口方向    

       for (;;)

      {

              RF(0) = 1;

              SysCtlDelay(150 * (TheSysClock / 3000));

              RF(0) = 0;

              SysCtlDelay(150 * (TheSysClock / 3000));

      }

}

简单多了吧,特别是从51picavr转型过来的朋友们是不是觉得很亲切呢,呵呵。

可能细心的朋友们已经察觉到了,在设置端口方向的那句怎么不对呢,没有声明啊,呵呵我又偷懒了

#define PORTA             0x40004000  // GPIO Port A

#define PORTB             0x40005000  // GPIO Port B

#define PORTC             0x40006000  // GPIO Port C

#define PORTD             0x40007000  // GPIO Port D

#define PORTE             0x40024000  // GPIO Port E

#define PORTF              0x40025000  // GPIO Port F

#define PORTG             0x40026000  // GPIO Port G

#define PORTH             0x40027000  // GPIO Port H

 

#define PIN0             0x00000001  // GPIO pin 0

#define PIN1            0x00000002  // GPIO pin 1

#define PIN2            0x00000004  // GPIO pin 2

#define PIN3            0x00000008  // GPIO pin 3

#define PIN4            0x00000010  // GPIO pin 4

#define PIN5            0x00000020  // GPIO pin 5

#define PIN6            0x00000040  // GPIO pin 6

#define PIN7            0x00000080  // GPIO pin 7

 

这样是不是省劲多了,看着也舒服点

下面有我的附件,给喜欢的朋友参考一下

 

IO bit.rar

239.04 KB, 下载次数: 115

最新回复

这个必须顶!!!!!!!!!!  详情 回复 发表于 2012-3-3 10:40
 
点赞 关注

回复
举报

73

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
有错误的地方还请大家指正啊
 
 

回复

918

帖子

0

TA的资源

纯净的硅(中级)

板凳
 

回复 沙发 dyc1229 的帖子

直接用驱动库不就行了吗?可读性还好。
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

4
 

回复 板凳 academic 的帖子

楼主,LUMINARY的库文件就是为了屏蔽底层的复杂的寄存器的,你这一弄,更麻烦了,还停留在51的思路
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(中级)

5
 
其实出发点不一样,这样弄灵活性更高一些,一开始我也说了,便于从51 ,avr转型过来学lm3s,个人感觉挺好用的,而且我比较懒喜欢少打字。
再有就是给感兴趣的朋友,我觉得学一些底层的知识也是有必要的。毕竟我们搞的嵌入式,不是纯软件,一点底层都不懂这也很不现实
 
 
 

回复

1万

帖子

16

TA的资源

版主

6
 

这个周立功用过,可以不用库

但我觉得两者结合,打迷宗拳为上策
 
个人签名http://shop34182318.taobao.com/
https://shop436095304.taobao.com/?spm=a230r.7195193.1997079397.37.69fe60dfT705yr
 
 

回复

73

帖子

0

TA的资源

一粒金砂(中级)

7
 
是啊,其实不用分的这么明确,这种方法用在遍历里的话就很方便了,直接给个索引就行。官方的驱动库当然也不能扔,我正在研究CAN呢,如果没有驱动库那要弄懂还早呢,
还是那句话怎么方便怎么来,时间就是金钱效率就是生命啊
 
 
 

回复

826

帖子

0

TA的资源

一粒金砂(中级)

8
 

想法不错

想法不错,顶一个!
 
 
 

回复

1027

帖子

0

TA的资源

五彩晶圆(中级)

9
 
CMSIS!
可移植性 更强呢!
 
 
 

回复

58

帖子

0

TA的资源

一粒金砂(高级)

10
 

回复 楼主 dyc1229 的帖子

#define PORTA             0x40004000
#define GPIO_PORTA_DATA_R       (*((volatile unsigned long *)0x400043FC))
楼主你似乎忽略了volatile 的重要性
在嵌入式开发中volatile 是必须的。你这样容易造成不可想象的问题
 
 
 

回复

173

帖子

0

TA的资源

一粒金砂(初级)

11
 
学习!!!!!
 
 
 

回复

103

帖子

0

TA的资源

一粒金砂(高级)

12
 
LZ应该是刚接触M3。过一段时间,当你习惯TI的例程的时候,你也会觉得那很好用。
 
 
 

回复

239

帖子

0

TA的资源

一粒金砂(中级)

13
 
这个必须顶!!!!!!!!!!
 
 
 

回复

239

帖子

0

TA的资源

一粒金砂(中级)

14
 
这个必须顶!!!!!!!!!!
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表