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

📄 common.s

📁 Cortex-M4+example
💻 S
📖 第 1 页 / 共 2 页
字号:
///////////////////////////////////////////////////////////////////////////////
//                                                                            /
// IAR ANSI C/C++ Compiler V6.40.1.53790/W32 for ARM    09/Aug/2012  09:28:54 /
// Copyright 1999-2012 IAR Systems AB.                                        /
//                                                                            /
//    Cpu mode     =  thumb                                                   /
//    Endian       =  little                                                  /
//    Source file  =  C:\Users\305030973\Desktop\M4                           /
//                    example\02_uart_loop\src\Sources\C\Frame_C\common.c     /
//    Command line =  "C:\Users\305030973\Desktop\M4                          /
//                    example\02_uart_loop\src\Sources\C\Frame_C\common.c"    /
//                    -D IAR -D TWR_K60N512 -lCN                              /
//                    "C:\Users\305030973\Desktop\M4                          /
//                    example\02_uart_loop\bin\Flash\List\" -lB               /
//                    "C:\Users\305030973\Desktop\M4                          /
//                    example\02_uart_loop\bin\Flash\List\" -o                /
//                    "C:\Users\305030973\Desktop\M4                          /
//                    example\02_uart_loop\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\02_uart_loop\src\Sources\H\" -I                 /
//                    "C:\Users\305030973\Desktop\M4                          /
//                    example\02_uart_loop\src\Sources\H\Component_H\" -I     /
//                    "C:\Users\305030973\Desktop\M4                          /
//                    example\02_uart_loop\src\Sources\H\Frame_H\" -Ol        /
//                    --use_c++_inline                                        /
//    List file    =  C:\Users\305030973\Desktop\M4                           /
//                    example\02_uart_loop\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\02_uart_loop\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);
        MOVS     R1,#+1

⌨️ 快捷键说明

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