Chinaunix首页 | 论坛 | 博客
  • 博客访问: 276318
  • 博文数量: 39
  • 博客积分: 1215
  • 博客等级: 军士长
  • 技术积分: 471
  • 用 户 组: 普通用户
  • 注册时间: 2011-12-17 19:34
个人简介

grace under pressure

文章分类

全部博文(39)

文章存档

2013年(6)

2012年(28)

2011年(5)

分类: LINUX

2012-08-13 13:45:24

GPIO

学习一个新片子,我们往往是从流水灯开始跑起,一者是简单,二者,入门之前没点成就感,很容易产生放弃的心理,一位大师曾经说过,所谓兴趣就是我们对我们所做的事能做的很好,享受其中的乐趣(当然,也有人能做好他当前做的事,但是没兴趣,这样的人毕竟很少,至少不再普通人行列)。万事开头难,因此,在开始的时候,还是老老实实的先从基本做起,我学习MQX也是一样,大概看了一下MQX的IO驱动架构后,便开始从GPIO入手,不管如何,先把系统跑起来,不管多简单,然后能修改代码实现自己想要的功能。这过程中,我们基本能熟悉一个新的片子,最起码是有个了解。下面是我学习MQX_GPIO的笔记,测试代码就不上传了,比较简单,确实需要的可以留言索要。

一、安装:

_io_gpio_install(“gpio:”)

注:在BSPCFG_ENABLE_GPIOuser_config.h中被置1时,自动安装

 

二、打开:

file=fopen”gpio:write/gpio:read”,(char_ptr)&pin_table

其中:

1fileMQX系统的文件结构,定义为

MQX_FILE_PTR file

下面是mqx文件结构的结构体定义

typedef struct mqx_file

{

    /* The address of the Device for this stream */

    struct io_device_struct _PTR_ DEV_PTR;

 

    /* Device Driver specific information */

    pointer       DEV_DATA_PTR;

 

    /* General control flags for this stream */

    _mqx_uint     FLAGS;

   

    /* The current error for this stream */

    _mqx_uint     ERROR;

 

    /* The current position in the stream */

    _file_size    LOCATION;

 

    /* The current size of the file */

    _file_size    SIZE;

 

    /* The following 2 implement undelete */

    boolean       HAVE_UNGOT_CHARACTER;

    _mqx_int      UNGOT_CHARACTER;

 

} MQX_FILE, _PTR_ MQX_FILE_PTR;

 

2gpiowritegpio:read决定文件是输出还是输入

 

3pin_tableGPIO结构体GPIO_PIN_STRUCT,以GPIO_LIST_END结尾,对GPIO_PIN_STRUCT的描述如下:

| |

对了GPIO的打开,还有另外一种方式:

file=fopen(“gpio:write/gpio:read”,(char_ptr)NULL)

ioctl(file,GPIO_IOCTL_ADD_PINS,&pins)

 

三、操作:

1、输出操作(以LED为例测试)

file1=fopen”gpio:write”,(char_ptr)&pins_led

ioctl(file1,GPIO_IOCTL_WRITE_LOG0,NULL) //file打开的pins_led里所有IO输出0

ioctl(file1,GPIO_IOCTL_WRITE_LOG1,&pins1_led) //pins1_ledpins_led中的部分IO的结构体,这里是对pins_led中部分引脚输出1

pins_led:

GPIO_PIN_STRUCT pins_led[] = {

        /* when opening, explicitly set output to 0 */

        BSP_LED2 | GPIO_PIN_STATUS_0,

        /* when opening, explicitly set output to 1 */

        BSP_LED3 | GPIO_PIN_STATUS_1,

        /* when opening, implicitly set output to 0 */

        BSP_LED4,

        GPIO_LIST_END

    };

 

2、输入操作:(以按键为例测试)

 

1)、查询方式

file2=fopen”gpio:read”,(char_ptr)&pins_button

ioctl(file2,GPIO_IOCTL_READ,&pins_button) //读取按键状态,并将状态存到pins_button

pins_button[n]&GPIO_PIN_STATUS //pins_button中第n个按键状态

pins_button:

GPIO_PIN_STRUCT pins_button[] = {

        BSP_BUTTON1,

        BSP_BUTTON2,

        GPIO_LIST_END

    };

 

2)、中断方式

file3= fopen(“gpio:read”, (char_ptr) &pins_int )

ioctl(file3,GPIO_IOCTL_SET_IRQ_FUNCTION, (pointer)int_callback)

pins_int:

GPIO_PIN_STRUCT pins_int[] = {

        BSP_BUTTON1 | GPIO_PIN_IRQ_FALLING,

        GPIO_LIST_END

        };

 

注意:一个文件使用完毕后,最好关掉这个文件,使用的函数

fclosefile

阅读(3751) | 评论(0) | 转发(0) |
0

上一篇:Reset Sources of K60

下一篇:闲耍VB

给主人留下些什么吧!~~