📄 stm32f10x_spi.txt
字号:
;;;254 }
000090 b005 ADD sp,sp,#0x14
000092 bdf0 POP {r4-r7,pc}
;;;255
ENDP
AREA ||i.SPI_StructInit||, CODE, READONLY, ALIGN=1
SPI_StructInit PROC
;;;267 /* Initialize the SPI_Direction member */
;;;268 SPI_InitStruct->SPI_Direction = SPI_Direction_2Lines_FullDuplex;
000000 2100 MOVS r1,#0
000002 8001 STRH r1,[r0,#0]
;;;269
;;;270 /* initialize the SPI_Mode member */
;;;271 SPI_InitStruct->SPI_Mode = SPI_Mode_Slave;
000004 8041 STRH r1,[r0,#2]
;;;272
;;;273 /* initialize the SPI_DataSize member */
;;;274 SPI_InitStruct->SPI_DataSize = SPI_DataSize_8b;
000006 8081 STRH r1,[r0,#4]
;;;275
;;;276 /* Initialize the SPI_CPOL member */
;;;277 SPI_InitStruct->SPI_CPOL = SPI_CPOL_Low;
000008 80c1 STRH r1,[r0,#6]
;;;278
;;;279 /* Initialize the SPI_CPHA member */
;;;280 SPI_InitStruct->SPI_CPHA = SPI_CPHA_1Edge;
00000a 8101 STRH r1,[r0,#8]
;;;281
;;;282 /* Initialize the SPI_NSS member */
;;;283 SPI_InitStruct->SPI_NSS = SPI_NSS_Hard;
00000c 8141 STRH r1,[r0,#0xa]
;;;284
;;;285 /* Initialize the SPI_BaudRatePrescaler member */
;;;286 SPI_InitStruct->SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2;
00000e 8181 STRH r1,[r0,#0xc]
;;;287
;;;288 /* Initialize the SPI_FirstBit member */
;;;289 SPI_InitStruct->SPI_FirstBit = SPI_FirstBit_MSB;
000010 81c1 STRH r1,[r0,#0xe]
;;;290
;;;291 /* Initialize the SPI_CRCPolynomial member */
;;;292 SPI_InitStruct->SPI_CRCPolynomial = 7;
000012 2107 MOVS r1,#7
000014 8201 STRH r1,[r0,#0x10]
;;;293 }
000016 4770 BX lr
;;;294
ENDP
AREA ||i.I2S_StructInit||, CODE, READONLY, ALIGN=1
I2S_StructInit PROC
;;;306 /* Initialize the I2S_Mode member */
;;;307 I2S_InitStruct->I2S_Mode = I2S_Mode_SlaveTx;
000000 2100 MOVS r1,#0
000002 8001 STRH r1,[r0,#0]
;;;308
;;;309 /* Initialize the I2S_Standard member */
;;;310 I2S_InitStruct->I2S_Standard = I2S_Standard_Phillips;
000004 8041 STRH r1,[r0,#2]
;;;311
;;;312 /* Initialize the I2S_DataFormat member */
;;;313 I2S_InitStruct->I2S_DataFormat = I2S_DataFormat_16b;
000006 8081 STRH r1,[r0,#4]
;;;314
;;;315 /* Initialize the I2S_MCLKOutput member */
;;;316 I2S_InitStruct->I2S_MCLKOutput = I2S_MCLKOutput_Disable;
000008 80c1 STRH r1,[r0,#6]
;;;317
;;;318 /* Initialize the I2S_AudioFreq member */
;;;319 I2S_InitStruct->I2S_AudioFreq = I2S_AudioFreq_Default;
00000a 2202 MOVS r2,#2
00000c 8102 STRH r2,[r0,#8]
;;;320
;;;321 /* Initialize the I2S_CPOL member */
;;;322 I2S_InitStruct->I2S_CPOL = I2S_CPOL_Low;
00000e 8141 STRH r1,[r0,#0xa]
;;;323 }
000010 4770 BX lr
;;;324
ENDP
AREA ||i.SPI_Cmd||, CODE, READONLY, ALIGN=1
SPI_Cmd PROC
;;;339
;;;340 if (NewState != DISABLE)
000000 2900 CMP r1,#0
;;;341 {
;;;342 /* Enable the selected SPI peripheral */
;;;343 SPIx->CR1 |= CR1_SPE_Set;
000002 8801 LDRH r1,[r0,#0]
000004 d002 BEQ |L6.12|
000006 f041f041 ORR r1,r1,#0x40
00000a e001 B |L6.16|
|L6.12|
;;;344 }
;;;345 else
;;;346 {
;;;347 /* Disable the selected SPI peripheral */
;;;348 SPIx->CR1 &= CR1_SPE_Reset;
00000c f021f021 BIC r1,r1,#0x40
|L6.16|
000010 8001 STRH r1,[r0,#0] ;343
;;;349 }
;;;350 }
000012 4770 BX lr
;;;351
ENDP
AREA ||i.I2S_Cmd||, CODE, READONLY, ALIGN=1
I2S_Cmd PROC
;;;366
;;;367 if (NewState != DISABLE)
000000 2900 CMP r1,#0
;;;368 {
;;;369 /* Enable the selected SPI peripheral (in I2S mode) */
;;;370 SPIx->I2SCFGR |= I2SCFGR_I2SE_Set;
000002 8b81 LDRH r1,[r0,#0x1c]
000004 d002 BEQ |L7.12|
000006 f441f441 ORR r1,r1,#0x400
00000a e001 B |L7.16|
|L7.12|
;;;371 }
;;;372 else
;;;373 {
;;;374 /* Disable the selected SPI peripheral (in I2S mode) */
;;;375 SPIx->I2SCFGR &= I2SCFGR_I2SE_Reset;
00000c f421f421 BIC r1,r1,#0x400
|L7.16|
000010 8381 STRH r1,[r0,#0x1c] ;370
;;;376 }
;;;377 }
000012 4770 BX lr
;;;378
ENDP
AREA ||i.SPI_I2S_ITConfig||, CODE, READONLY, ALIGN=1
SPI_I2S_ITConfig PROC
;;;405 /* Get the SPI/I2S IT index */
;;;406 itpos = SPI_I2S_IT >> 4;
000000 0909 LSRS r1,r1,#4
;;;407 /* Set the IT mask */
;;;408 itmask = (u16)((u16)1 << itpos);
000002 2301 MOVS r3,#1
000004 408b LSLS r3,r3,r1
;;;409
;;;410 if (NewState != DISABLE)
000006 2a00 CMP r2,#0
;;;411 {
;;;412 /* Enable the selected SPI/I2S interrupt */
;;;413 SPIx->CR2 |= itmask;
000008 8882 LDRH r2,[r0,#4]
00000a b299 UXTH r1,r3 ;408
00000c d001 BEQ |L8.18|
00000e 430a ORRS r2,r2,r1
000010 e000 B |L8.20|
|L8.18|
;;;414 }
;;;415 else
;;;416 {
;;;417 /* Disable the selected SPI/I2S interrupt */
;;;418 SPIx->CR2 &= (u16)~itmask;
000012 438a BICS r2,r2,r1
|L8.20|
000014 8082 STRH r2,[r0,#4] ;413
;;;419 }
;;;420 }
000016 4770 BX lr
;;;421
ENDP
AREA ||i.SPI_I2S_DMACmd||, CODE, READONLY, ALIGN=1
SPI_I2S_DMACmd PROC
;;;445
;;;446 if (NewState != DISABLE)
000000 2a00 CMP r2,#0
;;;447 {
;;;448 /* Enable the selected SPI/I2S DMA requests */
;;;449 SPIx->CR2 |= SPI_I2S_DMAReq;
000002 8882 LDRH r2,[r0,#4]
000004 d001 BEQ |L9.10|
000006 430a ORRS r2,r2,r1
000008 e000 B |L9.12|
|L9.10|
;;;450 }
;;;451 else
;;;452 {
;;;453 /* Disable the selected SPI/I2S DMA requests */
;;;454 SPIx->CR2 &= (u16)~SPI_I2S_DMAReq;
00000a 438a BICS r2,r2,r1
|L9.12|
00000c 8082 STRH r2,[r0,#4] ;449
;;;455 }
;;;456 }
00000e 4770 BX lr
;;;457
ENDP
AREA ||i.SPI_I2S_SendData||, CODE, READONLY, ALIGN=1
SPI_I2S_SendData PROC
;;;473 /* Write in the DR register the data to be sent */
;;;474 SPIx->DR = Data;
000000 8181 STRH r1,[r0,#0xc]
;;;475 }
000002 4770 BX lr
;;;476
ENDP
AREA ||i.SPI_I2S_ReceiveData||, CODE, READONLY, ALIGN=1
SPI_I2S_ReceiveData PROC
;;;491 /* Return the data in the DR register */
;;;492 return SPIx->DR;
000000 8980 LDRH r0,[r0,#0xc]
;;;493 }
000002 4770 BX lr
;;;494
ENDP
AREA ||i.SPI_NSSInternalSoftwareConfig||, CODE, READONLY, ALIGN=1
SPI_NSSInternalSoftwareConfig PROC
;;;512
;;;513 if (SPI_NSSInternalSoft != SPI_NSSInternalSoft_Reset)
000000 f5a1f5a1 SUB r2,r1,#0xfe00
;;;514 {
;;;515 /* Set NSS pin internally by software */
;;;516 SPIx->CR1 |= SPI_NSSInternalSoft_Set;
000004 8801 LDRH r1,[r0,#0]
000006 3aff SUBS r2,r2,#0xff ;513
000008 d002 BEQ |L12.16|
00000a f441f441 ORR r1,r1,#0x100
00000e e001 B |L12.20|
|L12.16|
;;;517 }
;;;518 else
;;;519 {
;;;520 /* Reset NSS pin internally by software */
;;;521 SPIx->CR1 &= SPI_NSSInternalSoft_Reset;
000010 f421f421 BIC r1,r1,#0x100
|L12.20|
000014 8001 STRH r1,[r0,#0] ;516
;;;522 }
;;;523 }
000016 4770 BX lr
;;;524
ENDP
AREA ||i.SPI_SSOutputCmd||, CODE, READONLY, ALIGN=1
SPI_SSOutputCmd PROC
;;;539
;;;540 if (NewState != DISABLE)
000000 2900 CMP r1,#0
;;;541 {
;;;542 /* Enable the selected SPI SS output */
;;;543 SPIx->CR2 |= CR2_SSOE_Set;
000002 8881 LDRH r1,[r0,#4]
000004 d002 BEQ |L13.12|
000006 f041f041 ORR r1,r1,#4
00000a e001 B |L13.16|
|L13.12|
;;;544 }
;;;545 else
;;;546 {
;;;547 /* Disable the selected SPI SS output */
;;;548 SPIx->CR2 &= CR2_SSOE_Reset;
00000c f021f021 BIC r1,r1,#4
|L13.16|
000010 8081 STRH r1,[r0,#4] ;543
;;;549 }
;;;550 }
000012 4770 BX lr
;;;551
ENDP
AREA ||i.SPI_DataSizeConfig||, CODE, READONLY, ALIGN=1
SPI_DataSizeConfig PROC
;;;569 /* Clear DFF bit */
;;;570 SPIx->CR1 &= (u16)~SPI_DataSize_16b;
000000 8802 LDRH r2,[r0,#0]
000002 f422f422 BIC r2,r2,#0x800
000006 8002 STRH r2,[r0,#0]
;;;571 /* Set new DFF bit value */
;;;572 SPIx->CR1 |= SPI_DataSize;
000008 8802 LDRH r2,[r0,#0]
00000a 430a ORRS r2,r2,r1
00000c 8002 STRH r2,[r0,#0]
;;;573 }
00000e 4770 BX lr
;;;574
ENDP
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -