搜索
bottom↓
回复: 39

AVR32 例子3 UC3 GPIO 驱动包测试及使用详解,国内首发,欢迎拍转和交流!!

[复制链接]

出0入0汤圆

发表于 2008-1-28 16:53:09 | 显示全部楼层 |阅读模式
UC3 GPIO 驱动包测试及使用详解

Sovereign K?oK!个人测试仅供参考,未经同意严禁转载,版权个人所有,严禁商用,OURdev国内首发!

软件开发环境:WINXP+AVR32STUDIO+GNUCtoolchain1.3.2
硬件开发环境:EVK1100+JTAGICE-MK2
UC3A Framework版本:1.1.1
下载地址:http://www.atmel.com/dyn/products/tools_card.asp?tool_id=4192

GPIO是每个MCU最基本也是最重要的单元,现在来看看UC3在IO上有什么特性:
1、每个管脚都可设定电平变化,上跳沿和下跳沿的中断请求
2、可以设定对输入瞬时脉冲滤波器,也就是时间少于一个时钟周期的脉冲变化,将不被识别,这个特性在按键消抖上可算是个很好的解决方式了。
3、可设定开漏工作方式,实现真正的IO双向
4、优良的输入输出控制(老生常谈)
5、对管脚复用最多达四个寄存器来管理使用(感觉自己理解有问题,不知道怎么表达了,就是现在如果要使用IO的特别功能要对相关的寄存器操作才能使用,而不是像AVR使能就可以了……)
6、可支持5V输入(工作电压3.3V,内核1.8V)
7、可设定上拉电阻,推挽输出时电流为4ma, IO全部输出时在470ma

看上去比AVR的功能强了很多,加了几个比较实用的新特性,用法也更复杂,我仔细看了操作寄存器有十三种之多……

现在开始进入正题
下载好Framework后,可以发现这个驱动包作的非常齐全,驱动,例子,教程,API,甚至连OS都有,这点佩服一下AT的技术支持,虽然国内渠道是在到现在还没有动静,但是AT对AVR32可见是下了大力气的。
我们这次GPIO的驱动包在\AT32UC3A\DRIVERS\GPIO\这个文件夹下
GPIO.C和GPIO.H是驱动包的两个文件。所有对GPIO的操作函数都在这里,在下层文件夹中有一个使用GPIO的例子gpio_example.c

下面我对GPIO驱动包里的各个函数进行介绍,可以发现GPIO的驱动包做的很完善,对以前AVR不支持的位操作有了强有力的支持,现在可以精确定位到某个IO口,不过好像没有AVR那种可以对一组IO口进行操作的方式,比较遗憾,不知道以后是不是会提供支持。
这里先做一下说明,AVR32对IO的命名是 AVR32_PIN_PXxx(前面X是哪个口,后面xx是管脚号)比如B口22脚就是AVR32_PIN_PB22,AVR32UC3A0512 144脚有A B C X四组IO,A组有31个管脚,B组有32个管脚,C组有6个管脚,D组有40个管脚。(不知道为什么要这样排布,可能和功能有关系,了解的人告诉我一下,呵呵)

而且注意,以后所有的操作包括输入输出,中断等等都只对这个变量操作,而改变的是相应的函数,这与AVR有比较大的区别。如果有心看头文件的话,可以发现这个命名只不过是一个地址偏移量……

一、好了来几个最常用的输出操作!
1、void gpio_clr_gpio_pin  ( unsigned int  pin   )  
置零操作,方法一比如置零A口31脚,gpio_clr_gpio_pin(AVR32_PIN_PA30)
2、void gpio_set_gpio_pin  ( unsigned int  pin   )
置一操作,用法同方法一
3、void gpio_tgl_gpio_pin(unsigned int pin)
翻转某位,这是比较实用的函数。用法同方法一。
4、int gpio_get_gpio_pin_output_value(unsigned int pin)
在输出状态时,读输出位电平。
方法二:state(自定义变量) = gpio_get_gpio_pin_output_value(AVR32_PIN_PA30);

二、接下来是输入
1、int gpio_get_pin_value(unsigned int pin)
输入状态时,读输入位电平,用法同方法二。

三、特殊功能操作
1、void gpio_enable_pin_open_drain(unsigned int pin)
   void gpio_disable_pin_open_drain(unsigned int pin)
   开漏模式的开和闭,用法同方法一
2、void gpio_enable_pin_pull_up(unsigned int pin)
   void gpio_disable_pin_pull_up(unsigned int pin)
   上拉模式的开和闭,用法同方法一
3、void gpio_enable_pin_glitch_filter(unsigned int pin)
   void gpio_disable_pin_glitch_filter(unsigned int pin)
   瞬时脉冲滤波器的开和闭,用法同方法一

四、中断功能操作
1、int gpio_enable_pin_interrupt(unsigned int pin, unsigned int mode)
   void gpio_disable_pin_interrupt(unsigned int pin)
   中断使能或关闭,及工作模式设定
   方法三::state(自定义变量) = gpio_enable_pin_interrupt(AVR32_PIN_PA30,x)
   说明:state是设定状态返回值,1为失败,0成功,x是工作方式,0:电平变化,1:上跳沿,2:下跳沿
2、int gpio_get_pin_interrupt_flag(unsigned int pin)
   void gpio_clear_pin_interrupt_flag(unsigned int pin)
   读或清中断标志位,读为方法二,清为方法一

五、复用功能操作
1、int gpio_enable_module(const gpio_map_t gpiomap, unsigned int size)
   int gpio_enable_module_pin(unsigned int pin, unsigned int function)
   使能相关位的复用功能
   方法四:state(自定义变量)= gpio_enable_module (gpiomap, size)
   说明:state是设定状态返回值,1为失败,0成功,Gpiomap是一个struct数组,里面定义了IO为和复用函数号0:A方式,1:B方式,2:C方式,相关 位 和复用功能在数据手册中有说明,大家可以自己参考。Size是你需用管脚的数量。
   gpio_enable_module_pin是对单个操作的函数,其实如果你看源代码的话,gpio_enable_module实际是对gpio_enable_module_pin进行循环操作。

2、void gpio_enable_gpio(const gpio_map_t gpiomap, unsigned int size)
   void gpio_enable_gpio_pin(unsigned int pin)
   使能相关位的GPIO功能
   方法同方法四,没有了返回状态位。

啰里啰唆那么多,现在开始实战!

以下是测试程序:
#include "compiler.h"
#include "gpio.h"
#include "board.h"

void delay_us(int time)//延时函数
     {
         for(;time>1;time--);
         }
         
int main(void)
{
  gpio_enable_pin_glitch_filter(AVR32_PIN_PX16); //按键输入消抖
  gpio_enable_pin_glitch_filter(AVR32_PIN_PX19); //按键输入消抖
  gpio_enable_pin_glitch_filter(AVR32_PIN_PX22); //按键输入消抖
  while (1)
  {
            delay_us(2000); //延时
      if (gpio_get_pin_value(AVR32_PIN_PX16) == 0)
        gpio_clr_gpio_pin(AVR32_PIN_PB27); //按键0,LED0亮
      else if(gpio_get_pin_value(AVR32_PIN_PX19) == 0)
        gpio_tgl_gpio_pin(AVR32_PIN_PB27); //按键1,LED0翻转状态
      else if(gpio_get_pin_value(AVR32_PIN_PX22) == 0)
              gpio_set_gpio_pin(AVR32_PIN_PB27); //按键1,LED1灭
  }

运行结果和我的程序一致,而且滤波器的作用比较明显,如果不加滤波器的话,按键1按下时,翻转状态抖得比较厉害,赞一个!

出0入0汤圆

 楼主| 发表于 2008-1-28 16:57:16 | 显示全部楼层
马老师在吗?听闻您正在写AVR32的书籍,能否帮我看一下有否差错……以免误人子弟……

出0入0汤圆

 楼主| 发表于 2008-1-28 20:05:43 | 显示全部楼层
呀,这个帖子也没人看啊?是不是我写得太晦涩了????

出0入0汤圆

发表于 2008-1-29 09:29:16 | 显示全部楼层
没硬件环境

出0入0汤圆

发表于 2008-2-25 10:33:55 | 显示全部楼层
好资料,希望有更多的作品诞生!

出0入20汤圆

发表于 2008-2-25 11:25:16 | 显示全部楼层
1

//-----------------------------------------------------------------------------------------------------
这个就是配套的硬件环境.

出0入0汤圆

发表于 2008-3-2 23:24:38 | 显示全部楼层
恭喜下先。自问自答大概要保持一端时间了没环境只能自己创造了
头像被屏蔽

出0入0汤圆

发表于 2008-3-2 23:28:49 | 显示全部楼层
现在已经开始动手创造了  ....

出0入0汤圆

发表于 2008-3-3 08:27:55 | 显示全部楼层
顶。。。。。
要是有便宜的硬件环境就好了。。。

出0入0汤圆

发表于 2008-3-3 11:52:16 | 显示全部楼层
那是国外的价格没什么意义的,要真对价格关注,还是问中国的代理吧.

出0入0汤圆

发表于 2008-3-3 11:53:52 | 显示全部楼层
UC3和他的SAM7系列价格差不多,至于内带Flash的MCU,贵是很正常的,所以我们选的是时候就选个同类型Flash最小的,价格肯定便宜,要大容量Flash,那就外扩啊,性价比不是一个档次.

出0入0汤圆

发表于 2008-3-7 21:19:33 | 显示全部楼层
价格应该在500以下就好,不知道应用资料丰不丰富

出0入0汤圆

 楼主| 发表于 2008-3-7 22:11:37 | 显示全部楼层
【13楼】 lixun00 音乐虫子
正在努力,会给大家惊喜地!!

出0入0汤圆

发表于 2008-3-13 11:06:58 | 显示全部楼层
关注!

出0入0汤圆

 楼主| 发表于 2008-3-18 13:32:00 | 显示全部楼层
另外,最近驱动包,更新了对GPIO的驱动,可以使用local bus功能以芯片频率全速操作IO,具体的代码分析,过段时间给出~~

出0入0汤圆

发表于 2008-3-18 14:03:44 | 显示全部楼层
hao

出0入0汤圆

发表于 2008-7-2 17:51:59 | 显示全部楼层
编译后对
#include "compiler.h"
#include "gpio.h"
#include "board.h"

报错  是不是还要从framework中添加相应的驱动,但是怎么也找不到BOARD 谁知道说一声哈

出0入0汤圆

发表于 2009-1-12 11:27:10 | 显示全部楼层
哇价格怎么会上百啊 不可能吧 那不是比sam7贵上一倍不止 啊

出0入296汤圆

发表于 2009-1-12 21:52:57 | 显示全部楼层
to 【19楼】 yxyfish  

    你说什么价格上百?AVR32 AP7系列也只要70RMB以内阿……

出0入0汤圆

发表于 2009-1-12 21:52:57 | 显示全部楼层
to 【19楼】 yxyfish  
    你说什么价格上百?AVR32 AP7系列也只要70RMB以内阿……

出0入0汤圆

发表于 2009-2-20 12:00:26 | 显示全部楼层
天价芯片

出0入0汤圆

发表于 2009-8-30 19:11:01 | 显示全部楼层
TO:kingofkings 技术火腿
OPEN UC3开发板还有现货吗?我想购买一块。

出0入0汤圆

发表于 2009-11-24 23:57:44 | 显示全部楼层
完全的初学者

这个帖子才是最有用的

没有这个帖子我不知道怎么弄起跑马灯

出0入0汤圆

发表于 2009-11-27 15:31:19 | 显示全部楼层
LZ能把Local Bus Interface那部分写出来吗?

他的功能是什么? 为什么要用内联?  以及各个API的简单翻译介绍?


出0入0汤圆

发表于 2009-11-27 15:40:42 | 显示全部楼层
void gpio_enable_gpio(const gpio_map_t gpiomap, unsigned int size)这个函数的用法我也不明白


就是gpiomap这个参数我不知道用什么   size是管脚数量?不明白~~~  
typedef struct
{
  unsigned char pin;              //!< Module pin.
  unsigned char function;         //!< Module function.
} gpio_map_t[];

pin是8位的   就是“PA”这样写?


还请各位指点一下~

出0入9汤圆

发表于 2010-4-29 14:43:57 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-5-6 23:09:44 | 显示全部楼层
非常喜欢这篇帖子,希望楼主还有新的内容呀!!!

出0入0汤圆

发表于 2010-6-15 15:02:47 | 显示全部楼层
期待更新^_^

出0入0汤圆

发表于 2010-8-21 16:35:30 | 显示全部楼层
刚开始折腾UC3,单个pin会操作了,一组pin正在头痛ing

出0入0汤圆

发表于 2011-8-20 18:15:18 | 显示全部楼层
望更新

出0入0汤圆

发表于 2011-9-14 16:18:50 | 显示全部楼层
关注

出0入0汤圆

发表于 2011-9-14 16:19:01 | 显示全部楼层
关注。。

出0入0汤圆

发表于 2013-3-9 20:37:13 | 显示全部楼层
嘿嘿,好东西。。

出0入0汤圆

发表于 2013-3-20 09:31:37 | 显示全部楼层
好东西啊

出0入0汤圆

发表于 2013-4-2 02:18:31 | 显示全部楼层
AVR32程序有无办法提取出来啊,好像加了密的。

出0入0汤圆

发表于 2013-8-13 22:26:20 来自手机 | 显示全部楼层
mark……
顶一个…
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-20 12:48

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表