当前位置:首页 >> 信息与通信 >>

zigbee2006协议栈硬件层修改说明


想了好久,今天开始把硬件层修改的工程记下来: 一、 首先对 LED 灯对应端口进行修改 在 hal_led.h 文件夹中: 1)定义了用于判定相应 led 的对应位 #define HAL_LED_1 0x01 #define HAL_LED_2 0x02 #define HAL_LED_3 0x04 #define HAL_LED_4 0x08 #define HAL_LED_

ALL (HAL_LED_1 | HAL_LED_2 | HAL_LED_3 | HAL_LED_4) 在天运的板子中只用 3 个 led 灯(第 4 个是 电源指示灯) ,所以修改如下: #define HAL_LED_1 0x01 #define HAL_LED_2 0x02 #define HAL_LED_3 0x04 #define HAL_LED_ALL (HAL_LED_1 | HAL_LED_2 | HAL_LED_3 ) 继续往下看,看到了几个全局变量的定义: #define HAL_LED_DEFAULT_MAX_LEDS 4 #define HAL_LED_DEFAULT_DUTY_CYCLE 5 #define HAL_LED_DEFAULT_FLASH_COUNT 50 #define HAL_LED_DEFAULT_FLASH_TIME 1000 将 第一行的参数改为 3

//最多的 led 灯的个数 //闪烁次数计数 //1ms 的闪烁周期

接着我们看看,在什么地方对 LED 对应的 IO 口进行了定义 在 hal_board_cfg.h 文件中: 首先定义了系统 cpu 时钟 :32MHz 在 对 LED 的配置中有 /* -----------------------------------------------------------------------------------------------* LED Configuration * -----------------------------------------------------------------------------------------------#define HAL_NUM_LEDS 2 // LED 灯的个数 #define HAL_LED_BLINK_DELAY() st( { volatile uint32 i; for (i=0; i<0x5800; i++) { }; } ) //led 灯的闪烁延时 将第一行改为 3 个(对应 天运的某个模块) /* 1 - Green */ #define LED1_BV BV(0) // 左移 0 位 #define LED1_SBIT P1_0 // 端口 P1_0 #define LED1_DDR P1DIR //方向寄存器,这个地方还没有对 IO 进行完全的分配 #define LED1_POLARITY ACTIVE_LOW //低电平有效这几行程序, 是对 每个 led 灯 的对应 IO 口分配,以此为例,说明。

接下来是对 按键进行配置前的定义: /* -----------------------------------------------------------------------------------------------* Push Button Configuration * -----------------------------------------------------------------------------------------------*/ #define ACTIVE_LOW ! #define ACTIVE_HIGH !! /* double negation forces result to be '1' */ /* S1 */ #define PUSH1_BV #define PUSH1_SBIT #define PUSH1_POLARITY

BV(1) P0_1 ACTIVE_LOW

/* Joystick Center Press */ #define PUSH2_BV BV(5) #define PUSH2_SBIT P0_5 #define PUSH2_POLARITY ACTIVE_HIGH 由于没有 joystick 这个控制杆,所以我们将第二个的定义屏蔽,添加一个按键的定义,结 果如下: /* S1 */ #define PUSH1_BV BV(1) #define PUSH1_SBIT P0_1 #define PUSH1_POLARITY ACTIVE_LOW /* S2*/ #define PUSH2_BV BV(0) #define PUSH2_SBIT P0_0 #define PUSH2_POLARITY ACTIVE_LOW 这段的修改时我不能确定的地方,如果程序最后没有实现,则可以返回这里修改 对函数 hal_board_init() 进行修改,led 灯的数量改为 3 个 对于/* ----------- Push Buttons ---------- */一栏,不做修改 /* ----------- LED's ---------- */一栏修改为: /* ----------- LED's ---------- */对 led 灯的各个状态进行修改,注意:因为 无线龙模块是将 4 个灯连接的是两个 IO 口,相当于只用了两个 LED 灯,所以这里需要修改为 3 个 LED 灯 #define HAL_TURN_OFF_LED1() st( LED1_SBIT = LED1_POLARITY (0); ) #define HAL_TURN_OFF_LED2() st( LED2_SBIT = LED2_POLARITY (0); ) #define HAL_TURN_OFF_LED3() st( LED3_SBIT = LED3_POLARITY (0); ) // #define HAL_TURN_OFF_LED4() HAL_TURN_OFF_LED1() #define HAL_TURN_ON_LED1() #define HAL_TURN_ON_LED2() #define HAL_TURN_ON_LED3() st( LED1_SBIT = LED1_POLARITY (1); ) st( LED2_SBIT = LED2_POLARITY (1); ) st( LED3_SBIT = LED3_POLARITY (1); )

//#define HAL_TURN_ON_LED4() #define HAL_TOGGLE_LED1() { LED1_SBIT = 1;} ) #define HAL_TOGGLE_LED2() { LED2_SBIT = 1;} ) #define HAL_TOGGLE_LED3() { LED3_SBIT = 1;} ) //#define HAL_TOGGLE_LED4() #define HAL_STATE_LED1() #define HAL_STATE_LED2() #define HAL_STATE_LED3() // #define HAL_STATE_LED4()

HAL_TURN_ON_LED1() st( if (LED1_SBIT) { LED1_SBIT = 0; } else st( if (LED2_SBIT) { LED2_SBIT = 0; } else st( if (LED3_SBIT) { LED3_SBIT = 0; } else HAL_TOGGLE_LED1() (LED1_POLARITY (LED1_SBIT)) (LED2_POLARITY (LED2_SBIT)) (LED3_POLARITY (LED3_SBIT)) HAL_STATE_LED1()

此时对 hal_board_cfg.h 文件的修改完毕, 本文档的后面是对硬件的各个功能的开启做声明, 如:开启 uart0 ,启用 DMA 方式,led、key 等等 由于修改的过程中,对 HAL_LED_4 进行了屏蔽,所有这个时候编译会出现错误,看看错 误 : Error[Pe223]: function "HAL_TURN_OFF_LED4" declared implicitly C:\Texas Instruments\ZStack-1.4.3-1.2.1\Components\hal\common\hal_assert.c 121 等等有十几处,我们修改,通过查找 led4 进行修改,简单方法就是屏蔽掉,在修改的过程 中可能会屏蔽掉 DB 板中的定义,这个个人认为我们使用 EB 板,DB 的也屏蔽掉。 或者你不需修改多余的部分,你就直接点击 带有 错误标志的行,进行屏蔽。编译之后继续 改错。知道没有错误为止(不要害怕,细心一定就可以了) 注意:要在 option 选项中添加一些:Defined symbols,如:MT_TASK

2、接下来,开始修改按键了,继续: 、接下来,开始修改按键了,继续:
首先看一看 hal_key.h 这个文件,其中 对比 /* Switches (keys) */ 和 /* Joystick */ 下定义的按键号,将 switches 中不同的按键提 取出来,分别对应 S1 、S2 #define HAL_KEY_SW_5 0x04 #define HAL_KEY_SW_6 0x20 // Joystick center,使用这个作为 S2 按键 好一些 // Button S1 if available 其他的定义先不管,以便以后扩展

接着看 hal_key.c 文件 修改 hal_board_cc2430eb 定义下的参数 S1 对应 P0_1 ,S2 对应 P0_0 修改如下: #if defined (HAL_BOARD_CC2430EB) || defined (HAL_BOARD_CC2430BB) #define HAL_KEY_SW_6_ENABLE #define HAL_KEY_SW_6_PORT P0 /* Port location of SW1 */

#define HAL_KEY_SW_6_BIT */

HAL_KEY_BIT0

/* Bit location of SW1

#define HAL_KEY_SW_6_SEL P0SEL /* Port Select Register for SW1 */ #define HAL_KEY_SW_6_DIR P0DIR /* Port Direction Register for SW1 */ #define HAL_KEY_SW_6_IEN IEN1 /* Interrupt Enable Register for SW1 */ #define HAL_KEY_SW_6_IENBIT HAL_KEY_BIT5 /* Interrupt Enable bit for SW1 */ #define HAL_KEY_SW_6_EDGE HAL_KEY_RISING_EDGE /* Type of interrupt for SW1 */ #define HAL_KEY_SW_6_EDGEBIT HAL_KEY_BIT0 /* EdgeType enable bit SW1 */ #define HAL_KEY_SW_6_ICTL PICTL /* Port Interrupt Control for SW1 */ #define HAL_KEY_SW_6_ICTLBIT HAL_KEY_BIT3 /* Interrupt enable bit for SW1 */ #define HAL_KEY_SW_6_PXIFG P0IFG /* Port Interrupt Flag for SW1 */ #define HAL_KEY_P0INT_LOW_USED HAL_KEY_SW_6_BIT enabled/disabled as group of high or low nibble */ #endif #if defined (HAL_BOARD_CC2430BB) #define HAL_KEY_POINT_HIGH_USED 0 #endif #if defined (HAL_BOARD_CC2430EB) #define HAL_KEY_JOYSTICK_ENABLE #define HAL_KEY_JOY_CHN HAL_ADC_CHANNEL_6 #define HAL_KEY_SW_5_ENABLE #define HAL_KEY_SW_5_PORT */ #define HAL_KEY_SW_5_BIT */ #define HAL_KEY_SW_5_SEL for SW5 */ #define HAL_KEY_SW_5_DIR Register for SW5 */ #define HAL_KEY_SW_5_INP Register for SW5 */ P0SEL P0DIR P0INP /* Port Select Register /* Port Direction /* Port Input Mode HAL_KEY_BIT1 /* Bit location of SW5 /* P0 can only be

P0

/* Port location of SW5

#define HAL_KEY_SW_5_IEN IEN1 /* Interrupt Enable Register for SW5 */ #define HAL_KEY_SW_5_IENBIT HAL_KEY_BIT5 /* Interrupt Enable bit for SW5 */ #define HAL_KEY_SW_5_EDGE HAL_KEY_RISING_EDGE /* Type of interrupt for SW5 */ #define HAL_KEY_SW_5_EDGEBIT HAL_KEY_BIT0 /* EdgeType enable bit SW5 */ #define HAL_KEY_SW_5_ICTL PICTL /* Port Interrupt Control for SW5 */ #define HAL_KEY_SW_5_ICTLBIT HAL_KEY_BIT3 /* Interrupt enable bit for SW5 */ #define HAL_KEY_SW_5_PXIFG P0IFG /* Port Interrupt Flag for SW5 */ #define HAL_KEY_POINT_HIGH_USED HAL_KEY_SW_5_BIT enabled/disabled as group of high or low nibble */ 如此,则 key 按键的改好了,修改为: HAL_KEY_SW_6 对应与 P0_0 ,为按键 1 HAL_KEY_SW_5 对应与 P0_1,为按键 2 /* P0 can only be

程序开始是,led1 会闪烁的原因在:ZMAIN.C 文档的 zmain_ext_addr() 里面定义的哦 Led3 常量的原因是在 ZDO_NETWORKFORMATIONCONFIRMCB() 函数里面定义的


相关文章:
zigbee协议栈各层分析
zigbee协议栈各层分析_信息与通信_工程科技_专业资料。一 PHY:物理层通过射频固件和硬件提供 MAC 层与物理无线信道之间的接口。 两个物理层:一 868/915MHZ 频带...
无线龙06ziggbee协议分析0
zigbee2006协议栈硬件层修... 5页 1财富值 无线龙定位内部培训资料 26页 免费...//登记 endpoint description 到 AF 要对改应用进行初始化并在 AF 进行登记, ...
Zigbee 协议栈 各层分析
Zigbee 协议栈 各层分析_信息与通信_工程科技_专业...需要针对节点硬件 的实际连接方式作较大的修改,涉及...说明这不是该父节点的孤儿,父节点不予处理,进 入...
zigbee Z-Stack协议栈构架
ZMain:主函数目录,包括入口函数 main()及硬件配置...项目、添加自己的应用层任务及处理函数需要修改什么...ZigBee2006 协议栈 ZStack-1.4.2 文件目录及说明如...
Zigbee技术规范与协议栈分析
Zigbee技术规范与协议栈分析_信息与通信_工程科技_专业...2006 协议栈的解读, 对协议程序的运行过程提供一种...1.1 物理层服务规范 物理层通过射频固件和硬件提供...
ZigBee2006 OSAL函数说明
程序摘自无限龙 ZigBee06 协议栈,转载必须保证文章的完整性并标明出处, 请尊重...常用函数说明 27页 2下载券 zigbee2006协议栈硬件层... 5页 1下载券喜欢...
zigbee2006中断处理
zigbee2006中断处理_信息与通信_工程科技_专业资料。关于z-stack2006的中断2009-05-14 14:14:02 | 有关 ZigBee2006 协议栈中使用硬件中断函数的问题 最近一直在...
ZigBee2006入门_3
ZigBee协议栈中文说明 148页 1下载券 ZigBee2006入门...HAL(Hardware (H/W) Abstraction Layer):硬件层...作中无论是查询某些功能函数还是修改某些功能函数, ...
从Zigbee协议栈底层添加自己的按键配置
注意:添加自己的按键时尽量不要修改协议栈里面的按键...文档贡献者 353356352 贡献于2016-06-15 ...ZigBee协议栈中文说明 148页 5下载券 zigbee协议栈...
zigbee硬件设计
1 ZigBee 的结构体系 相对于其他无线通信标准,ZigBee 协议栈显得更为紧凑和简单。如图 1 所示,ZigBee 协议栈的体系结构由底层硬件模块、中间协议层和高端应用层 3...
更多相关标签:
zigbee协议栈 | zigbee协议栈详解 | 开源zigbee3.0协议栈 | zigbee协议栈网络管理 | zigbee协议栈有哪些 | zigbee3.0协议栈 | ember zigbee协议栈 | zigbee开源协议栈 |