?? main.lst
字號:
ARM COMPILER V2.50a, main 22/04/06 16:43:25 PAGE 1
ARM COMPILER V2.50a, COMPILATION OF MODULE main
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Keil\ARM\BIN\CA.exe main.c ARM BROWSE DEBUG TABS(4)
stmt level source
1 /**********************************************************************************************
2 main.c file
3
4 ADuC7027的第八個實驗——中斷
5
6 作者:Computer-lov
7 建立日期:2006-4-20
8 修改日期:2006-4-20
9 版本:V1.0
10 版權所有,盜版必究。
11 任何技術問題可到我的博客上留言: http://computer00.21ic.org
12 Copyright(C) Computer-lov 2006-2016
13 All rights reserved
14 **********************************************************************************************/
15
16 #include <ADuC7027.H>
17 #include <../my_type.h>
18 #include <../LED.H>
19 #include "interrupt.h"
20
21 volatile uint32 pll_lock;
22
23 /*********************************************************************************************/
24 void sys_clk_init(void)
25 {
26 1 PLLKEY1=0xAA;
27 1 PLLCON=0x01; //PLL配置
28 1 PLLKEY2=0x55;
29 1 POWKEY1=0x01;
30 1 POWCON=0x00; //CPU時鐘配置為41.78MHz
31 1 POWKEY2=0xF4;
32 1 // while(!(PLLSTA & 0x01));
33 1 }
34 ///////////////////////////////////////////////////////////////////////////////////////////////
35
36 /*********************************************************************************************/
37 void IRQ_Handler(void) __irq //IRQ中斷服務程序
38 {
39 1 if(IRQSTA & EXTERNAL_IRQ0) //讀取IRQ中斷狀態,判斷IRQ中斷源
40 1 {
41 2 ON_LED4();
42 2 return;
43 2 }
44 1 }
45 ///////////////////////////////////////////////////////////////////////////////////////////////
46
47 /*********************************************************************************************/
48 void FIQ_Handler(void) __fiq //FIQ中斷服務程序
49 {
50 1 if(FIQSTA & EXTERNAL_IRQ1) //讀取FIQ中斷狀態,判斷FIQ中斷源
51 1 {
52 2 ON_LED5();
53 2 return;
54 2 }
55 1 }
56 ///////////////////////////////////////////////////////////////////////////////////////////////
57
58 /*********************************************************************************************/
59 void SWI_0(void) __swi(0) //0號軟中斷,打開LED6
ARM COMPILER V2.50a, main 22/04/06 16:43:25 PAGE 2
60 {
61 1 ON_LED6();
62 1 }
63
64 ///////////////////////////////////////////////////////////////////////////////////////////////
65
66 /*********************************************************************************************/
67 void SWI_1(void) __swi(1) //1號軟中斷,打開LED7
68 {
69 1 ON_LED7();
70 1 }
71 ///////////////////////////////////////////////////////////////////////////////////////////////
72
73 /*********************************************************************************************/
74 uint32 SWI_2(uint32 a,uint32 b) __swi(2) //2號軟中斷,實現兩個整數相加
75 {
76 1 return a+b;
77 1 }
78 ///////////////////////////////////////////////////////////////////////////////////////////////
79
80 /*********************************************************************************************/
81 void main(void)
82 {
83 1
84 1 sys_clk_init();
85 1
86 1 EN_LED4(); //使能LED
87 1 EN_LED5();
88 1 EN_LED6();
89 1 EN_LED7();
90 1 EN_LED8();
91 1
92 1 OFF_LED4(); //初始化關掉LED
93 1 OFF_LED5();
94 1 OFF_LED6();
95 1 OFF_LED7();
96 1 OFF_LED8();
97 1
98 1 SWI_0(); //用軟中斷的方法來打開LED6
99 1 SWI_1(); //用軟中斷的方法來打開LED7
100 1 if(SWI_2(100,200)==300) //調用軟中斷,計算100加200,如果結果等于300,則點亮LED8
101 1 {
102 2 ON_LED8();
103 2 }
104 1
105 1 IRQEN |= EXTERNAL_IRQ0; //將外部中斷0配置成IRQ中斷(按鍵S4)
106 1 FIQEN |= EXTERNAL_IRQ1; //將外部中斷1配置成FIQ中斷(按鍵S3)
107 1
108 1 while(1) //由于是高電平觸發中斷,所以要同時按住S4、S3鍵才能運行主程序,即熄滅LED
109 1 { //放開某個按鍵,則進入相應的中斷,點亮相應的LED。由于FIQ的優先級高于IRQ,
110 2 OFF_LED4(); //當先放開S4,后放開S3時,FIQ可中斷IRQ,從而能點亮LED5。相反,如果先放開
111 2 OFF_LED5(); //S3,后放開S4,則IRQ不能中斷FIQ,所以不能點亮LED4。
112 2 }
113 1 }
114 ///////////////////////////////////////////////////////////////////////////////////////////////
ARM COMPILER V2.50a, main 22/04/06 16:43:25 PAGE 3
ASSEMBLY LISTING OF GENERATED OBJECT CODE
*** EXTERNALS:
EXTERN NUMBER (__startup)
*** PUBLICS:
PUBLIC sys_clk_init?A
PUBLIC IRQ_Handler?A
PUBLIC FIQ_Handler?A
PUBLIC SWI_0?A
PUBLIC SWI_1?A
PUBLIC SWI_2?A
PUBLIC main
PUBLIC pll_lock
*** DATA SEGMENT '?DT0?main':
00000000 pll_lock:
00000000 DS 4
*** CODE SEGMENT '?PR?sys_clk_init?A?main':
26: PLLKEY1=0xAA;
00000000 E3A010AA MOV R1,#0xAA
00000004 E5100000 LDR R0,=0xFFFF0410
00000008 E5801000 STR R1,[R0,#0x0]
27: PLLCON=0x01; //PLL配置
0000000C E3A01001 MOV R1,#0x1
00000010 E5100000 LDR R0,=0xFFFF0414
00000014 E5801000 STR R1,[R0,#0x0]
28: PLLKEY2=0x55;
00000018 E3A02055 MOV R2,#0x55
0000001C E5100000 LDR R0,=0xFFFF0418
00000020 E5802000 STR R2,[R0,#0x0]
29: POWKEY1=0x01;
00000024 E5100000 LDR R0,=0xFFFF0404
00000028 E5801000 STR R1,[R0,#0x0]
30: POWCON=0x00; //CPU時鐘配置為41.78MHz
0000002C E3A01000 MOV R1,#0x0
00000030 E5100000 LDR R0,=0xFFFF0408
00000034 E5801000 STR R1,[R0,#0x0]
31: POWKEY2=0xF4;
00000038 E3A010F4 MOV R1,#0xF4
0000003C E5100000 LDR R0,=0xFFFF040C
00000040 E5801000 STR R1,[R0,#0x0]
33: }
00000044 E12FFF1E BX R14
00000048 ENDP ; 'sys_clk_init?A'
*** CODE SEGMENT '?PR?IRQ_Handler?A?main':
37: void IRQ_Handler(void) __irq //IRQ中斷服務程序
00000000 E92D0003 STMDB R13!,{R0-R1}
39: if(IRQSTA & EXTERNAL_IRQ0) //讀取IRQ中斷狀態,判斷IRQ中斷源
00000004 E5100000 LDR R0,=0xFFFF0000
00000008 E5900000 LDR R0,[R0,#0x0]
0000000C E3100902 TST R0,#0x8000
00000010 0A000002 BEQ L_2 ; Targ=0x20
41: ON_LED4();
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -