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

📄 emac.lst

📁 at91sam7x256 mac驱动演示程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
   \   0000001C   6407               LSLS     R4,R4,#+29
   \   0000001E   FCD5               BPL      ??read_phy_1
     90          	*value = (pEmac->EMAC_MAN & 0x0000ffff);	
   \   00000020   446B               LDR      R4,[R0, #+52]
   \   00000022   2404               LSLS     R4,R4,#+16       ;; ZeroExtS R4,R4,#+16,#+16
   \   00000024   240C               LSRS     R4,R4,#+16
   \   00000026   1C60               STR      R4,[R3, #+0]
     91          }
   \   00000028   30BC               POP      {R4,R5}
   \   0000002A   01BC               POP      {R0}
   \   0000002C   0047               BX       R0               ;; return
   \   0000002E   C046               Nop      
   \                     ??read_phy_0:
   \   00000030   00000260           DC32     0x60020000
     92          
     93          //*----------------------------------------------------------------------------
     94          //* \fn    AT91F_GetLinkSpeed
     95          //* \brief This function configure the link speed
     96          //*----------------------------------------------------------------------------

   \                                 In segment CODE, align 4, keep-with-next
     97          int AT91F_GetLinkSpeed( AT91PS_EMAC pEmac)      // \arg Pointer to AT91PS_EMAC service
     98          {
   \                     AT91F_GetLinkSpeed:
   \   00000000   F0B5               PUSH     {R4-R7,LR}
   \   00000002   83B0               SUB      SP,SP,#+12
   \   00000004   0400               MOVS     R4,R0
     99          	unsigned int bmsr, bmcr, lpa, mac_cfg;
    100          	unsigned int speed, duplex;
    101          
    102          	/* Link status is latched, so read twice to get current value */
    103          	read_phy(pEmac, AT91C_PHY_ADDR, MII_BMSR, &bmsr);
   \   00000006   01AB               ADD      R3,SP,#+4
   \   00000008   0122               MOVS     R2,#+1
   \   0000000A   1F21               MOVS     R1,#+31
   \   0000000C   2000               MOVS     R0,R4
   \   0000000E   ........           BL       read_phy
    104          	read_phy(pEmac, AT91C_PHY_ADDR, MII_BMSR, &bmsr);
   \   00000012   01AB               ADD      R3,SP,#+4
   \   00000014   0122               MOVS     R2,#+1
   \   00000016   1F21               MOVS     R1,#+31
   \   00000018   2000               MOVS     R0,R4
   \   0000001A   ........           BL       read_phy
    105          	if (!(bmsr & BMSR_LSTATUS))
   \   0000001E   0198               LDR      R0,[SP, #+4]
   \   00000020   4007               LSLS     R0,R0,#+29
   \   00000022   02D4               BMI      ??AT91F_GetLinkSpeed_0
    106          		 return -1;			/* no link */
   \   00000024   0020               MOVS     R0,#+0
   \   00000026   C043               MVNS     R0,R0            ;; #-1
   \   00000028   5FE0               B        ??AT91F_GetLinkSpeed_1
    107          
    108          	read_phy(pEmac, AT91C_PHY_ADDR, MII_BMCR, &bmcr);
   \                     ??AT91F_GetLinkSpeed_0:
   \   0000002A   6B46               MOV      R3,SP
   \   0000002C   0022               MOVS     R2,#+0
   \   0000002E   1F21               MOVS     R1,#+31
   \   00000030   2000               MOVS     R0,R4
   \   00000032   ........           BL       read_phy
    109          	if (bmcr & BMCR_ANENABLE) {				/* AutoNegotiation is enabled */
   \   00000036   0098               LDR      R0,[SP, #+0]
   \   00000038   C004               LSLS     R0,R0,#+19
   \   0000003A   22D5               BPL      ??AT91F_GetLinkSpeed_2
    110          		if (!(bmsr & BMSR_ANEGCOMPLETE))
   \   0000003C   0198               LDR      R0,[SP, #+4]
   \   0000003E   8006               LSLS     R0,R0,#+26
   \   00000040   02D4               BMI      ??AT91F_GetLinkSpeed_3
    111          			return -2;						/* auto-negotitation in progress */
   \   00000042   0120               MOVS     R0,#+1
   \   00000044   C043               MVNS     R0,R0            ;; #-2
   \   00000046   50E0               B        ??AT91F_GetLinkSpeed_1
    112          
    113          		read_phy(pEmac, AT91C_PHY_ADDR, MII_LPA, &lpa);
   \                     ??AT91F_GetLinkSpeed_3:
   \   00000048   02AB               ADD      R3,SP,#+8
   \   0000004A   0522               MOVS     R2,#+5
   \   0000004C   1F21               MOVS     R1,#+31
   \   0000004E   2000               MOVS     R0,R4
   \   00000050   ........           BL       read_phy
    114          		if ((lpa & LPA_100FULL) || (lpa & LPA_100HALF))
   \   00000054   0298               LDR      R0,[SP, #+8]
   \   00000056   C021               MOVS     R1,#+192
   \   00000058   4900               LSLS     R1,R1,#+1        ;; #+384
   \   0000005A   0140               ANDS     R1,R1,R0
   \   0000005C   0029               CMP      R1,#+0
   \   0000005E   02D0               BEQ      ??AT91F_GetLinkSpeed_4
    115          			speed = SPEED_100;
   \   00000060   6420               MOVS     R0,#+100
   \   00000062   0600               MOVS     R6,R0
   \   00000064   01E0               B        ??AT91F_GetLinkSpeed_5
    116          		else
    117          			speed = SPEED_10;
   \                     ??AT91F_GetLinkSpeed_4:
   \   00000066   0A20               MOVS     R0,#+10
   \   00000068   0600               MOVS     R6,R0
    118          		if ((lpa & LPA_100FULL) || (lpa & LPA_10FULL))
   \                     ??AT91F_GetLinkSpeed_5:
   \   0000006A   0298               LDR      R0,[SP, #+8]
   \   0000006C   A021               MOVS     R1,#+160
   \   0000006E   4900               LSLS     R1,R1,#+1        ;; #+320
   \   00000070   0140               ANDS     R1,R1,R0
   \   00000072   0029               CMP      R1,#+0
   \   00000074   02D0               BEQ      ??AT91F_GetLinkSpeed_6
    119          			duplex = DUPLEX_FULL;
   \   00000076   0120               MOVS     R0,#+1
   \   00000078   0700               MOVS     R7,R0
   \   0000007A   0EE0               B        ??AT91F_GetLinkSpeed_7
    120          		else duplex = DUPLEX_HALF;
   \                     ??AT91F_GetLinkSpeed_6:
   \   0000007C   0020               MOVS     R0,#+0
   \   0000007E   0700               MOVS     R7,R0
   \   00000080   0BE0               B        ??AT91F_GetLinkSpeed_7
    121          	} else {
    122          		speed = (bmcr & BMCR_SPEED100) ? SPEED_100 : SPEED_10;
   \                     ??AT91F_GetLinkSpeed_2:
   \   00000082   0098               LDR      R0,[SP, #+0]
   \   00000084   8004               LSLS     R0,R0,#+18
   \   00000086   01D5               BPL      ??AT91F_GetLinkSpeed_8
   \   00000088   6426               MOVS     R6,#+100
   \   0000008A   00E0               B        ??AT91F_GetLinkSpeed_9
   \                     ??AT91F_GetLinkSpeed_8:
   \   0000008C   0A26               MOVS     R6,#+10
    123          		duplex = (bmcr & BMCR_FULLDPLX) ? DUPLEX_FULL : DUPLEX_HALF;
   \                     ??AT91F_GetLinkSpeed_9:
   \   0000008E   0098               LDR      R0,[SP, #+0]
   \   00000090   C005               LSLS     R0,R0,#+23
   \   00000092   01D5               BPL      ??AT91F_GetLinkSpeed_10
   \   00000094   0127               MOVS     R7,#+1
   \   00000096   00E0               B        ??AT91F_GetLinkSpeed_11
   \                     ??AT91F_GetLinkSpeed_10:
   \   00000098   0027               MOVS     R7,#+0
    124          	}
    125          
    126          	/* Update the MAC */
    127          	mac_cfg = pEmac->EMAC_NCFGR & ~(AT91C_EMAC_SPD | AT91C_EMAC_FD);
   \                     ??AT91F_GetLinkSpeed_11:
   \                     ??AT91F_GetLinkSpeed_7:
   \   0000009A   6068               LDR      R0,[R4, #+4]
   \   0000009C   0321               MOVS     R1,#+3
   \   0000009E   8843               BICS     R0,R0,R1
   \   000000A0   0500               MOVS     R5,R0
    128          	if (speed == SPEED_100) {
   \   000000A2   642E               CMP      R6,#+100
   \   000000A4   09D1               BNE      ??AT91F_GetLinkSpeed_12
    129          		if (duplex == DUPLEX_FULL)		/* 100 Full Duplex */
   \   000000A6   012F               CMP      R7,#+1
   \   000000A8   03D1               BNE      ??AT91F_GetLinkSpeed_13
    130          			pEmac->EMAC_NCFGR = mac_cfg | AT91C_EMAC_SPD | AT91C_EMAC_FD;
   \   000000AA   0320               MOVS     R0,#+3
   \   000000AC   2843               ORRS     R0,R0,R5
   \   000000AE   6060               STR      R0,[R4, #+4]
   \   000000B0   0AE0               B        ??AT91F_GetLinkSpeed_14
    131          		else					/* 100 Half Duplex */
    132          			pEmac->EMAC_NCFGR = mac_cfg | AT91C_EMAC_SPD;
   \                     ??AT91F_GetLinkSpeed_13:
   \   000000B2   0120               MOVS     R0,#+1
   \   000000B4   2843               ORRS     R0,R0,R5
   \   000000B6   6060               STR      R0,[R4, #+4]
   \   000000B8   06E0               B        ??AT91F_GetLinkSpeed_14
    133          	} else {
    134          		if (duplex == DUPLEX_FULL)		/* 10 Full Duplex */
   \                     ??AT91F_GetLinkSpeed_12:
   \   000000BA   012F               CMP      R7,#+1
   \   000000BC   03D1               BNE      ??AT91F_GetLinkSpeed_15
    135          			pEmac->EMAC_NCFGR = mac_cfg | AT91C_EMAC_FD;
   \   000000BE   0220               MOVS     R0,#+2
   \   000000C0   2843               ORRS     R0,R0,R5
   \   000000C2   6060               STR      R0,[R4, #+4]
   \   000000C4   00E0               B        ??AT91F_GetLinkSpeed_14
    136          		else					/* 10 Half Duplex */
    137          			pEmac->EMAC_NCFGR = mac_cfg;
   \                     ??AT91F_GetLinkSpeed_15:
   \   000000C6   6560               STR      R5,[R4, #+4]
    138          	}
    139          #if 1	
    140          	if (duplex == DUPLEX_FULL)
   \                     ??AT91F_GetLinkSpeed_14:
   \   000000C8   012F               CMP      R7,#+1
   \   000000CA   05D1               BNE      ??AT91F_GetLinkSpeed_16
    141          		sprintf(MsgBuffer, "\n\r EMAC Init : %d Mbit/s FULL DUPLEX", speed);
   \   000000CC   3200               MOVS     R2,R6
   \   000000CE   0949               LDR      R1,??AT91F_GetLinkSpeed_17  ;; `?<Constant "\\n\\r EMAC Init : %d Mbi...">`
   \   000000D0   0948               LDR      R0,??AT91F_GetLinkSpeed_17+0x4  ;; MsgBuffer
   \   000000D2   ........           _BLF     sprintf,??sprintf??rT
   \   000000D6   04E0               B        ??AT91F_GetLinkSpeed_18
    142          	else
    143          		sprintf(MsgBuffer, "\n\r EMAC Init : %d Mbit/s HALF DUPLEX", speed);
   \                     ??AT91F_GetLinkSpeed_16:
   \   000000D8   3200               MOVS     R2,R6
   \   000000DA   0849               LDR      R1,??AT91F_GetLinkSpeed_17+0x8  ;; `?<Constant "\\n\\r EMAC Init : %d Mbi...">_1`
   \   000000DC   0648               LDR      R0,??AT91F_GetLinkSpeed_17+0x4  ;; MsgBuffer
   \   000000DE   ........           _BLF     sprintf,??sprintf??rT
    144          	AT91F_DBGU_Printk(MsgBuffer);
   \                     ??AT91F_GetLinkSpeed_18:
   \   000000E2   0548               LDR      R0,??AT91F_GetLinkSpeed_17+0x4  ;; MsgBuffer
   \   000000E4   ........           _BLF     AT91F_DBGU_Printk,??AT91F_DBGU_Printk??rT
    145          #endif
    146          	return 0;
   \   000000E8   0020               MOVS     R0,#+0
   \                     ??AT91F_GetLinkSpeed_1:
   \   000000EA   03B0               ADD      SP,SP,#+12
   \   000000EC   F0BC               POP      {R4-R7}
   \   000000EE   02BC               POP      {R1}
   \   000000F0   0847               BX       R1               ;; return
   \   000000F2   C046               Nop      
   \                     ??AT91F_GetLinkSpeed_17:
   \   000000F4   ........           DC32     `?<Constant "\\n\\r EMAC Init : %d Mbi...">`
   \   000000F8   ........           DC32     MsgBuffer
   \   000000FC   ........           DC32     `?<Constant "\\n\\r EMAC Init : %d Mbi...">_1`
    147          }
    148          
    149          //Detect MAC and PHY and perform initialization

   \                                 In segment CODE, align 4, keep-with-next
    150          int AT91F_Ether_Probe(
    151          		AT91PS_EMAC pEmac)     // \arg Pointer to AT91PS_EMAC service
    152          {
   \                     AT91F_Ether_Probe:
   \   00000000   30B5               PUSH     {R4,R5,LR}
   \   00000002   82B0               SUB      SP,SP,#+8
   \   00000004   0400               MOVS     R4,R0
    153          	unsigned int phyid1, phyid2;
    154          	unsigned int status;
    155          	
    156          	// Read the PHY ID registers
    157          	AT91F_Enable_Mdi(pEmac);	

⌨️ 快捷键说明

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