?? cpu_c.lst
字號:
\ 0000005C ........ BL CPU_SR_Restore
367 break;
\ 00000060 56E0 B.N ??CPU_IntSrcEn_7
368
369 case CPU_INT_BUSFAULT: /* Bus fault. */
370 CPU_CRITICAL_ENTER();
\ ??CPU_IntSrcEn_4:
\ 00000062 ........ BL CPU_SR_Save
\ 00000066 8046 MOV R8,R0
371 CPU_REG_NVIC_SHCSR |= CPU_REG_NVIC_SHCSR_BUSFAULTENA;
\ 00000068 ........ LDR.W R0,??DataTable6_2 ;; 0xe000ed24
\ 0000006C 0068 LDR R0,[R0, #+0]
\ 0000006E 50F40030 ORRS R0,R0,#0x20000
\ 00000072 ........ LDR.W R1,??DataTable6_2 ;; 0xe000ed24
\ 00000076 0860 STR R0,[R1, #+0]
372 CPU_CRITICAL_EXIT();
\ 00000078 4046 MOV R0,R8
\ 0000007A ........ BL CPU_SR_Restore
373 break;
\ 0000007E 47E0 B.N ??CPU_IntSrcEn_7
374
375 case CPU_INT_USAGEFAULT: /* Usage fault. */
376 CPU_CRITICAL_ENTER();
\ ??CPU_IntSrcEn_3:
\ 00000080 ........ BL CPU_SR_Save
\ 00000084 8046 MOV R8,R0
377 CPU_REG_NVIC_SHCSR |= CPU_REG_NVIC_SHCSR_USGFAULTENA;
\ 00000086 ........ LDR.W R0,??DataTable6_2 ;; 0xe000ed24
\ 0000008A 0068 LDR R0,[R0, #+0]
\ 0000008C 50F48020 ORRS R0,R0,#0x40000
\ 00000090 ........ LDR.W R1,??DataTable6_2 ;; 0xe000ed24
\ 00000094 0860 STR R0,[R1, #+0]
378 CPU_CRITICAL_EXIT();
\ 00000096 4046 MOV R0,R8
\ 00000098 ........ BL CPU_SR_Restore
379 break;
\ 0000009C 38E0 B.N ??CPU_IntSrcEn_7
380
381 case CPU_INT_SYSTICK: /* SysTick. */
382 CPU_CRITICAL_ENTER();
\ ??CPU_IntSrcEn_5:
\ 0000009E ........ BL CPU_SR_Save
\ 000000A2 8046 MOV R8,R0
383 CPU_REG_NVIC_ST_CTRL |= CPU_REG_NVIC_ST_CTRL_ENABLE;
\ 000000A4 ........ LDR.W R0,??DataTable6_3 ;; 0xe000e010
\ 000000A8 0068 LDR R0,[R0, #+0]
\ 000000AA 50F00100 ORRS R0,R0,#0x1
\ 000000AE ........ LDR.W R1,??DataTable6_3 ;; 0xe000e010
\ 000000B2 0860 STR R0,[R1, #+0]
384 CPU_CRITICAL_EXIT();
\ 000000B4 4046 MOV R0,R8
\ 000000B6 ........ BL CPU_SR_Restore
385 break;
\ 000000BA 29E0 B.N ??CPU_IntSrcEn_7
386
387
388 /* ---------------- EXTERNAL INTERRUPT ---------------- */
389 default:
390 pos_max = CPU_INT_SRC_POS_MAX;
\ ??CPU_IntSrcEn_6:
\ 000000BC ........ LDR.W R0,??DataTable6_4 ;; 0xe000e004
\ 000000C0 0068 LDR R0,[R0, #+0]
\ 000000C2 401C ADDS R0,R0,#+1
\ 000000C4 10F01F00 ANDS R0,R0,#0x1F
\ 000000C8 4001 LSLS R0,R0,#+5
\ 000000CA 1030 ADDS R0,R0,#+16
\ 000000CC 0700 MOVS R7,R0
391 if (pos < pos_max) { /* See Note #3. */
\ 000000CE E4B2 UXTB R4,R4 ;; ZeroExt R4,R4,#+24,#+24
\ 000000D0 FFB2 UXTB R7,R7 ;; ZeroExt R7,R7,#+24,#+24
\ 000000D2 BC42 CMP R4,R7
\ 000000D4 1CD2 BCS.N ??CPU_IntSrcEn_8
392 group = (pos - 16) / 32;
\ 000000D6 E4B2 UXTB R4,R4 ;; ZeroExt R4,R4,#+24,#+24
\ 000000D8 B4F11000 SUBS R0,R4,#+16
\ 000000DC 2021 MOVS R1,#+32
\ 000000DE 90FBF1F0 SDIV R0,R0,R1
\ 000000E2 0500 MOVS R5,R0
393 nbr = (pos - 16) % 32;
\ 000000E4 E4B2 UXTB R4,R4 ;; ZeroExt R4,R4,#+24,#+24
\ 000000E6 B4F11000 SUBS R0,R4,#+16
\ 000000EA 2021 MOVS R1,#+32
\ 000000EC 90FBF1F2 SDIV R2,R0,R1
\ 000000F0 02FB1102 MLS R2,R2,R1,R0
\ 000000F4 1600 MOVS R6,R2
394
395 CPU_CRITICAL_ENTER();
\ 000000F6 ........ BL CPU_SR_Save
\ 000000FA 8046 MOV R8,R0
396 CPU_REG_NVIC_SETEN(group) = DEF_BIT(nbr);
\ 000000FC EDB2 UXTB R5,R5 ;; ZeroExt R5,R5,#+24,#+24
\ 000000FE ........ LDR.W R0,??DataTable6_6 ;; 0xe000e100
\ 00000102 0121 MOVS R1,#+1
\ 00000104 B140 LSLS R1,R1,R6
\ 00000106 40F82510 STR R1,[R0, R5, LSL #+2]
397 CPU_CRITICAL_EXIT();
\ 0000010A 4046 MOV R0,R8
\ 0000010C ........ BL CPU_SR_Restore
398 }
399 break;
400 }
401 }
\ ??CPU_IntSrcEn_8:
\ ??CPU_IntSrcEn_7:
\ 00000110 BDE8F081 POP {R4-R8,PC} ;; return
402
403 /*$PAGE*/
404 /*
405 *********************************************************************************************************
406 * CPU_IntSrcPendClr()
407 *
408 * Description : Clear a pending interrupt.
409 *
410 * Argument(s) : pos Position of interrupt vector in interrupt table (see 'CPU_IntSrcDis()').
411 *
412 * Return(s) : none.
413 *
414 * Caller(s) : Application.
415 *
416 * Note(s) : (1) See 'CPU_IntSrcDis() Note #1'.
417 *
418 * (2) The pending status of several interrupts cannot be clear/set :
419 *
420 * (a) Reset.
421 * (b) NMI.
422 * (c) Hard fault.
423 * (d) Memory Managment.
424 * (e) Bus Fault.
425 * (f) Usage Fault.
426 * (g) SVCall.
427 * (h) Debug monitor.
428 * (i) PendSV.
429 * (j) Systick
430 *
431 * (3) See 'CPU_IntSrcDis() Note #3'.
432 *********************************************************************************************************
433 */
434
\ In section .text, align 2, keep-with-next
435 void CPU_IntSrcPendClr (CPU_INT08U pos)
436
437 {
\ CPU_IntSrcPendClr:
\ 00000000 2DE9F041 PUSH {R4-R8,LR}
\ 00000004 0400 MOVS R4,R0
438 CPU_INT08U group;
439 CPU_INT08U nbr;
440 CPU_INT08U pos_max;
441 CPU_SR_ALLOC();
\ 00000006 5FF00008 MOVS R8,#+0
442
443
444 switch (pos) {
\ 0000000A E4B2 UXTB R4,R4 ;; ZeroExt R4,R4,#+24,#+24
\ 0000000C 2000 MOVS R0,R4
\ 0000000E 0028 CMP R0,#+0
\ 00000010 0ED0 BEQ.N ??CPU_IntSrcPendClr_0
\ 00000012 401E SUBS R0,R0,#+1
\ 00000014 0528 CMP R0,#+5
\ 00000016 0CD9 BLS.N ??CPU_IntSrcPendClr_1
\ 00000018 801F SUBS R0,R0,#+6
\ 0000001A 0328 CMP R0,#+3
\ 0000001C 08D9 BLS.N ??CPU_IntSrcPendClr_0
\ 0000001E 001F SUBS R0,R0,#+4
\ 00000020 0128 CMP R0,#+1
\ 00000022 06D9 BLS.N ??CPU_IntSrcPendClr_1
\ 00000024 801E SUBS R0,R0,#+2
\ 00000026 03D0 BEQ.N ??CPU_IntSrcPendClr_0
\ 00000028 401E SUBS R0,R0,#+1
\ 0000002A 0128 CMP R0,#+1
\ 0000002C 01D9 BLS.N ??CPU_IntSrcPendClr_1
\ 0000002E 01E0 B.N ??CPU_IntSrcPendClr_2
445 case CPU_INT_STK_PTR: /* ---------------- INVALID OR RESERVED --------------- */
446 case CPU_INT_RSVD_07:
447 case CPU_INT_RSVD_08:
448 case CPU_INT_RSVD_09:
449 case CPU_INT_RSVD_10:
450 case CPU_INT_RSVD_13:
451 break;
\ ??CPU_IntSrcPendClr_0:
\ 00000030 2AE0 B.N ??CPU_IntSrcPendClr_3
452 /* ----------------- SYSTEM EXCEPTIONS ---------------- */
453 case CPU_INT_RESET: /* Reset (see Note #2). */
454 case CPU_INT_NMI: /* Non-maskable interrupt (see Note #2). */
455 case CPU_INT_HFAULT: /* Hard fault (see Note #2). */
456 case CPU_INT_MEM: /* Memory management (see Note #2). */
457 case CPU_INT_SVCALL: /* SVCall (see Note #2). */
458 case CPU_INT_DBGMON: /* Debug monitor (see Note #2). */
459 case CPU_INT_PENDSV: /* PendSV (see Note #2). */
460 case CPU_INT_BUSFAULT: /* Bus fault. */
461 case CPU_INT_USAGEFAULT: /* Usage fault. */
462 case CPU_INT_SYSTICK: /* SysTick. */
463 break;
\ ??CPU_IntSrcPendClr_1:
\ 00000032 29E0 B.N ??CPU_IntSrcPendClr_3
464 /* ---------------- EXTERNAL INTERRUPT ---------------- */
465 default:
466 pos_max = CPU_INT_SRC_POS_MAX;
\ ??CPU_IntSrcPendClr_2:
\ 00000034 ........ LDR.W R0,??DataTable6_4 ;; 0xe000e004
\ 00000038 0068 LDR R0,[R0, #+0]
\ 0000003A 401C ADDS R0,R0,#+1
\ 0000003C 10F01F00 ANDS R0,R0,#0x1F
\ 00000040 4001 LSLS R0,R0,#+5
\ 00000042 1030 ADDS R0,R0,#+16
\ 00000044 0700 MOVS R7,R0
467 if (pos < pos_max) { /* See Note #3. */
\ 00000046 E4B2 UXTB R4,R4 ;; ZeroExt R4,R4,#+24,#+24
\ 00000048 FFB2 UXTB R7,R7 ;; ZeroExt R7,R7,#+24,#+24
\ 0000004A BC42 CMP R4,R7
\ 0000004C 1CD2 BCS.N ??CPU_IntSrcPendClr_4
468 group = (pos - 16) / 32;
\ 0000004E E4B2 UXTB R4,R4 ;; ZeroExt R4,R4,#+24,#+24
\ 00000050 B4F11000 SUBS R0,R4,#+16
\ 00000054 2021 MOVS R1,#+32
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -