?? main.lst
字號:
ARM COMPILER V2.40a, main 19/07/07 01:23:00 PAGE 1
ARM COMPILER V2.40a, COMPILATION OF MODULE main
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: D:\Program Files\keil\ARM\BIN\CA.exe main.c THUMB DEBUG TABS(4)
stmt level source
1 /****************************************************************************
2 * 文件名:
3 * 功能:
4 *
5 * 說明:
6 ****************************************************************************/
7 #include "config.h"
8
9 /************************ 全局變量聲明區 ************************/
10 uint16 IO_input;
11 uint8 UART0_Receive[8]={0};
12 uint8 rcv_new = 0;
13 /****************************************************************************
14 * 名稱:IRQ_UART0()
15 * 功能:串口UART0接收中斷。
16 * 入口參數:無
17 * 出口參數:無
18 ****************************************************************************/
19 void IRQ_UART0(void)__irq
20 {
21 1 if( 0x04==(U0IIR&0x0F) )rcv_new = 1;// 設置接收到新的數據標志,必須讀取U0IIR來清除中斷
22 1
23 1 UART0_Receive[0] = U0RBR; // 讀取FIFO的數據
24 1
25 1 UART0_SendByte(UART0_Receive[0]);
26 1
27 1 SendoutputData(UART0_Receive[0]);
28 1
29 1 VICVectAddr = 0x00; // 中斷處理結束
30 1 }
31 /****************************************************************************
32 * 名稱:I2C_Init()
33 * 功能:主模式I2C初始化,包括初始化其中斷為向量IRQ中斷。
34 * 入口參數:fi2c 初始化I2C總線速率,最大值為400K
35 * 出口參數:無
36 ****************************************************************************/
37 void I2C_Init(uint32 fi2c)
38 { if(fi2c>400000) fi2c = 400000;
39 1
40 1 PINSEL0 = (PINSEL0&0xFFFFFF0F) | 0x50; // 設置I2C控制口有效
41 1
42 1 I2SCLH = (Fpclk/fi2c + 1) / 2; // 設置I2C時鐘為fi2c
43 1 I2SCLL = (Fpclk/fi2c) / 2;
44 1 I2CONCLR = 0x2C;
45 1 I2CONSET = 0x40; // 使能主I2C
46 1
47 1 /* 設置I2C中斷允許 */
48 1 VICIntSelect = 0x00000000; // 設置所有通道為IRQ中斷
49 1 VICVectCntl0 = 0x29; // I2C通道分配到IRQ slot 0
50 1 VICVectAddr0 = (int)IRQ_I2C; // 設置I2C中斷向量地址
51 1 VICIntEnable |= 0x0200; // 使能I2C中斷
52 1 }
53
54 /****************************************************************************
55 * 名稱:開機畫面
56 * 功能:顯示信息。
57 * 入口參數:無
58 * 出口參數:無
59 ****************************************************************************/
ARM COMPILER V2.40a, main 19/07/07 01:23:00 PAGE 2
60 void open(void)
61 {
62 1 Display(0x80,0xA1,0xF6);//口
63 1 Display(0x81,0xB5,0xE7);//電
64 1 Display(0x82,0xCC,0xDD);//梯
65 1 Display(0x83,0xBF,0xD8);//控
66 1 Display(0x84,0xD6,0xC6);//制
67 1 Display(0x85,0xCF,0xB5);//系
68 1 Display(0x86,0xCD,0xB3);//統
69 1 Display(0x87,0xA1,0xF6);//口
70 1
71 1 Display(0x90,0xA1,0xF6);//口
72 1 Display(0x91,0xB5,0xBC);//導
73 1 Display(0x92,0xCA,0xA6);//師
74 1 Display(0x93,0xA3,0xBA);//:
75 1 Display(0x94,0xD5,0xD4);//
76 1 Display(0x95,0xB9,0xFA);//
77 1 Display(0x96,0xBE,0xFC);//
78 1 Display(0x97,0xA1,0xF6);//口
79 1
80 1 Display(0x88,0xA1,0xF6);//口
81 1 Display(0x89,0xC9,0xE8);//設
82 1 Display(0x8a,0xBC,0xC6);//計
83 1 Display(0x8b,0xA3,0xBA);//:
84 1 Display(0x8c,0xc1,0xd6);//
85 1 Display(0x8d,0xBA,0xEA);//
86 1 Display(0x8e,0xB7,0xC9);//
87 1 Display(0x8f,0xA1,0xF6);//口
88 1
89 1 DispChars(0x98,(uint8 *)"ThankYouForUsing",0x10);
90 1 }
91 /****************************************************************************
92 * 名稱:main()
93 * 功能:
94 ****************************************************************************/
95 // TargetResetInit();
96 int main(void)
97 {
98 1 IOInit();
99 1 IO_input=RcvinputData(0);//IO口輸出全為0,獲取輸入IO值。
100 1 InitLcm();
101 1 UART0_Ini();
102 1 open();//開機信息顯示
103 1 UART0_SendByte(0x55);
104 1 I2C_Init(20000);
105 1
106 1 UART0_SendByte(IO_input);
107 1 while(1)
108 1 {;
109 2 }
110 1
111 1 }
112
ARM COMPILER V2.40a, main 19/07/07 01:23:00 PAGE 3
ASSEMBLY LISTING OF GENERATED OBJECT CODE
*** EXTERNALS:
EXTERN CODE16 (DispChars?T)
EXTERN CODE16 (Display?T)
EXTERN CODE16 (InitLcm?T)
EXTERN CODE32 (IRQ_I2C?A)
EXTERN CODE16 (IOInit?T)
EXTERN CODE16 (SendoutputData?T)
EXTERN CODE16 (RcvinputData?T)
EXTERN CODE16 (UART0_Ini?T)
EXTERN CODE16 (UART0_SendByte?T)
EXTERN CODE32 (UART0_SendByte?A)
EXTERN CODE32 (SendoutputData?A)
EXTERN CODE16 (?C?UDIV?T)
EXTERN NUMBER (__startup)
*** PUBLICS:
PUBLIC I2C_Init?T
PUBLIC IRQ_UART0?A
PUBLIC open?T
PUBLIC main
PUBLIC IO_input
PUBLIC UART0_Receive
PUBLIC rcv_new
*** DATA SEGMENT '?CON?main':
00000000 ??S_1:
00000000 DB 'ThankYouForUsing',0x00
*** DATA SEGMENT '?DT0?main':
00000000 IO_input:
00000000 DS 2
00000002 UART0_Receive:
00000002 BEGIN_INIT
00000002 00 DB 0x0
00000003 SPACE 7
0000000A END_INIT
0000000A rcv_new:
0000000A BEGIN_INIT
0000000A 00 DB 0x0
0000000B END_INIT
*** CODE SEGMENT '?PR?IRQ_UART0?A?main':
19: void IRQ_UART0(void)__irq
00000000 E92D5F0F STMDB R13!,{R0-R3,R8-R12,LR}
21: if( 0x04==(U0IIR&0x0F) )rcv_new = 1;// 設置接收到新的數據標志,必須讀取U0IIR來清除中斷
00000004 E5100000 LDR R0,=0xE000C008
00000008 E5900000 LDR R0,[R0,#0x0]
0000000C E200000F AND R0,R0,#0x000F
00000010 E3500004 CMP R0,#0x0004
00000014 1A000002 BNE L_1 ; Targ=0x24
00000018 E3A01001 MOV R1,#0x1
0000001C E5100000 LDR R0,=rcv_new ; rcv_new
00000020 E5C01000 STRB R1,[R0,#0x0] ; rcv_new
00000024 L_1:
23: UART0_Receive[0] = U0RBR; // 讀取FIFO的數據
00000024 E5100000 LDR R0,=0xE000C000
00000028 E5D01000 LDRB R1,[R0,#0x0]
0000002C E5100000 LDR R0,=UART0_Receive ; UART0_Receive
00000030 E5C01000 STRB R1,[R0,#0x0] ; UART0_Receive
25: UART0_SendByte(UART0_Receive[0]);
00000034 E5100000 LDR R0,=UART0_Receive ; UART0_Receive
00000038 E5D00000 LDRB R0,[R0,#0x0] ; UART0_Receive
0000003C EBFFFFEF BL UART0_SendByte?A ; Targ=0x0
27: SendoutputData(UART0_Receive[0]);
ARM COMPILER V2.40a, main 19/07/07 01:23:00 PAGE 4
00000040 E5100000 LDR R0,=UART0_Receive ; UART0_Receive
00000044 E5D00000 LDRB R0,[R0,#0x0] ; UART0_Receive
00000048 EBFFFFEC BL SendoutputData?A ; Targ=0x0
29: VICVectAddr = 0x00; // 中斷處理結束
0000004C E3A01000 MOV R1,#0x0
00000050 E5100000 LDR R0,=0xFFFFF030
00000054 E5801000 STR R1,[R0,#0x0]
30: }
00000058 E8BD5F0F LDMIA R13!,{R0-R3,R8-R12,LR}
0000005C E25EF004 SUBS R15,R14,#0x0004
00000060 ENDP ; 'IRQ_UART0?A'
*** CODE SEGMENT '?PR?I2C_Init?T?main':
37: void I2C_Init(uint32 fi2c)
00000000 B500 PUSH {LR}
00000002 1C03 MOV R3,R0 ; fi2c
00000004 ---- Variable 'fi2c' assigned to Register 'R3' ----
38: { if(fi2c>400000) fi2c = 400000;
00000004 1C18 MOV R0,R3 ; fi2c
00000006 4800 LDR R1,=0x61A80
00000008 4288 CMP R0,R1 ; fi2c
0000000A D900 BLS L_2 ; T=0x0000000E
0000000C 4800 LDR R3,=0x61A80
0000000E L_2:
40: PINSEL0 = (PINSEL0&0xFFFFFF0F) | 0x50; // 設置I2C控制口有效
0000000E 4800 LDR R0,=0xE002C000
00000010 6801 LDR R1,[R0,#0x0]
00000012 20F0 MOV R0,#0xF0
00000014 4381 BIC R1,R0
00000016 2050 MOV R0,#0x50
00000018 4301 ORR R1,R0
0000001A 4800 LDR R0,=0xE002C000
0000001C 6001 STR R1,[R0,#0x0]
42: I2SCLH = (Fpclk/fi2c + 1) / 2; // 設置I2C時鐘為fi2c
0000001E 1C19 MOV R1,R3 ; fi2c
00000020 4800 LDR R0,=0xA8C000
00000022 F7FF BL ?C?UDIV?T ; T=0x0001 (1) ; ?C?UDIV?T
00000024 FFED BL ?C?UDIV?T ; T=0x0001 (2) ; ?C?UDIV?T
00000026 1C08 MOV R0,R1
00000028 1C02 MOV R2,R0
0000002A 3201 ADD R2,#0x1
0000002C 0852 LSR R2,R2,#0x1
0000002E 4800 LDR R1,=0xE001C010
00000030 800A STRH R2,[R1,#0x0]
43: I2SCLL = (Fpclk/fi2c) / 2;
00000032 0841 LSR R1,R0,#0x1
00000034 4800 LDR R0,=0xE001C014
00000036 8001 STRH R1,[R0,#0x0]
44: I2CONCLR = 0x2C;
00000038 212C MOV R1,#0x2C
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -