📄 emac.lst
字号:
\ 0000002C 8020 MOV R0,#+0x80
\ 0000002E 0003 LSL R0,R0,#+0xC ;; #+0x80000
\ 00000030 ........ _BLF LED_TurnOff,LED_TurnOff??rT
284 }
285
286 if(pEmac->EMAC_TSR & AT91C_EMAC_COMP == AT91C_EMAC_COMP)
\ ??AT91F_EMAC_HANDLER_0:
\ 00000034 6069 LDR R0,[R4, #+0x14]
\ 00000036 C007 LSL R0,R0,#+0x1F
\ 00000038 35D5 BPL ??AT91F_EMAC_HANDLER_2
287 {
288 LED_TurnOn(LED2);
\ 0000003A 8020 MOV R0,#+0x80
\ 0000003C 4003 LSL R0,R0,#+0xD ;; #+0x100000
\ 0000003E ........ _BLF LED_TurnOn,LED_TurnOn??rT
289 pEmac->EMAC_TSR |= AT91C_EMAC_COMP;
\ 00000042 6069 LDR R0,[R4, #+0x14]
\ 00000044 2021 MOV R1,#+0x20
\ 00000046 0143 ORR R1,R0
\ 00000048 6161 STR R1,[R4, #+0x14]
290 for (i = 0; i <NB_TX_BUFFERS; i++)
\ 0000004A 0020 MOV R0,#+0
\ 0000004C 25E0 B ??AT91F_EMAC_HANDLER_3
291 {
292 if(TxtdList[i].U_Status.S_Status.BuffUsed == 1)
\ ??AT91F_EMAC_HANDLER_4:
\ 0000004E 0821 MOV R1,#+0x8
\ 00000050 4143 MUL R1,R0
\ 00000052 .... LDR R2,??DataTable24 ;; TxtdList
\ 00000054 1268 LDR R2,[R2, #+0]
\ 00000056 5118 ADD R1,R2,R1
\ 00000058 4968 LDR R1,[R1, #+0x4]
\ 0000005A C90F LSR R1,R1,#+0x1F
\ 0000005C 0129 CMP R1,#+0x1
\ 0000005E 1BD1 BNE ??AT91F_EMAC_HANDLER_5
293 {
294 TxtdList[i].U_Status.S_Status.Length = 0;
\ 00000060 0821 MOV R1,#+0x8
\ 00000062 4143 MUL R1,R0
\ 00000064 .... LDR R2,??DataTable24 ;; TxtdList
\ 00000066 1268 LDR R2,[R2, #+0]
\ 00000068 5118 ADD R1,R2,R1
\ 0000006A 0822 MOV R2,#+0x8
\ 0000006C 4243 MUL R2,R0
\ 0000006E .... LDR R3,??DataTable24 ;; TxtdList
\ 00000070 1B68 LDR R3,[R3, #+0]
\ 00000072 9A18 ADD R2,R3,R2
\ 00000074 5268 LDR R2,[R2, #+0x4]
\ 00000076 D20A LSR R2,R2,#+0xB
\ 00000078 D202 LSL R2,R2,#+0xB
\ 0000007A 4A60 STR R2,[R1, #+0x4]
295 TxtdList[i].U_Status.S_Status.BuffUsed = 0;
\ 0000007C 0821 MOV R1,#+0x8
\ 0000007E 4143 MUL R1,R0
\ 00000080 .... LDR R2,??DataTable24 ;; TxtdList
\ 00000082 1268 LDR R2,[R2, #+0]
\ 00000084 5118 ADD R1,R2,R1
\ 00000086 0822 MOV R2,#+0x8
\ 00000088 4243 MUL R2,R0
\ 0000008A .... LDR R3,??DataTable24 ;; TxtdList
\ 0000008C 1B68 LDR R3,[R3, #+0]
\ 0000008E 9A18 ADD R2,R3,R2
\ 00000090 5268 LDR R2,[R2, #+0x4]
\ 00000092 5200 LSL R2,R2,#+0x1 ;; ZeroExt R2,R2,#+0x1,#+0x1
\ 00000094 5208 LSR R2,R2,#+0x1
\ 00000096 4A60 STR R2,[R1, #+0x4]
296 }
297 }
\ ??AT91F_EMAC_HANDLER_5:
\ 00000098 401C ADD R0,#+0x1
\ ??AT91F_EMAC_HANDLER_3:
\ 0000009A 0228 CMP R0,#+0x2
\ 0000009C D7D3 BCC ??AT91F_EMAC_HANDLER_4
298 LED_TurnOff(LED2);
\ 0000009E 8020 MOV R0,#+0x80
\ 000000A0 4003 LSL R0,R0,#+0xD ;; #+0x100000
\ 000000A2 ........ _BLF LED_TurnOff,LED_TurnOff??rT
299 }
300
301 if(pEmac->EMAC_TSR & AT91C_EMAC_UBR == AT91C_EMAC_UBR )
\ ??AT91F_EMAC_HANDLER_2:
\ 000000A6 6069 LDR R0,[R4, #+0x14]
\ 000000A8 C007 LSL R0,R0,#+0x1F
\ 000000AA 0BD5 BPL ??AT91F_EMAC_HANDLER_6
302 {
303 LED_TurnOn(LED3);
\ 000000AC 8020 MOV R0,#+0x80
\ 000000AE 8003 LSL R0,R0,#+0xE ;; #+0x200000
\ 000000B0 ........ _BLF LED_TurnOn,LED_TurnOn??rT
304 pEmac->EMAC_TSR |= AT91C_EMAC_UBR;
\ 000000B4 6069 LDR R0,[R4, #+0x14]
\ 000000B6 0121 MOV R1,#+0x1
\ 000000B8 0143 ORR R1,R0
\ 000000BA 6161 STR R1,[R4, #+0x14]
305 LED_TurnOff(LED3);
\ 000000BC 8020 MOV R0,#+0x80
\ 000000BE 8003 LSL R0,R0,#+0xE ;; #+0x200000
\ 000000C0 ........ _BLF LED_TurnOff,LED_TurnOff??rT
306 }
307 }
\ ??AT91F_EMAC_HANDLER_6:
\ 000000C4 07B0 ADD SP,#+0x1C
\ 000000C6 10BC POP {R4}
\ 000000C8 01BC POP {R0}
\ 000000CA 0047 BX R0 ;; return
308
309 //*----------------------------------------------------------------------------
310 //* \fn AT91F_IcmpChksum
311 //* \brief Process ICMP Checksum...
312 //*----------------------------------------------------------------------------
\ In segment CODE, align 4, keep-with-next
313 unsigned short AT91F_IcmpChksum(unsigned short *p, int len)
314 {
\ AT91F_IcmpChksum:
\ 00000000 30B5 PUSH {R4,R5,LR}
315 int i, t;
316 for (i=0,t=0; i < len; i++, p++)
\ 00000002 0023 MOV R3,#+0
\ 00000004 0022 MOV R2,#+0
\ 00000006 0DE0 B ??AT91F_IcmpChksum_0
317 t += SWAP16(*p);
\ ??AT91F_IcmpChksum_1:
\ 00000008 0488 LDRH R4,[R0, #+0]
\ 0000000A 2406 LSL R4,R4,#+0x18 ;; ZeroExt R4,R4,#+0x18,#+0x18
\ 0000000C 240E LSR R4,R4,#+0x18
\ 0000000E 2402 LSL R4,R4,#+0x8
\ 00000010 0588 LDRH R5,[R0, #+0]
\ 00000012 2D04 LSL R5,R5,#+0x10 ;; ZeroExt R5,R5,#+0x10,#+0x10
\ 00000014 2D0C LSR R5,R5,#+0x10
\ 00000016 2D0A LSR R5,R5,#+0x8
\ 00000018 2D04 LSL R5,R5,#+0x10 ;; ZeroExt R5,R5,#+0x10,#+0x10
\ 0000001A 2D0C LSR R5,R5,#+0x10
\ 0000001C 2543 ORR R5,R4
\ 0000001E 5219 ADD R2,R2,R5
\ 00000020 5B1C ADD R3,#+0x1
\ 00000022 801C ADD R0,#+0x2
\ ??AT91F_IcmpChksum_0:
\ 00000024 8B42 CMP R3,R1
\ 00000026 EFDB BLT ??AT91F_IcmpChksum_1
318 t = (t & 0xffff) + (t >> 16);
\ 00000028 1004 LSL R0,R2,#+0x10 ;; ZeroExt R0,R2,#+0x10,#+0x10
\ 0000002A 000C LSR R0,R0,#+0x10
\ 0000002C 111C MOV R1,R2
\ 0000002E 0914 ASR R1,R1,#+0x10
\ 00000030 4218 ADD R2,R0,R1
319 return (~t);
\ 00000032 D043 MVN R0,R2
\ 00000034 0004 LSL R0,R0,#+0x10 ;; ZeroExt R0,R0,#+0x10,#+0x10
\ 00000036 000C LSR R0,R0,#+0x10
\ 00000038 30BC POP {R4,R5}
\ 0000003A 02BC POP {R1}
\ 0000003C 0847 BX R1 ;; return
320 }
321
322
323 //*----------------------------------------------------------------------------
324 //* \fn AT91F_ProcessEmacPacket
325 //* \brief Process ARP and ICMP packets...
326 //*----------------------------------------------------------------------------
\ In segment CODE, align 4, keep-with-next
327 int AT91F_ProcessEmacPacket(AT91PS_IPheader pHeader)
328 {
\ AT91F_ProcessEmacPacket:
\ 00000000 F0B5 PUSH {R4-R7,LR}
\ 00000002 83B0 SUB SP,#+0xC
329
330
331 unsigned int i, icmp_len;
332 char *pData;
333 int status = AT91C_NO_IPPACKET;
\ 00000004 0021 MOV R1,#+0
\ 00000006 0291 STR R1,[SP, #+0x8]
334 AT91PS_EMAC pEmac = (AT91PS_EMAC)AT91C_BASE_EMAC;
\ 00000008 .... LDR R1,??DataTable25 ;; 0xfffdc000
335
336 AT91PS_EthHdr pEth;
337 AT91PS_ArpHdr pArp;
338 AT91PS_IPheader pIpHeader;
339 AT91PS_IcmpEchoHdr pIcmpEcho;
340 int process = 0;
\ 0000000A 0024 MOV R4,#+0
341
342 // Receive one packet
343 process = 0;
\ 0000000C 0022 MOV R2,#+0
\ 0000000E 141C MOV R4,R2
344 status = 0;
\ 00000010 0022 MOV R2,#+0
\ 00000012 0292 STR R2,[SP, #+0x8]
345
346
347 for (i = 0; i < NB_RX_BUFFERS; ++i)
\ 00000014 0022 MOV R2,#+0
\ 00000016 00E0 B ??AT91F_ProcessEmacPacket_0
\ ??AT91F_ProcessEmacPacket_1:
\ 00000018 521C ADD R2,#+0x1
\ ??AT91F_ProcessEmacPacket_0:
\ 0000001A 642A CMP R2,#+0x64
\ 0000001C 0ED2 BCS ??AT91F_ProcessEmacPacket_2
348 {
349 if(RxtdList[i].addr & AT91C_OWNERSHIP_BIT)
\ 0000001E 0823 MOV R3,#+0x8
\ 00000020 5343 MUL R3,R2
\ 00000022 .... LDR R5,??DataTable37 ;; RxtdList
\ 00000024 2D68 LDR R5,[R5, #+0]
\ 00000026 EB58 LDR R3,[R5, R3]
\ 00000028 DB07 LSL R3,R3,#+0x1F
\ 0000002A F5D5 BPL ??AT91F_ProcessEmacPacket_1
350 {
351 if (pEmac->EMAC_RSR & AT91C_EMAC_REC == AT91C_EMAC_REC)
\ 0000002C 0B6A LDR R3,[R1, #+0x20]
\ 0000002E DB07 LSL R3,R3,#+0x1F
\ 00000030 03D5 BPL ??AT91F_ProcessEmacPacket
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -