📄 pmc.lst
字号:
###############################################################################
# #
# 08/Mar/2009 18:02:08 #
# 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\peripherals\pmc\pmc.c #
# Command line = E:\IAR\at91lib\peripherals\pmc\pmc.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\pmc.lst #
# Object file = E:\IAR\at91sam9260-ek\basic-twi-eeprom-project\ewp\at91s #
# am9260_sdram\Obj\pmc.o #
# #
# #
###############################################################################
E:\IAR\at91lib\peripherals\pmc\pmc.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 //------------------------------------------------------------------------------
31 // Headers
32 //------------------------------------------------------------------------------
33
34 #include "pmc.h"
35 #include <board.h>
36 #include <utility/assert.h>
37 #include <utility/trace.h>
38
39 //------------------------------------------------------------------------------
40 // Global functions
41 //------------------------------------------------------------------------------
42
43 #if defined(at91sam7l64) || defined(at91sam7l128)
44 //------------------------------------------------------------------------------
45 /// Sets the fast wake-up inputs that can get the device out of Wait mode.
46 /// \param inputs Fast wake-up inputs to enable.
47 //------------------------------------------------------------------------------
48 void PMC_SetFastWakeUpInputs(unsigned int inputs)
49 {
50 SANITY_CHECK((inputs & ~0xFF) == 0);
51 AT91C_BASE_PMC->PMC_FSMR = inputs;
52 }
53
54 #if !defined(__ICCARM__)
55 __attribute__ ((section (".ramfunc"))) // GCC
56 #endif
57 //------------------------------------------------------------------------------
58 /// Disables the main oscillator, making the device enter Wait mode.
59 //------------------------------------------------------------------------------
60 void PMC_DisableMainOscillatorForWaitMode(void)
61 {
62 AT91C_BASE_PMC->PMC_MOR = 0x37 << 16;
63 while ((AT91C_BASE_PMC->PMC_MOR & AT91C_PMC_MAINSELS) != AT91C_PMC_MAINSELS);
64 }
65
66 #endif
67
68 #if defined(at91sam7l)
69 //------------------------------------------------------------------------------
70 /// Disables the main oscillator when NOT running on it.
71 //------------------------------------------------------------------------------
72 void PMC_DisableMainOscillator(void)
73 {
74 AT91C_BASE_PMC->PMC_MOR = 0x37 << 16;
75 while ((AT91C_BASE_PMC->PMC_SR & AT91C_PMC_MAINSELS) == AT91C_PMC_MAINSELS);
76 }
77 #endif
78
79 //------------------------------------------------------------------------------
80 /// Disables the processor clock, making the device enter Idle mode.
81 //------------------------------------------------------------------------------
\ In section .text, align 4, keep-with-next
82 void PMC_DisableProcessorClock(void)
83 {
84 AT91C_BASE_PMC->PMC_SCDR = AT91C_PMC_PCK;
\ PMC_DisableProcessorClock:
\ 00000000 FB00E0E3 MVN R0,#+251
\ 00000004 C00FC0E3 BIC R0,R0,#0x300
\ 00000008 0110A0E3 MOV R1,#+1
\ 0000000C 001080E5 STR R1,[R0, #+0]
85 while ((AT91C_BASE_PMC->PMC_SCSR & AT91C_PMC_PCK) != AT91C_PMC_PCK);
\ ??PMC_DisableProcessorClock_0:
\ 00000010 F700E0E3 MVN R0,#+247
\ 00000014 C00FC0E3 BIC R0,R0,#0x300
\ 00000018 000090E5 LDR R0,[R0, #+0]
\ 0000001C 010010E3 TST R0,#0x1
\ 00000020 FAFFFF0A BEQ ??PMC_DisableProcessorClock_0
86 }
\ 00000024 1EFF2FE1 BX LR ;; return
87
88
89 //------------------------------------------------------------------------------
90 /// Enables the clock of a peripheral. The peripheral ID (AT91C_ID_xxx) is used
91 /// to identify which peripheral is targetted.
92 /// Note that the ID must NOT be shifted (i.e. 1 << AT91C_ID_xxx).
93 /// \param id Peripheral ID (AT91C_ID_xxx).
94 //------------------------------------------------------------------------------
\ In section .text, align 4, keep-with-next
95 void PMC_EnablePeripheral(unsigned int id)
96 {
\ PMC_EnablePeripheral:
\ 00000000 10402DE9 PUSH {R4,LR}
\ 00000004 0040B0E1 MOVS R4,R0
97 SANITY_CHECK(id < 32);
\ 00000008 200054E3 CMP R4,#+32
\ 0000000C 0400003A BCC ??PMC_EnablePeripheral_0
\ 00000010 6120A0E3 MOV R2,#+97
\ 00000014 ........ LDR R1,??DataTable2 ;; `?<Constant "E:\\\\IAR\\\\at91lib\\\\periph...">`
\ 00000018 ........ LDR R0,??DataTable3 ;; `?<Constant "Sanity check failed a...">`
\ 0000001C ........ BL printf
\ ??PMC_EnablePeripheral_1:
\ 00000020 FEFFFFEA B ??PMC_EnablePeripheral_1
98
99 if ((AT91C_BASE_PMC->PMC_PCSR & (1 << id)) == (1 << id))
\ ??PMC_EnablePeripheral_0:
\ 00000024 E700E0E3 MVN R0,#+231
\ 00000028 C00FC0E3 BIC R0,R0,#0x300
\ 0000002C 000090E5 LDR R0,[R0, #+0]
\ 00000030 0110A0E3 MOV R1,#+1
\ 00000034 110410E0 ANDS R0,R0,R1, LSL R4
\ 00000038 0110A0E3 MOV R1,#+1
\ 0000003C 110450E1 CMP R0,R1, LSL R4
\ 00000040 0300001A BNE ??PMC_EnablePeripheral_2
100 {
101 trace_LOG(trace_INFO,
102 "-I- PMC_EnablePeripheral: clock of peripheral"
103 " %u is already enabled\n\r",
104 id);
\ 00000044 0410B0E1 MOVS R1,R4
\ 00000048 1C009FE5 LDR R0,??PMC_EnablePeripheral_3 ;; `?<Constant "-I- PMC_EnablePeriphe...">`
\ 0000004C ........ BL printf
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -