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

📄 ref_node.s51

📁 zigbee location examples
💻 S51
📖 第 1 页 / 共 5 页
字号:

        ASEGN SFR_AN:DATA:NOROOT,0aeH
// unsigned char volatile __sfr FCTL
FCTL:
        DS 1

        ASEGN SFR_AN:DATA:NOROOT,0c6H
// unsigned char volatile __sfr CLKCON
CLKCON:
        DS 1

        ASEGN SFR_AN:DATA:NOROOT,0c7H
// unsigned char volatile __sfr MEMCTR
MEMCTR:
        DS 1

        ASEGN SFR_AN:DATA:NOROOT,0c9H
// unsigned char volatile __sfr WDCTL
WDCTL:
        DS 1

        ASEGN SFR_AN:DATA:NOROOT,0d1H
// unsigned char volatile __sfr DMAIRQ
DMAIRQ:
        DS 1

        ASEGN SFR_AN:DATA:NOROOT,0d4H
// unsigned char volatile __sfr DMA0CFGL
DMA0CFGL:
        DS 1

        ASEGN SFR_AN:DATA:NOROOT,0d5H
// unsigned char volatile __sfr DMA0CFGH
DMA0CFGH:
        DS 1

        ASEGN SFR_AN:DATA:NOROOT,0d6H
// unsigned char volatile __sfr DMAARM
DMAARM:
        DS 1
//   45 #include "node.h"
//   46 
//   47 // flags
//   48 extern BOOL msgReceived;
//   49 
//   50 // node parameters
//   51 extern MSG_BUFFER buffer;
//   52 extern UINT16_2   x;
//   53 extern UINT16_2   y;
//   54 extern UINT8      z;
//   55 extern BOOL       parametersReceived;
//   56 extern BOOL       blinkLed;
//   57 extern UINT8      ledBlinkCounter;
//   58 
//   59 // Flash storing
//   60 #define XYZ_FLASH_ADDRESS        0xF000
//   61 #define PAGE_NUMBER              ((XYZ_FLASH_ADDRESS >> 11) + 32)
//   62 #define XYZ_BANK                 3
//   63 #define FLASH_PAGE_SIZE          2048
//   64 #define NUMBER_OF_FLASH_ENTRIES  (FLASH_PAGE_SIZE / sizeof(FLASH_ENTRY))
//   65 #define SET_MEMORY_BANK(bank)    do{ MEMCTR = (MEMCTR & ~0x30) | (bank << 4); } while(0)
//   66 
//   67 
//   68 // Reference node states
//   69 enum {
//   70    AWAKE_STATE,
//   71    SLEEP_STATE,
//   72    BLINK_LED_STATE

        RSEG XDATA_Z:XDATA:NOROOT(0)
        REQUIRE __INIT_XDATA_Z
//   73 } refNodeState;
refNodeState:
        DS 1
//   74 
//   75 
//   76 // Flash storage struct
//   77 typedef struct{
//   78    BYTE status[3];
//   79    struct{
//   80       UINT16_2 x;
//   81       UINT16_2 y;
//   82       UINT8    z;
//   83    }xyz_coordinates;
//   84 }FLASH_ENTRY;
//   85 
//   86 // Pointers, arrays, variables

        RSEG XDATA_Z:XDATA:NOROOT(0)
        REQUIRE __INIT_XDATA_Z
//   87 FLASH_ENTRY __code* pFlashEntry;
pFlashEntry:
        DS 2

        RSEG XDATA_Z:XDATA:NOROOT(0)
        REQUIRE __INIT_XDATA_Z
//   88 FLASH_ENTRY flashEntries[2];
flashEntries:
        DS 16

        RSEG XDATA_Z:XDATA:NOROOT(0)
        REQUIRE __INIT_XDATA_Z
//   89 volatile DMA_DESC dmaChannel;
dmaChannel:
        DS 8

        RSEG PM0_XDATA:XDATA:REORDER:NOROOT(0)
//   90 __no_init BYTE pRamBuffer[10] @ "PM0_XDATA";
pRamBuffer:
        DS 10
//   91 
//   92 
//   93 /******************************************************************************
//   94 *
//   95 * This function is the main loop for Reference Node
//   96 ******************************************************************************/

        RSEG NEAR_CODE:CODE:NOROOT(0)
//   97 __near_func void RunRefNode(BOOL resetCoordinates){
RunRefNode:
        CFI Block cfiBlock0 Using cfiCommon0
        CFI Function RunRefNode
        FUNCALL RunRefNode, SendText
        LOCFRAME XSTACK, 23, STACK
        ARGFRAME XSTACK, 23, STACK
        FUNCALL RunRefNode, setUpDmaToFlash
        LOCFRAME XSTACK, 23, STACK
        ARGFRAME XSTACK, 23, STACK
        FUNCALL RunRefNode, getCoordinates
        LOCFRAME XSTACK, 23, STACK
        ARGFRAME XSTACK, 23, STACK
        FUNCALL RunRefNode, AddToSleepTimer
        LOCFRAME XSTACK, 23, STACK
        ARGFRAME XSTACK, 23, STACK
        FUNCALL RunRefNode, PrintXY
        LOCFRAME XSTACK, 23, STACK
        ARGFRAME XSTACK, 23, STACK
        FUNCALL RunRefNode, SendPosition
        LOCFRAME XSTACK, 23, STACK
        ARGFRAME XSTACK, 23, STACK
        FUNCALL RunRefNode, AddToSleepTimer
        LOCFRAME XSTACK, 23, STACK
        ARGFRAME XSTACK, 23, STACK
        FUNCALL RunRefNode, SendPosition
        LOCFRAME XSTACK, 23, STACK
        ARGFRAME XSTACK, 23, STACK
        FUNCALL RunRefNode, storeCoordinates
        LOCFRAME XSTACK, 23, STACK
        ARGFRAME XSTACK, 23, STACK
        FUNCALL RunRefNode, PrintXY
        LOCFRAME XSTACK, 23, STACK
        ARGFRAME XSTACK, 23, STACK
        FUNCALL RunRefNode, AddToSleepTimer
        LOCFRAME XSTACK, 23, STACK
        ARGFRAME XSTACK, 23, STACK
        FUNCALL RunRefNode, GetSleepTimer
        LOCFRAME XSTACK, 23, STACK
        ARGFRAME XSTACK, 23, STACK
        FUNCALL RunRefNode, SendPosition
        LOCFRAME XSTACK, 23, STACK
        ARGFRAME XSTACK, 23, STACK
        FUNCALL RunRefNode, mpmSetAndResumeMacAndCpuPowerMode
        LOCFRAME XSTACK, 23, STACK
        ARGFRAME XSTACK, 23, STACK
        MOV	A,#-0xf
        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 V7 load(1, XDATA, add(CFA_XSP16, literal(-6)))
        CFI V6 load(1, XDATA, add(CFA_XSP16, literal(-7)))
        CFI V5 load(1, XDATA, add(CFA_XSP16, literal(-8)))
        CFI V4 load(1, XDATA, add(CFA_XSP16, literal(-9)))
        CFI V3 load(1, XDATA, add(CFA_XSP16, literal(-10)))
        CFI V2 load(1, XDATA, add(CFA_XSP16, literal(-11)))
        CFI V1 load(1, XDATA, add(CFA_XSP16, literal(-12)))
        CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-13)))
        CFI VB load(1, XDATA, add(CFA_XSP16, literal(-14)))
        CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-15)))
        CFI CFA_SP SP+0
        CFI CFA_XSP16 add(XSP16, 15)
        ; Saved register size: 15
        ; Auto size: 8
        MOV	A,#-0x8
        LCALL	?ALLOC_XSTACK8
        CFI CFA_XSP16 add(XSP16, 23)
        MOV	A,R1
        MOV	R6,A
//   98    BYTE     packetType;
//   99    UINT32   msgTimerValue, msgTimerValueNextSend, sleepTimerValue;
//  100 
//  101    SendText("RefNode Powerup");
        ; Setup parameters for call to function SendText
        MOV	R2,#(`?<Constant "RefNode Powerup">` & 0xff)
        MOV	R3,#((`?<Constant "RefNode Powerup">` >> 8) & 0xff)
        MOV	DPTR,#(SendText & 0xffff)
        MOV	A,#((SendText >> 16) & 0xff)
        LCALL	?BCALL               ; Banked call to: DPTR()
//  102 
//  103    setUpDmaToFlash();
        ; Setup parameters for call to function setUpDmaToFlash
        LCALL	setUpDmaToFlash
//  104 
//  105    if(resetCoordinates){
        MOV	A,R6
        JZ	??RunRefNode_0
//  106       x = y = UNINITIALIZED_XY_VALUE;
??RunRefNode_1:
        MOV	DPTR,#y
        MOV	A,#-0x1
        MOVX	@DPTR,A
        INC	DPTR
        MOVX	@DPTR,A
        MOV	DPTR,#x
        MOVX	@DPTR,A
        INC	DPTR
        MOVX	@DPTR,A
//  107       z = UNINITIALIZED_Z_VALUE;
        MOV	DPTR,#z
        MOVX	@DPTR,A
        SJMP	??RunRefNode_2
//  108    }
//  109    else{
//  110       if( !getCoordinates() )
??RunRefNode_0:
        ; Setup parameters for call to function getCoordinates
        LCALL	getCoordinates
        MOV	A,R1
        JZ	??RunRefNode_1
//  111       {
//  112          x = y = UNINITIALIZED_XY_VALUE;
//  113          z = UNINITIALIZED_Z_VALUE;
//  114       }
//  115    }
//  116 
//  117    // Setting up to sleep at the appropriate time
//  118    refNodeState = AWAKE_STATE;
??RunRefNode_2:
        CLR	A
        MOV	DPTR,#refNodeState
        MOVX	@DPTR,A
//  119    AddToSleepTimer(REF_NODE_POWER_UP_TIME);
        ; Setup parameters for call to function AddToSleepTimer
        MOV	R2,#-0x6
        MOV	R3,A
        MOV	DPTR,#(AddToSleepTimer & 0xffff)
        MOV	A,#((AddToSleepTimer >> 16) & 0xff)
        LCALL	?BCALL               ; Banked call to: DPTR()
//  120    INT_SETFLAG(INUM_ST, INT_CLR);
        CLR	0xc0.7
//  121    INT_ENABLE(INUM_ST, INT_ON);
        SETB	0xa8.5
//  122    msgTimerValueNextSend = 0;
        MOV	DPTR,#__Constant_0
        MOV	R0,#?V0 + 0
        LCALL	?L_MOV_X
//  123 
//  124 #ifdef CC2430EB
//  125    PrintXY();
        ; Setup parameters for call to function PrintXY
        MOV	DPTR,#(PrintXY & 0xffff)
        MOV	A,#((PrintXY >> 16) & 0xff)
        LCALL	?BCALL               ; Banked call to: DPTR()
//  126 #endif
//  127 
//  128    SET_BUFFER_EMPTY();
        CLR	A
        MOV	DPTR,#buffer
        MOVX	@DPTR,A
//  129 
//  130    WDT_SET_TIMEOUT_PERIOD(SEC_1);
        ANL	0xc9,#0xfc
        MOV	A,0xc9
        MOV	0xc9,0xc9
//  131    WDT_ENABLE();
        ORL	0xc9,#0x8
        SJMP	??RunRefNode_3
//  132 
//  133    while(TRUE) {
//  134       WDT_RESET();
//  135 
//  136       if (msgReceived){
//  137          msgReceived = FALSE;
//  138          packetType = buffer.b.pMsdu[PACKET_INDEX_TYPE];
//  139 
//  140          if (packetType == PACKET_TYPE_BLIND_NODE_REQ_SIGNAL){
//  141             if( x != UNINITIALIZED_XY_VALUE || y != UNINITIALIZED_XY_VALUE)
//  142             {
//  143 #ifdef USE_LED
//  144                LED1 = LED_ON;
//  145 #endif
//  146                SendPosition(buffer.b.srcAddr.Short);
//  147 #ifdef USE_LED
//  148                LED1 = LED_OFF;
//  149 #endif
//  150                // Avoiding to be in Power Down next time a packet is for me by increasing awake time
//  151                AddToSleepTimer(REF_NODE_EXTENSION_UP_TIME);
//  152             }
//  153          }
//  154          SET_BUFFER_EMPTY();
//  155       }
//  156 
//  157       // Check if xyz coordinates are to be written to FLASH
//  158       if(parametersReceived){
//  159          INT_ENABLE(INUM_ST, INT_OFF);
//  160          parametersReceived = FALSE;
//  161          SendPosition(PC_SHORT);
//  162 
//  163          storeCoordinates();
//  164 #ifdef CC2430EB
//  165          PrintXY();
//  166 #endif
//  167          INT_SETFLAG(INUM_ST, INT_CLR);
//  168          INT_ENABLE(INUM_ST, INT_ON);
//  169          AddToSleepTimer(REF_NODE_EXTENSION_UP_TIME);
//  170       }
//  171 
//  172       // Check if a blink led message is received
//  173       if (blinkLed){
//  174          blinkLed = FALSE;
//  175          LED1 = LED_ON;
//  176          ledBlinkCounter = 0;
//  177          refNodeState = BLINK_LED_STATE;
//  178       }
//  179 
//  180       // Check if the node should send a message to PC
//  181       GetSleepTimer(&sleepTimerValue);
//  182       if( ( (msgTimerValue < msgTimerValueNextSend) && (sleepTimerValue > msgTimerValueNextSend) ) ||
//  183           ( (msgTimerValue < msgTimerValueNextSend) && (sleepTimerValue < msgTimerValue        ) ) ||
//  184           ( (msgTimerValueNextSend < msgTimerValue) && (sleepTimerValue > msgTimerValueNextSend) && (sleepTimerValue < msgTimerValue) ) )
//  185       {
//  186          SendPosition(PC_SHORT);
//  187          msgTimerValue = sleepTimerValue;
//  188          msgTimerValueNextSend = msgTimerValue + (UINT32)REF_NODE_MSG_INTERVALL;
//  189          msgTimerValueNextSend &= ~0xFF000000;
//  190       }
//  191 
//  192       if(refNodeState == AWAKE_STATE)
//  193       {
//  194 #if defined CC2430EB && defined USE_LED
//  195          LED3 = LED_ON;
??RunRefNode_4:
        CLR	0x90.3
//  196 #elif defined CC2430DB && defined USE_LED
//  197          LED2 = LED_ON;
//  198 #endif
//  199       }
??RunRefNode_3:
        MOV	A,#0xf
        ANL	A,0xc9
        ORL	A,#0xa0
        MOV	0xc9,A
        MOV	A,#0xf
        ANL	A,0xc9
        ORL	A,#0x50
        MOV	0xc9,A
        MOV	DPTR,#msgReceived
        MOVX	A,@DPTR
        JZ	??RunRefNode_5
        CLR	A
        MOVX	@DPTR,A
        MOV	DPTR,#(buffer + 27)
        MOVX	A,@DPTR
        XRL	A,#0x11
        JNZ	??RunRefNode_6
        MOV	DPTR,#x
        MOVX	A,@DPTR
        XRL	A,#0xff
        JNZ	??RunRefNode_7
        INC	DPTR
        MOVX	A,@DPTR
        XRL	A,#0xff
??RunRefNode_7:
        JNZ	??RunRefNode_8
        MOV	DPTR,#y
        MOVX	A,@DPTR
        XRL	A,#0xff
        JNZ	??RunRefNode_9
        INC	DPTR
        MOVX	A,@DPTR
        XRL	A,#0xff
??RunRefNode_9:
        JZ	??RunRefNode_6
??RunRefNode_8:
        CLR	0x90.0
        ; Setup parameters for call to function SendPosition
        MOV	DPTR,#(buffer + 4)
        MOVX	A,@DPTR
        MOV	R2,A
        INC	DPTR
        MOVX	A,@DPTR
        MOV	R3,A
        MOV	DPTR,#(SendPosition & 0xffff)
        MOV	A,#((SendPosition >> 16) & 0xff)
        LCALL	?BCALL               ; Banked call to: DPTR()
        SETB	0x90.0
        ; Setup parameters for call to function AddToSleepTimer
        MOV	R2,#-0x12
        MOV	R3,#0x2
        MOV	DPTR,#(AddToSleepTimer & 0xffff)
        MOV	A,#((AddToSleepTimer >> 16) & 0xff)

⌨️ 快捷键说明

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