📄 mac_indirect_queue.lst
字号:
##############################################################################
# #
# IAR 8051 C/C++ Compiler V7.20H/W32 16/Jan/2007 15:30:01 #
# Copyright 2004-2006 IAR Systems. All rights reserved. #
# #
# Core = plain #
# Code model = banked #
# Data model = large #
# Calling convention = xdata reentrant #
# Constant location = data #
# Dptr setup = 1,16 #
# Source file = E:\公司产品资料\Zigbee\cc2431\cc2431定位\LOC_Engi #
# ne\lib\mac\CC2430\mac_indirect_queue.c #
# Command line = -I "C:\Program Files\IAR Systems\Embedded #
# Workbench 4.05 Evaluation version\8051\INC\" -I #
# "C:\Program Files\IAR Systems\Embedded Workbench #
# 4.05 Evaluation version\8051\SRC\LIB\" -I #
# "C:\Program Files\IAR Systems\Embedded Workbench #
# 4.05 Evaluation version\8051\INC\CLIB\" -I #
# E:\公司产品资料\Zigbee\cc2431\cc2431定位\LOC_Engi #
# ne\Test\mac\mac_loc\..\..\..\include\ -I #
# E:\公司产品资料\Zigbee\cc2431\cc2431定位\LOC_Engi #
# ne\Test\mac\mac_loc\..\..\..\include\mac\cc2430\ #
# -I E:\公司产品资料\Zigbee\cc2431\cc2431定位\LOC_E #
# ngine\Test\mac\mac_loc\..\..\..\include\hal\cc243 #
# 0\ -I E:\公司产品资料\Zigbee\cc2431\cc2431定位\LO #
# C_Engine\Test\mac\mac_loc\..\..\..\apps\ -D #
# CC2430EB -D USE_LED -lCN #
# E:\公司产品资料\Zigbee\cc2431\cc2431定位\LOC_Engi #
# ne\Test\mac\mac_loc\CC2430EB\List\ -lA #
# E:\公司产品资料\Zigbee\cc2431\cc2431定位\LOC_Engi #
# ne\Test\mac\mac_loc\CC2430EB\List\ -o #
# E:\公司产品资料\Zigbee\cc2431\cc2431定位\LOC_Engi #
# ne\Test\mac\mac_loc\CC2430EB\Obj\ -e -s9 --debug #
# --core=plain --dptr=16,1 --data_model=large #
# --code_model=banked --calling_convention=xdata_re #
# entrant --place_constants=data --nr_virtual_regs #
# 8 E:\公司产品资料\Zigbee\cc2431\cc2431定位\LOC_En #
# gine\lib\mac\CC2430\mac_indirect_queue.c #
# List file = E:\公司产品资料\Zigbee\cc2431\cc2431定位\LOC_Engi #
# ne\Test\mac\mac_loc\CC2430EB\List\mac_indirect_qu #
# eue.lst #
# Object file = E:\公司产品资料\Zigbee\cc2431\cc2431定位\LOC_Engi #
# ne\Test\mac\mac_loc\CC2430EB\Obj\mac_indirect_que #
# ue.r51 #
# #
# #
##############################################################################
E:\公司产品资料\Zigbee\cc2431\cc2431定位\LOC_Engine\lib\mac\CC2430\mac_indirect_queue.c
1 /*******************************************************************************************************
2 * *
3 * ********** *
4 * ************ *
5 * *** *** *
6 * *** +++ *** *
7 * *** + + *** *
8 * *** + CHIPCON CC2430 INTEGRATED 802.15.4 MAC AND PHY *
9 * *** + + *** Indirect Packet Queue + Related *
10 * *** +++ *** *
11 * *** *** *
12 * ************ *
13 * ********** *
14 * *
15 *******************************************************************************************************
16 * CONFIDENTIAL *
17 * The use of this file is restricted by the signed MAC software license agreement. *
18 * *
19 * Copyright Chipcon AS, 2005 *
20 *******************************************************************************************************
21 * This module contains functions related to the indirect packet queue (on coordinators), including *
22 * queue management, transmission initiation, expiration, and other functions. *
23 *******************************************************************************************************/
24 #include <mac_headers.h>
25 #if MAC_OPT_FFD
26
27
28 //-------------------------------------------------------------------------------------------------------
29 // Variables related to the indirect packet queue
\ In segment PM0_XDATA, align 1
30 __no_init MAC_INDIRECT_QUEUE_INFO miqInfo @ "PM0_XDATA";
\ miqInfo:
\ 000000 DS 3
31 //-------------------------------------------------------------------------------------------------------
32
33
34
35
36 /*******************************************************************************************************
37 *******************************************************************************************************
38 ************************** QUEUE MANAGEMENT **************************
39 *******************************************************************************************************
40 *******************************************************************************************************/
41
42
43
44
45 //-------------------------------------------------------------------------------------------------------
46 // void miqInit(void)
47 //
48 // DESCRIPTION:
49 // Initializes the indirect packet queue
50 //-------------------------------------------------------------------------------------------------------
\ In segment NEAR_CODE, align 1, keep-with-next
51 ROOT void miqInit(void) {
\ miqInit:
\ 000000 C082 PUSH DPL
\ 000002 C083 PUSH DPH
\ 000004 ; Saved register size: 2
\ 000004 ; Auto size: 0
52 miqInfo.firstIndirectPacket = NO_PACKET;
\ 000004 74FF MOV A,#-0x1
\ 000006 90.... MOV DPTR,#miqInfo
\ 000009 F0 MOVX @DPTR,A
53 miqInfo.lastIndirectPacket = NO_PACKET;
\ 00000A 90.... MOV DPTR,#(miqInfo + 1)
\ 00000D F0 MOVX @DPTR,A
54 miqInfo.requestedCounter = 0;
\ 00000E E4 CLR A
\ 00000F 90.... MOV DPTR,#(miqInfo + 2)
\ 000012 F0 MOVX @DPTR,A
55 } // miqInit
\ 000013 REQUIRE ?Subroutine0
\ 000013 ; // Fall through to label ?Subroutine0
\ In segment NEAR_CODE, align 1, keep-with-next
\ ?Subroutine0:
\ 000000 D083 POP DPH
\ 000002 D082 POP DPL
\ 000004 22 RET
56
57
58
59
60 //-------------------------------------------------------------------------------------------------------
61 // void miqAddIndirectPacket(MAC_TASK_INFO *pTask)
62 //
63 // DESCRIPTION:
64 // This task adds a packet to the indirect queue.
65 //
66 // TASK DATA:
67 // A pointer to the MAC_TX_PACKET to be added
68 //-------------------------------------------------------------------------------------------------------
\ In segment NEAR_CODE, align 1, keep-with-next
69 void miqAddIndirectPacket(MAC_TASK_INFO *pTask) NEAR {
\ miqAddIndirectPacket:
\ 000000 74F0 MOV A,#-0x10
\ 000002 12.... LCALL ?BANKED_ENTER_XDATA
\ 000005 ; Saved register size: 16
\ 000005 ; Auto size: 0
\ 000005 EA MOV A,R2
\ 000006 FC MOV R4,A
\ 000007 EB MOV A,R3
\ 000008 FD MOV R5,A
70 MAC_TX_PACKET *pPacket = (MAC_TX_PACKET *) pTask->taskData;
\ 000009 8C82 MOV DPL,R4
\ 00000B 8D83 MOV DPH,R5
\ 00000D A3 INC DPTR
\ 00000E A3 INC DPTR
\ 00000F A3 INC DPTR
\ 000010 E0 MOVX A,@DPTR
\ 000011 F8 MOV R0,A
\ 000012 A3 INC DPTR
\ 000013 E0 MOVX A,@DPTR
\ 000014 F9 MOV R1,A
71 MAC_TX_PACKET *pIndirectPacket;
72 UINT8 temp;
73 BYTE destAddrMode;
74 ADDRESS *pDestAddr;
75
76 switch (pTask->state) {
\ 000015 EC MOV A,R4
\ 000016 2405 ADD A,#0x5
\ 000018 F5.. MOV ?V0 + 6,A
\ 00001A ED MOV A,R5
\ 00001B 3400 ADDC A,#0x0
\ 00001D F5.. MOV ?V0 + 7,A
\ 00001F 85..82 MOV DPL,?V0 + 6
\ 000022 F583 MOV DPH,A
\ 000024 E0 MOVX A,@DPTR
\ 000025 12.... LCALL ?UC_SWITCH_DENSE
\ `?<Jumptable for miqAddIndirectPacket>_0`:
\ 000028 00 DB 0
\ 000029 01 DB 1
\ 00002A .... DW ??miqAddIndirectPacket_0
\ 00002C .... DW ??miqAddIndirectPacket_1
\ 00002E .... DW ??miqAddIndirectPacket_2
77 case MIQ_STATE_FIND_FIRST_PACKET_FROM_NODE:
78 // Start by determining whether or not this is the first indirect packet to this node.
79 pPacket->isFirstPacket = TRUE;
\ ??miqAddIndirectPacket_1:
\ 000030 E8 MOV A,R0
\ 000031 248F ADD A,#-0x71
\ 000033 F5.. MOV ?V0 + 4,A
\ 000035 E9 MOV A,R1
\ 000036 3400 ADDC A,#0x0
\ 000038 F5.. MOV ?V0 + 5,A
\ 00003A 7401 MOV A,#0x1
\ 00003C 85..82 MOV DPL,?V0 + 4
\ 00003F 85..83 MOV DPH,?V0 + 5
\ 000042 F0 MOVX @DPTR,A
80 destAddrMode = (BYTE)(pPacket->pHeader[1] & DEST_ADDR_BM);
\ 000043 8882 MOV DPL,R0
\ 000045 8983 MOV DPH,R1
\ 000047 A3 INC DPTR
\ 000048 A3 INC DPTR
\ 000049 A3 INC DPTR
\ 00004A A3 INC DPTR
\ 00004B E0 MOVX A,@DPTR
\ 00004C 540C ANL A,#0xc
\ 00004E F5.. MOV ?V0 + 2,A
81 pDestAddr = (ADDRESS*) (pPacket->pHeader + 5);
\ 000050 E8 MOV A,R0
\ 000051 2408 ADD A,#0x8
\ 000053 F5.. MOV ?V0 + 0,A
\ 000055 E9 MOV A,R1
\ 000056 3400 ADDC A,#0x0
\ 000058 F5.. MOV ?V0 + 1,A
82
83 // Go through the whole packet queue, and clear the isFirstPacket flag if a match is found
84 temp = miqInfo.firstIndirectPacket;
\ 00005A 90.... MOV DPTR,#miqInfo
\ 00005D 8014 SJMP ??miqAddIndirectPacket_3
85 while (temp != NO_PACKET) {
86 pIndirectPacket = &pMtxPacketPool[temp];
87 if (destAddrMode == (pIndirectPacket->pHeader[1] & DEST_ADDR_BM)) {
88 if (destAddrMode == DEST_ADDR_SHORT) {
89 if (pDestAddr->Short == *((WORD *) (pIndirectPacket->pHeader + 5))) {
90 pPacket->isFirstPacket = FALSE;
91 break;
92 }
93 } else {
94 if (msupCompareExtendedAddress((ADDRESS *) pDestAddr, (ADDRESS *) (pIndirectPacket->pHeader + 5))) {
\ ??miqAddIndirectPacket_4:
\ 00005F ; Setup parameters for call to function msupCompareExtendedAddress
\ 00005F AA.. MOV R2,?V0 + 0
\ 000061 AB.. MOV R3,?V0 + 1
\ 000063 12.... LCALL msupCompareExtendedAddress & 0xFFFF
\ 000066 E9 MOV A,R1
\ 000067 7053 JNZ ??miqAddIndirectPacket_5
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -