查看: 5039|回复: 9

对GPIO的控制

[复制链接]
  • TA的每日心情
    郁闷
    2013-1-24 12:15
  • 签到天数: 9 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    发表于 2013-1-17 19:09:29 | 显示全部楼层 |阅读模式
    分享到:
    本帖最后由 妈妈跟我说名字 于 2013-1-17 19:13 编辑

    库文件很庞大,函数很多,宏定义也很多,要弄清楚这些很难,所以,可以重例子入手分析之间的关系。
    ATMEl Studio 自带的例程中可以找到一些关于开发板SAM4S的一些例子。
    第一步:New Example Project From ASF,然后按下面选择
    clip_image002.jpg
    点开红线里面的选项,发现有很多SAM4s的例子,选择
    Commo Delay Service Example,然后建立好工程。
    delay_example.c文件中有如下代码。
    int main(void)
    {
             sysclk_init();
             board_init();

             while (true) {
                       for (int i = 0; i < 5; i++) {
                                gpio_toggle_pin(LED0_GPIO);
                                delay_s(1);
                       }

                       for (int i = 0; i < 50; i++) {
                                gpio_toggle_pin(LED0_GPIO);
                                delay_ms(100);
                       }

                       for (int i = 0; i < 5000; i++) {
                                gpio_toggle_pin(LED0_GPIO);
                                delay_us(100);
                       }
             }
    }
    找到函数,gpio_toggle_pin(LED0_GPIO);的出处;可以找到如下代码
    #define gpio_toggle_pin(io_id) \
             pio_toggle_pin(io_id)
    然后找到 pio_toggle_pin(io_id)  函数。如下
    void pio_toggle_pin(uint32_t ul_pin)
    {
             Pio *p_pio = (Pio *)((uint32_t)PIOA + (PIO_DELTA * (ul_pin >> 5)));
             if (p_pio->PIO_ODSR & (1 << (ul_pin & 0x1F))) {
                       // Value to be driven on the I/O line: 0.
                       p_pio->PIO_CODR = 1 << (ul_pin & 0x1F);
             } else {
                       // Value to be driven on the I/O line: 1.
                       p_pio->PIO_SODR = 1 << (ul_pin & 0x1F);
             }
    }
    可以找到PIO_ODSR等的定义,明白代表什么寄存器。
    第一句是定义一个Pio的类,可以找到这个类的定义。
    这样,对GPIO的操作基本上就可以自己利用库文件来完成了。也可以不用API函数,自己来完成,加了如下代码来完成对LED1灯的点亮。

    int main(void)
    {
             sysclk_init();
             board_init();
             Pio *p_pio1 = (Pio *)((uint32_t)PIOA + (PIO_DELTA * (LED1_GPIO >> 5))); //自己加的。
             p_pio1->PIO_CODR = 1 << (LED1_GPIO& 0x1F);//自己加的。

             while (true) {
                       for (int i = 0; i < 5; i++) {
                                gpio_toggle_pin(LED0_GPIO);
                                delay_s(1);
                       }

                       for (int i = 0; i < 50; i++) {
                                gpio_toggle_pin(LED0_GPIO);
                                delay_ms(100);
                       }

                       for (int i = 0; i < 5000; i++) {
                                gpio_toggle_pin(LED0_GPIO);
                                delay_us(100);
                       }
             }
    }

    然后下载到板子上运行就可以了。
    看到LED1灯亮了有木有一种愉悦的感觉。还依稀记得当年学单片机的情形,点亮第一颗LED灯激动的心情。
    很简单,但是分析了好几天,主要是库文件太多,还有大量的宏定义,搞得一头雾水,一开始不知道有自带的例程,后来发现了就看了例程分析了下,清晰多了。
    这种方法大家可以借鉴下,我看了下,总共有60多个例程,只要能都搞清楚了,我相信这款芯片也就差不多了。当年学MSP430的时候也是这样学的。
    在用例程的时候发现一些问题。
    一开始我新建的例程是像下面这样建立的
    79]HUO~ETY{A%{%)ONGKS6L.jpg

    找到自己的板子,然后选择,但是当你工程建立好了,一编译就会出现很多错误,我找了一天的错误原因,本人水平有限,这个毕竟是ATMEl的工程师写的东西,我不敢妄下定论。
    I4F{3]XB89NF[44MM_AEFSD.jpg
    如果有高手找出来了希望能跟告诉我一下,共同进步嘛。
    然后说说怎么将程序下载到板子上的问题。
    有一种简单的方法就是用atmel studio ,很方便,可以自己在线调试,也可以直接下载到板子上,这个可以自己尝试,前面也有人发过了帖子。
    还有就是用j-link ARM下载,先要打开对应的配置好的工程,对应的工程可以在安装目录里面找到。

    9PXRIGV5OSLBL_MV1BHAOJP.jpg

    找到对应的工程打开,然后Fiel-open data file 打开你编译好的文件,hexbin好像都可以吧,然后target – connect然后auto就可以了,相信这个大家都用过我就不再多说了。
    还有一种就是利用SAM-BA,这个其实也挺方便的,而且有自带帮助文档,可以看看,就不在赘述了。
    放假在家,没有网,发帖不是很方便,希望大家多支持,这几天去搞一个月的无线网,这样就方便学习,发帖,以及跟大家的交流。

    对GPIO的控制.doc

    617 KB, 下载次数: 57

    回复

    使用道具 举报

  • TA的每日心情
    郁闷
    2013-1-24 12:15
  • 签到天数: 9 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    发表于 2013-1-17 19:17:26 | 显示全部楼层
    不好意思啊,来晚了,一开始win7系统,驱动装不上,然后后来回家了,换了系统,驱动装上了,但是家里没有开网,不能及时来分享心得,版主都催了我几次了,今天跑去开了一个月的无线网,无线网卡老贵了,240大洋就没了,还有上网资费,不过可以方便跟大家交流心得了,以后会多多发帖,发的都是自己的心得,绝对不发水贴来骗大家,那样没意思。还有请版主见谅啊!!!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2020-9-28 10:10
  • 签到天数: 1018 天

    连续签到: 1 天

    [LV.10]以坛为家III

    发表于 2013-1-17 19:39:57 | 显示全部楼层
    妈妈跟我说名字 发表于 2013-1-17 19:17
    不好意思啊,来晚了,一开始win7系统,驱动装不上,然后后来回家了,换了系统,驱动装上了,但是家里没有开 ...

    呵呵,原来这么坎坷!支持楼主~~~
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2023-1-28 16:20
  • 签到天数: 980 天

    连续签到: 1 天

    [LV.10]以坛为家III

    发表于 2013-1-17 21:43:08 | 显示全部楼层
    支持楼主~~~
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2016-6-12 21:59
  • 签到天数: 647 天

    连续签到: 1 天

    [LV.9]以坛为家II

    发表于 2013-1-17 22:39:52 | 显示全部楼层
    钦佩楼主大不畏精神啊~~
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2016-6-12 21:59
  • 签到天数: 647 天

    连续签到: 1 天

    [LV.9]以坛为家II

    发表于 2013-1-17 22:42:18 | 显示全部楼层
    xinxincaijq 发表于 2013-1-17 19:39
    呵呵,原来这么坎坷!支持楼主~~~

    xinxin  我也总算做到控制GPIO了~   ,看他们分享的不错的,来不及发帖咯~
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    郁闷
    2013-1-24 12:15
  • 签到天数: 9 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    发表于 2013-1-19 16:17:59 | 显示全部楼层
    dlyt03 发表于 2013-1-17 23:08
    楼主头像很有趣!!!

    我会告诉你这是本人么?不要在意这些细节啊亲!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2013-12-19 13:39
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]初来乍到

    发表于 2013-12-19 13:53:39 | 显示全部楼层
    有点倒霉啊。。。。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2013-12-19 13:39
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]初来乍到

    发表于 2013-12-19 13:54:27 | 显示全部楼层
    看来at需要提供多种系统支持啊。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-12-26 22:31
  • 签到天数: 102 天

    连续签到: 1 天

    [LV.6]常住居民II

    发表于 2014-8-5 09:04:02 | 显示全部楼层
    写的很详细啊
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

    站长推荐上一条 /5 下一条

    手机版|小黑屋|与非网

    GMT+8, 2024-12-22 18:09 , Processed in 0.213312 second(s), 33 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.