📄 zmain.s51
字号:
// 29 #include "ZDApp.h"
// 30 #include "ssp.h"
// 31 #include "ZGlobals.h"
// 32
// 33 #ifndef NONWK
// 34 #include "AF.h"
// 35 #endif
// 36
// 37 /* Hal */
// 38 #include "hal_lcd.h"
// 39 #include "hal_key.h"
// 40 #include "hal_led.h"
// 41 #include "hal_adc.h"
// 42 #include "hal_drivers.h"
// 43 #include "hal_assert.h"
// 44
// 45 /*********************************************************************
// 46 * MACROS
// 47 */
// 48
// 49 /*********************************************************************
// 50 * CONSTANTS
// 51 */
// 52
// 53 // LED Flash counter, waiting for default 64-bit address
// 54 #define FLASH_COUNT 20000
// 55
// 56 // Maximun number of Vdd samples checked before go on
// 57 #define MAX_VDD_SAMPLES 3
// 58 #define ZMAIN_VDD_LIMIT HAL_ADC_VDD_LIMIT_4
// 59
// 60 /*********************************************************************
// 61 * TYPEDEFS
// 62 */
// 63
// 64 /*********************************************************************
// 65 * GLOBAL VARIABLES
// 66 */
// 67
// 68 /*********************************************************************
// 69 * EXTERNAL VARIABLES
// 70 */
// 71
// 72 /*********************************************************************
// 73 * EXTERNAL FUNCTIONS
// 74 */
// 75
// 76 extern __near_func uint8 GetCodeByte(uint32);
// 77
// 78 extern bool HalAdcCheckVdd (uint8 limit);
// 79
// 80 /*********************************************************************
// 81 * LOCAL VARIABLES
// 82 */
// 83
// 84 /*********************************************************************
// 85 * ZMAIN API JUMP FUNCTIONS
// 86 *
// 87 * If the MINIMIZE_ROOT compile flag is defined, ZMAIN API functions
// 88 * are implemented as "jump functions" located in the ROOT segment,
// 89 * as expected by the NWK object libraries. This allows the actual
// 90 * ZMAIN function bodies to locate outside ROOT memory, increasing
// 91 * space for user defined constants, strings, etc in ROOT memory.
// 92 *
// 93 * If the MINIMIZE_ROOT compile flag in not defined, the ZMAIN API
// 94 * functions are aliased to the similarly-named function bodies and
// 95 * located in the ROOT segment with no "jump function" overhead.
// 96 * This is the default behavior which produces smaller overall code
// 97 * size and maximizes available code space in BANK1...BANK3.
// 98 *
// 99 */
// 100
// 101 #ifdef MINIMIZE_ROOT
// 102 // ZMAIN functions are not forced into ROOT segment
// 103 #define ZSEG
// 104 #else
// 105 // ZMAIN functions are forced into ROOT segment
// 106 #define ZSEG ROOT
// 107 #endif
// 108
// 109 /*********************************************************************
// 110 * LOCAL FUNCTIONS
// 111 */
// 112
// 113 static ZSEG void zmain_dev_info( void );
// 114 static ZSEG void zmain_ext_addr( void );
// 115 static ZSEG void zmain_ram_init( void );
// 116 static ZSEG void zmain_vdd_check( void );
// 117
// 118 #ifdef LCD_SUPPORTED
// 119 static ZSEG void zmain_lcd_init( void );
// 120 #endif
// 121
// 122 /*********************************************************************
// 123 * @fn main
// 124 * @brief First function called after startup.
// 125 * @return don't care
// 126 *********************************************************************/
RSEG NEAR_CODE:CODE:NOROOT(0)
// 127 ZSEG int main( void )
main:
CFI Block cfiBlock0 Using cfiCommon0
CFI Function main
// 128 {
FUNCALL main, osal_int_disable
FUNCALL main, ??zmain_vdd_check
FUNCALL main, InitBoard
FUNCALL main, HalDriverInit
FUNCALL main, osal_nv_init
FUNCALL main, ??zmain_ext_addr
FUNCALL main, zgInit
FUNCALL main, ZMacInit
FUNCALL main, afInit
FUNCALL main, osal_init_system
FUNCALL main, osal_int_enable
FUNCALL main, InitBoard
FUNCALL main, osal_start_system
; Auto size: 0
// 129
// 130 // Turn off interrupts
// 131 osal_int_disable( INTS_ALL );
; Setup parameters for call to function osal_int_disable
MOV R1,#-0x1
MOV DPTR,#(osal_int_disable & 0xffff)
MOV A,#((osal_int_disable >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
// 132
// 133 // Make sure supply voltage is high enough to run
// 134 zmain_vdd_check();
; Setup parameters for call to function zmain_vdd_check
LCALL ??zmain_vdd_check
// 135
// 136 // Initialize stack memory
// 137 zmain_ram_init();
MOV R0,#(SFB(XSP) & 0xff)
MOV DPL,@R0
INC R0
MOV DPH,@R0
SJMP ??main_0
??main_1:
MOV A,#-0x5b
MOVX @DPTR,A
??main_0:
LCALL ?Subroutine0
??CrossCallReturnLabel_0:
CLR C
MOV A,#(SFB(XSTACK) & 0xff)
SUBB A,DPL
MOV A,#((SFB(XSTACK) >> 8) & 0xff)
SUBB A,DPH
JC ??main_1
MOV DPL,#((SFE(ISTACK) + 255) & 0xff)
MOV DPH,#(((SFE(ISTACK) - 1) >> 8) & 0xff)
SJMP ??main_2
??main_3:
MOV R0,DPL
MOV @R0,#-0x5b
??main_2:
MOV A,0x81
MOV ?V0 + 0,A
LCALL ?Subroutine0
??CrossCallReturnLabel_1:
MOV ?V0 + 1,#0x0
CLR C
MOV A,?V0 + 0
SUBB A,DPL
CLR A
SUBB A,DPH
JC ??main_3
// 138
// 139 // Initialize board I/O
// 140 InitBoard( OB_COLD );
; Setup parameters for call to function InitBoard
MOV R1,#0x0
MOV DPTR,#(InitBoard & 0xffff)
MOV A,#((InitBoard >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
// 141
// 142 // Initialze HAL drivers
// 143 HalDriverInit();
; Setup parameters for call to function HalDriverInit
MOV DPTR,#(HalDriverInit & 0xffff)
MOV A,#((HalDriverInit >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
// 144
// 145 // Initialize NV System
// 146 osal_nv_init( NULL );
; Setup parameters for call to function osal_nv_init
MOV R2,#0x0
MOV R3,#0x0
MOV DPTR,#(osal_nv_init & 0xffff)
MOV A,#((osal_nv_init >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
// 147
// 148 // Determine the extended address
// 149 zmain_ext_addr();
; Setup parameters for call to function zmain_ext_addr
LCALL ??zmain_ext_addr
// 150
// 151 // Initialize basic NV items
// 152 zgInit();
; Setup parameters for call to function zgInit
MOV DPTR,#(zgInit & 0xffff)
MOV A,#((zgInit >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
// 153
// 154 // Initialize the MAC
// 155 ZMacInit();
; Setup parameters for call to function ZMacInit
LCALL ZMacInit
// 156
// 157 #ifndef NONWK
// 158 // Since the AF isn't a task, call it's initialization routine
// 159 afInit();
; Setup parameters for call to function afInit
MOV DPTR,#(afInit & 0xffff)
MOV A,#((afInit >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
// 160 #endif
// 161
// 162 // Initialize the operating system
// 163 osal_init_system();
; Setup parameters for call to function osal_init_system
MOV DPTR,#(osal_init_system & 0xffff)
MOV A,#((osal_init_system >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
// 164
// 165 // Allow interrupts
// 166 osal_int_enable( INTS_ALL );
; Setup parameters for call to function osal_int_enable
MOV R1,#-0x1
MOV DPTR,#(osal_int_enable & 0xffff)
MOV A,#((osal_int_enable >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
// 167
// 168 // Final board initialization
// 169 InitBoard( OB_READY );
; Setup parameters for call to function InitBoard
MOV R1,#0x2
MOV DPTR,#(InitBoard & 0xffff)
MOV A,#((InitBoard >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
// 170
// 171 // Display information about this device
// 172 zmain_dev_info();
// 173
// 174 /* Display the device info on the LCD */
// 175 #ifdef LCD_SUPPORTED
// 176 zmain_lcd_init();
// 177 #endif
// 178
// 179 osal_start_system(); // No Return from here
; Setup parameters for call to function osal_start_system
MOV DPTR,#(osal_start_system & 0xffff)
MOV A,#((osal_start_system >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
// 180 } // main()
MOV R2,#0x0
MOV R3,#0x0
RET
CFI EndBlock cfiBlock0
RSEG NEAR_CODE:CODE:NOROOT(0)
?Subroutine0:
CFI Block cfiCond1 Using cfiCommon0
CFI NoFunction
CFI Conditional ??CrossCallReturnLabel_0
CFI Block cfiCond2 Using cfiCommon0
CFI (cfiCond2) NoFunction
CFI (cfiCond2) Conditional ??CrossCallReturnLabel_1
CFI Block cfiPicker3 Using cfiCommon1
CFI (cfiPicker3) NoFunction
CFI (cfiPicker3) Picker
MOV A,DPL
ADD A,#-0x1
MOV DPL,A
MOV A,DPH
ADDC A,#-0x1
MOV DPH,A
RET
CFI EndBlock cfiCond1
CFI EndBlock cfiCond2
CFI EndBlock cfiPicker3
// 181
// 182 /*********************************************************************
// 183 * @fn zmain_vdd_check
// 184 * @brief Check if the Vdd is OK to run the processor.
// 185 * @return Return if Vdd is ok; otherwise, flash LED, then reset
// 186 *********************************************************************/
RSEG NEAR_CODE:CODE:NOROOT(0)
// 187 static ZSEG void zmain_vdd_check( void )
??zmain_vdd_check:
CFI Block cfiBlock4 Using cfiCommon0
CFI Function ??zmain_vdd_check
// 188 {
FUNCALL ??zmain_vdd_check, Onboard_wait
LOCFRAME XSTACK, 8, STACK
ARGFRAME XSTACK, 8, STACK
FUNCALL ??zmain_vdd_check, HalAdcCheckVdd
LOCFRAME XSTACK, 8, STACK
ARGFRAME XSTACK, 8, STACK
FUNCALL ??zmain_vdd_check, Onboard_wait
LOCFRAME XSTACK, 8, STACK
ARGFRAME XSTACK, 8, STACK
FUNCALL ??zmain_vdd_check, Onboard_wait
LOCFRAME XSTACK, 8, STACK
ARGFRAME XSTACK, 8, STACK
MOV A,#-0x8
LCALL ?FUNC_ENTER_XDATA
CFI DPH0 load(1, XDATA, add(CFA_XSP16, literal(-1)))
CFI DPL0 load(1, XDATA, add(CFA_XSP16, literal(-2)))
CFI ?RET_HIGH load(1, XDATA, add(CFA_XSP16, literal(-3)))
CFI ?RET_LOW load(1, XDATA, add(CFA_XSP16, literal(-4)))
CFI R7 load(1, XDATA, add(CFA_XSP16, literal(-5)))
CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-6)))
CFI VB load(1, XDATA, add(CFA_XSP16, literal(-7)))
CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-8)))
CFI CFA_SP SP+0
CFI CFA_XSP16 add(XSP16, 8)
; Saved register size: 8
; Auto size: 0
// 189 uint8 vdd_passed_count = 0;
MOV R6,#0x0
// 190 bool toggle = 0;
MOV R7,#0x0
// 191
// 192 // Initialization for board related stuff such as LEDs
// 193 HAL_BOARD_INIT();
ORL 0xfe,#0x1
ORL 0xfe,#0x2
ORL 0xf7,#0x1
ORL 0xfe,#0x4
CLR 0x90.2
SJMP ??zmain_vdd_check_1
// 194
// 195 // Repeat getting the sample until number of failures or successes hits MAX
// 196 // then based on the count value, determine if the device is ready or not
// 197 while ( vdd_passed_count < MAX_VDD_SAMPLES )
// 198 {
// 199 if ( HalAdcCheckVdd (ZMAIN_VDD_LIMIT) )
// 200 {
// 201 vdd_passed_count++; // Keep track # times Vdd passes in a row
??zmain_vdd_check_2:
INC R6
// 202 MicroWait (10000); // Wait 10ms to try again
; Setup parameters for call to function Onboard_wait
MOV R2,#0x10
MOV R3,#0x27
MOV DPTR,#(Onboard_wait & 0xffff)
MOV A,#((Onboard_wait >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
// 203 }
// 204 else
// 205 {
// 206 vdd_passed_count = 0; // Reset passed counter
// 207 MicroWait (50000); // Wait 50ms
// 208 MicroWait (50000); // Wait another 50ms to try again
// 209 }
// 210
// 211 /* toggle LED1 and LED2 */
// 212 if (vdd_passed_count == 0)
MOV A,R6
JZ ??zmain_vdd_check_3
CLR C
SUBB A,#0x3
JNC ??zmain_vdd_check_4
??zmain_vdd_check_1:
; Setup parameters for call to function HalAdcCheckVdd
MOV R1,#0x4
MOV DPTR,#(HalAdcCheckVdd & 0xffff)
MOV A,#((HalAdcCheckVdd >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
MOV A,R1
JNZ ??zmain_vdd_check_2
MOV R6,#0x0
; Setup parameters for call to function Onboard_wait
MOV R2,#0x50
MOV R3,#-0x3d
MOV DPTR,#(Onboard_wait & 0xffff)
MOV A,#((Onboard_wait >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
; Setup parameters for call to function Onboard_wait
MOV R2,#0x50
MOV R3,#-0x3d
MOV A,#((Onboard_wait >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
// 213 {
// 214 if ((toggle = !(toggle)))
??zmain_vdd_check_3:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -