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

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 2006协议栈Z-Stack的”开源“面纱
ZigBee 协议栈, Z-Stack 符合 ZigBee 2006 规范,...是安装卸载 协议栈说明文件,另外三个文件夹分别是...1)hal 文件夹为硬件平台的抽象层 2)mac 文件夹包含...
zigbee协议无线通信的实现
下面以ZIGBEE协议建立网状网络的工作流程来说明其通信...先让我们认识一下ZIGBEE2006协议栈,打开协议栈,在...HAL:硬件层目录,包含有与硬件相关的配置和驱动及...
Zigbee 协议栈 各层分析
Zigbee 协议栈 各层分析_信息与通信_工程科技_专业...需要针对节点硬件 的实际连接方式作较大的修改,涉及...说明这不是该父节点的孤儿,父节点不予处理,进 入...
ZigBee无线传感器网络的振动数据采集系统设计
该套件提供 ZigBee 开发所需的 全套软硬件,包括 ZigBee2006 协议栈,完全满足 ...集成开发环境对协议栈工程文件进 行管理,可以查看并修改整个协议栈的任意层源...
zigbee协议版本
zigbee协议版本_计算机硬件及网络_IT/计算机_专业资料...将无法和 ZigBee 2006 以后的协议栈兼容。ZigBee ...ZigBee Pro 在应用层功能部分,新增分割传输 (...
修改ZigBee路由深度及网络容量
【转】修改 ZigBee 路由深度及网络容量 在无线龙 ZigBee 开发系统 C51RF-3 系列中提供的 ZigBee2006 协议栈在未修改前 支持 5 级路由深度,每个路由器最多可...
Zigbee复习题
在 Zigbee 结构中(物理层)与硬件息 息相关; 4. 属于信息管理 API 函数的是...Zigbee 协议栈,它支持 Zigbee 和 ZigbeePRO ,并向后兼容 Zigbee2006 和 Zigbee...
zigbee协议栈
ZigBee 协议栈 TI Z-Stack 分析 ZigBee 2010-06-...且与硬件相关;NWK、APS, APL 层以及安全层 建立在...个任务设置 事件,一旦任何一个事件被设置就修改该...
协议栈开发指南
Zigbee协议栈中文说明免... 27页 1下载券 Z-stack...这些参数是栈配置的一部分,Z igBee2006 协议栈已经...nwk_globals.h 文件中将 STACK_PROFILE_ID 改在为...
zigbee硬件设计
如图 1 所示,ZigBee 协议栈的体系结构由底层硬件模块、中间协议层和高端应用层 ...传送,其最佳差分负载是(115+j180)Ω ,阻抗匹 配电路应该根据该数值进行调整...
更多相关标签: