查看: 1207|回复: 0

[SAMG53] [体验篇五] ATSAMG53 Xplained Pro LED为我用

[复制链接]

80

主题

0

好友

4804

积分

状元

Rank: 6Rank: 6

  • TA的每日心情
    无聊
    1 小时前
  • 签到天数: 513 天

    [LV.9]以坛为家II

    发表于 2014-5-24 09:42:35 |显示全部楼层
    SAMG53-XPRO 由于初接触学习,一步一步记录下自己的过程,以方便与大家一起分享,希望大家能多拍砖,共同进展。
    [体验篇一]ATSAMG53 Xplained Pro 开箱验货
    [体验篇二] ATSAMG53 Xplained Pro 获取资料
    http://blog.sina.com.cn/s/blog_7e7fa4c80101k5v9.html
    [体验篇三] ATSAMG53 Xplained Pro LED控制
    http://blog.sina.com.cn/s/blog_7e7fa4c80101k6kw.html
    [体验篇四] ATSAMG53 Xplained Pro 分析LED控制
    http://blog.sina.com.cn/s/blog_7e7fa4c80101k9ef.html
           
    图片1.png
    从上篇分析到
    对于LED的操作以下这几函数即可满足功能
         ioport_set_pin_dir(LED_0_PIN, IOPORT_DIR_OUTPUT); //设置为输出,默认为浮空
    ioport_set_pin_level(LED_0_PIN, IOPORT_PIN_LEVEL_HIGH);//输出高电平
    ioport_set_pin_level(LED_0_PIN, IOPORT_PIN_LEVEL_LOW);//输出低电平
    gpio_toggle_pin(LED0_GPIO);// 电平返转
    ATSAMG53 Xplained Pro 板上还有一个按键 SW0 ,而对于这个按键读作的代码如下:
            ioport_set_pin_dir(BUTTON_0_PIN, IOPORT_DIR_INPUT); //设置为输入
            ioport_set_pin_mode(BUTTON_0_PIN, IOPORT_MODE_PULLUP);//设置上拉电阻
    ioport_get_pin_level(BUTTON_0_PIN); //读取端口即
    //由于设置上拉电阻,即初始状态为高,当读取为低时,即为按键按下
    if( ioport_get_pin_level(BUTTON_0_PIN)== SW0_ACTIVE)
    {
    .... 为按键按下
    }
    把原来的代码修改,按下去LED反转
    代码如下:
    #include <board.h>
    #include <delay.h>
    #include <gpio.h>
    #define SW0_GPIO       (PIO_PA2_IDX)
    int main(void)
    {       
            sysclk_init();
            board_init();
        delay_init(sysclk_get_cpu_hz());
            while (true) {
                    if( gpio_pin_is_low(SW0_GPIO))
                    {
                            gpio_toggle_pin(LED0_GPIO);
                            delay_ms(500);
                    }
            }
    }
    或者
    #include <board.h>
    #include <delay.h>
    //#include <gpio.h>
    #include <ioport.h>
    int main(void)
    {       
            sysclk_init();
            board_init();
        delay_init(sysclk_get_cpu_hz());
            while (true) {
                    if( ioport_get_pin_level(BUTTON_0_PIN) == BUTTON_0_ACTIVE)
                    {
                            ioport_toggle_pin_level(LED_0_PIN);
                            delay_ms(500);
                    }
            }
    }
    两个代码都是一样的效果,不同的是PIO的调用的代码不同
    ioport_xxxx   对应着 ioport.h
    gpio_xxx                对应着 gpio.h -->sam_gpio.h
    gpio.h 的函数,分别如下:
    gpio_pin_is_low(io_id)
    gpio_pin_is_high(io_id)
    gpio_set_pin_high(io_id)
    gpio_set_pin_low(io_id)
    gpio_toggle_pin(io_id)
    gpio_configure_pin(io_id,io_flags)
    gpio_configure_group(port_id,port_mask,io_flags)
    gpio_set_pin_group_high(port_id,mask)
    gpio_set_pin_group_low(port_id,mask)
    gpio_toggle_pin_group(port_id,mask)
    io_id  --> Pio indexes   --> samg53n19.h    PIO_PA0_IDX   PIO_PB0_IDX 等等
    port_id--> samg53n19.h  --> PIOA  PIOB
    一个感觉,头晕眼花,怎么两个samg53n19.h 但内容即不一样,仔细,看一下路径
    C:\Program Files\Atmel\Atmel Toolchain\ARM GCC\Native\4.7.1416\CMSIS_Atmel\Device\ATMEL\samg53\include\pio\samg53n19.h
    工程文件夹\DELAY_EXAMPLE1\DELAY_EXAMPLE1\src\ASF\sam\utils\cmsis\samg\samg53\include\samg53n19.h
    [体验篇四] ATSAMG53 Xplained Pro 分析LED控制 中提到PIO的操作也这样的操作
    static inline void ioport_disable_pin(ioport_pin_t pin);
    static inline void ioport_disable_port(ioport_port_t port,ioport_port_mask_t mask);
    static inline void ioport_enable_pin(ioport_pin_t pin);
    static inline void ioport_enable_port(ioport_port_t port,ioport_port_mask_t mask);
    static inline bool ioport_get_pin_level(ioport_pin_t pin);
    static inline ioport_port_mask_t ioport_get_port_level(ioport_pin_t port,ioport_port_mask_t mask);
    static inline void ioport_init(void);
    static inline ioport_port_mask_t ioport_pin_to_mask(ioport_pin_t pin);
    static inline ioport_port_t ioport_pin_to_port_id(ioport_pin_t pin);
    static inline void ioport_reset_pin_mode(ioport_pin_t pin);
    static inline void ioport_reset_port_mode(ioport_port_t port,ioport_port_mask_t mask);
    static inline void ioport_set_pin_dir(ioport_pin_t pin,enum ioport_direction dir);
    static inline void ioport_set_pin_level(ioport_pin_t pin, bool level);
    static inline void ioport_set_pin_mode(ioport_pin_t pin, ioport_mode_t mode);
    static inline void ioport_set_pin_sense_mode(ioport_pin_t pin,enum ioport_sense pin_sense);
    static inline void ioport_set_port_dir(ioport_port_t port,ioport_port_mask_t mask, enum ioport_direction dir);
    static inline void ioport_set_port_level(ioport_port_t port,ioport_port_mask_t mask, ioport_port_mask_t level);
    static inline void ioport_set_port_mode(ioport_port_t port,ioport_port_mask_t mask, ioport_mode_t mode);
    static inline void ioport_set_port_sense_mode(ioport_port_t port,ioport_port_mask_t mask,enum ioport_sense pin_sense);
    static inline void ioport_toggle_pin_level(ioport_pin_t pin);
    static inline void ioport_toggle_port_level(ioport_port_t port,ioport_port_mask_t mask);
    我都搞不清楚,为什么Atmel  PIO 同样的功能上即写两套不同的代码,真的不明白。但我决定不管它,以后默认统一使用ioport_xxxx   对应着 ioport.h

    ==============================================================================================
    可能转载的原因,有些图片打不开,如果有需要请移步以下地址,不想重新上传图片,时间有限不便之处请原谅!同时请大家多拍砖,可以到我博客去观看!
    http://blog.sina.com.cn/s/blog_7e7fa4c80101kbu1.html
    ==============================================================================================
    [体验篇一]ATSAMG53 Xplained Pro 开箱验货
    [体验篇二] ATSAMG53 Xplained Pro 获取资料
    http://blog.sina.com.cn/s/blog_7e7fa4c80101k5v9.html
    [体验篇三] ATSAMG53 Xplained Pro LED控制
    http://blog.sina.com.cn/s/blog_7e7fa4c80101k6kw.html
    [体验篇四] ATSAMG53 Xplained Pro 分析LED控制
    http://blog.sina.com.cn/s/blog_7e7fa4c80101k9ef.html



    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    关闭

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


    手机版|爱板网 |网站地图  

    GMT+8, 2016-12-3 21:47 , Processed in 0.114850 second(s), 11 queries , Memcache On.

    苏公网安备 32059002001056号

    Powered by Discuz!

    回顶部