?? common.s
字號:
///////////////////////////////////////////////////////////////////////////////
// /
// IAR ANSI C/C++ Compiler V6.40.1.53790/W32 for ARM 09/Aug/2012 10:07:32 /
// Copyright 1999-2012 IAR Systems AB. /
// /
// Cpu mode = thumb /
// Endian = little /
// Source file = C:\Users\305030973\Desktop\M4 /
// example\01_light\src\Sources\C\Frame_C\common.c /
// Command line = "C:\Users\305030973\Desktop\M4 /
// example\01_light\src\Sources\C\Frame_C\common.c" -D /
// IAR -D TWR_K60N512 -lCN "C:\Users\305030973\Desktop\M4 /
// example\01_light\bin\Flash\List\" -lB /
// "C:\Users\305030973\Desktop\M4 /
// example\01_light\bin\Flash\List\" -o /
// "C:\Users\305030973\Desktop\M4 /
// example\01_light\bin\Flash\Obj\" --no_cse --no_unroll /
// --no_inline --no_code_motion --no_tbaa --no_clustering /
// --no_scheduling --debug --endian=little /
// --cpu=Cortex-M4 -e --fpu=None --dlib_config /
// "C:\Program Files\IAR Systems\Embedded Workbench /
// 6.4_2\arm\INC\c\DLib_Config_Normal.h" -I /
// "C:\Users\305030973\Desktop\M4 /
// example\01_light\src\Sources\H\" -I /
// "C:\Users\305030973\Desktop\M4 /
// example\01_light\src\Sources\H\Component_H\" -I /
// "C:\Users\305030973\Desktop\M4 /
// example\01_light\src\Sources\H\Frame_H\" -I /
// "C:\Program Files\IAR Systems\Embedded Workbench /
// 6.4_2\arm\INC\" -I "C:\Program Files\IAR /
// Systems\Embedded Workbench 6.4_2\arm\INC\CLIB\" -Ol /
// --use_c++_inline /
// List file = C:\Users\305030973\Desktop\M4 /
// example\01_light\bin\Flash\List\common.s /
// /
// /
///////////////////////////////////////////////////////////////////////////////
NAME common
#define SHT_PROGBITS 0x1
PUBLIC disable_irq
PUBLIC enable_irq
PUBLIC set_irq_priority
PUBLIC stop
PUBLIC wait
PUBLIC write_vtor
// C:\Users\305030973\Desktop\M4 example\01_light\src\Sources\C\Frame_C\common.c
// 1 //-------------------------------------------------------------------------*
// 2 // 文件名: common.h (通用頭文件) *
// 3 // 說 明: *
// 4 //-------------------------------------------------------------------------*
// 5
// 6 #include "common.h"
// 7
// 8 //-------------------------------------------------------------------------*
// 9 //函數名: stop *
// 10 //功 能: 設置CPU為STOP模式 *
// 11 //參 數: 無 *
// 12 //返 回: 無 *
// 13 //說 明: 無 *
// 14 //-------------------------------------------------------------------------*
SECTION `.text`:CODE:NOROOT(2)
THUMB
// 15 void stop (void)
// 16 {
// 17 //置位SLEEPDEEP來使能STOP模式
// 18 SCB_SCR |= SCB_SCR_SLEEPDEEP_MASK;
stop:
LDR.N R0,??DataTable4 ;; 0xe000ed10
LDR R0,[R0, #+0]
ORRS R0,R0,#0x4
LDR.N R1,??DataTable4 ;; 0xe000ed10
STR R0,[R1, #+0]
// 19 //進入STOP模式
// 20 asm("WFI");
WFI
// 21 }
BX LR ;; return
// 22
// 23 //-------------------------------------------------------------------------*
// 24 //函數名: wait *
// 25 //功 能: 設置CPU為WAIT模式 *
// 26 //參 數: 無 *
// 27 //返 回: 無 *
// 28 //說 明: 無 *
// 29 //-------------------------------------------------------------------------*
SECTION `.text`:CODE:NOROOT(2)
THUMB
// 30 void wait (void)
// 31 {
// 32 //清SLEEPDEEP位來確定進入WAIT模式
// 33 SCB_SCR &= ~SCB_SCR_SLEEPDEEP_MASK;
wait:
LDR.N R0,??DataTable4 ;; 0xe000ed10
LDR R0,[R0, #+0]
BICS R0,R0,#0x4
LDR.N R1,??DataTable4 ;; 0xe000ed10
STR R0,[R1, #+0]
// 34 //進入WAIT模式
// 35 asm("WFI");
WFI
// 36 }
BX LR ;; return
// 37
// 38 //-------------------------------------------------------------------------*
// 39 //函數名: write_vtor *
// 40 //功 能: 更改中斷向量表偏移寄存器的值 *
// 41 //參 數: 要更改的值 *
// 42 //返 回: 無 *
// 43 //說 明: 無 *
// 44 //-------------------------------------------------------------------------*
SECTION `.text`:CODE:NOROOT(1)
THUMB
// 45 void write_vtor (int vtor)
// 46 {
// 47 //寫新值
// 48 SCB_VTOR = vtor;
write_vtor:
LDR.N R1,??DataTable4_1 ;; 0xe000ed08
STR R0,[R1, #+0]
// 49 }
BX LR ;; return
// 50
// 51 //-------------------------------------------------------------------------*
// 52 //函數名: enable_irq *
// 53 //功 能: 使能irq中斷 *
// 54 //參 數: irq:irq號 *
// 55 //返 回: 無 *
// 56 //說 明: irq號不是中斷向量號 *
// 57 //-------------------------------------------------------------------------*
SECTION `.text`:CODE:NOROOT(1)
THUMB
// 58 void enable_irq (int irq)
// 59 {
// 60 int div;
// 61
// 62 //確定irq號為有效的irq號
// 63 if (irq > 91) irq=91;
enable_irq:
CMP R0,#+92
BLT.N ??enable_irq_0
MOVS R0,#+91
// 64
// 65 //確定對應的NVICISER
// 66 div = irq/32;
??enable_irq_0:
MOVS R1,#+32
SDIV R1,R0,R1
// 67
// 68 switch (div)
CMP R1,#+0
BEQ.N ??enable_irq_1
CMP R1,#+2
BEQ.N ??enable_irq_2
BCC.N ??enable_irq_3
B.N ??enable_irq_4
// 69 {
// 70 case 0x0:
// 71 NVICICPR0 = 1 << (irq%32);
??enable_irq_1:
MOVS R1,#+1
MOVS R2,#+32
SDIV R3,R0,R2
MLS R3,R3,R2,R0
LSLS R1,R1,R3
LDR.N R2,??DataTable4_2 ;; 0xe000e280
STR R1,[R2, #+0]
// 72 NVICISER0 = 1 << (irq%32);
MOVS R1,#+1
MOVS R2,#+32
SDIV R3,R0,R2
MLS R3,R3,R2,R0
LSLS R0,R1,R3
LDR.N R1,??DataTable4_3 ;; 0xe000e100
STR R0,[R1, #+0]
// 73 break;
B.N ??enable_irq_4
// 74 case 0x1:
// 75 NVICICPR1 = 1 << (irq%32);
??enable_irq_3:
MOVS R1,#+1
MOVS R2,#+32
SDIV R3,R0,R2
MLS R3,R3,R2,R0
LSLS R1,R1,R3
LDR.N R2,??DataTable4_4 ;; 0xe000e284
STR R1,[R2, #+0]
// 76 NVICISER1 = 1 << (irq%32);
MOVS R1,#+1
MOVS R2,#+32
SDIV R3,R0,R2
MLS R3,R3,R2,R0
LSLS R0,R1,R3
LDR.N R1,??DataTable4_5 ;; 0xe000e104
STR R0,[R1, #+0]
// 77 break;
B.N ??enable_irq_4
// 78 case 0x2:
// 79 NVICICPR2 = 1 << (irq%32);
??enable_irq_2:
MOVS R1,#+1
MOVS R2,#+32
SDIV R3,R0,R2
MLS R3,R3,R2,R0
LSLS R1,R1,R3
LDR.N R2,??DataTable4_6 ;; 0xe000e288
STR R1,[R2, #+0]
// 80 NVICISER2 = 1 << (irq%32);
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -