查看: 943|回复: 0

【SAM R21 Xplained】无线部分初探

[复制链接]
  • TA的每日心情
    开心
    2017-7-4 13:51
  • 签到天数: 347 天

    连续签到: 1 天

    [LV.8]以坛为家I

    发表于 2015-3-10 15:09:32 | 显示全部楼层 |阅读模式
    分享到:
    打算从WsnDemo这个简单点的工程入手展开研究。

    具体步骤就不说了,跟其他的工程一样,唯一比较让我惊讶的,这个工程编译时间好长呀

    不停的编译,持续了好一会,我都要开始怀疑是不是哪出问题了,编译成功了

    两块板子烧写程序的区别主要在config.h文件
    #if APP_ADDR == 0#define APP_CAPTION     "Coordinator"#define APP_NODE_TYPE   0#define APP_COORDINATOR 1#define APP_ROUTER      0#define APP_ENDDEVICE   0#elif APP_ADDR < 0x8000#define APP_CAPTION     "Router"#define APP_NODE_TYPE   1#define APP_COORDINATOR 0#define APP_ROUTER      1#define APP_ENDDEVICE   0#else#define APP_CAPTION     "End Device"#define APP_NODE_TYPE   2#define APP_COORDINATOR 0#define APP_ROUTER      0#define APP_ENDDEVICE   1#endif由这段代码可知判断板子所属的角色主要是通过 设定的APP_ADDR,这在config.h的开头部分修改
    #define APP_ADDR                0x0000#define APP_PANID               0x1234#define APP_SENDING_INTERVAL    2000#define APP_ENDPOINT            1#define APP_SECURITY_KEY        "TestSecurityKey0"#define APP_ADDR                0x9000#define APP_PANID               0x1234#define APP_SENDING_INTERVAL    2000#define APP_ENDPOINT            1#define APP_SECURITY_KEY        "TestSecurityKey0"我就改了下APP_ADDR,然后分别下载程序到两块板子中。两块板子分别接在笔记本的两个usb端口上。
    这现象怎么说呢,作为End Device的板子的led每闪一次,作为Coordinator板子的led状态就改变一次,可以看出End Device板子控制Coordinator板子led的亮灭。现象还是很明显。
    看下具体程序
    int main(void){        #if SAMD || SAMR21        system_init();        delay_init();        #else        sysclk_init();        board_init();        #endif        irq_initialize_vectors();        wsndemo_main();}<br>这是主函数,总体上看还是比较清晰的。
    个人觉得SAMR21的判断就蛮有特色的,其他厂家的芯片上就没见过这种表示,一步步切进去看了下
    /** SAMR21 Family */#define SAMR21 (SAMR21G || SAMR21E)/** * \name SAMR21 series * @{ */#define SAMR21G ( \                SAM_PART_IS_DEFINED(SAMR21G16A) || \                SAM_PART_IS_DEFINED(SAMR21G17A) || \                SAM_PART_IS_DEFINED(SAMR21G18A) \        )#define SAMR21E ( \                SAM_PART_IS_DEFINED(SAMR21E16A) || \                SAM_PART_IS_DEFINED(SAMR21E17A) || \                SAM_PART_IS_DEFINED(SAMR21E18A) \        )/** * \name Convenience macros for part checking * @{ *//* ! Check GCC and IAR part definition for 8-bit AVR */#define AVR8_PART_IS_DEFINED(part) \/* ! Check GCC and IAR part definition for 32-bit AVR */#define AVR32_PART_IS_DEFINED(part) \        (defined(__AT32 ## part ## __) || defined(__AVR32_ ## part ## __))/* ! Check GCC and IAR part definition for SAM */#define SAM_PART_IS_DEFINED(part) (defined(__ ## part ## __))/** @} */切到这就切不下去了,似乎是GCC和IAR编译器关于SAM的一种用法,具体的原理等我有时间研究下在附上。
    扯远了,再回到主函数
    system_init();        delay_init();这是常见的初始化操作,不用说了
    irq_initialize_vectors();这个函数是干嘛的?
    /** * \brief Initialize interrupt vectors * * For NVIC the interrupt vectors are put in vector table. So nothing * to do to initialize them, except defined the vector function with * right name. * * This must be called prior to \ref irq_register_handler. */#  define irq_initialize_vectors()   \        do {                             \        } while(0)有这边注释可知是中断这边得有的
    int wsndemo_main(void){        SYS_Init();#if APP_ENDDEVICE        sm_init();#endif#if APP_COORDINATOR        sio2host_init();#endif        cpu_irq_enable();        while (1) {                SYS_TaskHandler();                APP_TaskHandler();        }}这便是无线通信的精华了,得好好研究研究。
    不早了,明天再重点研究这块的使用,大家晚安啦!
    最后,感谢EEWORLD提供的开发样板,给了我这次使用机会,非常感谢!
    回复

    使用道具 举报

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

    本版积分规则

    关闭

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

    手机版|小黑屋|与非网

    GMT+8, 2024-4-26 14:17 , Processed in 0.180064 second(s), 18 queries , MemCache On.

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

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.