📄 main.lst
字号:
ARM COMPILER V2.50a, main 16/06/07 08:25:44 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 THUMB BROWSE DEBUG TABS(4)
stmt level source
1 //本程序针对引导码:9ms低->4.5ms高
2 //连发码:9ms低->2.25ms高
3 //0:0.565低->0.56高
4 //1:0.565低->1.125高
5 //数据位为32位,即4个字节
6 //的编码遥控器使用
7 //控制器芯片:NEC公司芯片6122/6121
8 //使用ARM资源:1个外部中断(本程序中使用EINT2),1个定时器,不用开中断(本程序中使用定时器1)
9 //通过串口发送解码后的数据,波特率:115200
10 //2007年5月6号
11
12 #include "config.h"
13 #include "irquart0.h"
14
15
16 uint32 Reddata;
17 uint8 KeyDown;
18 uint8 Redinfo;
19 void main(void)
20 {
21 1 UARTMODE set;
22 1
23 1 set.datab = 8;
24 1 set.stopb = 1;
25 1 set.parity = 0;
26 1
27 1 rcv_new = 0;
28 1
29 1 PINSEL0 |= 0x05; //设置IO连接到UART0
30 1 PINSEL0=(PINSEL0&(~(3<<14)))|(3<<14);
31 1
32 1
33 1 UART0_Init(115200,set);
34 1 //U0FCR = 0x81; //接收器触发点为8个字符
35 1 U0FCR = 0x01; //接收器触发点为1个字符
36 1
37 1 U0IER = 0x01; //接收中断开,发送中断关
38 1
39 1 //串口0中断设置
40 1 VICVectCntl0 = 0x20|0x06;
41 1 VICVectAddr0 = (uint32)IRQ_UART0;
42 1 VICIntEnable = 1<<0x06;
43 1
44 1 /* 外部中断2初始化 */
45 1
46 1 VICVectCntl5 = 0x20 | 16; // 分配外部中断0到向量中断0
47 1 VICVectAddr5 = (uint32)IRQ_Eint2; // 设置中断服务程序地址
48 1 VICIntEnable = 1 << 16; // 使能EINT2中断
49 1 //EXTWAKE = 0x01; // 外部中断0唤醒芯片
50 1 EXTINT = 0x0f; // 清除EINT所有中断标志
51 1 EXTMODE = 0x04; // EINT2为下降沿中断
52 1
53 1 //定时器1中断设置
54 1 //T1TC = 0;
55 1 T1PR = 0;
56 1 T1MCR = 0x00; //禁止定时器1所有相关中断
57 1 //T1MR0 = Fpclk/1580; //中断时间设置 中断时间设置为600ms
58 1 T1PR = Fpclk/100000; //预分频寄存器定时时间为0.01ms
59 1 T1TCR = 0x00; //定时器计数器禁止计数
ARM COMPILER V2.50a, main 16/06/07 08:25:44 PAGE 2
60 1
61 1 //定时器1中断设置
62 1 //VICVectCntl1 = 0x20|0x05;
63 1 //VICVectAddr1 = (uint32)IRQ_Timer1;
64 1 //VICIntEnable = 1<<0x05;
65 1
66 1 VICIntSelect = 0x00000000; // 设置所有中断分配为IRQ中断
67 1
68 1 KeyDown=0;
69 1 UART0_SendByte('K');
70 1 while(1)
71 1 {
72 2 if(KeyDown == 1)
73 2 {
74 3 Redinfo = Reddata; //用户码
75 3 UART0_SendByte(Redinfo);
76 3 Reddata>>=8;
77 3 Redinfo = Reddata; //用户反码
78 3 UART0_SendByte(Redinfo);
79 3 Reddata>>=8;
80 3 Redinfo = Reddata; //键值数据字节
81 3 UART0_SendByte(Redinfo);
82 3 Reddata>>=8;
83 3 Redinfo = Reddata; //键值数据反字节
84 3 UART0_SendByte(Redinfo);
85 3 KeyDown=0;
86 3 }
87 2 }
88 1 }
ARM COMPILER V2.50a, main 16/06/07 08:25:44 PAGE 3
ASSEMBLY LISTING OF GENERATED OBJECT CODE
*** EXTERNALS:
EXTERN CODE32 (IRQ_Eint2?A)
EXTERN CODE16 (UART0_SendByte?T)
EXTERN DATA (rcv_new)
EXTERN CODE32 (IRQ_UART0?A)
EXTERN CODE16 (UART0_Init?T)
EXTERN NUMBER (__startup)
*** PUBLICS:
PUBLIC main
PUBLIC Reddata
PUBLIC KeyDown
PUBLIC Redinfo
*** DATA SEGMENT '?DT0?main':
00000000 Reddata:
00000000 DS 4
00000004 KeyDown:
00000004 DS 1
00000005 Redinfo:
00000005 DS 1
*** CODE SEGMENT '?PR?main?main':
19: void main(void)
00000000 B500 PUSH {LR}
00000002 B081 SUB R13,#0x4
20: {
00000004 ; SCOPE-START
23: set.datab = 8;
00000004 2108 MOV R1,#0x8
00000006 A800 ADD R0,R13,#0x0
00000008 7001 STRB R1,[R0,#0x0] ; set
24: set.stopb = 1;
0000000A 2201 MOV R2,#0x1
0000000C 2101 MOV R1,#0x1
0000000E 4469 ADD R1,R13
00000010 700A STRB R2,[R1,#0x0] ; set+1
25: set.parity = 0;
00000012 2200 MOV R2,#0x0
00000014 2102 MOV R1,#0x2
00000016 4469 ADD R1,R13
00000018 700A STRB R2,[R1,#0x0] ; set+2
27: rcv_new = 0;
0000001A 4800 LDR R1,=rcv_new ; rcv_new
0000001C 700A STRB R2,[R1,#0x0] ; rcv_new
29: PINSEL0 |= 0x05; //设置IO连接到UART0
0000001E 2305 MOV R3,#0x5
00000020 4800 LDR R1,=0xE002C000
00000022 680A LDR R2,[R1,#0x0]
00000024 431A ORR R2,R3
00000026 600A STR R2,[R1,#0x0]
30: PINSEL0=(PINSEL0&(~(3<<14)))|(3<<14);
00000028 4800 LDR R1,=0xE002C000
0000002A 680A LDR R2,[R1,#0x0]
0000002C 4800 LDR R1,=0xC000
0000002E 438A BIC R2,R1
00000030 430A ORR R2,R1
00000032 4800 LDR R1,=0xE002C000
00000034 600A STR R2,[R1,#0x0]
33: UART0_Init(115200,set);
00000036 B081 SUB R13,#0x4
00000038 4669 MOV R1,R13
0000003A 2304 MOV R3,#0x4
ARM COMPILER V2.50a, main 16/06/07 08:25:44 PAGE 4
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -