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

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() 函数里面定义的


相关文章:
无线龙06ziggbee协议分析0
zigbee2006协议栈硬件层修... 5页 1财富值 无线龙定位内部培训资料 26页 免费...//登记 endpoint description 到 AF 要对改应用进行初始化并在 AF 进行登记, ...
基于Zigbee技术的无线传感器网络系统研究开题报告
Ti 公司开发的 Zigbee2006 协议栈开发应 用层程序...本装臵硬件部分采用 Ti 公司 cc2430 芯片,软件平台...同时具有移植方便,稍微加以修改即可应 用在实际的...
揭开ZigBee 2006协议栈Z-Stack的”开源“面纱
ZigBee 协议栈, Z-Stack 符合 ZigBee 2006 规范,...是安装卸载 协议栈说明文件,另外三个文件夹分别是...1)hal 文件夹为硬件平台的抽象层 2)mac 文件夹包含...
ZigBee2006入门_3
ZigBee协议栈中文说明 148页 1下载券 ZigBee2006入门...HAL(Hardware (H/W) Abstraction Layer):硬件层...作中无论是查询某些功能函数还是修改某些功能函数, ...
Zigbee 协议栈 各层分析
Zigbee 协议栈 各层分析_信息与通信_工程科技_专业...需要针对节点硬件 的实际连接方式作较大的修改,涉及...说明这不是该父节点的孤儿,父节点不予处理,进 入...
ZigBee2006入门_1
ZigBee2006入门_3 暂无评价 13页 免费 ZigBee2006说明书V1.20 6页 1财富值 ZigBee...具体根据板子硬件不同需要修改,如使 用本公司开发板,请参照本公司协议栈实验...
zigbee协议无线通信的实现
ZIGBEE2006协议栈为应用开发提供了程序框架,就象使用...HAL:硬件层目录,包含有与硬件相关的配置和驱动及...根据系统的需要自己编写改函数,并将函数放到应用层。...
zigbee2006中断处理
zigbee2006中断处理_信息与通信_工程科技_专业资料。关于z-stack2006的中断2009-05-14 14:14:02 | 有关 ZigBee2006 协议栈中使用硬件中断函数的问题 最近一直在...
zigbee协议版本
zigbee协议版本_计算机硬件及网络_IT/计算机_专业资料...将无法和 ZigBee 2006 以后的协议栈兼容。ZigBee ...ZigBee Pro 在应用层功能部分,新增分割传输 (...
zigbee基础硬件
zigbee基础硬件 隐藏>> 1.ZigBee 协调器 型号:CH-Z-C6911 ◎包括 CC2430 射频...◎支持底板完整的 3 电源供电系统、与 ZigBee2006 协议栈无缝连接的按键系统、...
更多相关标签: