⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 zmain.s51

📁 用IAR开发的ZIGBEE网络路由例子
💻 S51
📖 第 1 页 / 共 3 页
字号:
//   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 + -