?? twid.lst
字號:
###############################################################################
# #
# 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 + -