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

📄 common.s

📁 Cortex-M4+example
💻 S
📖 第 1 页 / 共 2 页
字号:
///////////////////////////////////////////////////////////////////////////////
//                                                                            /
// IAR ANSI C/C++ Compiler V6.10.1.52143/W32 for ARM    16/Apr/2011  20:57:44 /
// Copyright 1999-2010 IAR Systems AB.                                        /
//                                                                            /
//    Cpu mode     =  thumb                                                   /
//    Endian       =  little                                                  /
//    Source file  =  E:\Project\15_K60\03_Software\02_My                     /
//                    program\K60_IAR\03_uart_int\src\Sources\C\Frame_C\commo /
//                    n.c                                                     /
//    Command line =  "E:\Project\15_K60\03_Software\02_My                    /
//                    program\K60_IAR\03_uart_int\src\Sources\C\Frame_C\commo /
//                    n.c" -D IAR -D TWR_K60N512 -lCN                         /
//                    "E:\Project\15_K60\03_Software\02_My                    /
//                    program\K60_IAR\03_uart_int\bin\Ram\List\" -lB          /
//                    "E:\Project\15_K60\03_Software\02_My                    /
//                    program\K60_IAR\03_uart_int\bin\Ram\List\" -o           /
//                    "E:\Project\15_K60\03_Software\02_My                    /
//                    program\K60_IAR\03_uart_int\bin\Ram\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 D:\iar\arm\INC\c\DLib_Config_Normal.h -I  /
//                    "E:\Project\15_K60\03_Software\02_My                    /
//                    program\K60_IAR\03_uart_int\src\Sources\H\" -I          /
//                    "E:\Project\15_K60\03_Software\02_My                    /
//                    program\K60_IAR\03_uart_int\src\Sources\H\Component_H\" /
//                     -I "E:\Project\15_K60\03_Software\02_My                /
//                    program\K60_IAR\03_uart_int\src\Sources\H\Frame_H\"     /
//                    -Ol --use_c++_inline                                    /
//    List file    =  E:\Project\15_K60\03_Software\02_My                     /
//                    program\K60_IAR\03_uart_int\bin\Ram\List\common.s       /
//                                                                            /
//                                                                            /
///////////////////////////////////////////////////////////////////////////////

        NAME common

        PUBLIC disable_irq
        PUBLIC enable_irq
        PUBLIC set_irq_priority
        PUBLIC stop
        PUBLIC wait
        PUBLIC write_vtor

// E:\Project\15_K60\03_Software\02_My program\K60_IAR\03_uart_int\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,??DataTable5  ;; 0xe000ed10
        LDR      R0,[R0, #+0]
        ORRS     R0,R0,#0x4
        LDR.N    R1,??DataTable5  ;; 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,??DataTable5  ;; 0xe000ed10
        LDR      R0,[R0, #+0]
        BICS     R0,R0,#0x4
        LDR.N    R1,??DataTable5  ;; 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,??DataTable5_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,??DataTable5_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,??DataTable5_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,??DataTable5_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,??DataTable5_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

⌨️ 快捷键说明

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