📄 stm32f10x_usart.txt
字号:
00012c 401a ANDS r2,r2,r3
00012e 8182 STRH r2,[r0,#0xc]
|L1.304|
;;;265 }
;;;266 }
000130 4770 BX lr
ENDP
USART_ITConfig PROC
;;;289 void USART_ITConfig(USART_TypeDef* USARTx, u16 USART_IT, FunctionalState NewState)
;;;290 {
000132 b5f0 PUSH {r4-r7,lr}
;;;291 u32 usartreg = 0x00, itpos = 0x00, itmask = 0x00;
000134 2300 MOVS r3,#0
000136 2400 MOVS r4,#0
000138 2500 MOVS r5,#0
;;;292 u32 address = 0x00;
00013a 2600 MOVS r6,#0
;;;293
;;;294 /* Check the parameters */
;;;295 assert(IS_USART_CONFIG_IT(USART_IT));
;;;296 assert(IS_FUNCTIONAL_STATE(NewState));
;;;297
;;;298 /* Get the USART register index */
;;;299 usartreg = (((u8)USART_IT) >> 0x05);
00013c f3c1f3c1 UBFX r3,r1,#5,#3
;;;300
;;;301 /* Get the interrupt position */
;;;302 itpos = USART_IT & USART_IT_Mask;
000140 f001f001 AND r4,r1,#0x1f
;;;303
;;;304 itmask = (((u32)0x01) << itpos);
000144 2701 MOVS r7,#1
000146 fa07fa07 LSL r5,r7,r4
;;;305 address = *(u32*)&(USARTx);
00014a 4606 MOV r6,r0
;;;306
;;;307 if (usartreg == 0x01) /* The IT is in CR1 register */
00014c 2b01 CMP r3,#1
00014e d101 BNE |L1.340|
;;;308 {
;;;309 address += 0x0C;
000150 360c ADDS r6,r6,#0xc
000152 e004 B |L1.350|
|L1.340|
;;;310 }
;;;311 else if (usartreg == 0x02) /* The IT is in CR2 register */
000154 2b02 CMP r3,#2
000156 d101 BNE |L1.348|
;;;312 {
;;;313 address += 0x10;
000158 3610 ADDS r6,r6,#0x10
00015a e000 B |L1.350|
|L1.348|
;;;314 }
;;;315 else /* The IT is in CR3 register */
;;;316 {
;;;317 address += 0x14;
00015c 3614 ADDS r6,r6,#0x14
|L1.350|
;;;318 }
;;;319 if (NewState != DISABLE)
00015e b11a CBZ r2,|L1.360|
;;;320 {
;;;321 *(u32*)address |= itmask;
000160 6837 LDR r7,[r6,#0]
000162 432f ORRS r7,r7,r5
000164 6037 STR r7,[r6,#0]
000166 e002 B |L1.366|
|L1.360|
;;;322 }
;;;323 else
;;;324 {
;;;325 *(u32*)address &= ~itmask;
000168 6837 LDR r7,[r6,#0]
00016a 43af BICS r7,r7,r5
00016c 6037 STR r7,[r6,#0]
|L1.366|
;;;326 }
;;;327 }
00016e bdf0 POP {r4-r7,pc}
ENDP
USART_DMACmd PROC
;;;343 void USART_DMACmd(USART_TypeDef* USARTx, u16 USART_DMAReq, FunctionalState NewState)
;;;344 {
000170 b510 PUSH {r4,lr}
;;;345 /* Check the parameters */
;;;346 assert(IS_USART_DMAREQ(USART_DMAReq));
;;;347 assert(IS_FUNCTIONAL_STATE(NewState));
;;;348
;;;349 if (NewState != DISABLE)
000172 b11a CBZ r2,|L1.380|
;;;350 {
;;;351 /* Enable the DMA transfer for selected requests by setting the DMAT and/or
;;;352 DMAR bits in the USART CR3 register */
;;;353 USARTx->CR3 |= USART_DMAReq;
000174 8a83 LDRH r3,[r0,#0x14]
000176 430b ORRS r3,r3,r1
000178 8283 STRH r3,[r0,#0x14]
00017a e004 B |L1.390|
|L1.380|
;;;354 }
;;;355 else
;;;356 {
;;;357 /* Disable the DMA transfer for selected requests by clearing the DMAT and/or
;;;358 DMAR bits in the USART CR3 register */
;;;359 USARTx->CR3 &= (u16)~USART_DMAReq;
00017c 8a83 LDRH r3,[r0,#0x14]
00017e 43cc MVNS r4,r1
000180 b2a4 UXTH r4,r4
000182 4023 ANDS r3,r3,r4
000184 8283 STRH r3,[r0,#0x14]
|L1.390|
;;;360 }
;;;361 }
000186 bd10 POP {r4,pc}
ENDP
USART_SetAddress PROC
;;;377 /* Clear the USART address */
;;;378 USARTx->CR2 &= CR2_Address_Mask;
000188 8a02 LDRH r2,[r0,#0x10]
00018a f64ff64f MOV r3,#0xfff0
00018e 401a ANDS r2,r2,r3
000190 8202 STRH r2,[r0,#0x10]
;;;379 /* Set the USART address node */
;;;380 USARTx->CR2 |= USART_Address;
000192 8a02 LDRH r2,[r0,#0x10]
000194 430a ORRS r2,r2,r1
000196 8202 STRH r2,[r0,#0x10]
;;;381 }
000198 4770 BX lr
ENDP
USART_WakeUpConfig PROC
;;;399
;;;400 USARTx->CR1 &= CR3_WAKE_Mask;
00019a 8982 LDRH r2,[r0,#0xc]
00019c f24ff24f MOV r3,#0xf7ff
0001a0 401a ANDS r2,r2,r3
0001a2 8182 STRH r2,[r0,#0xc]
;;;401 USARTx->CR1 |= USART_WakeUp;
0001a4 8982 LDRH r2,[r0,#0xc]
0001a6 430a ORRS r2,r2,r1
0001a8 8182 STRH r2,[r0,#0xc]
;;;402 }
0001aa 4770 BX lr
ENDP
USART_ReceiverWakeUpCmd PROC
;;;418
;;;419 if (NewState != DISABLE)
0001ac b121 CBZ r1,|L1.440|
;;;420 {
;;;421 /* Enable the mute mode USART by setting the RWU bit in the CR1 register */
;;;422 USARTx->CR1 |= CR1_RWU_Set;
0001ae 8982 LDRH r2,[r0,#0xc]
0001b0 f042f042 ORR r2,r2,#2
0001b4 8182 STRH r2,[r0,#0xc]
0001b6 e004 B |L1.450|
|L1.440|
;;;423 }
;;;424 else
;;;425 {
;;;426 /* Disable the mute mode USART by clearing the RWU bit in the CR1 register */
;;;427 USARTx->CR1 &= CR1_RWU_Reset;
0001b8 8982 LDRH r2,[r0,#0xc]
0001ba f64ff64f MOV r3,#0xfffd
0001be 401a ANDS r2,r2,r3
0001c0 8182 STRH r2,[r0,#0xc]
|L1.450|
;;;428 }
;;;429 }
0001c2 4770 BX lr
ENDP
USART_LINBreakDetectLengthConfig PROC
;;;448
;;;449 USARTx->CR2 &= CR3_LBDL_Mask;
0001c4 8a02 LDRH r2,[r0,#0x10]
0001c6 f64ff64f MOV r3,#0xffdf
0001ca 401a ANDS r2,r2,r3
0001cc 8202 STRH r2,[r0,#0x10]
;;;450 USARTx->CR2 |= USART_LINBreakDetectLength;
0001ce 8a02 LDRH r2,[r0,#0x10]
0001d0 430a ORRS r2,r2,r1
0001d2 8202 STRH r2,[r0,#0x10]
;;;451 }
0001d4 4770 BX lr
ENDP
USART_LINCmd PROC
;;;467
;;;468 if (NewState != DISABLE)
0001d6 b121 CBZ r1,|L1.482|
;;;469 {
;;;470 /* Enable the LIN mode by setting the LINE bit in the CR2 register */
;;;471 USARTx->CR2 |= CR2_LINE_Set;
0001d8 8a02 LDRH r2,[r0,#0x10]
0001da f442f442 ORR r2,r2,#0x4000
0001de 8202 STRH r2,[r0,#0x10]
0001e0 e004 B |L1.492|
|L1.482|
;;;472 }
;;;473 else
;;;474 {
;;;475 /* Disable the LIN mode by clearing the LINE bit in the CR2 register */
;;;476 USARTx->CR2 &= CR2_LINE_Reset;
0001e2 8a02 LDRH r2,[r0,#0x10]
0001e4 f64bf64b MOV r3,#0xbfff
0001e8 401a ANDS r2,r2,r3
0001ea 8202 STRH r2,[r0,#0x10]
|L1.492|
;;;477 }
;;;478 }
0001ec 4770 BX lr
ENDP
USART_SendData PROC
;;;494 /* Transmit Data */
;;;495 USARTx->DR = (Data & (u16)0x01FF);
0001ee f3c1f3c1 UBFX r2,r1,#0,#9
0001f2 8082 STRH r2,[r0,#4]
;;;496 }
0001f4 4770 BX lr
ENDP
USART_ReceiveData PROC
;;;506 u16 USART_ReceiveData(USART_TypeDef* USARTx)
;;;507 {
0001f6 4601 MOV r1,r0
;;;508 /* Receive Data */
;;;509 return (u16)(USARTx->DR & (u16)0x01FF);
0001f8 8888 LDRH r0,[r1,#4]
0001fa f3c0f3c0 UBFX r0,r0,#0,#9
;;;510 }
0001fe 4770 BX lr
ENDP
USART_SendBreak PROC
;;;522 /* Send break characters */
;;;523 USARTx->CR1 |= CR1_SBK_Set;
000200 8981 LDRH r1,[r0,#0xc]
000202 f041f041 ORR r1,r1,#1
000206 8181 STRH r1,[r0,#0xc]
;;;524 }
000208 4770 BX lr
ENDP
USART_SetGuardTime PROC
;;;537 /* Clear the USART Guard time */
;;;538 USARTx->GTPR &= GTPR_LSB_Mask;
00020a 8b02 LDRH r2,[r0,#0x18]
00020c b2d2 UXTB r2,r2
00020e 8302 STRH r2,[r0,#0x18]
;;;539 /* Set the USART guard time */
;;;540 USARTx->GTPR |= (u16)((u16)USART_GuardTime << 0x08);
000210 8b02 LDRH r2,[r0,#0x18]
000212 ea42ea42 ORR r2,r2,r1,LSL #8
000216 8302 STRH r2,[r0,#0x18]
;;;541 }
000218 4770 BX lr
ENDP
USART_SetPrescaler PROC
;;;554 /* Clear the USART prescaler */
;;;555 USARTx->GTPR &= GTPR_MSB_Mask;
00021a 8b02 LDRH r2,[r0,#0x18]
00021c f402f402 AND r2,r2,#0xff00
000220 8302 STRH r2,[r0,#0x18]
;;;556 /* Set the USART prescaler */
;;;557 USARTx->GTPR |= USART_Prescaler;
000222 8b02 LDRH r2,[r0,#0x18]
000224 430a ORRS r2,r2,r1
000226 8302 STRH r2,[r0,#0x18]
;;;558 }
000228 4770 BX lr
ENDP
USART_SmartCardCmd PROC
;;;574
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -