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

📄 onboard.s51

📁 用IAR开发的ZIGBEE网络路由例子
💻 S51
📖 第 1 页 / 共 4 页
字号:
//   54  */
//   55 

        RSEG XDATA_Z:XDATA:NOROOT(0)
        REQUIRE __INIT_XDATA_Z
//   56 uint8 OnboardKeyIntEnable;
OnboardKeyIntEnable:
        DS 1

        RSEG XDATA_Z:XDATA:NOROOT(0)
        REQUIRE __INIT_XDATA_Z
//   57 uint8 OnboardTimerIntEnable;
OnboardTimerIntEnable:
        DS 1
//   58 
//   59 // 64-bit Extended Address of this device

        RSEG XDATA_Z:XDATA:NOROOT(0)
        REQUIRE __INIT_XDATA_Z
//   60 uint8 aExtendedAddress[8];
aExtendedAddress:
        DS 8
//   61 
//   62 /*********************************************************************
//   63  * EXTERNAL VARIABLES
//   64  */
//   65 
//   66 /*********************************************************************
//   67  * EXTERNAL FUNCTIONS
//   68  */
//   69 
//   70 extern uint8 macMcuRandomByte(void);
//   71 
//   72 /*********************************************************************
//   73  * LOCAL VARIABLES
//   74  */
//   75 
//   76 // Registered keys task ID, initialized to NOT USED.

        RSEG XDATA_I:XDATA:NOROOT(0)
//   77 static byte registeredKeysTaskID = NO_TASK_ID;
??registeredKeysTaskID:
        DS 1
        REQUIRE `?<Initializer for registeredKeysTaskID>`
        REQUIRE __INIT_XDATA_I
//   78 
//   79 /*********************************************************************
//   80  * LOCAL FUNCTIONS
//   81  */
//   82 
//   83 static void ChkReset( void );
//   84 
//   85 /*********************************************************************
//   86  * @fn      InitBoard()
//   87  * @brief   Initialize the CC2420DB Board Peripherals
//   88  * @param   level: COLD,WARM,READY
//   89  * @return  None
//   90  */

        RSEG BANKED_CODE:CODE:NOROOT(0)
//   91 void InitBoard( byte level )
InitBoard:
        CFI Block cfiBlock0 Using cfiCommon0
        CFI Function InitBoard
//   92 {
        FUNCALL InitBoard, osal_int_disable
        LOCFRAME XSTACK, 11, STACK
        ARGFRAME XSTACK, 11, STACK
        FUNCALL InitBoard, HalLedSet
        LOCFRAME XSTACK, 11, STACK
        ARGFRAME XSTACK, 11, STACK
        FUNCALL InitBoard, HalLedSet
        LOCFRAME XSTACK, 11, STACK
        ARGFRAME XSTACK, 11, STACK
        FUNCALL InitBoard, Onboard_wait
        LOCFRAME XSTACK, 11, STACK
        ARGFRAME XSTACK, 11, STACK
        FUNCALL InitBoard, Onboard_wait
        LOCFRAME XSTACK, 11, STACK
        ARGFRAME XSTACK, 11, STACK
        FUNCALL InitBoard, HalLedSet
        LOCFRAME XSTACK, 11, STACK
        ARGFRAME XSTACK, 11, STACK
        FUNCALL InitBoard, Onboard_wait
        LOCFRAME XSTACK, 11, STACK
        ARGFRAME XSTACK, 11, STACK
        FUNCALL InitBoard, Onboard_wait
        LOCFRAME XSTACK, 11, STACK
        ARGFRAME XSTACK, 11, STACK
        FUNCALL InitBoard, HalTimerConfig
        LOCFRAME XSTACK, 14, STACK
        ARGFRAME XSTACK, 14, STACK
        FUNCALL InitBoard, HalKeyConfig
        LOCFRAME XSTACK, 14, STACK
        ARGFRAME XSTACK, 14, STACK
        MOV	A,#-0xb
        LCALL	?BANKED_ENTER_XDATA
        CFI DPH0 load(1, XDATA, add(CFA_XSP16, literal(-1)))
        CFI DPL0 load(1, XDATA, add(CFA_XSP16, literal(-2)))
        CFI ?BRET_EXT load(1, XDATA, add(CFA_XSP16, literal(-3)))
        CFI ?RET_HIGH load(1, XDATA, add(CFA_XSP16, literal(-4)))
        CFI ?RET_LOW load(1, XDATA, add(CFA_XSP16, literal(-5)))
        CFI R7 load(1, XDATA, add(CFA_XSP16, literal(-6)))
        CFI V2 load(1, XDATA, add(CFA_XSP16, literal(-7)))
        CFI V1 load(1, XDATA, add(CFA_XSP16, literal(-8)))
        CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-9)))
        CFI VB load(1, XDATA, add(CFA_XSP16, literal(-10)))
        CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-11)))
        CFI CFA_SP SP+0
        CFI CFA_XSP16 add(XSP16, 11)
        ; Saved register size: 11
        ; Auto size: 0
//   93   if ( level == OB_COLD )
        MOV	A,R1
        JZ	$+5
        LJMP	??InitBoard_0 & 0xFFFF
//   94   {
//   95     // Initialize HAL
//   96     HAL_BOARD_INIT();
        ORL	0xfe,#0x1
        ORL	0xfe,#0x2
        ORL	0xf7,#0x1
        ORL	0xfe,#0x4
        CLR	0x90.2
//   97     // Interrupts off
//   98     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()
//   99     // Turn all LEDs off
//  100     HalLedSet( HAL_LED_ALL, HAL_LED_MODE_OFF );
        ; Setup parameters for call to function HalLedSet
        MOV	R2,#0x0
        MOV	R1,#0xf
        MOV	DPTR,#(HalLedSet & 0xffff)
        MOV	A,#((HalLedSet >> 16) & 0xff)
        LCALL	?BCALL               ; Banked call to: DPTR()
//  101     // Check for Brown-Out reset
//  102     ChkReset();
        MOV	A,#0x18
        ANL	A,0xbe
        MOV	R2,A
        JZ	??InitBoard_1
        MOV	A,#0x8
        XRL	A,R2
        JZ	??InitBoard_1
        MOV	A,#0x10
        XRL	A,R2
        JZ	??InitBoard_1
        CLR	0xa8.7
        SJMP	??InitBoard_2
??InitBoard_3:
        ; Setup parameters for call to function HalLedSet
        MOV	R2,#0x1
        MOV	A,R6
        MOV	R1,A
        MOV	DPTR,#(HalLedSet & 0xffff)
        MOV	A,#((HalLedSet >> 16) & 0xff)
        LCALL	?BCALL               ; Banked call to: DPTR()
        ; Setup parameters for call to function Onboard_wait
        MOV	R2,#0x24
        MOV	R3,#-0xc
        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,#0x24
        MOV	R3,#-0xc
        MOV	A,#((Onboard_wait >> 16) & 0xff)
        LCALL	?BCALL               ; Banked call to: DPTR()
        ; Setup parameters for call to function HalLedSet
        MOV	R2,#0x0
        MOV	A,R6
        MOV	R1,A
        MOV	DPTR,#(HalLedSet & 0xffff)
        MOV	A,#((HalLedSet >> 16) & 0xff)
        LCALL	?BCALL               ; Banked call to: DPTR()
        ; Setup parameters for call to function Onboard_wait
        MOV	R2,#0x7c
        MOV	R3,#-0x6e
        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,#0x7c
        MOV	R3,#-0x6e
        MOV	A,#((Onboard_wait >> 16) & 0xff)
        LCALL	?BCALL               ; Banked call to: DPTR()
        MOV	A,R6
        CLR	C
        RRC	A
        MOV	R6,A
        JNZ	??InitBoard_3
??InitBoard_2:
        MOV	R6,#0x8
        SJMP	??InitBoard_3
//  103 
//  104   /* Timer2 for Osal timer
//  105    * This development board uses ATmega128 Timer/Counter3 to provide
//  106    * system clock ticks for the OSAL scheduler. These functions perform
//  107    * the hardware specific actions required by the OSAL_Timers module.
//  108    */
//  109    OnboardTimerIntEnable = FALSE;
??InitBoard_1:
        CLR	A
        MOV	DPTR,#OnboardTimerIntEnable
        MOVX	@DPTR,A
//  110  	 HalTimerConfig (OSAL_TIMER,                        // 8bit timer2
//  111                   HAL_TIMER_MODE_CTC,                 // Clear Timer on Compare
//  112                   HAL_TIMER_CHANNEL_SINGLE,           // Channel 1 - default
//  113                   HAL_TIMER_CH_MODE_OUTPUT_COMPARE,   // Output Compare mode
//  114                   OnboardTimerIntEnable,              // Use interrupt
//  115                   Onboard_TimerCallBack);             // Channel Mode
        ; Setup parameters for call to function HalTimerConfig
        MOV	?V0 + 0,#(Onboard_TimerCallBack & 0xff)
        MOV	?V0 + 1,#((Onboard_TimerCallBack >> 8) & 0xff)
        MOV	?V0 + 2,#((Onboard_TimerCallBack >> 16) & 0xff)
        MOV	R0,#?V0 + 0
        LCALL	?PUSH_XSTACK_I_THREE
        CFI CFA_XSP16 add(XSP16, 14)
        MOV	R5,#0x0
        MOV	R4,#0x2
        MOV	R3,#0x1
        MOV	R2,#0x2
        MOV	R1,#0x2
        MOV	DPTR,#(HalTimerConfig & 0xffff)
        MOV	A,#((HalTimerConfig >> 16) & 0xff)
        SJMP	??InitBoard_4
        CFI CFA_XSP16 add(XSP16, 11)
//  116 
//  117   }
//  118   else  // !OB_COLD
//  119   {
//  120 #ifdef ZTOOL_PORT
//  121     MT_IndReset();
//  122 #endif
//  123 
//  124      /* Initialize Key stuff */
//  125     OnboardKeyIntEnable = HAL_KEY_INTERRUPT_DISABLE;
??InitBoard_0:
        CLR	A
        MOV	DPTR,#OnboardKeyIntEnable
        MOVX	@DPTR,A
//  126     HalKeyConfig( OnboardKeyIntEnable, OnBoard_KeyCallback);
        ; Setup parameters for call to function HalKeyConfig
        MOV	?V0 + 0,#(OnBoard_KeyCallback & 0xff)
        MOV	?V0 + 1,#((OnBoard_KeyCallback >> 8) & 0xff)
        MOV	?V0 + 2,#((OnBoard_KeyCallback >> 16) & 0xff)
        MOV	R0,#?V0 + 0
        LCALL	?PUSH_XSTACK_I_THREE
        CFI CFA_XSP16 add(XSP16, 14)
        MOV	R1,#0x0
        MOV	DPTR,#(HalKeyConfig & 0xffff)
        MOV	A,#((HalKeyConfig >> 16) & 0xff)
??InitBoard_4:
        LCALL	?BCALL               ; Banked call to: DPTR()
        MOV	A,#0x3
        LCALL	?DEALLOC_XSTACK8
        CFI CFA_XSP16 add(XSP16, 11)
//  127   }
//  128 }
        MOV	R7,#0x3
        LJMP	?BANKED_LEAVE_XDATA
        CFI EndBlock cfiBlock0
//  129 
//  130 /*********************************************************************
//  131  * @fn      ChkReset()
//  132  * @brief   Check reset bits - if reset cause is unknown, assume a
//  133  *          brown-out (low power), assume batteries are not reliable,
//  134  *          hang in a loop and sequence through the LEDs.
//  135  * @param   None
//  136  * @return  None
//  137  *********************************************************************/
//  138 void ChkReset( void )
//  139 {
//  140   uint8 led;
//  141   uint8 rib;
//  142 
//  143   // Isolate reset indicator bits
//  144   rib = SLEEP & LRESET;
//  145 
//  146   if ( rib == RESETPO )
//  147   {
//  148     // Put code here to handle Power-On reset
//  149   }
//  150   else if ( rib == RESETEX )
//  151   {
//  152     // Put code here to handle External reset
//  153   }
//  154   else if ( rib == RESETWD )
//  155   {
//  156     // Put code here to handle WatchDog reset
//  157   }
//  158   else
//  159   {
//  160     // Unknown, hang and blink
//  161     HAL_DISABLE_INTERRUPTS();
//  162     led = HAL_LED_4;
//  163     while ( 1 ) {
//  164       HalLedSet( led, HAL_LED_MODE_ON );
//  165       MicroWait( 62500 );
//  166       MicroWait( 62500 );
//  167       HalLedSet( led, HAL_LED_MODE_OFF );
//  168       MicroWait( 37500 );
//  169       MicroWait( 37500 );
//  170       if ( !(led >>= 1) )
//  171         led = HAL_LED_4;
//  172     }
//  173   }
//  174 }
//  175 
//  176 /*********************************************************************
//  177  *                        "Keyboard" Support
//  178  *********************************************************************/
//  179 
//  180 /*********************************************************************
//  181  * Keyboard Register function
//  182  *
//  183  * The keyboard handler is setup to send all keyboard changes to
//  184  * one task (if a task is registered).
//  185  *
//  186  * If a task registers, it will get all the keys. You can change this
//  187  * to register for individual keys.
//  188  *********************************************************************/

        RSEG BANKED_CODE:CODE:NOROOT(0)
//  189 byte RegisterForKeys( byte task_id )
RegisterForKeys:
        CFI Block cfiBlock1 Using cfiCommon0
        CFI Function RegisterForKeys
//  190 {
        PUSH	DPL
        CFI DPL0 Frame(CFA_SP, 4)
        CFI CFA_SP SP+-4
        PUSH	DPH
        CFI DPH0 Frame(CFA_SP, 5)
        CFI CFA_SP SP+-5
        ; Saved register size: 2
        ; Auto size: 0
//  191   // Allow only the first task
//  192   if ( registeredKeysTaskID == NO_TASK_ID )
        MOV	DPTR,#??registeredKeysTaskID
        MOVX	A,@DPTR
        XRL	A,#0xff
        JNZ	??RegisterForKeys_0
//  193   {
//  194     registeredKeysTaskID = task_id;
        MOV	A,R1
        MOVX	@DPTR,A
//  195     return ( true );
        MOV	R1,#0x1
        SJMP	??RegisterForKeys_1
//  196   }
//  197   else
//  198     return ( false );
??RegisterForKeys_0:
        MOV	R1,#0x0
??RegisterForKeys_1:
        LJMP	?Subroutine0 & 0xFFFF
        CFI EndBlock cfiBlock1
//  199 }
//  200 
//  201 /*********************************************************************
//  202  * @fn      OnBoard_SendKeys
//  203  *
//  204  * @brief   Send "Key Pressed" message to application.
//  205  *
//  206  * @param   keys  - keys that were pressed
//  207  *          state - shifted
//  208  *
//  209  * @return  status
//  210  *********************************************************************/

        RSEG BANKED_CODE:CODE:NOROOT(0)
//  211 byte OnBoard_SendKeys( byte keys, byte state )

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -