📄 mac_tx_engine.lst
字号:
##############################################################################
# #
# IAR 8051 C/C++ Compiler V7.20H/W32 16/Jan/2007 15:33:56 #
# 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_tx_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 #
# USE_LED -D SOC_BB -lCN "E:\公司产品资料\Zigbee\cc #
# 2431\cc2431定位\LOC_Engine\Test\mac\mac_loc\SOC_B #
# B, hex\List\" -lA "E:\公司产品资料\Zigbee\cc2431\ #
# cc2431定位\LOC_Engine\Test\mac\mac_loc\SOC_BB, #
# hex\List\" -o "E:\公司产品资料\Zigbee\cc2431\cc24 #
# 31定位\LOC_Engine\Test\mac\mac_loc\SOC_BB, #
# hex\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_tx_engine.c #
# List file = E:\公司产品资料\Zigbee\cc2431\cc2431定位\LOC_Engi #
# ne\Test\mac\mac_loc\SOC_BB, #
# hex\List\mac_tx_engine.lst #
# Object file = E:\公司产品资料\Zigbee\cc2431\cc2431定位\LOC_Engi #
# ne\Test\mac\mac_loc\SOC_BB, #
# hex\Obj\mac_tx_engine.r51 #
# #
# #
##############################################################################
E:\公司产品资料\Zigbee\cc2431\cc2431定位\LOC_Engine\lib\mac\CC2430\mac_tx_engine.c
1 /*******************************************************************************************************
2 * *
3 * ********** *
4 * ************ *
5 * *** *** *
6 * *** +++ *** *
7 * *** + + *** *
8 * *** + CHIPCON CC2430 INTEGRATED 802.15.4 MAC AND PHY *
9 * *** + + *** TX 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 TX engine, which is used to transmit all RF packets. *
22 *******************************************************************************************************/
23 #include "mac_headers.h"
\ In segment SFR_AN, at 0x9c
\ unsigned char volatile __sfr T2PEROF0
\ T2PEROF0:
\ 000000 DS 1
\ In segment SFR_AN, at 0x9d
\ unsigned char volatile __sfr T2PEROF1
\ T2PEROF1:
\ 000000 DS 1
\ In segment SFR_AN, at 0x9e
\ unsigned char volatile __sfr T2PEROF2
\ T2PEROF2:
\ 000000 DS 1
\ In segment SFR_AN, at 0xa1
\ unsigned char volatile __sfr T2OF0
\ T2OF0:
\ 000000 DS 1
\ In segment SFR_AN, at 0xa2
\ unsigned char volatile __sfr T2OF1
\ T2OF1:
\ 000000 DS 1
\ In segment SFR_AN, at 0xa3
\ unsigned char volatile __sfr T2OF2
\ T2OF2:
\ 000000 DS 1
\ In segment SFR_AN, at 0xc3
\ unsigned char volatile __sfr T2CNF
\ T2CNF:
\ 000000 DS 1
\ In segment SFR_AN, at 0xe1
\ unsigned char volatile __sfr RFST
\ RFST:
\ 000000 DS 1
24
25 //-------------------------------------------------------------------------------------------------------
26 // Transmission related variables
\ In segment XDATA_Z, align 1, keep-with-next
\ 000000 REQUIRE __INIT_XDATA_Z
27 MAC_TX_INFO mtxInfo;
\ mtxInfo:
\ 000000 DS 13
28 //-------------------------------------------------------------------------------------------------------
29
30
31 //-------------------------------------------------------------------------------------------------------
32 //
33 // Prototypes
34 //
35 //-------------------------------------------------------------------------------------------------------
36 static ROOT void HandleOutgoingClearText (MAC_TX_PACKET *macTxPacket,
37 FRAME *frame);
38 static ROOT void HandleOutgoingFrame (MAC_TX_PACKET *macTxPacket,
39 FRAME *frame,
40 SECURITY_STATUS *securityStatus);
41 static ROOT void HandleOutgoingSecurity (MAC_TX_PACKET *macTxPacket,
42 FRAME *frame,
43 SECURITY_STATUS *securityStatus);
44 static ROOT void LoadAndStartStrobe (BYTE txMode,
45 BOOL slotted,
46 BYTE be,
47 BYTE nb,
48 BYTE randomBackoff,
49 BYTE noOfBackoffsLeft);
50 static ROOT void ReadCsmaParams (BYTE *be,
51 BYTE *nb,
52 BYTE *randomBackoff);
53 ROOT void WriteCsmaParams (BYTE be,
54 BYTE nb,
55 BYTE randomBackoff,
56 BYTE noOfBackoffsLeft);
57 ROOT void PrepareFrameAndWriteToRf (MAC_TX_PACKET *macTxPacket,
58 SECURITY_STATUS *securityStatus);
59
60 //-------------------------------------------------------------------------------------------------------
61 // void mtxCommStatusIndication(MAC_TX_PACKET *pPacket, BYTE status)
62 //
63 // DESCRIPTION:
64 // This function generates comm-status indications for transmitted packets, by parsing the
65 // packet header.
66 //
67 // ARGUMENTS:
68 // MAC_TX_PACKET *pPacket
69 // A pointer to the transmitted packet (which the address information will be extracted from)
70 // BYTE status
71 // The status to be passed in mlmeCommStatusIndication
72 //-------------------------------------------------------------------------------------------------------
\ In segment NEAR_CODE, align 1, keep-with-next
73 ROOT void mtxCommStatusIndication(MAC_TX_PACKET *pPacket, BYTE status) {
\ mtxCommStatusIndication:
\ 000000 74F5 MOV A,#-0xb
\ 000002 12.... LCALL ?FUNC_ENTER_XDATA
\ 000005 ; Saved register size: 11
\ 000005 ; Auto size: 0
\ 000005 EA MOV A,R2
\ 000006 FC MOV R4,A
\ 000007 EB MOV A,R3
\ 000008 FD MOV R5,A
\ 000009 89.. MOV ?V0 + 2,R1
74 BYTE dstAddrMode;
75 ADDRESS *pDstAddr;
76 BYTE srcAddrMode;
77 ADDRESS *pSrcAddr;
78 BYTE *pTemp;
79
80 // Point to the first byte of the frame control field
81 pTemp = pPacket->pHeader;
82
83 // Move on to the high byte, which contains the address modes
84 pTemp += 1;
\ 00000B EC MOV A,R4
\ 00000C 2404 ADD A,#0x4
\ 00000E FA MOV R2,A
\ 00000F ED MOV A,R5
\ 000010 3400 ADDC A,#0x0
\ 000012 FB MOV R3,A
85 dstAddrMode = (BYTE)((*pTemp & DEST_ADDR_BM) >> (DEST_ADDR_MODE_IDX - 8));
\ 000013 8A82 MOV DPL,R2
\ 000015 8B83 MOV DPH,R3
\ 000017 E0 MOVX A,@DPTR
\ 000018 FE MOV R6,A
\ 000019 740C MOV A,#0xc
\ 00001B 5E ANL A,R6
\ 00001C C3 CLR C
\ 00001D 13 RRC A
\ 00001E 13 RRC A
\ 00001F FF MOV R7,A
86 srcAddrMode = (BYTE)((*pTemp & SRC_ADDR_BM) >> (SRC_ADDR_MODE_IDX - 8));
\ 000020 EE MOV A,R6
\ 000021 C4 SWAP A
\ 000022 13 RRC A
\ 000023 13 RRC A
\ 000024 5403 ANL A,#0x3
\ 000026 FE MOV R6,A
87
88 // Move on to the PAN ID (skip the sequence number)
89 pTemp += 2;
\ 000027 EA MOV A,R2
\ 000028 2402 ADD A,#0x2
\ 00002A 0A INC R2
\ 00002B 0A INC R2
\ 00002C EB MOV A,R3
\ 00002D 3400 ADDC A,#0x0
\ 00002F FB MOV R3,A
90
91 // Get a pointer to each address, without modifying the pointer any further
92 pDstAddr = (ADDRESS *) (pTemp + 2);
\ 000030 EA MOV A,R2
\ 000031 2402 ADD A,#0x2
\ 000033 F8 MOV R0,A
\ 000034 EB MOV A,R3
\ 000035 3400 ADDC A,#0x0
\ 000037 F9 MOV R1,A
\ 000038 88.. MOV ?V0 + 0,R0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -