📄 common.s
字号:
MOVS R2,#+32
SDIV R3,R0,R2
MLS R3,R3,R2,R0
LSLS R0,R1,R3
LDR.N R1,??DataTable4_7 ;; 0xe000e108
STR R0,[R1, #+0]
// 81 break;
// 82 }
// 83 }
??enable_irq_4:
BX LR ;; return
// 84
// 85 //-------------------------------------------------------------------------*
// 86 //函数名: disable_irq *
// 87 //功 能: 禁止irq中断 *
// 88 //参 数: irq:irq号 *
// 89 //返 回: 无 *
// 90 //说 明: irq号不是中断向量号 *
// 91 //-------------------------------------------------------------------------*
SECTION `.text`:CODE:NOROOT(1)
THUMB
// 92 void disable_irq (int irq)
// 93 {
// 94 int div;
// 95
// 96 //确定irq号为有效的irq号
// 97 if (irq > 91) irq=91;
disable_irq:
CMP R0,#+92
BLT.N ??disable_irq_0
MOVS R0,#+91
// 98
// 99 //确定对应的NVICISER
// 100 div = irq/32;
??disable_irq_0:
MOVS R1,#+32
SDIV R1,R0,R1
// 101
// 102 switch (div)
CMP R1,#+0
BEQ.N ??disable_irq_1
CMP R1,#+2
BEQ.N ??disable_irq_2
BCC.N ??disable_irq_3
B.N ??disable_irq_4
// 103 {
// 104 case 0x0:
// 105 NVICICER0 = 1 << (irq%32);
??disable_irq_1:
MOVS R1,#+1
MOVS R2,#+32
SDIV R3,R0,R2
MLS R3,R3,R2,R0
LSLS R0,R1,R3
LDR.N R1,??DataTable4_8 ;; 0xe000e180
STR R0,[R1, #+0]
// 106 break;
B.N ??disable_irq_4
// 107 case 0x1:
// 108 NVICICER1 = 1 << (irq%32);
??disable_irq_3:
MOVS R1,#+1
MOVS R2,#+32
SDIV R3,R0,R2
MLS R3,R3,R2,R0
LSLS R0,R1,R3
LDR.N R1,??DataTable4_9 ;; 0xe000e184
STR R0,[R1, #+0]
// 109 break;
B.N ??disable_irq_4
// 110 case 0x2:
// 111 NVICICER2 = 1 << (irq%32);
??disable_irq_2:
MOVS R1,#+1
MOVS R2,#+32
SDIV R3,R0,R2
MLS R3,R3,R2,R0
LSLS R0,R1,R3
LDR.N R1,??DataTable4_10 ;; 0xe000e188
STR R0,[R1, #+0]
// 112 break;
// 113 }
// 114 }
??disable_irq_4:
BX LR ;; return
SECTION `.text`:CODE:NOROOT(2)
SECTION_TYPE SHT_PROGBITS, 0
DATA
??DataTable4:
DC32 0xe000ed10
SECTION `.text`:CODE:NOROOT(2)
SECTION_TYPE SHT_PROGBITS, 0
DATA
??DataTable4_1:
DC32 0xe000ed08
SECTION `.text`:CODE:NOROOT(2)
SECTION_TYPE SHT_PROGBITS, 0
DATA
??DataTable4_2:
DC32 0xe000e280
SECTION `.text`:CODE:NOROOT(2)
SECTION_TYPE SHT_PROGBITS, 0
DATA
??DataTable4_3:
DC32 0xe000e100
SECTION `.text`:CODE:NOROOT(2)
SECTION_TYPE SHT_PROGBITS, 0
DATA
??DataTable4_4:
DC32 0xe000e284
SECTION `.text`:CODE:NOROOT(2)
SECTION_TYPE SHT_PROGBITS, 0
DATA
??DataTable4_5:
DC32 0xe000e104
SECTION `.text`:CODE:NOROOT(2)
SECTION_TYPE SHT_PROGBITS, 0
DATA
??DataTable4_6:
DC32 0xe000e288
SECTION `.text`:CODE:NOROOT(2)
SECTION_TYPE SHT_PROGBITS, 0
DATA
??DataTable4_7:
DC32 0xe000e108
SECTION `.text`:CODE:NOROOT(2)
SECTION_TYPE SHT_PROGBITS, 0
DATA
??DataTable4_8:
DC32 0xe000e180
SECTION `.text`:CODE:NOROOT(2)
SECTION_TYPE SHT_PROGBITS, 0
DATA
??DataTable4_9:
DC32 0xe000e184
SECTION `.text`:CODE:NOROOT(2)
SECTION_TYPE SHT_PROGBITS, 0
DATA
??DataTable4_10:
DC32 0xe000e188
// 115
// 116 //-------------------------------------------------------------------------*
// 117 //函数名: set_irq_priority *
// 118 //功 能: 设置irq中断和优先级 *
// 119 //参 数: irq:irq号 *
// 120 // prio:优先级 *
// 121 //返 回: 无 *
// 122 //说 明: irq号不是中断向量号 *
// 123 //-------------------------------------------------------------------------*
SECTION `.text`:CODE:NOROOT(1)
THUMB
// 124 void set_irq_priority (int irq, int prio)
// 125 {
// 126 uint8 *prio_reg;
// 127
// 128 //确定irq号和优先级有效
// 129 if (irq > 91) irq=91;
set_irq_priority:
CMP R0,#+92
BLT.N ??set_irq_priority_0
MOVS R0,#+91
// 130 if (prio > 15) prio=15;
??set_irq_priority_0:
CMP R1,#+16
BLT.N ??set_irq_priority_1
MOVS R1,#+15
// 131
// 132 //确定对应的NVICISER
// 133 prio_reg = (uint8 *)(((uint32)&NVICIP0) + irq);
??set_irq_priority_1:
ADD R0,R0,#-536870912
ADDS R0,R0,#+58368
// 134 //设置优先级
// 135 *prio_reg = ( (prio&0xF) << (8 - ARM_INTERRUPT_LEVEL_BITS) );
LSLS R1,R1,#+4
STRB R1,[R0, #+0]
// 136 }
BX LR ;; return
SECTION `.iar_vfe_header`:DATA:REORDER:NOALLOC:NOROOT(2)
SECTION_TYPE SHT_PROGBITS, 0
DATA
DC32 0
SECTION __DLIB_PERTHREAD:DATA:REORDER:NOROOT(0)
SECTION_TYPE SHT_PROGBITS, 0
SECTION __DLIB_PERTHREAD_init:DATA:REORDER:NOROOT(0)
SECTION_TYPE SHT_PROGBITS, 0
END
// 137
//
// 342 bytes in section .text
//
// 342 bytes of CODE memory
//
//Errors: none
//Warnings: none
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -