Files
OldPeopleHome/zigbee/ZStack-CC2530-r200/Projects/SappWsn/RouterEB/List/ZMain.lst
LitterDryFish 6b0d1c0743 add node
2019-08-23 12:26:53 +08:00

1038 lines
51 KiB
Plaintext

###############################################################################
#
# IAR C/C++ Compiler V10.30.1.6000 for 8051 23/Aug/2019 12:13:11
# Copyright 2004-2018 IAR Systems AB.
# PC-locked license - IAR Embedded Workbench for 8051
#
# Core = plain
# Code model = banked
# Data model = large
# Calling convention = xdata reentrant
# Constant location = data_rom
# Dptr setup = 1,16
#
# Source file =
# E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\zstack\ZMain\TI2530DB\ZMain.c
# Command line =
# -f C:\Users\VULCAN\AppData\Local\Temp\EWEA2D.tmp
# (E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\zstack\ZMain\TI2530DB\ZMain.c
# -D ZIGBEEPRO -D ZTOOL_P1 -D MT_TASK -D MT_SYS_FUNC -D MT_ZDO_FUNC -D
# LCD_SUPPORTED=DEBUG -D SAPP_ZSTACK -lC
# E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\RouterEB\List
# -lA
# E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\RouterEB\List
# --diag_suppress Pe001,Pa010 -o
# E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\RouterEB\Obj
# -e --debug --core=plain --dptr=16,1 --data_model=large
# --code_model=banked --calling_convention=xdata_reentrant
# --place_constants=data_rom --nr_virtual_regs 8 -f
# E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\..\zstack\Tools\CC2530DB\f8wRouter.cfg
# (-DCPU32MHZ -DROOT=__near_func -DMAC_CFG_APP_PENDING_QUEUE=TRUE
# -DMAC_CFG_TX_DATA_MAX=5 -DMAC_CFG_TX_MAX=8 -DMAC_CFG_RX_MAX=5
# -DRTR_NWK) -f
# E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\..\zstack\Tools\CC2530DB\f8wConfig.cfg
# (-DZIGBEEPRO -DSECURE=0 -DZG_SECURE_DYNAMIC=0 -DREFLECTOR
# -DDEFAULT_CHANLIST=0x00800000 -DZDAPP_CONFIG_PAN_ID=0x0057
# -DNWK_START_DELAY=100 -DEXTENDED_JOINING_RANDOM_MASK=0x007F
# -DBEACON_REQUEST_DELAY=100 -DBEACON_REQ_DELAY_MASK=0x00FF
# -DLINK_STATUS_JITTER_MASK=0x007F -DROUTE_EXPIRY_TIME=30
# -DAPSC_ACK_WAIT_DURATION_POLLED=3000 -DNWK_INDIRECT_MSG_TIMEOUT=7
# -DMAX_RREQ_ENTRIES=8 -DAPSC_MAX_FRAME_RETRIES=3
# -DNWK_MAX_DATA_RETRIES=2 -DMAX_POLL_FAILURE_RETRIES=2 -DMAX_BCAST=9
# -DAPS_MAX_GROUPS=16 -DMAX_RTG_ENTRIES=40 -DNWK_MAX_BINDING_ENTRIES=4
# -DMAX_BINDING_CLUSTER_IDS=4 "-DDEFAULT_KEY={0x01, 0x03, 0x05, 0x07,
# 0x09, 0x0B, 0x0D, 0x0F, 0x00, 0x02, 0x04, 0x06, 0x08, 0x0A, 0x0C,
# 0x0D}" -DMAC_MAX_FRAME_SIZE=116 -DZDNWKMGR_MIN_TRANSMISSIONS=20
# "-DCONST=const __code" -DGENERIC=__generic -DRFD_RCVC_ALWAYS_ON=FALSE
# -DPOLL_RATE=1000 -DQUEUED_POLL_RATE=100 -DRESPONSE_POLL_RATE=100
# -DREJOIN_POLL_RATE=440) -I
# E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\
# -I
# E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\Source\
# -I
# E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\..\zstack\ZMain\TI2530DB\
# -I
# E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\..\..\Components\hal\include\
# -I
# E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\..\..\Components\hal\target\CC2530EB\
# -I
# E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\..\..\Components\mac\include\
# -I
# E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\..\..\Components\mac\high_level\
# -I
# E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\..\..\Components\mac\low_level\srf04\
# -I
# E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\..\..\Components\mac\low_level\srf04\single_chip\
# -I
# E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\..\..\Components\mt\
# -I
# E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\..\..\Components\osal\include\
# -I
# E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\..\..\Components\services\saddr\
# -I
# E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\..\..\Components\services\sdata\
# -I
# E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\..\..\Components\stack\af\
# -I
# E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\..\..\Components\stack\nwk\
# -I
# E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\..\..\Components\stack\sapi\
# -I
# E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\..\..\Components\stack\sec\
# -I
# E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\..\..\Components\stack\sys\
# -I
# E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\..\..\Components\stack\zdo\
# -I
# E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\..\..\Components\zmac\
# -I
# E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\..\..\Components\zmac\f8w\
# -Ohz --require_prototypes --no_code_motion)
# Locale = Chinese (Simplified)_CHN.936
# List file =
# E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\RouterEB\List\ZMain.lst
# Object file =
# E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\RouterEB\Obj\ZMain.r51
#
###############################################################################
E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\zstack\ZMain\TI2530DB\ZMain.c
1 /**************************************************************************************************
2 Filename: ZMain.c
3 Revised: $Date: 2010-09-17 16:25:30 -0700 (Fri, 17 Sep 2010) $
4 Revision: $Revision: 23835 $
5
6 Description: Startup and shutdown code for ZStack
7 Notes: This version targets the Chipcon CC2530
8
9
10 Copyright 2005-2010 Texas Instruments Incorporated. All rights reserved.
11
12 IMPORTANT: Your use of this Software is limited to those specific rights
13 granted under the terms of a software license agreement between the user
14 who downloaded the software, his/her employer (which must be your employer)
15 and Texas Instruments Incorporated (the "License"). You may not use this
16 Software unless you agree to abide by the terms of the License. The License
17 limits your use, and you acknowledge, that the Software may not be modified,
18 copied or distributed unless embedded on a Texas Instruments microcontroller
19 or used solely and exclusively in conjunction with a Texas Instruments radio
20 frequency transceiver, which is integrated into your product. Other than for
21 the foregoing purpose, you may not use, reproduce, copy, prepare derivative
22 works of, modify, distribute, perform, display or sell this Software and/or
23 its documentation for any purpose.
24
25 YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE
26 PROVIDED 揂S IS?WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED,
27 INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE,
28 NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL
29 TEXAS INSTRUMENTS OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT,
30 NEGLIGENCE, STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER
31 LEGAL EQUITABLE THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES
32 INCLUDING BUT NOT LIMITED TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE
33 OR CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, COST OF PROCUREMENT
34 OF SUBSTITUTE GOODS, TECHNOLOGY, SERVICES, OR ANY CLAIMS BY THIRD PARTIES
35 (INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF), OR OTHER SIMILAR COSTS.
36
37 Should you have any questions regarding your right to use this Software,
38 contact Texas Instruments Incorporated at www.TI.com.
39 **************************************************************************************************/
40
41 /*********************************************************************
42 * INCLUDES
43 */
44
45 #ifndef NONWK
46 #include "AF.h"
47 #endif
48 #include "hal_adc.h"
\ In segment SFR_AN, at 0x8f
\ unsigned char volatile __sfr P0INP
\ P0INP:
\ 000000 DS 1
\ In segment SFR_AN, at 0x90
\ union <unnamed> volatile __sfr _A_P1
\ _A_P1:
\ 000000 DS 1
\ In segment SFR_AN, at 0x9d
\ unsigned char volatile __sfr SLEEPSTA
\ SLEEPSTA:
\ 000000 DS 1
\ In segment SFR_AN, at 0x9e
\ unsigned char volatile __sfr CLKCONSTA
\ CLKCONSTA:
\ 000000 DS 1
\ In segment SFR_AN, at 0xa0
\ union <unnamed> volatile __sfr _A_P2
\ _A_P2:
\ 000000 DS 1
\ In segment SFR_AN, at 0xbe
\ unsigned char volatile __sfr SLEEPCMD
\ SLEEPCMD:
\ 000000 DS 1
\ In segment SFR_AN, at 0xc6
\ unsigned char volatile __sfr CLKCONCMD
\ CLKCONCMD:
\ 000000 DS 1
\ In segment SFR_AN, at 0xfe
\ unsigned char volatile __sfr P1DIR
\ P1DIR:
\ 000000 DS 1
\ In segment SFR_AN, at 0xff
\ unsigned char volatile __sfr P2DIR
\ P2DIR:
\ 000000 DS 1
49 #include "hal_flash.h"
50 #include "hal_lcd.h"
51 #include "hal_led.h"
52 #include "hal_drivers.h"
53 #include "OnBoard.h"
54 #include "OSAL.h"
55 #include "OSAL_Nv.h"
56 #include "ZComDef.h"
57 #include "ZMAC.h"
58
59 /*********************************************************************
60 * LOCAL FUNCTIONS
61 */
62
63 static void zmain_ext_addr( void );
64 #if defined ZCL_KEY_ESTABLISH
65 static void zmain_cert_init( void );
66 #endif
67 static void zmain_dev_info( void );
68 static void zmain_vdd_check( void );
69
70 #ifdef LCD_SUPPORTED
71 static void zmain_lcd_init( void );
72 #endif
73
74 /*********************************************************************
75 * @fn main
76 * @brief First function called after startup.
77 * @return don't care
78 */
\ In segment BANKED_CODE, align 1, keep-with-next
79 int main(void)
\ main:
80 {
\ 000000 ; Auto size: 17
\ 000000 74EF MOV A,#-0x11
\ 000002 12.... LCALL ?ALLOC_XSTACK8
81 // Turn off interrupts
82 osal_int_disable( INTS_ALL );
\ 000005 ; Setup parameters for call to function osal_int_disable
\ 000005 79FF MOV R1,#-0x1
\ 000007 12.... LCALL `??osal_int_disable::?relay`; Banked call to: osal_int_disable
83
84 // Initialization for board related stuff such as LEDs
85 HAL_BOARD_INIT();
\ 00000A 53BEFB ANL 0xbe,#0xfb
\ ??main_0:
\ 00000D E59D MOV A,0x9d
\ 00000F A2E6 MOV C,0xE0 /* A */.6
\ 000011 50FA JNC ??main_0
\ 000013 00 NOP
\ 000014 78F8 MOV R0,#-0x8
\ 000016 7901 MOV R1,#0x1
\ ??main_1:
\ 000018 00 NOP
\ 000019 E8 MOV A,R0
\ 00001A 24FF ADD A,#-0x1
\ 00001C 18 DEC R0
\ 00001D E9 MOV A,R1
\ 00001E 34FF ADDC A,#-0x1
\ 000020 F9 MOV R1,A
\ 000021 E8 MOV A,R0
\ 000022 49 ORL A,R1
\ 000023 70F3 JNZ ??main_1
\ 000025 75C600 MOV 0xc6,#0x0
\ ??main_2:
\ 000028 E59E MOV A,0x9e
\ 00002A 70FC JNZ ??main_2
\ 00002C 43BE04 ORL 0xbe,#0x4
\ 00002F 906270 MOV DPTR,#0x6270
\ 000032 7408 MOV A,#0x8
\ 000034 F0 MOVX @DPTR,A
\ 000035 D2A0 SETB 0xa0.0
\ 000037 43FF01 ORL 0xff,#0x1
\ 00003A D291 SETB 0x90.1
\ 00003C 43FE02 ORL 0xfe,#0x2
\ 00003F C294 CLR 0x90.4
\ 000041 43FE10 ORL 0xfe,#0x10
\ 000044 438F01 ORL 0x8f,#0x1
86
87 // Make sure supply voltage is high enough to run
88 zmain_vdd_check();
\ 000047 7E10 MOV R6,#0x10
\ ??main_3:
\ 000049 ; Setup parameters for call to function HalAdcCheckVdd
\ 000049 794A MOV R1,#0x4a
\ 00004B 12.... LCALL `??HalAdcCheckVdd::?relay`; Banked call to: HalAdcCheckVdd
\ 00004E E9 MOV A,R1
\ 00004F 60F8 JZ ??main_3
\ 000051 1E DEC R6
\ 000052 EE MOV A,R6
\ 000053 70F4 JNZ ??main_3
89
90 // Initialize board I/O
91 InitBoard( OB_COLD );
\ 000055 ; Setup parameters for call to function InitBoard
\ 000055 7900 MOV R1,#0x0
\ 000057 12.... LCALL `??InitBoard::?relay`; Banked call to: InitBoard
92
93 // Initialze HAL drivers
94 HalDriverInit();
\ 00005A ; Setup parameters for call to function HalDriverInit
\ 00005A 12.... LCALL `??HalDriverInit::?relay`; Banked call to: HalDriverInit
95
96 // Initialize NV System
97 osal_nv_init( NULL );
\ 00005D ; Setup parameters for call to function osal_nv_init
\ 00005D 7A00 MOV R2,#0x0
\ 00005F 7B00 MOV R3,#0x0
\ 000061 12.... LCALL `??osal_nv_init::?relay`; Banked call to: osal_nv_init
98
99 // Initialize the MAC
100 ZMacInit();
\ 000064 ; Setup parameters for call to function ZMacInit
\ 000064 12.... LCALL `??ZMacInit::?relay`; Banked call to: ZMacInit
101
102 // Determine the extended address
103 zmain_ext_addr();
\ 000067 ; Setup parameters for call to function zmain_ext_addr
\ 000067 12.... LCALL `??zmain_ext_addr::?relay`; Banked call to: zmain_ext_addr
104
105 #if defined ZCL_KEY_ESTABLISH
106 // Initialize the Certicom certificate information.
107 zmain_cert_init();
108 #endif
109
110 // Initialize basic NV items
111 zgInit();
\ 00006A ; Setup parameters for call to function zgInit
\ 00006A 12.... LCALL `??zgInit::?relay`; Banked call to: zgInit
112
113 #ifndef NONWK
114 // Since the AF isn't a task, call it's initialization routine
115 afInit();
116 #endif
117
118 // Initialize the operating system
119 osal_init_system();
\ 00006D ; Setup parameters for call to function osal_init_system
\ 00006D 12.... LCALL `??osal_init_system::?relay`; Banked call to: osal_init_system
120
121 // Allow interrupts
122 osal_int_enable( INTS_ALL );
\ 000070 ; Setup parameters for call to function osal_int_enable
\ 000070 79FF MOV R1,#-0x1
\ 000072 12.... LCALL `??osal_int_enable::?relay`; Banked call to: osal_int_enable
123
124 // Final board initialization
125 InitBoard( OB_READY );
\ 000075 ; Setup parameters for call to function InitBoard
\ 000075 7902 MOV R1,#0x2
\ 000077 12.... LCALL `??InitBoard::?relay`; Banked call to: InitBoard
126
127 // Display information about this device
128 zmain_dev_info();
\ 00007A 78.. MOV R0,#(aExtendedAddress + 7) & 0xff
\ 00007C 79.. MOV R1,#((aExtendedAddress + 7) >> 8) & 0xff
\ 00007E 7A00 MOV R2,#0x0
\ ??main_4:
\ 000080 8882 MOV DPL,R0
\ 000082 8983 MOV DPH,R1
\ 000084 E0 MOVX A,@DPTR
\ 000085 C4 SWAP A
\ 000086 540F ANL A,#0xf
\ 000088 FC MOV R4,A
\ 000089 EA MOV A,R2
\ 00008A FE MOV R6,A
\ 00008B 7401 MOV A,#0x1
\ 00008D 2E ADD A,R6
\ 00008E FA MOV R2,A
\ 00008F EC MOV A,R4
\ 000090 C3 CLR C
\ 000091 940A SUBB A,#0xa
\ 000093 5004 JNC ??main_5
\ 000095 7B30 MOV R3,#0x30
\ 000097 8002 SJMP ??main_6
\ ??main_5:
\ 000099 7B37 MOV R3,#0x37
\ ??main_6:
\ 00009B EC MOV A,R4
\ 00009C 2B ADD A,R3
\ 00009D C0E0 PUSH A
\ 00009F 85..82 MOV DPL,?XSP + 0
\ 0000A2 85..83 MOV DPH,?XSP + 1
\ 0000A5 E582 MOV A,DPL
\ 0000A7 2E ADD A,R6
\ 0000A8 F582 MOV DPL,A
\ 0000AA E4 CLR A
\ 0000AB 3583 ADDC A,DPH
\ 0000AD F583 MOV DPH,A
\ 0000AF D0E0 POP A
\ 0000B1 F0 MOVX @DPTR,A
\ 0000B2 8882 MOV DPL,R0
\ 0000B4 8983 MOV DPH,R1
\ 0000B6 E0 MOVX A,@DPTR
\ 0000B7 540F ANL A,#0xf
\ 0000B9 FC MOV R4,A
\ 0000BA EA MOV A,R2
\ 0000BB FF MOV R7,A
\ 0000BC 7401 MOV A,#0x1
\ 0000BE 2A ADD A,R2
\ 0000BF FA MOV R2,A
\ 0000C0 EC MOV A,R4
\ 0000C1 C3 CLR C
\ 0000C2 940A SUBB A,#0xa
\ 0000C4 5004 JNC ??main_7
\ 0000C6 7B30 MOV R3,#0x30
\ 0000C8 8002 SJMP ??main_8
\ ??main_7:
\ 0000CA 7B37 MOV R3,#0x37
\ ??main_8:
\ 0000CC EC MOV A,R4
\ 0000CD 2B ADD A,R3
\ 0000CE C0E0 PUSH A
\ 0000D0 85..82 MOV DPL,?XSP + 0
\ 0000D3 85..83 MOV DPH,?XSP + 1
\ 0000D6 E582 MOV A,DPL
\ 0000D8 2F ADD A,R7
\ 0000D9 F582 MOV DPL,A
\ 0000DB E4 CLR A
\ 0000DC 3583 ADDC A,DPH
\ 0000DE F583 MOV DPH,A
\ 0000E0 D0E0 POP A
\ 0000E2 F0 MOVX @DPTR,A
\ 0000E3 E8 MOV A,R0
\ 0000E4 24FF ADD A,#-0x1
\ 0000E6 18 DEC R0
\ 0000E7 E9 MOV A,R1
\ 0000E8 34FF ADDC A,#-0x1
\ 0000EA F9 MOV R1,A
\ 0000EB EA MOV A,R2
\ 0000EC C3 CLR C
\ 0000ED 9410 SUBB A,#0x10
\ 0000EF 408F JC ??main_4
\ 0000F1 7410 MOV A,#0x10
\ 0000F3 12.... LCALL ?XSTACK_DISP0_8
\ 0000F6 E4 CLR A
\ 0000F7 F0 MOVX @DPTR,A
\ 0000F8 ; Setup parameters for call to function HalLcdWriteString
\ 0000F8 7901 MOV R1,#0x1
\ 0000FA 7A.. MOV R2,#`?<Constant "IEEE: ">` & 0xff
\ 0000FC 7B.. MOV R3,#(`?<Constant "IEEE: ">` >> 8) & 0xff
\ 0000FE 12.... LCALL `??HalLcdWriteString::?relay`; Banked call to: HalLcdWriteString
\ 000101 ; Setup parameters for call to function HalLcdWriteString
\ 000101 7902 MOV R1,#0x2
\ 000103 AA.. MOV R2,?XSP + 0
\ 000105 AB.. MOV R3,?XSP + 1
\ 000107 12.... LCALL `??HalLcdWriteString::?relay`; Banked call to: HalLcdWriteString
129
130 /* Display the device info on the LCD */
131 #ifdef LCD_SUPPORTED
132 zmain_lcd_init();
\ 00010A ; Setup parameters for call to function HalLcdWriteString
\ 00010A 7901 MOV R1,#0x1
\ 00010C 7A.. MOV R2,#`?<Constant "TexasInstruments">` & 0xff
\ 00010E 7B.. MOV R3,#(`?<Constant "TexasInstruments">` >> 8) & 0xff
\ 000110 12.... LCALL `??HalLcdWriteString::?relay`; Banked call to: HalLcdWriteString
133 #endif
134
135 #ifdef WDT_IN_PM1
136 /* If WDT is used, this is a good place to enable it. */
137 WatchDogEnable( WDTIMX );
138 #endif
139
140 osal_start_system(); // No Return from here
\ 000113 ; Setup parameters for call to function osal_start_system
\ 000113 12.... LCALL `??osal_start_system::?relay`; Banked call to: osal_start_system
141
142 return 0; // Shouldn't get here.
\ 000116 7A00 MOV R2,#0x0
\ 000118 7B00 MOV R3,#0x0
\ 00011A 7411 MOV A,#0x11
\ 00011C 12.... LCALL ?DEALLOC_XSTACK8
\ 00011F 02.... LJMP ?BRET
\ 000122 REQUIRE SLEEPCMD
\ 000122 REQUIRE SLEEPSTA
\ 000122 REQUIRE CLKCONCMD
\ 000122 REQUIRE CLKCONSTA
\ 000122 REQUIRE _A_P2
\ 000122 REQUIRE P2DIR
\ 000122 REQUIRE _A_P1
\ 000122 REQUIRE P1DIR
\ 000122 REQUIRE P0INP
143 } // main()
144
145 /*********************************************************************
146 * @fn zmain_vdd_check
147 * @brief Check if the Vdd is OK to run the processor.
148 * @return Return if Vdd is ok; otherwise, flash LED, then reset
149 *********************************************************************/
150 static void zmain_vdd_check( void )
151 {
152 uint8 cnt = 16;
153
154 do {
155 while (!HalAdcCheckVdd(VDD_MIN_RUN));
156 } while (--cnt);
157 }
158
159 /**************************************************************************************************
160 * @fn zmain_ext_addr
161 *
162 * @brief Execute a prioritized search for a valid extended address and write the results
163 * into the OSAL NV system for use by the system. Temporary address not saved to NV.
164 *
165 * input parameters
166 *
167 * None.
168 *
169 * output parameters
170 *
171 * None.
172 *
173 * @return None.
174 **************************************************************************************************
175 */
\ In segment BANKED_CODE, align 1, keep-with-next
176 static void zmain_ext_addr(void)
\ zmain_ext_addr:
177 {
\ 000000 REQUIRE ?V0
\ 000000 REQUIRE ?V1
\ 000000 REQUIRE ?V2
\ 000000 74F5 MOV A,#-0xb
\ 000002 12.... LCALL ?BANKED_ENTER_XDATA
\ 000005 ; Saved register size: 11
\ 000005 ; Auto size: 10
\ 000005 74F6 MOV A,#-0xa
\ 000007 12.... LCALL ?ALLOC_XSTACK8
178 uint8 nullAddr[Z_EXTADDR_LEN] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
\ 00000A 90.... MOV DPTR,#`?<Constant {255, 255, 255, 255, 255, 255, 255,`
\ 00000D 7402 MOV A,#0x2
\ 00000F 12.... LCALL ?XSTACK_DISP102_8
\ 000012 7408 MOV A,#0x8
\ 000014 12.... LCALL ?MOVE_LONG8_XDATA_XDATA
179 uint8 writeNV = TRUE;
180
181 // First check whether a non-erased extended address exists in the OSAL NV.
182 if ((SUCCESS != osal_nv_item_init(ZCD_NV_EXTADDR, Z_EXTADDR_LEN, NULL)) ||
183 (SUCCESS != osal_nv_read(ZCD_NV_EXTADDR, 0, Z_EXTADDR_LEN, aExtendedAddress)) ||
184 (osal_memcmp(aExtendedAddress, nullAddr, Z_EXTADDR_LEN)))
\ 000017 ; Setup parameters for call to function osal_nv_item_init
\ 000017 F5.. MOV ?V0,A
\ 000019 F5.. MOV ?V1,A
\ 00001B 78.. MOV R0,#?V0
\ 00001D 12.... LCALL ?PUSH_XSTACK_I_TWO
\ 000020 7C08 MOV R4,#0x8
\ 000022 7D00 MOV R5,#0x0
\ 000024 7A01 MOV R2,#0x1
\ 000026 7B00 MOV R3,#0x0
\ 000028 12.... LCALL `??osal_nv_item_init::?relay`; Banked call to: osal_nv_item_init
\ 00002B 7402 MOV A,#0x2
\ 00002D 12.... LCALL ?DEALLOC_XSTACK8
\ 000030 E9 MOV A,R1
\ 000031 7052 JNZ ??zmain_ext_addr_0
\ 000033 ; Setup parameters for call to function osal_nv_read
\ 000033 75.... MOV ?V0,#aExtendedAddress & 0xff
\ 000036 75.... MOV ?V1,#(aExtendedAddress >> 8) & 0xff
\ 000039 78.. MOV R0,#?V0
\ 00003B 12.... LCALL ?PUSH_XSTACK_I_TWO
\ 00003E 75..08 MOV ?V0,#0x8
\ 000041 75..00 MOV ?V1,#0x0
\ 000044 78.. MOV R0,#?V0
\ 000046 12.... LCALL ?PUSH_XSTACK_I_TWO
\ 000049 7C00 MOV R4,#0x0
\ 00004B 7D00 MOV R5,#0x0
\ 00004D 7A01 MOV R2,#0x1
\ 00004F 7B00 MOV R3,#0x0
\ 000051 12.... LCALL `??osal_nv_read::?relay`; Banked call to: osal_nv_read
\ 000054 7404 MOV A,#0x4
\ 000056 12.... LCALL ?DEALLOC_XSTACK8
\ 000059 E9 MOV A,R1
\ 00005A 7029 JNZ ??zmain_ext_addr_0
\ 00005C ; Setup parameters for call to function osal_memcmp
\ 00005C 7402 MOV A,#0x2
\ 00005E 12.... LCALL ?XSTACK_DISP100_8
\ 000061 88.. MOV ?V0,R0
\ 000063 89.. MOV ?V1,R1
\ 000065 75..00 MOV ?V2,#0x0
\ 000068 78.. MOV R0,#?V0
\ 00006A 12.... LCALL ?PUSH_XSTACK_I_THREE
\ 00006D 7C08 MOV R4,#0x8
\ 00006F 7D00 MOV R5,#0x0
\ 000071 79.. MOV R1,#aExtendedAddress & 0xff
\ 000073 7A.. MOV R2,#(aExtendedAddress >> 8) & 0xff
\ 000075 7B00 MOV R3,#0x0
\ 000077 12.... LCALL `??osal_memcmp::?relay`; Banked call to: osal_memcmp
\ 00007A 7403 MOV A,#0x3
\ 00007C 12.... LCALL ?DEALLOC_XSTACK8
\ 00007F E9 MOV A,R1
\ 000080 7003 JNZ $+5
\ 000082 02.... LJMP ??zmain_ext_addr_1 & 0xFFFF
185 {
186 // Attempt to read the extended address from the location on the lock bits page
187 // where the programming tools know to reserve it.
188 HalFlashRead(HAL_FLASH_IEEE_PAGE, HAL_FLASH_IEEE_OSET, aExtendedAddress, Z_EXTADDR_LEN);
\ ??zmain_ext_addr_0:
\ 000085 ; Setup parameters for call to function HalFlashRead
\ 000085 75..08 MOV ?V0,#0x8
\ 000088 75..00 MOV ?V1,#0x0
\ 00008B 78.. MOV R0,#?V0
\ 00008D 12.... LCALL ?PUSH_XSTACK_I_TWO
\ 000090 7C.. MOV R4,#aExtendedAddress & 0xff
\ 000092 7D.. MOV R5,#(aExtendedAddress >> 8) & 0xff
\ 000094 7AE8 MOV R2,#-0x18
\ 000096 7B07 MOV R3,#0x7
\ 000098 797F MOV R1,#0x7f
\ 00009A 12.... LCALL `??HalFlashRead::?relay`; Banked call to: HalFlashRead
\ 00009D 7402 MOV A,#0x2
\ 00009F 12.... LCALL ?DEALLOC_XSTACK8
189
190 if (osal_memcmp(aExtendedAddress, nullAddr, Z_EXTADDR_LEN))
\ 0000A2 ; Setup parameters for call to function osal_memcmp
\ 0000A2 7402 MOV A,#0x2
\ 0000A4 12.... LCALL ?XSTACK_DISP100_8
\ 0000A7 88.. MOV ?V0,R0
\ 0000A9 89.. MOV ?V1,R1
\ 0000AB 75..00 MOV ?V2,#0x0
\ 0000AE 78.. MOV R0,#?V0
\ 0000B0 12.... LCALL ?PUSH_XSTACK_I_THREE
\ 0000B3 7C08 MOV R4,#0x8
\ 0000B5 7D00 MOV R5,#0x0
\ 0000B7 79.. MOV R1,#aExtendedAddress & 0xff
\ 0000B9 7A.. MOV R2,#(aExtendedAddress >> 8) & 0xff
\ 0000BB 7B00 MOV R3,#0x0
\ 0000BD 12.... LCALL `??osal_memcmp::?relay`; Banked call to: osal_memcmp
\ 0000C0 7403 MOV A,#0x3
\ 0000C2 12.... LCALL ?DEALLOC_XSTACK8
\ 0000C5 E9 MOV A,R1
\ 0000C6 6038 JZ ??zmain_ext_addr_2
191 {
192 // Attempt to read the extended address from the designated location in the Info Page.
193 if (!osal_memcmp((uint8 *)(P_INFOPAGE+HAL_INFOP_IEEE_OSET), nullAddr, Z_EXTADDR_LEN))
\ 0000C8 ; Setup parameters for call to function osal_memcmp
\ 0000C8 78.. MOV R0,#?V0
\ 0000CA 12.... LCALL ?PUSH_XSTACK_I_THREE
\ 0000CD 7C08 MOV R4,#0x8
\ 0000CF 7D00 MOV R5,#0x0
\ 0000D1 790C MOV R1,#0xc
\ 0000D3 7A78 MOV R2,#0x78
\ 0000D5 7B00 MOV R3,#0x0
\ 0000D7 12.... LCALL `??osal_memcmp::?relay`; Banked call to: osal_memcmp
\ 0000DA 7403 MOV A,#0x3
\ 0000DC 12.... LCALL ?DEALLOC_XSTACK8
\ 0000DF E9 MOV A,R1
\ 0000E0 6003 JZ $+5
\ 0000E2 02.... LJMP ??zmain_ext_addr_3 & 0xFFFF
194 {
195 osal_memcpy(aExtendedAddress, (uint8 *)(P_INFOPAGE+HAL_INFOP_IEEE_OSET), Z_EXTADDR_LEN);
\ 0000E5 ; Setup parameters for call to function osal_memcpy
\ 0000E5 75..0C MOV ?V0,#0xc
\ 0000E8 75..78 MOV ?V1,#0x78
\ 0000EB 78.. MOV R0,#?V0
\ 0000ED 12.... LCALL ?PUSH_XSTACK_I_THREE
\ 0000F0 7C08 MOV R4,#0x8
\ 0000F2 7D00 MOV R5,#0x0
\ 0000F4 7A.. MOV R2,#aExtendedAddress & 0xff
\ 0000F6 7B.. MOV R3,#(aExtendedAddress >> 8) & 0xff
\ 0000F8 12.... LCALL `??osal_memcpy::?relay`; Banked call to: osal_memcpy
\ 0000FB 7403 MOV A,#0x3
\ 0000FD 12.... LCALL ?DEALLOC_XSTACK8
196 }
197 else // No valid extended address was found.
198 {
199 uint8 idx;
200
201 #if !defined ( NV_RESTORE )
202 writeNV = FALSE; // Make this a temporary IEEE address
203 #endif
204
205 /* Attempt to create a sufficiently random extended address for expediency.
206 * Note: this is only valid/legal in a test environment and
207 * must never be used for a commercial product.
208 */
209 for (idx = 0; idx < (Z_EXTADDR_LEN - 2);)
210 {
211 uint16 randy = osal_rand();
212 aExtendedAddress[idx++] = LO_UINT16(randy);
213 aExtendedAddress[idx++] = HI_UINT16(randy);
214 }
215 // Next-to-MSB identifies ZigBee devicetype.
216 #if ZG_BUILD_COORDINATOR_TYPE && !ZG_BUILD_JOINING_TYPE
217 aExtendedAddress[idx++] = 0x10;
218 #elif ZG_BUILD_RTRONLY_TYPE
219 aExtendedAddress[idx++] = 0x20;
220 #else
221 aExtendedAddress[idx++] = 0x30;
222 #endif
223 // MSB has historical signficance.
224 aExtendedAddress[idx] = 0xF8;
225 }
226 }
227
228 if (writeNV)
229 {
230 (void)osal_nv_write(ZCD_NV_EXTADDR, 0, Z_EXTADDR_LEN, aExtendedAddress);
\ ??zmain_ext_addr_2:
\ 000100 ; Setup parameters for call to function osal_nv_write
\ 000100 75.... MOV ?V0,#aExtendedAddress & 0xff
\ 000103 75.... MOV ?V1,#(aExtendedAddress >> 8) & 0xff
\ 000106 78.. MOV R0,#?V0
\ 000108 12.... LCALL ?PUSH_XSTACK_I_TWO
\ 00010B 75..08 MOV ?V0,#0x8
\ 00010E 75..00 MOV ?V1,#0x0
\ 000111 78.. MOV R0,#?V0
\ 000113 12.... LCALL ?PUSH_XSTACK_I_TWO
\ 000116 7C00 MOV R4,#0x0
\ 000118 7D00 MOV R5,#0x0
\ 00011A 7A01 MOV R2,#0x1
\ 00011C 7B00 MOV R3,#0x0
\ 00011E 12.... LCALL `??osal_nv_write::?relay`; Banked call to: osal_nv_write
\ 000121 7404 MOV A,#0x4
\ 000123 12.... LCALL ?DEALLOC_XSTACK8
231 }
232 }
233 // add by lijian 20120821
234 if(zgConfigPANID == 0xFFFF)
\ ??zmain_ext_addr_1:
\ 000126 90.... MOV DPTR,#zgConfigPANID
\ 000129 E0 MOVX A,@DPTR
\ 00012A F4 CPL A
\ 00012B 7003 JNZ ??zmain_ext_addr_4
\ 00012D A3 INC DPTR
\ 00012E E0 MOVX A,@DPTR
\ 00012F F4 CPL A
\ ??zmain_ext_addr_4:
\ 000130 7031 JNZ ??zmain_ext_addr_5
235 {
236 uint8 pid[2];
237 HalFlashRead(HAL_FLASH_IEEE_PAGE, HAL_FLASH_PID_OSET, pid, HAL_FLASH_PID_SIZE);
\ 000132 ; Setup parameters for call to function HalFlashRead
\ 000132 75..02 MOV ?V0,#0x2
\ 000135 75..00 MOV ?V1,#0x0
\ 000138 78.. MOV R0,#?V0
\ 00013A 12.... LCALL ?PUSH_XSTACK_I_TWO
\ 00013D 7402 MOV A,#0x2
\ 00013F 12.... LCALL ?XSTACK_DISP102_8
\ 000142 7A00 MOV R2,#0x0
\ 000144 7B00 MOV R3,#0x0
\ 000146 797F MOV R1,#0x7f
\ 000148 12.... LCALL `??HalFlashRead::?relay`; Banked call to: HalFlashRead
\ 00014B 7402 MOV A,#0x2
\ 00014D 12.... LCALL ?DEALLOC_XSTACK8
238 zgConfigPANID = *(uint16 *)pid;
\ 000150 85..82 MOV DPL,?XSP + 0
\ 000153 85..83 MOV DPH,?XSP + 1
\ 000156 E0 MOVX A,@DPTR
\ 000157 F8 MOV R0,A
\ 000158 A3 INC DPTR
\ 000159 E0 MOVX A,@DPTR
\ 00015A F9 MOV R1,A
\ 00015B 90.... MOV DPTR,#zgConfigPANID
\ 00015E E8 MOV A,R0
\ 00015F F0 MOVX @DPTR,A
\ 000160 A3 INC DPTR
\ 000161 E9 MOV A,R1
\ 000162 F0 MOVX @DPTR,A
239 }
240 // end of add
241
242 // Set the MAC PIB extended address according to results from above.
243 (void)ZMacSetReq(MAC_EXTENDED_ADDRESS, aExtendedAddress);
\ ??zmain_ext_addr_5:
\ 000163 ; Setup parameters for call to function ZMacSetReq
\ 000163 7A.. MOV R2,#aExtendedAddress & 0xff
\ 000165 7B.. MOV R3,#(aExtendedAddress >> 8) & 0xff
\ 000167 79E2 MOV R1,#-0x1e
\ 000169 12.... LCALL `??ZMacSetReq::?relay`; Banked call to: ZMacSetReq
244 }
\ 00016C 740A MOV A,#0xa
\ 00016E 12.... LCALL ?DEALLOC_XSTACK8
\ 000171 7F03 MOV R7,#0x3
\ 000173 02.... LJMP ?BANKED_LEAVE_XDATA
\ ??zmain_ext_addr_3:
\ 000176 7E00 MOV R6,#0x0
\ ??zmain_ext_addr_6:
\ 000178 ; Setup parameters for call to function osal_rand
\ 000178 12.... LCALL `??osal_rand::?relay`; Banked call to: osal_rand
\ 00017B 8A.. MOV ?V0,R2
\ 00017D EE MOV A,R6
\ 00017E FA MOV R2,A
\ 00017F 74.. MOV A,#aExtendedAddress & 0xff
\ 000181 2A ADD A,R2
\ 000182 F582 MOV DPL,A
\ 000184 E4 CLR A
\ 000185 34.. ADDC A,#(aExtendedAddress >> 8) & 0xff
\ 000187 F583 MOV DPH,A
\ 000189 E5.. MOV A,?V0
\ 00018B F0 MOVX @DPTR,A
\ 00018C 0E INC R6
\ 00018D EE MOV A,R6
\ 00018E F8 MOV R0,A
\ 00018F 12.... LCALL ?Subroutine0 & 0xFFFF
\ ??CrossCallReturnLabel_0:
\ 000192 EB MOV A,R3
\ 000193 F0 MOVX @DPTR,A
\ 000194 0E INC R6
\ 000195 EE MOV A,R6
\ 000196 C3 CLR C
\ 000197 9406 SUBB A,#0x6
\ 000199 40DD JC ??zmain_ext_addr_6
\ 00019B 08 INC R0
\ 00019C 12.... LCALL ?Subroutine0 & 0xFFFF
\ ??CrossCallReturnLabel_1:
\ 00019F 7420 MOV A,#0x20
\ 0001A1 F0 MOVX @DPTR,A
\ 0001A2 08 INC R0
\ 0001A3 74.. MOV A,#aExtendedAddress & 0xff
\ 0001A5 28 ADD A,R0
\ 0001A6 F582 MOV DPL,A
\ 0001A8 E4 CLR A
\ 0001A9 34.. ADDC A,#(aExtendedAddress >> 8) & 0xff
\ 0001AB F583 MOV DPH,A
\ 0001AD 74F8 MOV A,#-0x8
\ 0001AF F0 MOVX @DPTR,A
\ 0001B0 02.... LJMP ??zmain_ext_addr_1 & 0xFFFF
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine0:
\ 000000 74.. MOV A,#aExtendedAddress & 0xff
\ 000002 2E ADD A,R6
\ 000003 F582 MOV DPL,A
\ 000005 E4 CLR A
\ 000006 34.. ADDC A,#(aExtendedAddress >> 8) & 0xff
\ 000008 F583 MOV DPH,A
\ 00000A 22 RET
\ In segment XDATA_ROM_C, align 1
\ `?<Constant {255, 255, 255, 255, 255, 255, 255,`:
\ 000000 FF DB 255
\ 000001 FF DB 255
\ 000002 FF DB 255
\ 000003 FF DB 255
\ 000004 FF DB 255
\ 000005 FF DB 255
\ 000006 FF DB 255
\ 000007 FF DB 255
\ In segment XDATA_ROM_C, align 1
\ `?<Constant "IEEE: ">`:
\ 000000 49454545 DB "IEEE: "
\ 3A2000
\ In segment XDATA_ROM_C, align 1
\ `?<Constant "TexasInstruments">`:
\ 000000 54657861 DB "TexasInstruments"
\ 73496E73
\ 7472756D
\ 656E7473
\ 00
245
246 #if defined ZCL_KEY_ESTABLISH
247 /**************************************************************************************************
248 * @fn zmain_cert_init
249 *
250 * @brief Initialize the Certicom certificate information.
251 *
252 * input parameters
253 *
254 * None.
255 *
256 * output parameters
257 *
258 * None.
259 *
260 * @return None.
261 **************************************************************************************************
262 */
263 static void zmain_cert_init(void)
264 {
265 uint8 certData[ZCL_KE_IMPLICIT_CERTIFICATE_LEN];
266 uint8 nullData[ZCL_KE_IMPLICIT_CERTIFICATE_LEN] = {
267 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
268 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
269 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
270 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
271 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
272 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
273 };
274
275 (void)osal_nv_item_init(ZCD_NV_IMPLICIT_CERTIFICATE, ZCL_KE_IMPLICIT_CERTIFICATE_LEN, NULL);
276 (void)osal_nv_item_init(ZCD_NV_DEVICE_PRIVATE_KEY, ZCL_KE_DEVICE_PRIVATE_KEY_LEN, NULL);
277
278 // First check whether non-null certificate data exists in the OSAL NV. To save on code space,
279 // just use the ZCD_NV_CA_PUBLIC_KEY as the bellwether for all three.
280 if ((SUCCESS != osal_nv_item_init(ZCD_NV_CA_PUBLIC_KEY, ZCL_KE_CA_PUBLIC_KEY_LEN, NULL)) ||
281 (SUCCESS != osal_nv_read(ZCD_NV_CA_PUBLIC_KEY, 0, ZCL_KE_CA_PUBLIC_KEY_LEN, certData)) ||
282 (osal_memcmp(certData, nullData, ZCL_KE_CA_PUBLIC_KEY_LEN)))
283 {
284 // Attempt to read the certificate data from its corresponding location on the lock bits page.
285 HalFlashRead(HAL_FLASH_IEEE_PAGE, HAL_FLASH_CA_PUBLIC_KEY_OSET, certData,
286 ZCL_KE_CA_PUBLIC_KEY_LEN);
287 // If the certificate data is not NULL, use it to update the corresponding NV items.
288 if (!osal_memcmp(certData, nullData, ZCL_KE_CA_PUBLIC_KEY_LEN))
289 {
290 (void)osal_nv_write(ZCD_NV_CA_PUBLIC_KEY, 0, ZCL_KE_CA_PUBLIC_KEY_LEN, certData);
291 HalFlashRead(HAL_FLASH_IEEE_PAGE, HAL_FLASH_IMPLICIT_CERT_OSET, certData,
292 ZCL_KE_IMPLICIT_CERTIFICATE_LEN);
293 (void)osal_nv_write(ZCD_NV_IMPLICIT_CERTIFICATE, 0,
294 ZCL_KE_IMPLICIT_CERTIFICATE_LEN, certData);
295 HalFlashRead(HAL_FLASH_IEEE_PAGE, HAL_FLASH_DEV_PRIVATE_KEY_OSET, certData,
296 ZCL_KE_DEVICE_PRIVATE_KEY_LEN);
297 (void)osal_nv_write(ZCD_NV_DEVICE_PRIVATE_KEY, 0, ZCL_KE_DEVICE_PRIVATE_KEY_LEN, certData);
298 }
299 }
300 }
301 #endif
302
303 /**************************************************************************************************
304 * @fn zmain_dev_info
305 *
306 * @brief This displays the IEEE (MSB to LSB) on the LCD.
307 *
308 * input parameters
309 *
310 * None.
311 *
312 * output parameters
313 *
314 * None.
315 *
316 * @return None.
317 **************************************************************************************************
318 */
319 static void zmain_dev_info(void)
320 {
321 #ifdef LCD_SUPPORTED
322 uint8 i;
323 uint8 *xad;
324 uint8 lcd_buf[Z_EXTADDR_LEN*2+1];
325
326 // Display the extended address.
327 xad = aExtendedAddress + Z_EXTADDR_LEN - 1;
328
329 for (i = 0; i < Z_EXTADDR_LEN*2; xad--)
330 {
331 uint8 ch;
332 ch = (*xad >> 4) & 0x0F;
333 lcd_buf[i++] = ch + (( ch < 10 ) ? '0' : '7');
334 ch = *xad & 0x0F;
335 lcd_buf[i++] = ch + (( ch < 10 ) ? '0' : '7');
336 }
337 lcd_buf[Z_EXTADDR_LEN*2] = '\0';
338 HalLcdWriteString( "IEEE: ", HAL_LCD_LINE_1 );
339 HalLcdWriteString( (char*)lcd_buf, HAL_LCD_LINE_2 );
340 #endif
341 }
342
343 #ifdef LCD_SUPPORTED
344 /*********************************************************************
345 * @fn zmain_lcd_init
346 * @brief Initialize LCD at start up.
347 * @return none
348 *********************************************************************/
349 static void zmain_lcd_init ( void )
350 {
351 #ifdef SERIAL_DEBUG_SUPPORTED
352 {
353 HalLcdWriteString( "TexasInstruments", HAL_LCD_LINE_1 );
354
355 #if defined( MT_MAC_FUNC )
356 #if defined( ZDO_COORDINATOR )
357 HalLcdWriteString( "MAC-MT Coord", HAL_LCD_LINE_2 );
358 #else
359 HalLcdWriteString( "MAC-MT Device", HAL_LCD_LINE_2 );
360 #endif // ZDO
361 #elif defined( MT_NWK_FUNC )
362 #if defined( ZDO_COORDINATOR )
363 HalLcdWriteString( "NWK Coordinator", HAL_LCD_LINE_2 );
364 #else
365 HalLcdWriteString( "NWK Device", HAL_LCD_LINE_2 );
366 #endif // ZDO
367 #endif // MT_FUNC
368 }
369 #endif // SERIAL_DEBUG_SUPPORTED
370 }
371 #endif
372
373 /*********************************************************************
374 *********************************************************************/
Maximum stack usage in bytes:
ISTACK XSTACK Function
------ ------ --------
1 17 main
0 17 -> HalAdcCheckVdd
0 17 -> HalDriverInit
0 17 -> HalLcdWriteString
0 17 -> InitBoard
0 17 -> ZMacInit
0 17 -> osal_init_system
0 17 -> osal_int_disable
0 17 -> osal_int_enable
0 17 -> osal_nv_init
0 17 -> osal_start_system
0 17 -> zgInit
0 17 -> zmain_ext_addr
1 42 zmain_ext_addr
0 23 -> HalFlashRead
0 21 -> ZMacSetReq
0 24 -> osal_memcmp
0 24 -> osal_memcpy
0 23 -> osal_nv_item_init
0 25 -> osal_nv_read
0 25 -> osal_nv_write
0 21 -> osal_rand
Segment part sizes:
Bytes Function/Label
----- --------------
7 ?<Constant "IEEE: ">
17 ?<Constant "TexasInstruments">
8 ?<Constant {255, 255, 255, 255, 255, 255, 255,
11 ?Subroutine0
1 CLKCONCMD
1 CLKCONSTA
1 P0INP
1 P1DIR
1 P2DIR
1 SLEEPCMD
1 SLEEPSTA
1 _A_P1
1 _A_P2
290 main
435 zmain_ext_addr
12 -- Other
736 bytes in segment BANKED_CODE
12 bytes in segment BANK_RELAYS
9 bytes in segment SFR_AN
32 bytes in segment XDATA_ROM_C
12 bytes of CODE memory
32 bytes of CONST memory
0 bytes of DATA memory (+ 9 bytes shared)
736 bytes of HUGECODE memory
Errors: none
Warnings: none