📄 uart.txt
字号:
; generated by ARM/Thumb C/C++ Compiler with , RVCT3.1 [Build 902] for uVision
; commandline ArmCC [--debug -c --asm --interleave -o..\obj\uart.o --depend=..\obj\uart.d --device=DARMSTM -I..\..\LAB2 -I..\..\library\src -IC:\Keil\ARM\INC\ST\STM32F10x -DVECT_TAB_RAM --omf_browse=..\obj\uart.crf uart.c]
THUMB
AREA ||.text||, CODE, READONLY, ALIGN=2
SendChar PROC
;;;105 /* Implementation of putchar (also used by printf function to output data) */
;;;106 int SendChar (int ch) { /* Write character to Serial Port */
000000 b510 PUSH {r4,lr}
000002 4604 MOV r4,r0
;;;107
;;;108 USART_SendData(USART1, (unsigned char) ch);
000004 b2e1 UXTB r1,r4
000006 4851 LDR r0,|L1.332|
000008 f7fff7ff BL USART_SendData
;;;109 while (!(USART1->SR & USART_FLAG_TXE));
00000c bf00 NOP
|L1.14|
00000e 484f LDR r0,|L1.332|
000010 8800 LDRH r0,[r0,#0]
000012 f010f010 TST r0,#0x80
000016 d0fa BEQ |L1.14|
;;;110 return (ch);
000018 4620 MOV r0,r4
;;;111 }
00001a bd10 POP {r4,pc}
ENDP
_ttywrch PROC
;;;5 extern int SendChar (int ch);
;;;6 void _ttywrch (int ch) { SendChar(ch); }
00001c b510 PUSH {r4,lr}
00001e 4604 MOV r4,r0
000020 4620 MOV r0,r4
000022 f7fff7ff BL SendChar
000026 bd10 POP {r4,pc}
ENDP
_sys_exit PROC
;;;7 void _sys_exit (int return_code) { for (;;); }
000028 bf00 NOP
|L1.42|
00002a e7fe B |L1.42|
ENDP
fputc PROC
;;;8
;;;9 int fputc (int ch, FILE *f) { return (SendChar(ch)); }
00002c b570 PUSH {r4-r6,lr}
00002e 4604 MOV r4,r0
000030 460d MOV r5,r1
000032 4620 MOV r0,r4
000034 f7fff7ff BL SendChar
000038 bd70 POP {r4-r6,pc}
ENDP
ferror PROC
;;;10 int ferror (FILE *f) {
00003a 4601 MOV r1,r0
;;;11 /* Your implementation of ferror */
;;;12 return EOF;
00003c f04ff04f MOV r0,#0xffffffff
;;;13 }
000040 4770 BX lr
ENDP
SetupClock PROC
;;;17 void SetupClock (void)
;;;18 {
000042 b510 PUSH {r4,lr}
;;;19 RCC_DeInit (); /* RCC system reset(for debug purpose)*/
000044 f7fff7ff BL RCC_DeInit
;;;20 RCC_HSEConfig (RCC_HSE_ON); /* Enable HSE */
000048 f44ff44f MOV r0,#0x10000
00004c f7fff7ff BL RCC_HSEConfig
;;;21
;;;22 /* Wait till HSE is ready */
;;;23 while (RCC_GetFlagStatus(RCC_FLAG_HSERDY) == RESET);
000050 bf00 NOP
|L1.82|
000052 2031 MOVS r0,#0x31
000054 f7fff7ff BL RCC_GetFlagStatus
000058 2800 CMP r0,#0
00005a d0fa BEQ |L1.82|
;;;24
;;;25 RCC_HCLKConfig (RCC_SYSCLK_Div1); /* HCLK = SYSCLK */
00005c 2000 MOVS r0,#0
00005e f7fff7ff BL RCC_HCLKConfig
;;;26 RCC_PCLK2Config (RCC_HCLK_Div1); /* PCLK2 = HCLK */
000062 2000 MOVS r0,#0
000064 f7fff7ff BL RCC_PCLK2Config
;;;27 RCC_PCLK1Config (RCC_HCLK_Div2); /* PCLK1 = HCLK/2 */
000068 f44ff44f MOV r0,#0x400
00006c f7fff7ff BL RCC_PCLK1Config
;;;28 RCC_ADCCLKConfig (RCC_PCLK2_Div4); /* ADCCLK = PCLK2/4 */
000070 f44ff44f MOV r0,#0x4000
000074 f7fff7ff BL RCC_ADCCLKConfig
;;;29
;;;30 *(vu32 *)0x40022000 = 0x01; /* Flash 2 wait state */
000078 2001 MOVS r0,#1
00007a 4935 LDR r1,|L1.336|
00007c 6008 STR r0,[r1,#0]
;;;31
;;;32 /* PLLCLK = 8MHz * 9 = 72 MHz */
;;;33 RCC_PLLConfig (RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);
00007e f44ff44f MOV r1,#0x1c0000
000082 0400 LSLS r0,r0,#16
000084 f7fff7ff BL RCC_PLLConfig
;;;34
;;;35 RCC_PLLCmd (ENABLE); /* Enable PLL */
000088 2001 MOVS r0,#1
00008a f7fff7ff BL RCC_PLLCmd
;;;36
;;;37 /* Wait till PLL is ready */
;;;38 while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);
00008e bf00 NOP
|L1.144|
000090 2039 MOVS r0,#0x39
000092 f7fff7ff BL RCC_GetFlagStatus
000096 2800 CMP r0,#0
000098 d0fa BEQ |L1.144|
;;;39
;;;40 /* Select PLL as system clock source */
;;;41 RCC_SYSCLKConfig (RCC_SYSCLKSource_PLLCLK);
00009a 2002 MOVS r0,#2
00009c f7fff7ff BL RCC_SYSCLKConfig
;;;42
;;;43 /* Wait till PLL is used as system clock source */
;;;44 while (RCC_GetSYSCLKSource() != 0x08);
0000a0 bf00 NOP
|L1.162|
0000a2 f7fff7ff BL RCC_GetSYSCLKSource
0000a6 2808 CMP r0,#8
0000a8 d1fb BNE |L1.162|
;;;45
;;;46 /* Enable USART1 and GPIOA clock */
;;;47 RCC_APB2PeriphClockCmd (RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA, ENABLE);
0000aa 2101 MOVS r1,#1
0000ac f244f244 MOV r0,#0x4004
0000b0 f7fff7ff BL RCC_APB2PeriphClockCmd
;;;48
;;;49 /* SysTick event each 10 ms with input clock equal to 9MHz (HCLK/8) */
;;;50 SysTick_SetReload(90000);
0000b4 4827 LDR r0,|L1.340|
0000b6 f7fff7ff BL SysTick_SetReload
;;;51
;;;52 SysTick_ITConfig(ENABLE); /* Enable SysTick interrupt */
0000ba 2001 MOVS r0,#1
0000bc f7fff7ff BL SysTick_ITConfig
;;;53 }
0000c0 bd10 POP {r4,pc}
ENDP
SetupUART PROC
;;;55
;;;56 void SetupUART (void) {
0000c2 b500 PUSH {lr}
0000c4 b087 SUB sp,sp,#0x1c
;;;57
;;;58 GPIO_InitTypeDef GPIO_InitStructure;
;;;59 USART_InitTypeDef USART_InitStructure;
;;;60
;;;61 /* Enable GPIOA clock */
;;;62 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
0000c6 2101 MOVS r1,#1
0000c8 2004 MOVS r0,#4
0000ca f7fff7ff BL RCC_APB2PeriphClockCmd
;;;63
;;;64 /* Configure USART1 Rx (PA10) as input floating */
;;;65 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
0000ce f44ff44f MOV r0,#0x400
0000d2 f8adf8ad STRH r0,[sp,#0x18]
;;;66 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
0000d6 2004 MOVS r0,#4
0000d8 f88df88d STRB r0,[sp,#0x1b]
;;;67 GPIO_Init(GPIOA, &GPIO_InitStructure);
0000dc a906 ADD r1,sp,#0x18
0000de 481e LDR r0,|L1.344|
0000e0 f7fff7ff BL GPIO_Init
;;;68
;;;69 /* Configure USART1 Tx (PA9) as alternate function push-pull */
;;;70 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
0000e4 f44ff44f MOV r0,#0x200
0000e8 f8adf8ad STRH r0,[sp,#0x18]
;;;71 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
0000ec 2003 MOVS r0,#3
0000ee f88df88d STRB r0,[sp,#0x1a]
;;;72 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
0000f2 2018 MOVS r0,#0x18
0000f4 f88df88d STRB r0,[sp,#0x1b]
;;;73 GPIO_Init(GPIOA, &GPIO_InitStructure);
0000f8 a906 ADD r1,sp,#0x18
0000fa 4817 LDR r0,|L1.344|
0000fc f7fff7ff BL GPIO_Init
;;;74
;;;75 /* USART1 configured as follow:
;;;76 - BaudRate = 115200 baud
;;;77 - Word Length = 8 Bits
;;;78 - One Stop Bit
;;;79 - No parity
;;;80 - Hardware flow control disabled (RTS and CTS signals)
;;;81 - Receive and transmit enabled
;;;82 - USART Clock disabled
;;;83 - USART CPOL: Clock is active low
;;;84 - USART CPHA: Data is captured on the middle
;;;85 - USART LastBit: The clock pulse of the last data bit is not output to
;;;86 the SCLK pin
;;;87 */
;;;88 USART_InitStructure.USART_BaudRate = 115200;
000100 f44ff44f MOV r0,#0x1c200
000104 9000 STR r0,[sp,#0]
;;;89 USART_InitStructure.USART_WordLength = USART_WordLength_8b;
000106 2000 MOVS r0,#0
000108 f8adf8ad STRH r0,[sp,#4]
;;;90 USART_InitStructure.USART_StopBits = USART_StopBits_1;
00010c f8adf8ad STRH r0,[sp,#6]
;;;91 USART_InitStructure.USART_Parity = USART_Parity_No ;
000110 f8adf8ad STRH r0,[sp,#8]
;;;92 USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
000114 f8adf8ad STRH r0,[sp,#0xa]
;;;93 USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
000118 200c MOVS r0,#0xc
00011a f8adf8ad STRH r0,[sp,#0xc]
;;;94 USART_InitStructure.USART_Clock = USART_Clock_Disable;
00011e 2000 MOVS r0,#0
000120 f8adf8ad STRH r0,[sp,#0xe]
;;;95 USART_InitStructure.USART_CPOL = USART_CPOL_Low;
000124 f8adf8ad STRH r0,[sp,#0x10]
;;;96 USART_InitStructure.USART_CPHA = USART_CPHA_2Edge;
000128 f44ff44f MOV r0,#0x200
00012c f8adf8ad STRH r0,[sp,#0x12]
;;;97 USART_InitStructure.USART_LastBit = USART_LastBit_Disable;
000130 2000 MOVS r0,#0
000132 f8adf8ad STRH r0,[sp,#0x14]
;;;98 USART_Init(USART1, &USART_InitStructure);
000136 4669 MOV r1,sp
000138 4804 LDR r0,|L1.332|
00013a f7fff7ff BL USART_Init
;;;99
;;;100 USART_Cmd(USART1, ENABLE);
00013e 2101 MOVS r1,#1
000140 4802 LDR r0,|L1.332|
000142 f7fff7ff BL USART_Cmd
;;;101 /* Enable USART1 */
;;;102 }
000146 b007 ADD sp,sp,#0x1c
000148 bd00 POP {pc}
ENDP
00014a 0000 DCW 0x0000
|L1.332|
00014c 40013800 DCD 0x40013800
|L1.336|
000150 40022000 DCD 0x40022000
|L1.340|
000154 00015f90 DCD 0x00015f90
|L1.344|
000158 40010800 DCD 0x40010800
AREA ||.data||, DATA, ALIGN=0
Clock1s
000000 00 DCB 0x00
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -