📄 mac_rx_engine.lst
字号:
##############################################################################
# #
# IAR 8051 C/C++ Compiler V7.20H/W32 16/Jan/2007 15:30:15 #
# 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_rx_engine.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_rx_engine.c #
# List file = E:\公司产品资料\Zigbee\cc2431\cc2431定位\LOC_Engi #
# ne\Test\mac\mac_loc\CC2430EB\List\mac_rx_engine.l #
# st #
# Object file = E:\公司产品资料\Zigbee\cc2431\cc2431定位\LOC_Engi #
# ne\Test\mac\mac_loc\CC2430EB\Obj\mac_rx_engine.r5 #
# 1 #
# #
# #
##############################################################################
E:\公司产品资料\Zigbee\cc2431\cc2431定位\LOC_Engine\lib\mac\CC2430\mac_rx_engine.c
1 /*******************************************************************************************************
2 * *
3 * ********** *
4 * ************ *
5 * *** *** *
6 * *** +++ *** *
7 * *** + + *** *
8 * *** + CHIPCON CC2430 INTEGRATED 802.15.4 MAC AND PHY *
9 * *** + + *** RX Engine *
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 the MAC RX engine (FIFOP interrupt), including packet processing functions, *
22 * and functions to control the RX state (on/off...) *
23 *******************************************************************************************************/
24 #include <mac_headers.h>
\ In segment SFR_AN, at 0x91
\ unsigned char volatile __sfr RFIM
\ RFIM:
\ 000000 DS 1
\ In segment SFR_AN, at 0x9b
\ unsigned char volatile __sfr S1CON
\ S1CON:
\ 000000 DS 1
\ In segment SFR_AN, at 0xd1
\ unsigned char volatile __sfr DMAIRQ
\ DMAIRQ:
\ 000000 DS 1
\ In segment SFR_AN, at 0xd6
\ unsigned char volatile __sfr DMAARM
\ DMAARM:
\ 000000 DS 1
\ In segment SFR_AN, at 0xd7
\ unsigned char volatile __sfr DMAREQ
\ DMAREQ:
\ 000000 DS 1
\ In segment SFR_AN, at 0xd9
\ unsigned char volatile __sfr RFD
\ RFD:
\ 000000 DS 1
\ In segment SFR_AN, at 0xe1
\ unsigned char volatile __sfr RFST
\ RFST:
\ 000000 DS 1
\ In segment SFR_AN, at 0xe9
\ unsigned char volatile __sfr RFIF
\ RFIF:
\ 000000 DS 1
25 #include <string.h>
26
27
28 //-------------------------------------------------------------------------------------------------------
29 // Variables related to the receive engine
\ In segment XDATA_Z, align 1, keep-with-next
\ 000000 REQUIRE __INIT_XDATA_Z
30 MAC_RX_INFO mrxInfo;
\ mrxInfo:
\ 000000 DS 23
31
32 // Variables related to the security within the receive engine
33 #if MAC_OPT_SECURITY
34 MAC_RX_SECURITY_INFO mrxSecurityInfo;
35 #endif
36
37 ROOT MLME_BEACON_NOTIFY_INDICATION *mrxMakeBeaconNotifyIndication(MAC_RX_PACKET *pPacket);
38 static ROOT void mrxHandleFifopInt(void);
39 static ROOT void mrxStartPayloadDmaTransfer(void);
40
41 //-------------------------------------------------------------------------------------------------------
42
43
44
45
46 /*******************************************************************************************************
47 *******************************************************************************************************
48 ************************** RECEIVE STATE MANAGEMENT **************************
49 *******************************************************************************************************
50 *******************************************************************************************************/
51
52
53
54
55 //-------------------------------------------------------------------------------------------------------
56 // void mrxIncrOnCounter(void)
57 //
58 // DESCRIPTION:
59 // Increments the "RX on" counter, and turns on RX on a 0 -> 1 transition
60 //-------------------------------------------------------------------------------------------------------
\ In segment NEAR_CODE, align 1, keep-with-next
61 void mrxIncrOnCounter(void) NEAR {
\ mrxIncrOnCounter:
\ 000000 C082 PUSH DPL
\ 000002 C083 PUSH DPH
\ 000004 ; Saved register size: 2
\ 000004 ; Auto size: 0
62 DISABLE_GLOBAL_INT();
\ 000004 C2AF CLR 0xa8.7
63 if (!mrxInfo.onCounter) {
\ 000006 90.... MOV DPTR,#(mrxInfo + 13)
\ 000009 E0 MOVX A,@DPTR
\ 00000A 700F JNZ ??mrxIncrOnCounter_0
64 CSP_INDICATE_RX_ON(TRUE);
\ 00000C 7401 MOV A,#0x1
\ 00000E 90DF15 MOV DPTR,#-0x20eb
\ 000011 F0 MOVX @DPTR,A
65 if (!msupIsTxActive()) {
\ 000012 ; Setup parameters for call to function msupIsTxActive
\ 000012 12.... LCALL msupIsTxActive & 0xFFFF
\ 000015 E9 MOV A,R1
\ 000016 7003 JNZ ??mrxIncrOnCounter_0
66 ISRXON;
\ 000018 75E1E2 MOV 0xe1,#-0x1e
67 }
68 }
69 mrxInfo.onCounter++;
\ ??mrxIncrOnCounter_0:
\ 00001B 90.... MOV DPTR,#(mrxInfo + 13)
\ 00001E E0 MOVX A,@DPTR
\ 00001F 04 INC A
\ 000020 80.. SJMP ?Subroutine0
70 ENABLE_GLOBAL_INT();
71 } // mrxIncrOnCounter
\ In segment NEAR_CODE, align 1, keep-with-next
\ ?Subroutine0:
\ 000000 F0 MOVX @DPTR,A
\ ??Subroutine0_0:
\ 000001 D2AF SETB 0xa8.7
\ ??Subroutine0_1:
\ 000003 D083 POP DPH
\ 000005 D082 POP DPL
\ 000007 02.... LJMP ?BRET
72
73
74
75
76 //-------------------------------------------------------------------------------------------------------
77 // void mrxAutoIncrOnCounter(void)
78 //
79 // DESCRIPTION:
80 // Increments the "RX on" counter, but does not turn on RX on a 0 -> 1 transition. This function
81 // should be used when issuing the STXON(CCA) or SACK(PEND) command strobes.
82 //-------------------------------------------------------------------------------------------------------
\ In segment NEAR_CODE, align 1, keep-with-next
83 void mrxAutoIncrOnCounter(void) NEAR {
\ mrxAutoIncrOnCounter:
\ 000000 C082 PUSH DPL
\ 000002 C083 PUSH DPH
\ 000004 ; Saved register size: 2
\ 000004 ; Auto size: 0
84 DISABLE_GLOBAL_INT();
\ 000004 C2AF CLR 0xa8.7
85 mrxInfo.onCounter++;
\ 000006 90.... MOV DPTR,#(mrxInfo + 13)
\ 000009 E0 MOVX A,@DPTR
\ 00000A 04 INC A
\ 00000B F0 MOVX @DPTR,A
86 CSP_INDICATE_RX_ON(TRUE);
\ 00000C 7401 MOV A,#0x1
\ 00000E 90DF15 MOV DPTR,#-0x20eb
\ 000011 80.. SJMP ?Subroutine0
87 ENABLE_GLOBAL_INT();
88 } // mrxAutoIncrOnCounter
89
90
91
92
93 //-------------------------------------------------------------------------------------------------------
94 // void mrxDecrOnCounter(void)
95 //
96 // DESCRIPTION:
97 // Decrements the "RX on" counter, and turns off RX on a 1 -> 0 transition if SFD is low. If SFD is
98 // high, the turn-off operation is delayed by one backoff period by using a callback.
99 //
100 // Note: Because of the CSP handling, this function must only be called at the start of a backoff
101 // period
102 //-------------------------------------------------------------------------------------------------------
\ In segment NEAR_CODE, align 1, keep-with-next
103 void mrxDecrOnCounter(void) NEAR {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -