打印
[菜农助学交流]

第五批小彬的MO学习之路3--------分析程序 深入理解程序

[复制链接]
2028|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zjsyjbb|  楼主 | 2011-12-14 22:43 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
gp, IO, GPIO, pi, AC
前言:以前没有接触过ARM,当然也没有接触M0,当初下决心跟着菜叔学习M0的时候,我刚好完成了对51的一个系统学习,只是当时我只是学会了51的编程思想,并在仿真软件中实现目标,所以说俺的51其实还没有真正达到很好的掌握,毕竟动手操作还是蛮重要的.当初俺正准备省钱买51学习板,正在困惑的时候大叔成功的把俺色诱进了菜地,于是开始学习M0.51M0是一个很大的思想转变,刚开始还是有点不习惯,我相信,随着深入学习,俺会慢慢习惯的.

在做第一个实验前,我想自己先做分析,在理解的基础上再进行试验.下面进入正文.
首先建立个M0工程,我建了个GPIO工程,见下图





这个工程我是根据模板设计的,做流水灯实验时应该可以简化,去掉不必要的几个文件.library files里面只要有DrvGPIO.cDrvSYS.c就可以了..
接下来有必要学习下M0的通用I/O的特点,以前俺学习51的时候思想很简单,I/O口比较容易理解,后来自己学习过一点AVR,感受到了I/O的复杂性,最明显的是要考虑I/O的方向.接触到M0之后,ARM的也是有点复杂的,M0主要通过GPIOA,GPIOB,GPIOC向外发送数据,且在每个端口上有16个引脚。共有四种模式,见下图





当我们要使用其他模式时,一定要修改相应的寄存器..这个很重要..
下面开始分析程序.
在前面的工程中,我们可以看到工程主要有三个部分组成,启动层,驱动层,用户层,经常启动层是固定的,驱动层则要根据用户层来,你用到哪一块的就要加相应的驱动子程序.这个要注意,所以不要少加或漏加.
先从GPIO开始吧.见下图





这里有好几个新接触的东西,一一进行学习.
1、   UNLOCKREG();

该函数的作用是:是完成写保护的解锁工作,可以向被保护的寄存器中写入数据。它是一个宏定义,含义是分别是向三个地址中写入 0x590x160x88.这里涉及到指针这块,主要是对地址进行操作.
2、 SYSCLK->PWRCON.XTL12M_EN = 1;
该函数的作用是:解锁操作.这个我感受到直接对寄存器操作的功能性.说实话,51的时候对寄存器感悟得不够.
3. LOCKREG();
该函数的作用是:锁定寄存器写保护.它也是一个宏定义..
4. DrvGPIO_Open(E_GPA,2, E_IO_OUTPUT);


DrvGPIO_Open(E_GPA,3, E_IO_OUTPUT);

DrvGPIO_Open(E_GPA,4, E_IO_OUTPUT);

DrvGPIO_Open(E_GPA,5, E_IO_OUTPUT);
该函数的作用是:设置端口的输出模式。这个很重要,M0的输出模式有很多.用不同的模式,结果会差很多.
5.
while(1)

{


DrvGPIO_ClrBit(E_GPA,2);


delay_loop();


DrvGPIO_ClrBit(E_GPA,3);


delay_loop();


DrvGPIO_ClrBit(E_GPA,4);


delay_loop();


DrvGPIO_ClrBit(E_GPA,5);


delay_loop();


DrvGPIO_SetBit(E_GPA,2);


DrvGPIO_SetBit(E_GPA,3);


DrvGPIO_SetBit(E_GPA,4);


DrvGPIO_SetBit(E_GPA,5);


delay_loop();

}
我们需要实现的目标,4LED灯依次间隔点亮,然后对四个灯进行熄灭.这部分内容跟51很相似,很好理解.

个人小结:通过这次学习,让我进一步深入理解程序的含义.知道程序是怎么工作的,如何调用的,当然还有更多的模块需要我去探索,继续努力加油...

相关帖子

沙发
zjsyjbb|  楼主 | 2011-12-14 22:45 | 只看该作者
终于把这个程序弄得清楚了.具体实验明天搞.寝室熄灯了..晚安..:)

使用特权

评论回复
板凳
consif| | 2011-12-15 09:50 | 只看该作者
:'(,我用这个程序,只有两边的灯亮,是不是我的灯坏了?

使用特权

评论回复
地板
consif| | 2011-12-15 09:50 | 只看该作者
:'(,我用这个程序,只有两边的灯亮,是不是我的灯坏了?

使用特权

评论回复
5
murex| | 2011-12-15 10:55 | 只看该作者
灯有没坏直接在灯的两边加电压就可以测试的

使用特权

评论回复
6
zjsyjbb|  楼主 | 2011-12-15 11:49 | 只看该作者
2# zjsyjbb
昨天我只做了个理论分析,今天晚上准备实践操作下.下午还要上四节课,晚上要上两节课,哎..

使用特权

评论回复
7
zjsyjbb|  楼主 | 2011-12-15 21:26 | 只看该作者
3# consif
经过实践操作,这个程序可以实现四个LED灯循环亮,程序没问题.我准备自己写个流水灯,写完笔记后再交流交流..

使用特权

评论回复
8
consif| | 2011-12-16 22:51 | 只看该作者
恩,我板子的问题

使用特权

评论回复
9
weshiluwei6| | 2011-12-18 14:08 | 只看该作者
自己测试下就好了 楼上的 不用着急

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:一步一个脚印,踏踏实实练好技术..

80

主题

646

帖子

2

粉丝