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

📄 twid.lst

📁 IAR5.2下 AT91SAM9260 ARM 对 MCP2515 控制源化码
💻 LST
📖 第 1 页 / 共 3 页
字号:
###############################################################################
#                                                                             #
#                                                       08/Mar/2009  18:02:09 #
# IAR ANSI C/C++ Compiler V5.20.2.21007/W32 EVALUATION for ARM                #
# Copyright 1999-2008 IAR Systems AB.                                         #
#                                                                             #
#    Cpu mode     =  arm                                                      #
#    Endian       =  little                                                   #
#    Source file  =  E:\IAR\at91lib\drivers\twi\twid.c                        #
#    Command line =  E:\IAR\at91lib\drivers\twi\twid.c -D at91sam9260 -D      #
#                    sdram -lC E:\IAR\at91sam9260-ek\basic-twi-eeprom-project #
#                    \ewp\at91sam9260_sdram\List\ --remarks --diag_suppress   #
#                    Pe826,Pe1375 -o E:\IAR\at91sam9260-ek\basic-twi-eeprom-p #
#                    roject\ewp\at91sam9260_sdram\Obj\ --no_cse --no_unroll   #
#                    --no_inline --no_code_motion --no_tbaa --no_clustering   #
#                    --no_scheduling --debug --endian=little                  #
#                    --cpu=ARM926EJ-S -e --fpu=None --dlib_config             #
#                    "D:\Program Files\IAR Systems\Embedded Workbench 5.0     #
#                    Evaluation\ARM\INC\DLib_Config_Full.h" -I                #
#                    E:\IAR\at91sam9260-ek\basic-twi-eeprom-project\ewp\..\.. #
#                    \..\at91lib\ -I E:\IAR\at91sam9260-ek\basic-twi-eeprom-p #
#                    roject\ewp\..\..\..\at91lib\boards\at91sam9260-ek\ -I    #
#                    E:\IAR\at91sam9260-ek\basic-twi-eeprom-project\ewp\..\.. #
#                    \..\at91lib\peripherals\ -I                              #
#                    E:\IAR\at91sam9260-ek\basic-twi-eeprom-project\ewp\..\.. #
#                    \..\at91lib\components\ -I E:\IAR\at91sam9260-ek\basic-t #
#                    wi-eeprom-project\ewp\..\..\..\at91lib\usb\ -I           #
#                    "D:\Program Files\IAR Systems\Embedded Workbench 5.0     #
#                    Evaluation\ARM\INC\" --interwork --cpu_mode arm -On      #
#    List file    =  E:\IAR\at91sam9260-ek\basic-twi-eeprom-project\ewp\at91s #
#                    am9260_sdram\List\twid.lst                               #
#    Object file  =  E:\IAR\at91sam9260-ek\basic-twi-eeprom-project\ewp\at91s #
#                    am9260_sdram\Obj\twid.o                                  #
#                                                                             #
#                                                                             #
###############################################################################

E:\IAR\at91lib\drivers\twi\twid.c
      1          /* ----------------------------------------------------------------------------
      2           *         ATMEL Microcontroller Software Support 
      3           * ----------------------------------------------------------------------------
      4           * Copyright (c) 2008, Atmel Corporation
      5           *
      6           * All rights reserved.
      7           *
      8           * Redistribution and use in source and binary forms, with or without
      9           * modification, are permitted provided that the following conditions are met:
     10           *
     11           * - Redistributions of source code must retain the above copyright notice,
     12           * this list of conditions and the disclaimer below.
     13           *
     14           * Atmel's name may not be used to endorse or promote products derived from
     15           * this software without specific prior written permission.
     16           *
     17           * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
     18           * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
     19           * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
     20           * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
     21           * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     22           * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
     23           * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
     24           * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
     25           * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
     26           * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     27           * ----------------------------------------------------------------------------
     28           */
     29          
     30          #ifndef trace_LEVEL
     31              #define trace_LEVEL  1
     32          #endif
     33          
     34          //------------------------------------------------------------------------------
     35          //         Headers
     36          //------------------------------------------------------------------------------
     37          
     38          #include "twid.h"
     39          #include <twi/twi.h>
     40          #include <utility/assert.h>
     41          #include <utility/trace.h>
     42          
     43          //------------------------------------------------------------------------------
     44          //         Local types
     45          //------------------------------------------------------------------------------
     46          
     47          /// TWI driver callback function.
     48          typedef void (*TwiCallback)(Async *);
     49          
     50          //------------------------------------------------------------------------------
     51          /// TWI asynchronous transfer descriptor.
     52          //------------------------------------------------------------------------------
     53          typedef struct _AsyncTwi 
     54          {
     55              /// Asynchronous transfer status.
     56              volatile unsigned char status;
     57              // Callback function to invoke when transfer completes or fails.
     58              TwiCallback callback;
     59              /// Pointer to the data buffer.
     60              unsigned char *pData;
     61              /// Total number of bytes to transfer.
     62              unsigned int num;
     63              /// Number of already transferred bytes.
     64              unsigned int transferred;
     65          
     66          } AsyncTwi;
     67          
     68          //------------------------------------------------------------------------------
     69          //         Global functions
     70          //------------------------------------------------------------------------------
     71          
     72          //------------------------------------------------------------------------------
     73          /// Initializes a TWI driver instance, using the given TWI peripheral. The
     74          /// peripheral must have been initialized properly before calling this function.
     75          /// \param pTwid  Pointer to the Twid instance to initialize.
     76          /// \param pTwi  Pointer to the TWI peripheral to use.
     77          //------------------------------------------------------------------------------

   \                                 In section .text, align 4, keep-with-next
     78          void TWID_Initialize(Twid *pTwid, AT91S_TWI *pTwi)
     79          {
   \                     TWID_Initialize:
   \   00000000   38402DE9           PUSH     {R3-R5,LR}
   \   00000004   0040B0E1           MOVS     R4,R0
   \   00000008   0150B0E1           MOVS     R5,R1
     80              trace_LOG(trace_DEBUG, "-D- TWID_Initialize()\n\r");
     81              SANITY_CHECK(pTwid);
   \   0000000C   000054E3           CMP      R4,#+0
   \   00000010   0400001A           BNE      ??TWID_Initialize_0
   \   00000014   5120A0E3           MOV      R2,#+81
   \   00000018   ........           LDR      R1,??DataTable20  ;; `?<Constant "E:\\\\IAR\\\\at91lib\\\\driver...">`
   \   0000001C   ........           LDR      R0,??DataTable21  ;; `?<Constant "Sanity check failed a...">`
   \   00000020   ........           BL       printf
   \                     ??TWID_Initialize_1:
   \   00000024   FEFFFFEA           B        ??TWID_Initialize_1
     82              SANITY_CHECK(pTwi);
   \                     ??TWID_Initialize_0:
   \   00000028   000055E3           CMP      R5,#+0
   \   0000002C   0400001A           BNE      ??TWID_Initialize_2
   \   00000030   5220A0E3           MOV      R2,#+82
   \   00000034   ........           LDR      R1,??DataTable20  ;; `?<Constant "E:\\\\IAR\\\\at91lib\\\\driver...">`
   \   00000038   ........           LDR      R0,??DataTable21  ;; `?<Constant "Sanity check failed a...">`
   \   0000003C   ........           BL       printf
   \                     ??TWID_Initialize_3:
   \   00000040   FEFFFFEA           B        ??TWID_Initialize_3
     83          
     84              // Initialize driver
     85              pTwid->pTwi = pTwi;
   \                     ??TWID_Initialize_2:
   \   00000044   005084E5           STR      R5,[R4, #+0]
     86              pTwid->pTransfer = 0;
   \   00000048   0000A0E3           MOV      R0,#+0
   \   0000004C   040084E5           STR      R0,[R4, #+4]
     87          }
   \   00000050   3180BDE8           POP      {R0,R4,R5,PC}    ;; return
     88          
     89          //------------------------------------------------------------------------------
     90          /// Interrupt handler for a TWI peripheral. Manages asynchronous transfer
     91          /// occuring on the bus. This function MUST be called by the interrupt service
     92          /// routine of the TWI peripheral if asynchronous read/write are needed.
     93          /// \param pTwid  Pointer to a Twid instance.
     94          //------------------------------------------------------------------------------

   \                                 In section .text, align 4, keep-with-next
     95          void TWID_Handler(Twid *pTwid)
     96          {
   \                     TWID_Handler:
   \   00000000   F8402DE9           PUSH     {R3-R7,LR}
   \   00000004   0040B0E1           MOVS     R4,R0
     97              unsigned char status;
     98              AsyncTwi *pTransfer = (AsyncTwi *) pTwid->pTransfer;
   \   00000008   040094E5           LDR      R0,[R4, #+4]
   \   0000000C   0060B0E1           MOVS     R6,R0
     99              AT91S_TWI *pTwi = pTwid->pTwi;
   \   00000010   000094E5           LDR      R0,[R4, #+0]
   \   00000014   0070B0E1           MOVS     R7,R0
    100          
    101              SANITY_CHECK(pTwid);
   \   00000018   000054E3           CMP      R4,#+0
   \   0000001C   0400001A           BNE      ??TWID_Handler_0
   \   00000020   6520A0E3           MOV      R2,#+101
   \   00000024   ........           LDR      R1,??DataTable20  ;; `?<Constant "E:\\\\IAR\\\\at91lib\\\\driver...">`
   \   00000028   ........           LDR      R0,??DataTable21  ;; `?<Constant "Sanity check failed a...">`
   \   0000002C   ........           BL       printf
   \                     ??TWID_Handler_1:
   \   00000030   FEFFFFEA           B        ??TWID_Handler_1
    102          
    103              // Retrieve interrupt status
    104              status = TWI_GetMaskedStatus(pTwi);
   \                     ??TWID_Handler_0:
   \   00000034   0700B0E1           MOVS     R0,R7
   \   00000038   ........           BL       TWI_GetMaskedStatus
   \   0000003C   0050B0E1           MOVS     R5,R0
    105          
    106              // Byte received
    107              if (TWI_STATUS_RXRDY(status)) 
   \   00000040   0500B0E1           MOVS     R0,R5
   \   00000044   FF0010E2           ANDS     R0,R0,#0xFF      ;; Zero extend
   \   00000048   020010E3           TST      R0,#0x2
   \   0000004C   1A00000A           BEQ      ??TWID_Handler_2
    108              {
    109                  pTransfer->pData[pTransfer->transferred] = TWI_ReadByte(pTwi);
   \   00000050   0700B0E1           MOVS     R0,R7
   \   00000054   ........           BL       TWI_ReadByte
   \   00000058   101096E5           LDR      R1,[R6, #+16]
   \   0000005C   082096E5           LDR      R2,[R6, #+8]
   \   00000060   0200C1E7           STRB     R0,[R1, +R2]
    110                  pTransfer->transferred++;
   \   00000064   100096E5           LDR      R0,[R6, #+16]
   \   00000068   010090E2           ADDS     R0,R0,#+1
   \   0000006C   100086E5           STR      R0,[R6, #+16]
    111          
    112                  // Transfer finished ?
    113                  if (pTransfer->transferred == pTransfer->num) 
   \   00000070   100096E5           LDR      R0,[R6, #+16]
   \   00000074   0C1096E5           LDR      R1,[R6, #+12]
   \   00000078   010050E1           CMP      R0,R1
   \   0000007C   0600001A           BNE      ??TWID_Handler_3
    114                  {
    115                      TWI_DisableIt(pTwi, AT91C_TWI_RXRDY);
   \   00000080   0210A0E3           MOV      R1,#+2
   \   00000084   0700B0E1           MOVS     R0,R7
   \   00000088   ........           BL       TWI_DisableIt
    116                      TWI_EnableIt(pTwi, AT91C_TWI_TXCOMP);
   \   0000008C   0110A0E3           MOV      R1,#+1
   \   00000090   0700B0E1           MOVS     R0,R7
   \   00000094   ........           BL       TWI_EnableIt
   \   00000098   300000EA           B        ??TWID_Handler_4
    117                  }
    118                  // Last byte ?
    119                  else if (pTransfer->transferred == (pTransfer->num - 1)) 
   \                     ??TWID_Handler_3:
   \   0000009C   100096E5           LDR      R0,[R6, #+16]
   \   000000A0   0C1096E5           LDR      R1,[R6, #+12]
   \   000000A4   011051E2           SUBS     R1,R1,#+1
   \   000000A8   010050E1           CMP      R0,R1
   \   000000AC   2B00001A           BNE      ??TWID_Handler_4
    120                      TWI_Stop(pTwi);
   \   000000B0   0700B0E1           MOVS     R0,R7
   \   000000B4   ........           BL       TWI_Stop
   \   000000B8   280000EA           B        ??TWID_Handler_4
    121              }
    122              // Byte sent
    123              else if (TWI_STATUS_TXRDY(status)) 
   \                     ??TWID_Handler_2:
   \   000000BC   0500B0E1           MOVS     R0,R5
   \   000000C0   FF0010E2           ANDS     R0,R0,#0xFF      ;; Zero extend
   \   000000C4   040010E3           TST      R0,#0x4
   \   000000C8   1300000A           BEQ      ??TWID_Handler_5
    124              {
    125                  // Transfer finished ?
    126                  if (pTransfer->transferred == pTransfer->num) 
   \   000000CC   100096E5           LDR      R0,[R6, #+16]
   \   000000D0   0C1096E5           LDR      R1,[R6, #+12]
   \   000000D4   010050E1           CMP      R0,R1
   \   000000D8   0600001A           BNE      ??TWID_Handler_6
    127                  {
    128                      TWI_DisableIt(pTwi, AT91C_TWI_TXRDY);
   \   000000DC   0410A0E3           MOV      R1,#+4
   \   000000E0   0700B0E1           MOVS     R0,R7
   \   000000E4   ........           BL       TWI_DisableIt
    129                      TWI_EnableIt(pTwi, AT91C_TWI_TXCOMP);
   \   000000E8   0110A0E3           MOV      R1,#+1
   \   000000EC   0700B0E1           MOVS     R0,R7
   \   000000F0   ........           BL       TWI_EnableIt
   \   000000F4   190000EA           B        ??TWID_Handler_4
    130                  }
    131                  // Bytes remaining
    132                  else 
    133                  {
    134                      TWI_WriteByte(pTwi, pTransfer->pData[pTransfer->transferred]);
   \                     ??TWID_Handler_6:
   \   000000F8   100096E5           LDR      R0,[R6, #+16]
   \   000000FC   081096E5           LDR      R1,[R6, #+8]

⌨️ 快捷键说明

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