📄 common.lst
字号:
\ 0000008C 0x6008 STR R0,[R1, #+0]
81 break;
82 }
83 }
\ ??enable_irq_4:
\ 0000008E 0x4770 BX LR ;; return
84
85 //-------------------------------------------------------------------------*
86 //函数名: disable_irq *
87 //功 能: 禁止irq中断 *
88 //参 数: irq:irq号 *
89 //返 回: 无 *
90 //说 明: irq号不是中断向量号 *
91 //-------------------------------------------------------------------------*
\ In section .text, align 2, keep-with-next
92 void disable_irq (int irq)
93 {
94 int div;
95
96 //确定irq号为有效的irq号
97 if (irq > 91) irq=91;
\ disable_irq:
\ 00000000 0x285C CMP R0,#+92
\ 00000002 0xDB00 BLT.N ??disable_irq_0
\ 00000004 0x205B MOVS R0,#+91
98
99 //确定对应的NVICISER
100 div = irq/32;
\ ??disable_irq_0:
\ 00000006 0x2120 MOVS R1,#+32
\ 00000008 0xFB90 0xF1F1 SDIV R1,R0,R1
101
102 switch (div)
\ 0000000C 0x2900 CMP R1,#+0
\ 0000000E 0xD003 BEQ.N ??disable_irq_1
\ 00000010 0x2902 CMP R1,#+2
\ 00000012 0xD017 BEQ.N ??disable_irq_2
\ 00000014 0xD30B BCC.N ??disable_irq_3
\ 00000016 0xE01F B.N ??disable_irq_4
103 {
104 case 0x0:
105 NVICICER0 = 1 << (irq%32);
\ ??disable_irq_1:
\ 00000018 0x2101 MOVS R1,#+1
\ 0000001A 0x2220 MOVS R2,#+32
\ 0000001C 0xFB90 0xF3F2 SDIV R3,R0,R2
\ 00000020 0xFB03 0x0312 MLS R3,R3,R2,R0
\ 00000024 0xFA11 0xF003 LSLS R0,R1,R3
\ 00000028 0x.... LDR.N R1,??DataTable4_8 ;; 0xe000e180
\ 0000002A 0x6008 STR R0,[R1, #+0]
106 break;
\ 0000002C 0xE014 B.N ??disable_irq_4
107 case 0x1:
108 NVICICER1 = 1 << (irq%32);
\ ??disable_irq_3:
\ 0000002E 0x2101 MOVS R1,#+1
\ 00000030 0x2220 MOVS R2,#+32
\ 00000032 0xFB90 0xF3F2 SDIV R3,R0,R2
\ 00000036 0xFB03 0x0312 MLS R3,R3,R2,R0
\ 0000003A 0xFA11 0xF003 LSLS R0,R1,R3
\ 0000003E 0x.... LDR.N R1,??DataTable4_9 ;; 0xe000e184
\ 00000040 0x6008 STR R0,[R1, #+0]
109 break;
\ 00000042 0xE009 B.N ??disable_irq_4
110 case 0x2:
111 NVICICER2 = 1 << (irq%32);
\ ??disable_irq_2:
\ 00000044 0x2101 MOVS R1,#+1
\ 00000046 0x2220 MOVS R2,#+32
\ 00000048 0xFB90 0xF3F2 SDIV R3,R0,R2
\ 0000004C 0xFB03 0x0312 MLS R3,R3,R2,R0
\ 00000050 0xFA11 0xF003 LSLS R0,R1,R3
\ 00000054 0x.... LDR.N R1,??DataTable4_10 ;; 0xe000e188
\ 00000056 0x6008 STR R0,[R1, #+0]
112 break;
113 }
114 }
\ ??disable_irq_4:
\ 00000058 0x4770 BX LR ;; return
115
116 //-------------------------------------------------------------------------*
117 //函数名: set_irq_priority *
118 //功 能: 设置irq中断和优先级 *
119 //参 数: irq:irq号 *
120 // prio:优先级 *
121 //返 回: 无 *
122 //说 明: irq号不是中断向量号 *
123 //-------------------------------------------------------------------------*
\ In section .text, align 2, keep-with-next
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:
\ 00000000 0x285C CMP R0,#+92
\ 00000002 0xDB00 BLT.N ??set_irq_priority_0
\ 00000004 0x205B MOVS R0,#+91
130 if (prio > 15) prio=15;
\ ??set_irq_priority_0:
\ 00000006 0x2910 CMP R1,#+16
\ 00000008 0xDB00 BLT.N ??set_irq_priority_1
\ 0000000A 0x210F MOVS R1,#+15
131
132 //确定对应的NVICISER
133 prio_reg = (uint8 *)(((uint32)&NVICIP0) + irq);
\ ??set_irq_priority_1:
\ 0000000C 0xF100 0x4060 ADD R0,R0,#-536870912
\ 00000010 0xF510 0x4064 ADDS R0,R0,#+58368
134 //设置优先级
135 *prio_reg = ( (prio&0xF) << (8 - ARM_INTERRUPT_LEVEL_BITS) );
\ 00000014 0x0109 LSLS R1,R1,#+4
\ 00000016 0x7001 STRB R1,[R0, #+0]
136 }
\ 00000018 0x4770 BX LR ;; return
\ In section .text, align 4, keep-with-next
\ ??DataTable4:
\ 00000000 0xE000ED10 DC32 0xe000ed10
\ In section .text, align 4, keep-with-next
\ ??DataTable4_1:
\ 00000000 0xE000ED08 DC32 0xe000ed08
\ In section .text, align 4, keep-with-next
\ ??DataTable4_2:
\ 00000000 0xE000E280 DC32 0xe000e280
\ In section .text, align 4, keep-with-next
\ ??DataTable4_3:
\ 00000000 0xE000E100 DC32 0xe000e100
\ In section .text, align 4, keep-with-next
\ ??DataTable4_4:
\ 00000000 0xE000E284 DC32 0xe000e284
\ In section .text, align 4, keep-with-next
\ ??DataTable4_5:
\ 00000000 0xE000E104 DC32 0xe000e104
\ In section .text, align 4, keep-with-next
\ ??DataTable4_6:
\ 00000000 0xE000E288 DC32 0xe000e288
\ In section .text, align 4, keep-with-next
\ ??DataTable4_7:
\ 00000000 0xE000E108 DC32 0xe000e108
\ In section .text, align 4, keep-with-next
\ ??DataTable4_8:
\ 00000000 0xE000E180 DC32 0xe000e180
\ In section .text, align 4, keep-with-next
\ ??DataTable4_9:
\ 00000000 0xE000E184 DC32 0xe000e184
\ In section .text, align 4, keep-with-next
\ ??DataTable4_10:
\ 00000000 0xE000E188 DC32 0xe000e188
137
Maximum stack usage in bytes:
.cstack Function
------- --------
0 disable_irq
0 enable_irq
0 set_irq_priority
0 stop
0 wait
0 write_vtor
Section sizes:
Bytes Function/Label
----- --------------
4 ??DataTable4
4 ??DataTable4_1
4 ??DataTable4_10
4 ??DataTable4_2
4 ??DataTable4_3
4 ??DataTable4_4
4 ??DataTable4_5
4 ??DataTable4_6
4 ??DataTable4_7
4 ??DataTable4_8
4 ??DataTable4_9
90 disable_irq
144 enable_irq
26 set_irq_priority
16 stop
16 wait
6 write_vtor
342 bytes in section .text
342 bytes of CODE memory
Errors: none
Warnings: none
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -