Zigbee系列 学习笔记三(初始化程序解析)

 1 int main( void )
 2 {
 3   // Turn off interrupts
 4   osal_int_disable( INTS_ALL );
 5
 6   // Initialization for board related stuff such as LEDs
 7   HAL_BOARD_INIT();
 8
 9   // Make sure supply voltage is high enough to run
10   zmain_vdd_check();
11
12   // Initialize board I/O
13   InitBoard( OB_COLD );
14
15   // Initialze HAL drivers
16   HalDriverInit();
17
18   // Initialize NV System
19   osal_nv_init( NULL );
20
21   // Initialize the MAC
22   ZMacInit();
23
24   // Determine the extended address
25   zmain_ext_addr();
26
27 #if defined ZCL_KEY_ESTABLISH
28   // Initialize the Certicom certificate information.
29   zmain_cert_init();
30 #endif
31
32   // Initialize basic NV items
33   zgInit();
34
35 #ifndef NONWK
36   // Since the AF isn‘t a task, call it‘s initialization routine
37   afInit();
38 #endif
39
40   // Initialize the operating system
41   osal_init_system();
42
43   // Allow interrupts
44   osal_int_enable( INTS_ALL );
45
46   // Final board initialization
47   InitBoard( OB_READY );
48
49   // Display information about this device
50   zmain_dev_info();
51
52   /* Display the device info on the LCD */
53 #ifdef LCD_SUPPORTED
54   zmain_lcd_init();
55 #endif
56
57 #ifdef WDT_IN_PM1
58   /* If WDT is used, this is a good place to enable it. */
59   WatchDogEnable( WDTIMX );
60 #endif
61
62   osal_start_system(); // No Return from here
63
64   return 0;  // Shouldn‘t get here.
65 } // main()
HAL_BOARD_INIT()关于LED灯的板级初始化
 1 #define HAL_BOARD_INIT()                                          2 {                                                                 3   uint16 i;                                                       4                                                                   5   SLEEPCMD &= ~OSC_PD;                       /* turn on 16MHz RC and 32MHz XOSC */                 6   while (!(SLEEPSTA & XOSC_STB));            /* wait for 32MHz XOSC stable */                      7   asm("NOP");                                /* chip bug workaround */                             8   for (i=0; i<504; i++) asm("NOP");          /* Require 63us delay for all revs */                 9   CLKCONCMD = (CLKCONCMD_32MHZ | OSC_32KHZ); /* Select 32MHz XOSC and the source for 32K clock */ 10   while (CLKCONSTA != (CLKCONCMD_32MHZ | OSC_32KHZ)); /* Wait for the change to be effective */   11   SLEEPCMD |= OSC_PD;                        /* turn off 16MHz RC */                              12                                                                  13   /* Turn on cache prefetch mode */                              14   PREFETCH_ENABLE();                                             15                                                                  16   HAL_TURN_OFF_LED1();                                           17   LED1_DDR |= LED1_BV;                                           18   HAL_TURN_OFF_LED2();                                           19   LED2_DDR |= LED2_BV;                                           20   HAL_TURN_OFF_LED3();                                           21   LED3_DDR |= LED3_BV;                                           22                                                                  23   /* configure tristates */                                      24   P0INP |= PUSH2_BV;                                             25 }

程序解读:16~21行代码,定义了三个LED灯的IO口,分别为P1_0、P1_1、P1_4。第24行代码,定义P0_0为三态

HalDriverInit()初始化硬件层各驱动
 1 void HalDriverInit (void)
 2 {
 3   /* TIMER */
 4 #if (defined HAL_TIMER) && (HAL_TIMER == TRUE)
 5   #error "The hal timer driver module is removed."
 6 #endif
 7
 8   /* ADC */
 9 #if (defined HAL_ADC) && (HAL_ADC == TRUE)
10   HalAdcInit();
11 #endif
12
13   /* DMA */
14 #if (defined HAL_DMA) && (HAL_DMA == TRUE)
15   // Must be called before the init call to any module that uses DMA.
16   HalDmaInit();
17 #endif
18
19   /* AES */
20 #if (defined HAL_AES) && (HAL_AES == TRUE)
21   HalAesInit();
22 #endif
23
24   /* LCD */
25 #if (defined HAL_LCD) && (HAL_LCD == TRUE)
26   HalLcdInit();
27 #endif
28
29   /* LED */
30 #if (defined HAL_LED) && (HAL_LED == TRUE)
31   HalLedInit();
32 #endif
33
34   /* UART */
35 #if (defined HAL_UART) && (HAL_UART == TRUE)
36   HalUARTInit();
37 #endif
38
39   /* KEY */
40 #if (defined HAL_KEY) && (HAL_KEY == TRUE)
41   HalKeyInit();
42 #endif
43
44   /* SPI */
45 #if (defined HAL_SPI) && (HAL_SPI == TRUE)
46   HalSpiInit();
47 #endif
48
49   /* HID */
50 #if (defined HAL_HID) && (HAL_HID == TRUE)
51   usbHidInit();
52 #endif
53 }

程序解析:以上程序分别进行了,

 
时间: 2024-10-11 08:00:11

Zigbee系列 学习笔记三(初始化程序解析)的相关文章

Zigbee系列 学习笔记二(工程文件分析)

以下为转载内容,因为学习Zigbee,稍作整理了一下,希望作者不要怪罪. 一.下载ZStack-CC2530.2.5.1a 网址http://download.csdn.net/detail/thanksgining/8328925 下载后: 二.安装ZStack-CC2530.2.5.1a 安装后: Components:顾名思义这个是库文件,里面放了一些ZDO,driver,hal,zcl等库代码 Documents:这个不用说大家都知道是放TI的开发文档的,你能够把这些文档一个个看懂,你对

Zigbee系列 学习笔记一(协议栈)

IEEE802.15.4协议内容: 802.15.4,即IEEE用于低速无线个人域网(LR-WPAN)的物理层和媒体接入控制层规范.支持两种网络拓扑,即单跳星状或当通信线路超过10m时的多跳对等拓扑.但是对等拓扑的逻辑结构由网络层定义.LR-WPAN中的器件既可以使用64位IEEE地址,也可以使用在关联过程中指配的16位短地址.一个802.15.4网可以容纳最多216个器件.在这个网络中,根据设备所具有的通信能力,可以分为全功能设备(full-function device,FFD)和精简功能设

Zigbee系列 学习笔记五(信道选择)

EEE 802.15.4/ZigBee工作在工业科学医疗(ISM)频段,定义了两个工作频段,即2.4 GHz频段和868/915 MHz频段.在IEEE 802.15.4中,总共分配了27个具有3种速率的信道:在2.4 GHz频段有16个速率为250kb/s的信道,在915 MHz频段有10个40 kb/s的信道,在868 MHz频段有1个20 kb/s的信道. 这些信道的中心频率按如下定义(k为信道数): Fc=868.3MHz,(k=0) Fc=906MHz+2(k-1)MHz,(k=1,2

Zigbee系列 学习笔记四(睡眠及唤醒)

大家都知道2430有3种睡眠模式,pm2模式比较省功耗而且可以被定时唤醒:pm3模式最省电但是只能被外部中断唤醒.开启睡眠功能很简单: 首先确认/Texas Instruments/ZStack-1.4.3-1.2.1/Projects/zstack/Tools/CC2430DB目录下的f8wConfig.cfg文件中DRFD_RCVC_ALWAYS_ON定义为FALSE:然后在IAR的Options->C/C++Compiler->Preprocessor->Defined symbo

VSTO学习笔记(三) 开发Office 2010 64位COM加载项

原文:VSTO学习笔记(三) 开发Office 2010 64位COM加载项 一.加载项简介 Office提供了多种用于扩展Office应用程序功能的模式,常见的有: 1.Office 自动化程序(Automation Executables) 2.Office加载项(COM or Excel Add-In) 3.Office文档代码或模板(Code Behind an Office Document or Template) 4.Office 智能标签(Smart Tags) 本次我们将学习使

Spring Batch学习笔记三:JobRepository

此系列博客皆为学习Spring Batch时的一些笔记: Spring Batch Job在运行时有很多元数据,这些元数据一般会被保存在内存或者数据库中,由于Spring Batch在默认配置是使用HSQLDB,也就是说在Job的运行过程中,所有的元数据都被储存在内存中,在Job结束后会随着进程的结束自动消失:在这里我们推荐配置JobRepository去使用MySQL. 在这种情况下,Spring Batch在单次执行或者从一个执行到另外一个执行的时候会使用数据库去维护状态,Job执行的信息包

小猪的数据结构学习笔记(三)

小猪的数据结构学习笔记(三) 线性表之单链表 本章引言: 上一节中我们见识了第一个数据结构--线性表中的顺序表; 当你把操作的代码自己写几遍就会有点感觉了,如果现在让你写顺序表的 插入算法,你能够想出大概的代码么?如果可以,那么你就可以进入新的章节了; 否则,还是回头看看吧!在本节,我们将迎来线性表的链式表示--单链表 单链表和顺序表有什么优势和劣势呢?单链表的头插法和尾插法有什么不同呢? 请大家跟随笔者的脚步来解析线性表中的单链表把! 本节学习路线图 路线图解析: ①先要理解顺序表和单链表各自

NFC学习笔记——三(在windows操作系统上安装libnfc)

本篇翻译文章: 这篇文章主要是说明如何在windows操作系统上安装.配置和使用libnfc. 一.基本信息 1.操作系统: Windows Vista Home Premium SP 2 2.硬件信息: System: Dell Inspiron 1720 Processor: Intel Core 2 Duo CPU T9300 @ 2.5GHz 2.5GHz System type: 32-bit Operating System 3.所需软件: 在windows操作系统上安装软件需要下列

Asp.Net Identity学习笔记+MVC5默认项目解析_授权&Claim

Identity学习笔记 Asp.Net Identity学习笔记+MVC5默认项目解析_基础用法 Asp.Net Identity学习笔记+MVC5默认项目解析_授权&Claim Identity学习笔记授权以角色授权IdentityRoleRoleManager基于声明的(Claims)IPrincipalIIdentityCalimsIdentityClaim用户登入用户授权其他细节Claim Type命名空间 授权 最常用的授权就是给Controller或Action打上[Authori