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

📄 cs8900.lst

📁 msp430 cs8900a msp430 servermsp430 servermsp430 servermsp430 servermsp430 server
💻 LST
📖 第 1 页 / 共 3 页
字号:
##############################################################################
#                                                                            #
# IAR MSP430 C/C++ Compiler V3.41C/W32  [Kickstart]    08/May/2009  10:30:20 #
# Copyright 1996-2006 IAR Systems. All rights reserved.                      #
#                                                                            #
#    __rt_version  =  2                                                      #
#    __double_size =  32                                                     #
#    __reg_r4      =  free                                                   #
#    __reg_r5      =  free                                                   #
#    __pic         =  no                                                     #
#    __core        =  64kb                                                   #
#    Source file   =  F:\rf\参考资料\NET430\Internet\slaa137a\cs8900.c       #
#    Command line  =  F:\rf\参考资料\NET430\Internet\slaa137a\cs8900.c       #
#                     --preprocess F:\rf\参考资料\NET430\Internet\slaa137a\D #
#                     ebug\List\ -lCN F:\rf\参考资料\NET430\Internet\slaa137 #
#                     a\Debug\List\ -o F:\rf\参考资料\NET430\Internet\slaa13 #
#                     7a\Debug\Obj\ -s3 --no_cse --no_unroll --no_inline     #
#                     --no_code_motion --no_tbaa --debug -e --double=32 -I   #
#                     "D:\Program Files\IAR Systems\Embedded Workbench       #
#                     4.0\430\INC\" -I "D:\Program Files\IAR                 #
#                     Systems\Embedded Workbench 4.0\430\INC\CLIB\"          #
#    List file     =  F:\rf\参考资料\NET430\Internet\slaa137a\Debug\List\cs8 #
#                     900.lst                                                #
#    Object file   =  F:\rf\参考资料\NET430\Internet\slaa137a\Debug\Obj\cs89 #
#                     00.r43                                                 #
#                                                                            #
#                                                                            #
##############################################################################

F:\rf\参考资料\NET430\Internet\slaa137a\cs8900.c
      1          //------------------------------------------------------------------------------
      2          // Name: cs8900.c
      3          // Func: ethernet driver for use with LAN controller CS8900A
      4          // Ver.: 1.1
      5          // Date: January 2004
      6          // Auth: Andreas Dannenberg
      7          //       MSP430 Applications
      8          //       Texas Instruments Inc.
      9          // Rem.: -
     10          //------------------------------------------------------------------------------
     11          
     12          #include "msp430x14x.h"

   \                                 In segment DATA16_AN, at 0x19
   \   unsigned char volatile __data16 P3OUT
   \                     P3OUT:
   \   000000                DS8 1

   \                                 In segment DATA16_AN, at 0x1a
   \   unsigned char volatile __data16 P3DIR
   \                     P3DIR:
   \   000000                DS8 1

   \                                 In segment DATA16_AN, at 0x30
   \   unsigned char const volatile __data16 P5IN
   \                     P5IN:
   \   000000                DS8 1

   \                                 In segment DATA16_AN, at 0x31
   \   unsigned char volatile __data16 P5OUT
   \                     P5OUT:
   \   000000                DS8 1

   \                                 In segment DATA16_AN, at 0x32
   \   unsigned char volatile __data16 P5DIR
   \                     P5DIR:
   \   000000                DS8 1
     13          #include "support.h"
     14          #include "cs8900.h"
     15          
     16          //------------------------------------------------------------------------------

   \                                 In segment DATA16_C, align 2, align-sorted
     17          const unsigned int MyMAC[] =                     // "M1-M2-M3-M4-M5-M6"
   \                     MyMAC:
   \   000000   000102030405 DC16 256, 770, 1284
     18          {
     19          
     20            MYMAC_1 + (unsigned int)(MYMAC_2 << 8),
     21            MYMAC_3 + (unsigned int)(MYMAC_4 << 8),
     22            MYMAC_5 + (unsigned int)(MYMAC_6 << 8)
     23          };
     24          

   \                                 In segment DATA16_C, align 2, align-sorted
     25          static const TInitSeq InitSeq[] =
   \                     InitSeq:
   \   000000   580100015A01 DC16 344, 256, 346, 770, 348, 1284, 274, 192, 260, 3328
   \            02035C010405
   \            1201C0000401
   \            000D        
     26          {
     27            PP_IA, MYMAC_1 + (MYMAC_2 << 8),               // set our MAC as Individual Address
     28            PP_IA + 2, MYMAC_3 + (MYMAC_4 << 8),
     29            PP_IA + 4, MYMAC_5 + (MYMAC_6 << 8),
     30            PP_LineCTL, SERIAL_RX_ON | SERIAL_TX_ON,       // configure the Physical Interface
     31            PP_RxCTL, RX_OK_ACCEPT | RX_IA_ACCEPT | RX_BROADCAST_ACCEPT
     32          };
     33          //------------------------------------------------------------------------------
     34          // configure port-pins for use with LAN-controller,
     35          // issue reset and send the configuration-sequence (InitSeq[])
     36          //------------------------------------------------------------------------------

   \                                 In segment CODE, align 2
     37          void Init8900(void)
   \                     Init8900:
     38          {
     39            unsigned int i;
     40          
     41            P3OUT = IOR | IOW;                             // reset outputs, control lines high
   \   000000   F240C0001900 MOV.B   #0xc0, &0x19
     42            P3DIR = 0xff;                                  // switch control port to output
   \   000006   F2431A00     MOV.B   #0xff, &0x1a
     43          
     44            P5OUT = 0;                                     // reset outputs
   \   00000A   C2433100     MOV.B   #0x0, &0x31
     45            P5DIR = 0xff;                                  // switch data port to output
   \   00000E   F2433200     MOV.B   #0xff, &0x32
     46          
     47            DelayCycles(40000);                            // delay 10ms @ 8MHz MCLK to allow
   \   000012   3C40409C     MOV.W   #0x9c40, R12
   \   000016   B012....     CALL    #DelayCycles
     48            DelayCycles(40000);                            // time for CS8900 POR
   \   00001A   3C40409C     MOV.W   #0x9c40, R12
   \   00001E   B012....     CALL    #DelayCycles
     49          
     50            Write8900(ADD_PORT, PP_SelfCTL);               // set register
   \   000022   3E401401     MOV.W   #0x114, R14
   \   000026   7C400A00     MOV.B   #0xa, R12
   \   00002A   B012....     CALL    #Write8900
     51            Write8900(DATA_PORT, POWER_ON_RESET);          // reset the Ethernet-Controller
   \   00002E   3E404000     MOV.W   #0x40, R14
   \   000032   7C400C00     MOV.B   #0xc, R12
   \   000036   B012....     CALL    #Write8900
     52          
     53            do
     54              Write8900(ADD_PORT, PP_SelfST);              // set register
   \                     ??Init8900_0:
   \   00003A   3E403601     MOV.W   #0x136, R14
   \   00003E   7C400A00     MOV.B   #0xa, R12
   \   000042   B012....     CALL    #Write8900
     55            while (!(Read8900(DATA_PORT) & INIT_DONE));    // wait until chip-reset is done
   \   000046   7C400C00     MOV.B   #0xc, R12
   \   00004A   B012....     CALL    #Read8900
   \   00004E   4C93         CMP.B   #0x0, R12
   \   000050   F437         JGE     ??Init8900_0
     56            
     57            for (i = 0; i < sizeof InitSeq / sizeof (TInitSeq); i++) // configure the CS8900
   \   000052   0D43         MOV.W   #0x0, R13
   \   000054   133C         JMP     ??Init8900_2
     58            {
     59              Write8900(ADD_PORT, InitSeq[i].Addr);
   \                     ??Init8900_1:
   \   000056   0F4D         MOV.W   R13, R15
   \   000058   0F5F         RLA.W   R15
   \   00005A   0F5F         RLA.W   R15
   \   00005C   1E4F....     MOV.W   InitSeq(R15), R14
   \   000060   7C400A00     MOV.B   #0xa, R12
   \   000064   B012....     CALL    #Write8900
     60              Write8900(DATA_PORT, InitSeq[i].Data);
   \   000068   0F4D         MOV.W   R13, R15
   \   00006A   0F5F         RLA.W   R15
   \   00006C   0F5F         RLA.W   R15
   \   00006E   1E4F....     MOV.W   InitSeq + 2(R15), R14
   \   000072   7C400C00     MOV.B   #0xc, R12
   \   000076   B012....     CALL    #Write8900
     61            }
   \   00007A   1D53         ADD.W   #0x1, R13
   \                     ??Init8900_2:
   \   00007C   3D900500     CMP.W   #0x5, R13
   \   000080   EA2B         JNC     ??Init8900_1
     62          }
   \   000082   3041         RET
     63          //------------------------------------------------------------------------------
     64          // writes a word in little-endian byte order to
     65          // a specified port-address
     66          //------------------------------------------------------------------------------

   \                                 In segment CODE, align 2
     67          void Write8900(unsigned char Address, unsigned int Data)
   \                     Write8900:
     68          {
     69            P5DIR = 0xff;                                  // data port to output
   \   000000   F2433200     MOV.B   #0xff, &0x32
     70            P3OUT = IOR | IOW | Address;                   // put address on bus
   \   000004   4F4C         MOV.B   R12, R15
   \   000006   7FD0C000     BIS.B   #0xc0, R15
   \   00000A   C24F1900     MOV.B   R15, &0x19
     71            P5OUT = Data;                                  // write low order byte to data bus
   \   00000E   4F4E         MOV.B   R14, R15
   \   000010   C24F3100     MOV.B   R15, &0x31
     72            P3OUT &= ~IOW;                                 // toggle IOW-signal
   \   000014   F2C080001900 BIC.B   #0x80, &0x19
     73            P3OUT = IOR | IOW | (Address + 1);             // and put next address on bus
   \   00001A   5C53         ADD.B   #0x1, R12
   \   00001C   7CD0C000     BIS.B   #0xc0, R12
   \   000020   C24C1900     MOV.B   R12, &0x19
     74            P5OUT = Data >> 8;                             // write high order byte to data bus
   \   000024   8E10         SWPB    R14
   \   000026   3EF0FF00     AND.W   #0xff, R14
   \   00002A   C24E3100     MOV.B   R14, &0x31
     75            P3OUT &= ~IOW;                                 // toggle IOW-signal
   \   00002E   F2C080001900 BIC.B   #0x80, &0x19
     76            P3OUT |= IOW;
   \   000034   F2D080001900 BIS.B   #0x80, &0x19
     77          }
   \   00003A   3041         RET
     78          //------------------------------------------------------------------------------
     79          // writes a word in little-endian byte order to TX_FRAME_PORT
     80          //------------------------------------------------------------------------------

   \                                 In segment CODE, align 2
     81          void WriteFrame8900(unsigned int Data)
   \                     WriteFrame8900:
     82          {
     83            P5DIR = 0xff;                                  // data port to output
   \   000000   F2433200     MOV.B   #0xff, &0x32
     84            P3OUT = IOR | IOW | TX_FRAME_PORT;             // put address on bus
   \   000004   F240C0001900 MOV.B   #0xc0, &0x19
     85            P5OUT = Data;                                  // write low order byte to data bus
   \   00000A   4E4C         MOV.B   R12, R14
   \   00000C   C24E3100     MOV.B   R14, &0x31

⌨️ 快捷键说明

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