⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 emac.lst

📁 AT91SAM7X256芯片底层驱动源码。在IAR430环境下编译
💻 LST
📖 第 1 页 / 共 5 页
字号:
   \   00000010   8168               LDR         R1,[R0, #+0x8]
   \   00000012   4907               LSL         R1,R1,#+0x1D
   \   00000014   FCD5               BPL         ??read_phy_1
     91          	*value = (pEmac->EMAC_MAN & 0x0000ffff);	
   \   00000016   406B               LDR         R0,[R0, #+0x34]
   \   00000018   0004               LSL         R0,R0,#+0x10       ;; ZeroExt     R0,R0,#+0x10,#+0x10
   \   0000001A   000C               LSR         R0,R0,#+0x10
   \   0000001C   1860               STR         R0,[R3, #+0]
     92          }
   \   0000001E   7047               BX          LR                 ;; return
   \                     ??read_phy_0:
   \   00000020   00000260           DC32        0x60020000
     93          
     94          //*----------------------------------------------------------------------------
     95          //* \fn    AT91F_GetLinkSpeed
     96          //* \brief This function configure the link speed
     97          //*----------------------------------------------------------------------------

   \                                 In segment CODE, align 4, keep-with-next
     98          int AT91F_GetLinkSpeed( AT91PS_EMAC pEmac)      // \arg Pointer to AT91PS_EMAC service
     99          {
   \                     AT91F_GetLinkSpeed:
   \   00000000   10B5               PUSH        {R4,LR}
   \   00000002   83B0               SUB         SP,#+0xC
   \   00000004   041C               MOV         R4,R0
    100          	unsigned int bmsr, bmcr, lpa, mac_cfg;
    101          	unsigned int speed, duplex;
    102          
    103          	/* Link status is latched, so read twice to get current value */
    104          	read_phy(pEmac, AT91C_PHY_ADDR, MII_BMSR, &bmsr);
   \   00000006   01AB               ADD         R3,SP,#+0x4
   \   00000008   0122               MOV         R2,#+0x1
   \   0000000A   1F21               MOV         R1,#+0x1F
   \   0000000C   201C               MOV         R0,R4
   \   0000000E   ........           BL          read_phy
    105          	read_phy(pEmac, AT91C_PHY_ADDR, MII_BMSR, &bmsr);
   \   00000012   01AB               ADD         R3,SP,#+0x4
   \   00000014   0122               MOV         R2,#+0x1
   \   00000016   1F21               MOV         R1,#+0x1F
   \   00000018   201C               MOV         R0,R4
   \   0000001A   ........           BL          read_phy
    106          	if (!(bmsr & BMSR_LSTATUS))
   \   0000001E   0198               LDR         R0,[SP, #+0x4]
   \   00000020   4007               LSL         R0,R0,#+0x1D
   \   00000022   02D4               BMI         ??AT91F_GetLinkSpeed_0
    107          		 return -1;			/* no link */
   \   00000024   0020               MOV         R0,#+0
   \   00000026   C043               MVN         R0,R0              ;; #-1
   \   00000028   5AE0               B           ??AT91F_GetLinkSpeed_1
    108          
    109          	read_phy(pEmac, AT91C_PHY_ADDR, MII_BMCR, &bmcr);
   \                     ??AT91F_GetLinkSpeed_0:
   \   0000002A   6B46               MOV         R3,SP
   \   0000002C   0022               MOV         R2,#+0
   \   0000002E   1F21               MOV         R1,#+0x1F
   \   00000030   201C               MOV         R0,R4
   \   00000032   ........           BL          read_phy
    110          	if (bmcr & BMCR_ANENABLE) {				/* AutoNegotiation is enabled */
   \   00000036   0098               LDR         R0,[SP, #+0]
   \   00000038   C004               LSL         R0,R0,#+0x13
   \   0000003A   1CD5               BPL         ??AT91F_GetLinkSpeed_2
    111          		if (!(bmsr & BMSR_ANEGCOMPLETE))
   \   0000003C   0198               LDR         R0,[SP, #+0x4]
   \   0000003E   8006               LSL         R0,R0,#+0x1A
   \   00000040   02D4               BMI         ??AT91F_GetLinkSpeed_3
    112          			return -2;						/* auto-negotitation in progress */
   \   00000042   0120               MOV         R0,#+0x1
   \   00000044   C043               MVN         R0,R0              ;; #-2
   \   00000046   4BE0               B           ??AT91F_GetLinkSpeed_1
    113          
    114          		read_phy(pEmac, AT91C_PHY_ADDR, MII_LPA, &lpa);
   \                     ??AT91F_GetLinkSpeed_3:
   \   00000048   02AB               ADD         R3,SP,#+0x8
   \   0000004A   0522               MOV         R2,#+0x5
   \   0000004C   1F21               MOV         R1,#+0x1F
   \   0000004E   201C               MOV         R0,R4
   \   00000050   ........           BL          read_phy
    115          		if ((lpa & LPA_100FULL) || (lpa & LPA_100HALF))
   \   00000054   0298               LDR         R0,[SP, #+0x8]
   \   00000056   C021               MOV         R1,#+0xC0
   \   00000058   4900               LSL         R1,R1,#+0x1        ;; #+0x180
   \   0000005A   0842               TST         R0,R1
   \   0000005C   01D0               BEQ         ??AT91F_GetLinkSpeed_4
    116          			speed = SPEED_100;
   \   0000005E   6422               MOV         R2,#+0x64
   \   00000060   00E0               B           ??AT91F_GetLinkSpeed_5
    117          		else
    118          			speed = SPEED_10;
   \                     ??AT91F_GetLinkSpeed_4:
   \   00000062   0A22               MOV         R2,#+0xA
    119          		if ((lpa & LPA_100FULL) || (lpa & LPA_10FULL))
   \                     ??AT91F_GetLinkSpeed_5:
   \   00000064   0298               LDR         R0,[SP, #+0x8]
   \   00000066   A021               MOV         R1,#+0xA0
   \   00000068   4900               LSL         R1,R1,#+0x1        ;; #+0x140
   \   0000006A   0140               AND         R1,R0
   \   0000006C   081C               MOV         R0,R1
   \   0000006E   0028               CMP         R0,#+0
   \   00000070   00D0               BEQ         ??AT91F_GetLinkSpeed_6
   \   00000072   0120               MOV         R0,#+0x1
    120          			duplex = DUPLEX_FULL;
    121          		else duplex = DUPLEX_HALF;
   \                     ??AT91F_GetLinkSpeed_6:
   \   00000074   0FE0               B           ??AT91F_GetLinkSpeed_7
    122          	} else {
    123          		speed = (bmcr & BMCR_SPEED100) ? SPEED_100 : SPEED_10;
   \                     ??AT91F_GetLinkSpeed_2:
   \   00000076   0098               LDR         R0,[SP, #+0]
   \   00000078   8004               LSL         R0,R0,#+0x12
   \   0000007A   01D5               BPL         ??AT91F_GetLinkSpeed_8
   \   0000007C   6422               MOV         R2,#+0x64
   \   0000007E   00E0               B           ??AT91F_GetLinkSpeed_9
   \                     ??AT91F_GetLinkSpeed_8:
   \   00000080   0A22               MOV         R2,#+0xA
    124          		duplex = (bmcr & BMCR_FULLDPLX) ? DUPLEX_FULL : DUPLEX_HALF;
   \                     ??AT91F_GetLinkSpeed_9:
   \   00000082   0098               LDR         R0,[SP, #+0]
   \   00000084   8021               MOV         R1,#+0x80
   \   00000086   4900               LSL         R1,R1,#+0x1        ;; #+0x100
   \   00000088   0140               AND         R1,R0
   \   0000008A   081C               MOV         R0,R1
   \   0000008C   0028               CMP         R0,#+0
   \   0000008E   00D0               BEQ         ??AT91F_GetLinkSpeed_10
   \   00000090   0120               MOV         R0,#+0x1
   \                     ??AT91F_GetLinkSpeed_10:
   \   00000092   0006               LSL         R0,R0,#+0x18       ;; ZeroExt     R0,R0,#+0x18,#+0x18
   \   00000094   000E               LSR         R0,R0,#+0x18
    125          	}
    126          
    127          	/* Update the MAC */
    128          	mac_cfg = pEmac->EMAC_NCFGR & ~(AT91C_EMAC_SPD | AT91C_EMAC_FD);
   \                     ??AT91F_GetLinkSpeed_7:
   \   00000096   6168               LDR         R1,[R4, #+0x4]
   \   00000098   0323               MOV         R3,#+0x3
   \   0000009A   9943               BIC         R1,R3
    129          	if (speed == SPEED_100) {
   \   0000009C   642A               CMP         R2,#+0x64
   \   0000009E   09D1               BNE         ??AT91F_GetLinkSpeed_11
    130          		if (duplex == DUPLEX_FULL)		/* 100 Full Duplex */
   \   000000A0   0128               CMP         R0,#+0x1
   \   000000A2   03D1               BNE         ??AT91F_GetLinkSpeed_12
    131          			pEmac->EMAC_NCFGR = mac_cfg | AT91C_EMAC_SPD | AT91C_EMAC_FD;
   \   000000A4   0323               MOV         R3,#+0x3
   \   000000A6   0B43               ORR         R3,R1
   \   000000A8   6360               STR         R3,[R4, #+0x4]
   \   000000AA   0AE0               B           ??AT91F_GetLinkSpeed_13
    132          		else					/* 100 Half Duplex */
    133          			pEmac->EMAC_NCFGR = mac_cfg | AT91C_EMAC_SPD;
   \                     ??AT91F_GetLinkSpeed_12:
   \   000000AC   0123               MOV         R3,#+0x1
   \   000000AE   0B43               ORR         R3,R1
   \   000000B0   6360               STR         R3,[R4, #+0x4]
   \   000000B2   06E0               B           ??AT91F_GetLinkSpeed_13
    134          	} else {
    135          		if (duplex == DUPLEX_FULL)		/* 10 Full Duplex */
   \                     ??AT91F_GetLinkSpeed_11:
   \   000000B4   0128               CMP         R0,#+0x1
   \   000000B6   03D1               BNE         ??AT91F_GetLinkSpeed_14
    136          			pEmac->EMAC_NCFGR = mac_cfg | AT91C_EMAC_FD;
   \   000000B8   0223               MOV         R3,#+0x2
   \   000000BA   0B43               ORR         R3,R1
   \   000000BC   6360               STR         R3,[R4, #+0x4]
   \   000000BE   00E0               B           ??AT91F_GetLinkSpeed_13
    137          		else					/* 10 Half Duplex */
    138          			pEmac->EMAC_NCFGR = mac_cfg;
   \                     ??AT91F_GetLinkSpeed_14:
   \   000000C0   6160               STR         R1,[R4, #+0x4]
    139          	}
    140          #if 1	
    141          	if (duplex == DUPLEX_FULL)
   \                     ??AT91F_GetLinkSpeed_13:
   \   000000C2   0128               CMP         R0,#+0x1
   \   000000C4   04D1               BNE         ??AT91F_GetLinkSpeed_15
    142          		sprintf(MsgBuffer, "\n\r EMAC Init : %d Mbit/s FULL DUPLEX", speed);
   \   000000C6   0849               LDR         R1,??AT91F_GetLinkSpeed_16  ;; `?<Constant "\\n\\r EMAC Init : %d Mbi...">`
   \   000000C8   0848               LDR         R0,??AT91F_GetLinkSpeed_16+0x4  ;; MsgBuffer
   \   000000CA   ........           _BLF        sprintf,sprintf??rT
   \   000000CE   03E0               B           ??AT91F_GetLinkSpeed_17
    143          	else
    144          		sprintf(MsgBuffer, "\n\r EMAC Init : %d Mbit/s HALF DUPLEX", speed);
   \                     ??AT91F_GetLinkSpeed_15:
   \   000000D0   0749               LDR         R1,??AT91F_GetLinkSpeed_16+0x8  ;; `?<Constant "\\n\\r EMAC Init : %d Mbi...">_1`
   \   000000D2   0648               LDR         R0,??AT91F_GetLinkSpeed_16+0x4  ;; MsgBuffer
   \   000000D4   ........           _BLF        sprintf,sprintf??rT
    145          	AT91F_DBGU_Printk(MsgBuffer);
   \                     ??AT91F_GetLinkSpeed_17:
   \   000000D8   0448               LDR         R0,??AT91F_GetLinkSpeed_16+0x4  ;; MsgBuffer
   \   000000DA   ........           _BLF        AT91F_DBGU_Printk,AT91F_DBGU_Printk??rT
    146          #endif
    147          	return 0;
   \   000000DE   0020               MOV         R0,#+0
   \                     ??AT91F_GetLinkSpeed_1:
   \   000000E0   03B0               ADD         SP,#+0xC
   \   000000E2   10BC               POP         {R4}
   \   000000E4   02BC               POP         {R1}
   \   000000E6   0847               BX          R1                 ;; return
   \                     ??AT91F_GetLinkSpeed_16:
   \   000000E8   ........           DC32        `?<Constant "\\n\\r EMAC Init : %d Mbi...">`
   \   000000EC   ........           DC32        MsgBuffer
   \   000000F0   ........           DC32        `?<Constant "\\n\\r EMAC Init : %d Mbi...">_1`
    148          }
    149          
    150          //Detect MAC and PHY and perform initialization

   \                                 In segment CODE, align 4, keep-with-next
    151          int AT91F_Ether_Probe(
    152          		AT91PS_EMAC pEmac)     // \arg Pointer to AT91PS_EMAC service
    153          {
   \                     AT91F_Ether_Probe:
   \   00000000   30B5               PUSH        {R4,R5,LR}
   \   00000002   82B0               SUB         SP,#+0x8
   \   00000004   041C               MOV         R4,R0
    154          	unsigned int phyid1, phyid2;
    155          	unsigned int status;
    156          	
    157          	// Read the PHY ID registers
    158          	AT91F_Enable_Mdi(pEmac);	
   \   00000006   201C               MOV         R0,R4
   \   00000008   ........           BL          AT91F_Enable_Mdi

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -