打印
[新手园地]

【第四批】Metalor笔记1 - GPIO操作(基于软件延时的流水灯)

[复制链接]
2583|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Metalor|  楼主 | 2011-11-16 22:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
工作繁忙实在是没什么空。
先看了两天文档,了解了NUC120的一些信息,然后看了Ryanhsiung 兄的一个程序,在其基础上,做了些适合自己风格的修改,算是开工了。

其实这篇就是抄啦,只为熟悉NUC120的GPIO基本操作。接触过51、AVR、瑞萨、LPC2103,说实话很不习惯NUC120的GPIO的操作。不过熟悉就好啦~~
以下代码只是一个基于软件延时的流水灯,让助学板上的4颗LED灯依次点亮,连定时器都没用。
此为第一篇,不知道是否太“低俗”而不符合要求,不过呢笔记会一直写下去的,只是会比一般人慢吧。
接下来准备搞一个裸奔的架构,然后在其基础上添加各种功能,再然后这么大个ROM不跑跑OS实在是说不过去,学OS也是申请这块板的主要目的啦。
自己有一个之前在学校用过的1602,端口和助学板上的LCD端口对不上,准备跳跳线再焊焊补补拿来用用,一步步来吧~~
好了,上代码:

main.c:
#include "includes.h"

int main (void)
{
vLED_GPIO_Init();
while(1)
{
  vLED_Control(D_PIN_LED1,D_LED_ON); //First LED on
  vDelay();       //Delay a while
  vAllLedOff();      //All LED off
  
  vLED_Control(D_PIN_LED2,D_LED_ON); //Second LED on
  vDelay();
  vAllLedOff();
  
  vLED_Control(D_PIN_LED3,D_LED_ON); //Third LED on
  vDelay();
  vAllLedOff();
  
  vLED_Control(D_PIN_LED4,D_LED_ON); //Fourth LED on
  vDelay();
  vAllLedOff();   
}
}

void vDelay(void)
{
uint32_t DelayTime = 1200000;  //About 1s
while(DelayTime--);
}


led.c:
#include "includes.h"
void vLED_GPIO_Init(void)
{
   DrvGPIO_Open( E_D_GPLED1, D_PIN_LED1, E_IO_OUTPUT );
   DrvGPIO_Open( E_D_GPLED2, D_PIN_LED2, E_IO_OUTPUT );
   DrvGPIO_Open( E_D_GPLED3, D_PIN_LED3, E_IO_OUTPUT );
   DrvGPIO_Open( E_D_GPLED4, D_PIN_LED4, E_IO_OUTPUT );
   
   vAllLedOff();   
}

void vAllLedOff(void)
{
vLED_Control(D_PIN_LED1,D_LED_OFF);    //这里我就不用这个初始化,其实
vLED_Control(D_PIN_LED2,D_LED_OFF);
vLED_Control(D_PIN_LED3,D_LED_OFF);
vLED_Control(D_PIN_LED4,D_LED_OFF);
}

void vLED_Control(uint8_t led ,uint8_t status)
{
E_DRVGPIO_PORT e_temp;
switch(led)
{
  case   D_PIN_LED1:
   e_temp = E_D_GPLED1;
   break;
  case   D_PIN_LED2:
   e_temp = E_D_GPLED2;
   break;
  case   D_PIN_LED3:
   e_temp = E_D_GPLED3;
   break;
  case   D_PIN_LED4:
   e_temp = E_D_GPLED4;
   break;
  default:
    return;   //防止进入下面的执行程序
}  

if(D_LED_OFF == status)
{        
  DrvGPIO_SetBit(e_temp,led);
}
else
{   
  DrvGPIO_ClrBit(e_temp,led);      
}
}

GPIO By Metalor.rar (1.43 MB)

相关帖子

沙发
hotpower| | 2011-11-16 22:49 | 只看该作者
学习就是模仿,开始是熟悉。不急。实际我真不喜欢库函数。但是了解它实现还是有参考价值的。俺就喜欢红杏和老师暴力的头文件。

使用特权

评论回复
板凳
Metalor|  楼主 | 2011-11-16 23:23 | 只看该作者
恩,有空会多看看。

那个附件貌似有点问题。
再传一次。

GPIO By Metalor.rar (1.41 MB)

使用特权

评论回复
地板
Metalor|  楼主 | 2011-11-16 23:28 | 只看该作者
基于Systick的来了。
明天有空会把裸奔构架建起来~~

GPIO By Metalor(Systick).rar

1.39 MB

使用特权

评论回复
5
hotpower| | 2011-11-16 23:40 | 只看该作者
群里有我一个基于systick的裸奔框架。

使用特权

评论回复
6
hotpower| | 2011-11-17 08:00 | 只看该作者
可以看出,gpio这些库函数的操作不好,必须一位一位的操作,而我们经常需要对某个端口都数个位同时操作,故这样操作效率肯定低下。

使用特权

评论回复
7
Metalor|  楼主 | 2011-11-17 10:31 | 只看该作者
是,感觉很不方便。
有空多参考下菜农。那个群号是多少?

使用特权

评论回复
8
hotpower| | 2011-11-17 21:38 | 只看该作者
晕,下面的老头里有12047788.

发放裤子,以便参加选美。

使用特权

评论回复
9
watch186| | 2011-11-18 00:04 | 只看该作者
LZ好速度啊  我还在忙ISP……:'(

使用特权

评论回复
10
hotpower| | 2011-11-18 00:40 | 只看该作者
不快也不由他,选美不等人呀!下周开始选美了!

使用特权

评论回复
11
Metalor|  楼主 | 2011-11-18 08:22 | 只看该作者
。。。这也叫快啊
整天加班呢

使用特权

评论回复
12
watch186| | 2011-11-26 10:58 | 只看该作者
LZ的这个模块化貌似有点 牵强啊  有点那种是  为了模块而故意  模块的感觉  
case   D_PIN_LED1:
   e_temp = E_D_GPLED1;
   break;
  case   D_PIN_LED2:
   e_temp = E_D_GPLED2;
   break;
像进行case选择中  选择了一堆D_PIN_LEDx  结果选出来还都是E_GPA,而后面的操作
DrvGPIO_SetBit(e_temp,led);中  e_temp  和  led  其实又是在用E_D_GPLEDn赋值,那前面的case选择就当是摆设啦,根本没有用到啊  呵呵  是不是啊
其实这比给的库函数更加麻烦啦而不是简单啦……
这只是我的愚见啊   我现在也在寻找一种比较适合的  函数框架啊  呵呵

使用特权

评论回复
13
Metalor|  楼主 | 2011-11-27 10:53 | 只看该作者
仔细看了笔记的,赞一个~!
首先,这个不是我写的,一楼已经说了此篇是借鉴Ryanhsiung 。
其次,这样写是效率比较低,但却是为了移植、改硬件方便而设计,是有其道理的。

使用特权

评论回复
14
x181084431| | 2011-11-29 22:07 | 只看该作者
加油

使用特权

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

本版积分规则

2

主题

224

帖子

1

粉丝