📄 mac_rx_pool.s51
字号:
// 32
// 33
// 34
// 35 //-------------------------------------------------------------------------------------------------------
// 36 // void mrxpInit(void)
// 37 //
// 38 // DESCRIPTION:
// 39 // Initializes the RX packet pool by clearing the "occupied" bits.
// 40 //-------------------------------------------------------------------------------------------------------
RSEG NEAR_CODE:CODE:NOROOT(0)
// 41 ROOT void mrxpInit(void) {
mrxpInit:
CFI Block cfiBlock0 Using cfiCommon0
CFI Function mrxpInit
FUNCALL mrxpInit, memset
LOCFRAME XSTACK, 11, STACK
ARGFRAME XSTACK, 11, STACK
MOV A,#-0x9
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 V1 load(1, XDATA, add(CFA_XSP16, literal(-6)))
CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-7)))
CFI VB load(1, XDATA, add(CFA_XSP16, literal(-8)))
CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-9)))
CFI CFA_SP SP+0
CFI CFA_XSP16 add(XSP16, 9)
; Saved register size: 9
; Auto size: 0
// 42 memset(pMrxPacketPool, 0x00, sizeof(MAC_RX_PACKET) * MAC_OPT_RX_POOL_SIZE);
; Setup parameters for call to function memset
MOV ?V0 + 0,#0x7c
MOV ?V0 + 1,#0x2
MOV R0,#?V0 + 0
LCALL ?PUSH_XSTACK_I_TWO
CFI CFA_XSP16 add(XSP16, 11)
MOV R4,#0x0
MOV R5,#0x0
MOV R2,#(pMrxPacketPool & 0xff)
MOV R3,#((pMrxPacketPool >> 8) & 0xff)
MOV DPTR,#(memset & 0xffff)
MOV A,#((memset >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
MOV A,#0x2
LCALL ?DEALLOC_XSTACK8
CFI CFA_XSP16 add(XSP16, 9)
// 43 } // mrxpInit
MOV R7,#0x2
LJMP ?FUNC_LEAVE_XDATA
CFI EndBlock cfiBlock0
// 44
// 45
// 46
// 47
// 48 //-------------------------------------------------------------------------------------------------------
// 49 // mrxpReservePacket(MAC_RX_PACKET **macRxPacket)
// 50 //
// 51 // DESCRIPTION:
// 52 // Reserves a packet from the RX packet pool.
// 53 //
// 54 //-------------------------------------------------------------------------------------------------------
RSEG NEAR_CODE:CODE:NOROOT(0)
// 55 ROOT MAC_RX_PACKET * mrxpReservePacket(void) {
mrxpReservePacket:
CFI Block cfiBlock1 Using cfiCommon0
CFI Function mrxpReservePacket
PUSH DPL
CFI DPL0 Frame(CFA_SP, 3)
CFI CFA_SP SP+-3
PUSH DPH
CFI DPH0 Frame(CFA_SP, 4)
CFI CFA_SP SP+-4
; Saved register size: 2
; Auto size: 0
// 56 MAC_RX_PACKET *pPacket;
// 57 UINT8 n;
// 58 for (n = 0; n < MAC_OPT_RX_POOL_SIZE; n++) {
MOV R3,#0x0
// 59 pPacket = &pMrxPacketPool[n];
??mrxpReservePacket_0:
MOV A,R3
MOV B,#-0x61
MUL AB
ADD A,#(pMrxPacketPool & 0xff)
MOV DPL,A
MOV A,B
ADDC A,#((pMrxPacketPool >> 8) & 0xff)
MOV DPH,A
// 60 DISABLE_GLOBAL_INT();
CLR 0xa8.7
// 61 if (!(pPacket->flags & MRXP_FLAG_PACKET_OCCUPIED_BM)) {
MOVX A,@DPTR
MOV C,0xE0 /* A */.0
JC ??mrxpReservePacket_1
// 62 pPacket->flags |= MRXP_FLAG_PACKET_OCCUPIED_BM;
SETB 0xE0 /* A */.0
MOVX @DPTR,A
// 63 ENABLE_GLOBAL_INT();
SETB 0xa8.7
// 64 return pPacket;
MOV R2,DPL
MOV R3,DPH
SJMP ??mrxpReservePacket_2
// 65 }
// 66 ENABLE_GLOBAL_INT();
??mrxpReservePacket_1:
SETB 0xa8.7
// 67 }
INC R3
MOV A,R3
CLR C
SUBB A,#0x4
JC ??mrxpReservePacket_0
// 68 return NULL;
MOV R2,#0x0
MOV R3,#0x0
CFI EndBlock cfiBlock1
??mrxpReservePacket_2:
REQUIRE ?Subroutine0
; // Fall through to label ?Subroutine0
// 69 } // mrxpReservePacket
RSEG NEAR_CODE:CODE:NOROOT(0)
?Subroutine0:
CFI Block cfiBlock2 Using cfiCommon0
CFI NoFunction
CFI CFA_SP SP+-4
CFI DPL0 Frame(CFA_SP, 3)
CFI DPH0 Frame(CFA_SP, 4)
POP DPH
CFI CFA_SP SP+-3
CFI DPH0 SameValue
POP DPL
CFI CFA_SP SP+-2
CFI DPL0 SameValue
RET
CFI EndBlock cfiBlock2
// 70
// 71
// 72
// 73
// 74 //-------------------------------------------------------------------------------------------------------
// 75 // void mrxpReleasePacket(MAC_RX_PACKET* pPacket)
// 76 //
// 77 // DESCRIPTION:
// 78 // Releases a packet back to the RX packet pool.
// 79 //
// 80 // ARGUMENTS:
// 81 // MAC_RX_PACKET* pPacket
// 82 // A pointer to the packet to be released. This parameter can be NULL.
// 83 //-------------------------------------------------------------------------------------------------------
RSEG NEAR_CODE:CODE:NOROOT(0)
// 84 ROOT void mrxpReleasePacket(MAC_RX_PACKET *pPacket) {
mrxpReleasePacket:
CFI Block cfiBlock3 Using cfiCommon0
CFI Function mrxpReleasePacket
PUSH DPL
CFI DPL0 Frame(CFA_SP, 3)
CFI CFA_SP SP+-3
PUSH DPH
CFI DPH0 Frame(CFA_SP, 4)
CFI CFA_SP SP+-4
; Saved register size: 2
; Auto size: 0
// 85 if (pPacket) pPacket->flags = 0x00;
MOV A,R2
JNZ ??mrxpReleasePacket_0
MOV A,R3
??mrxpReleasePacket_0:
JZ ??mrxpReleasePacket_1
CLR A
MOV DPL,R2
MOV DPH,R3
MOVX @DPTR,A
// 86 } // mrxpReleasePacket
??mrxpReleasePacket_1:
SJMP ?Subroutine0
CFI EndBlock cfiBlock3
ASEGN SFR_AN:DATA:NOROOT,0a8H
// union <unnamed> volatile __sfr _A_IEN0
_A_IEN0:
DS 1
END
// 87
//
// 117 bytes in segment NEAR_CODE
// 636 bytes in segment PM0_XDATA
// 1 byte in segment SFR_AN
//
// 117 bytes of CODE memory
// 0 bytes of DATA memory (+ 1 byte shared)
// 636 bytes of XDATA memory
//
//Errors: none
//Warnings: none
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -