603 lines
23 KiB
Plaintext
603 lines
23 KiB
Plaintext
; generated by Component: ARM Compiler 5.06 update 4 (build 422) Tool: ArmCC [4d3604]
|
|
; commandline ArmCC [--c99 --list --split_sections --debug -c --asm --interleave -o.\obj\spi.o --asm_dir=.\lst\ --list_dir=.\lst\ --depend=.\obj\spi.d --cpu=Cortex-M0 --apcs=interwork -O3 --diag_suppress=9931 -I..\..\..\Library\CMSIS\Include -I..\..\..\Library\Device\Nuvoton\Mini58Series\Include -I..\..\..\Library\StdDriver\inc -I..\..\Template -I..\..\..\Library\StdDriver\driver -I.\RTE\_Template -ID:\Keil_v5\ARM\PACK\Nuvoton\NuMicro_DFP\1.0.9\Device\Mini58\Include -ID:\Keil_v5\ARM\CMSIS\Include -D__MICROLIB -D__UVISION_VERSION=523 --omf_browse=.\obj\spi.crf ..\..\..\Library\StdDriver\src\spi.c]
|
|
THUMB
|
|
|
|
AREA ||i.CLK_GetPLLClockFreq||, CODE, READONLY, ALIGN=2
|
|
|
|
CLK_GetPLLClockFreq PROC
|
|
;;;195 */
|
|
;;;196 __STATIC_INLINE uint32_t CLK_GetPLLClockFreq(void)
|
|
000000 b508 PUSH {r3,lr}
|
|
;;;197 {
|
|
;;;198 uint32_t u32PllFreq = 0, u32PllReg;
|
|
;;;199 uint32_t u32FIN, u32NF, u32NR, u32NO;
|
|
;;;200 uint8_t au8NoTbl[4] = {1, 2, 2, 4};
|
|
000002 a011 ADR r0,|L1.72|
|
|
000004 6800 LDR r0,[r0,#0]
|
|
;;;201
|
|
;;;202 u32PllReg = CLK->PLLCTL;
|
|
000006 9000 STR r0,[sp,#0]
|
|
000008 4810 LDR r0,|L1.76|
|
|
00000a 6a01 LDR r1,[r0,#0x20]
|
|
;;;203
|
|
;;;204 if(u32PllReg & (CLK_PLLCTL_PD_Msk | CLK_PLLCTL_OE_Msk))
|
|
00000c 1300 ASRS r0,r0,#12
|
|
00000e 4201 TST r1,r0
|
|
000010 d001 BEQ |L1.22|
|
|
;;;205 return 0; /* PLL is in power down mode or fix low */
|
|
000012 2000 MOVS r0,#0
|
|
|L1.20|
|
|
;;;206
|
|
;;;207 if(u32PllReg & CLK_PLLCTL_PLLSRC_HIRC)
|
|
;;;208 u32FIN = __HIRC; /* PLL source clock from HIRC */
|
|
;;;209 else
|
|
;;;210 u32FIN = __XTAL; /* PLL source clock from HXT */
|
|
;;;211
|
|
;;;212 if(u32PllReg & CLK_PLLCTL_BP_Msk)
|
|
;;;213 return u32FIN; /* PLL is in bypass mode */
|
|
;;;214
|
|
;;;215 /* PLL is output enabled in normal work mode */
|
|
;;;216 u32NO = au8NoTbl[((u32PllReg & CLK_PLLCTL_OUTDIV_Msk) >> CLK_PLLCTL_OUTDIV_Pos)];
|
|
;;;217 u32NF = ((u32PllReg & CLK_PLLCTL_FBDIV_Msk) >> CLK_PLLCTL_FBDIV_Pos) + 2;
|
|
;;;218 u32NR = ((u32PllReg & CLK_PLLCTL_INDIV_Msk) >> CLK_PLLCTL_INDIV_Pos) + 2;
|
|
;;;219
|
|
;;;220 /* u32FIN is shifted 2 bits to avoid overflow */
|
|
;;;221 u32PllFreq = (((u32FIN >> 2) * u32NF) / (u32NR * u32NO) << 2);
|
|
;;;222
|
|
;;;223 return u32PllFreq;
|
|
;;;224 }
|
|
000014 bd08 POP {r3,pc}
|
|
|L1.22|
|
|
000016 0308 LSLS r0,r1,#12 ;207
|
|
000018 d501 BPL |L1.30|
|
|
00001a 480d LDR r0,|L1.80|
|
|
00001c e000 B |L1.32|
|
|
|L1.30|
|
|
00001e 480d LDR r0,|L1.84|
|
|
|L1.32|
|
|
000020 038a LSLS r2,r1,#14 ;212
|
|
000022 d4f7 BMI |L1.20|
|
|
000024 040a LSLS r2,r1,#16 ;216
|
|
000026 0f92 LSRS r2,r2,#30 ;216
|
|
000028 466b MOV r3,sp ;216
|
|
00002a 5c9b LDRB r3,[r3,r2] ;216
|
|
00002c 05ca LSLS r2,r1,#23 ;217
|
|
00002e 0489 LSLS r1,r1,#18 ;218
|
|
000030 0dd2 LSRS r2,r2,#23 ;217
|
|
000032 0ec9 LSRS r1,r1,#27 ;218
|
|
000034 1c89 ADDS r1,r1,#2 ;218
|
|
000036 0880 LSRS r0,r0,#2 ;221
|
|
000038 1c92 ADDS r2,r2,#2 ;221
|
|
00003a 4359 MULS r1,r3,r1 ;221
|
|
00003c 4350 MULS r0,r2,r0 ;221
|
|
00003e f7fffffe BL __aeabi_uidivmod
|
|
000042 0080 LSLS r0,r0,#2 ;221
|
|
000044 bd08 POP {r3,pc}
|
|
;;;225
|
|
ENDP
|
|
|
|
000046 0000 DCW 0x0000
|
|
|L1.72|
|
|
000048 01020204 DCB 1,2,2,4
|
|
|L1.76|
|
|
DCD 0x50000200
|
|
|L1.80|
|
|
DCD 0x01518000
|
|
|L1.84|
|
|
DCD 0x00b71b00
|
|
|
|
AREA ||i.SPI_ClearRxFIFO||, CODE, READONLY, ALIGN=1
|
|
|
|
SPI_ClearRxFIFO PROC
|
|
;;;71 */
|
|
;;;72 void SPI_ClearRxFIFO(SPI_T *spi)
|
|
000000 6c01 LDR r1,[r0,#0x40]
|
|
;;;73 {
|
|
;;;74 spi->FIFOCTL |= SPI_FIFOCTL_RXRST_Msk;
|
|
000002 2201 MOVS r2,#1
|
|
000004 4311 ORRS r1,r1,r2
|
|
000006 6401 STR r1,[r0,#0x40]
|
|
;;;75 }
|
|
000008 4770 BX lr
|
|
;;;76
|
|
ENDP
|
|
|
|
|
|
AREA ||i.SPI_ClearTxFIFO||, CODE, READONLY, ALIGN=1
|
|
|
|
SPI_ClearTxFIFO PROC
|
|
;;;81 */
|
|
;;;82 void SPI_ClearTxFIFO(SPI_T *spi)
|
|
000000 6c01 LDR r1,[r0,#0x40]
|
|
;;;83 {
|
|
;;;84 spi->FIFOCTL |= SPI_FIFOCTL_TXRST_Msk;
|
|
000002 2202 MOVS r2,#2
|
|
000004 4311 ORRS r1,r1,r2
|
|
000006 6401 STR r1,[r0,#0x40]
|
|
;;;85 }
|
|
000008 4770 BX lr
|
|
;;;86
|
|
ENDP
|
|
|
|
|
|
AREA ||i.SPI_Close||, CODE, READONLY, ALIGN=1
|
|
|
|
SPI_Close PROC
|
|
;;;59 */
|
|
;;;60 void SPI_Close(SPI_T *spi)
|
|
000000 2005 MOVS r0,#5
|
|
;;;61 {
|
|
;;;62 /* Reset SPI */
|
|
;;;63 SYS->IPRST1 |= SYS_IPRST1_SPI0RST_Msk;
|
|
000002 0700 LSLS r0,r0,#28
|
|
000004 68c2 LDR r2,[r0,#0xc]
|
|
000006 2101 MOVS r1,#1
|
|
000008 0309 LSLS r1,r1,#12
|
|
00000a 430a ORRS r2,r2,r1
|
|
00000c 60c2 STR r2,[r0,#0xc]
|
|
;;;64 SYS->IPRST1 &= ~SYS_IPRST1_SPI0RST_Msk;
|
|
00000e 68c2 LDR r2,[r0,#0xc]
|
|
000010 438a BICS r2,r2,r1
|
|
000012 60c2 STR r2,[r0,#0xc]
|
|
;;;65 }
|
|
000014 4770 BX lr
|
|
;;;66
|
|
ENDP
|
|
|
|
|
|
AREA ||i.SPI_DisableAutoSS||, CODE, READONLY, ALIGN=1
|
|
|
|
SPI_DisableAutoSS PROC
|
|
;;;91 */
|
|
;;;92 void SPI_DisableAutoSS(SPI_T *spi)
|
|
000000 6881 LDR r1,[r0,#8]
|
|
;;;93 {
|
|
;;;94 spi->SSCTL &= ~SPI_SSCTL_AUTOSS_Msk;
|
|
000002 2208 MOVS r2,#8
|
|
000004 4391 BICS r1,r1,r2
|
|
000006 6081 STR r1,[r0,#8]
|
|
;;;95 }
|
|
000008 4770 BX lr
|
|
;;;96
|
|
ENDP
|
|
|
|
|
|
AREA ||i.SPI_DisableFIFO||, CODE, READONLY, ALIGN=1
|
|
|
|
SPI_DisableFIFO PROC
|
|
;;;163 */
|
|
;;;164 void SPI_DisableFIFO(SPI_T *spi)
|
|
000000 6801 LDR r1,[r0,#0]
|
|
;;;165 {
|
|
;;;166 spi->CTL &= ~SPI_CTL_FIFOEN_Msk;
|
|
000002 2201 MOVS r2,#1
|
|
000004 0552 LSLS r2,r2,#21
|
|
000006 4391 BICS r1,r1,r2
|
|
000008 6001 STR r1,[r0,#0]
|
|
;;;167 }
|
|
00000a 4770 BX lr
|
|
;;;168
|
|
ENDP
|
|
|
|
|
|
AREA ||i.SPI_DisableInt||, CODE, READONLY, ALIGN=1
|
|
|
|
SPI_DisableInt PROC
|
|
;;;232 */
|
|
;;;233 void SPI_DisableInt(SPI_T *spi, uint32_t u32Mask)
|
|
000000 07ca LSLS r2,r1,#31
|
|
;;;234 {
|
|
000002 d004 BEQ |L7.14|
|
|
;;;235 if((u32Mask & SPI_IE_MASK) == SPI_IE_MASK)
|
|
;;;236 spi->CTL &= ~SPI_CTL_UNITIEN_Msk;
|
|
000004 6802 LDR r2,[r0,#0]
|
|
000006 2301 MOVS r3,#1
|
|
000008 045b LSLS r3,r3,#17
|
|
00000a 439a BICS r2,r2,r3
|
|
00000c 6002 STR r2,[r0,#0]
|
|
|L7.14|
|
|
;;;237
|
|
;;;238 if((u32Mask & SPI_SSTA_INTEN_MASK) == SPI_SSTA_INTEN_MASK)
|
|
00000e 074a LSLS r2,r1,#29
|
|
000010 d504 BPL |L7.28|
|
|
;;;239 spi->SLVCTL &= ~SPI_SLVCTL_SLVSTIEN_Msk;
|
|
000012 6bc2 LDR r2,[r0,#0x3c]
|
|
000014 2301 MOVS r3,#1
|
|
000016 029b LSLS r3,r3,#10
|
|
000018 439a BICS r2,r2,r3
|
|
00001a 63c2 STR r2,[r0,#0x3c]
|
|
|L7.28|
|
|
;;;240
|
|
;;;241 if((u32Mask & SPI_FIFO_TX_INTEN_MASK) == SPI_FIFO_TX_INTEN_MASK)
|
|
00001c 070a LSLS r2,r1,#28
|
|
00001e d503 BPL |L7.40|
|
|
;;;242 spi->FIFOCTL &= ~SPI_FIFOCTL_TXTHIEN_Msk;
|
|
000020 6c02 LDR r2,[r0,#0x40]
|
|
000022 2308 MOVS r3,#8
|
|
000024 439a BICS r2,r2,r3
|
|
000026 6402 STR r2,[r0,#0x40]
|
|
|L7.40|
|
|
;;;243
|
|
;;;244 if((u32Mask & SPI_FIFO_RX_INTEN_MASK) == SPI_FIFO_RX_INTEN_MASK)
|
|
000028 06ca LSLS r2,r1,#27
|
|
00002a d503 BPL |L7.52|
|
|
;;;245 spi->FIFOCTL &= ~SPI_FIFOCTL_RXTHIEN_Msk;
|
|
00002c 6c02 LDR r2,[r0,#0x40]
|
|
00002e 2304 MOVS r3,#4
|
|
000030 439a BICS r2,r2,r3
|
|
000032 6402 STR r2,[r0,#0x40]
|
|
|L7.52|
|
|
;;;246
|
|
;;;247 if((u32Mask & SPI_FIFO_RXOV_INTEN_MASK) == SPI_FIFO_RXOV_INTEN_MASK)
|
|
000034 068a LSLS r2,r1,#26
|
|
000036 d503 BPL |L7.64|
|
|
;;;248 spi->FIFOCTL &= ~SPI_FIFOCTL_RXOVIEN_Msk;
|
|
000038 6c02 LDR r2,[r0,#0x40]
|
|
00003a 2340 MOVS r3,#0x40
|
|
00003c 439a BICS r2,r2,r3
|
|
00003e 6402 STR r2,[r0,#0x40]
|
|
|L7.64|
|
|
;;;249
|
|
;;;250 if((u32Mask & SPI_FIFO_TIMEOUT_INTEN_MASK) == SPI_FIFO_TIMEOUT_INTEN_MASK)
|
|
000040 0649 LSLS r1,r1,#25
|
|
000042 d504 BPL |L7.78|
|
|
;;;251 spi->FIFOCTL &= ~SPI_FIFOCTL_RXTOIEN_Msk;
|
|
000044 6c01 LDR r1,[r0,#0x40]
|
|
000046 2201 MOVS r2,#1
|
|
000048 0552 LSLS r2,r2,#21
|
|
00004a 4391 BICS r1,r1,r2
|
|
00004c 6401 STR r1,[r0,#0x40]
|
|
|L7.78|
|
|
;;;252 }
|
|
00004e 4770 BX lr
|
|
;;;253
|
|
ENDP
|
|
|
|
|
|
AREA ||i.SPI_EnableAutoSS||, CODE, READONLY, ALIGN=1
|
|
|
|
SPI_EnableAutoSS PROC
|
|
;;;103 */
|
|
;;;104 void SPI_EnableAutoSS(SPI_T *spi, uint32_t u32SSPinMask, uint32_t u32ActiveLevel)
|
|
000000 b510 PUSH {r4,lr}
|
|
;;;105 {
|
|
;;;106 spi->SSCTL = (spi->SSCTL & ~(SPI_SSCTL_SSACTPOL_Msk | SPI_SSCTL_SS_Msk)) | (u32SSPinMask | u32ActiveLevel) | SPI_SSCTL_AUTOSS_Msk;
|
|
000002 6883 LDR r3,[r0,#8]
|
|
000004 2405 MOVS r4,#5
|
|
000006 43a3 BICS r3,r3,r4
|
|
000008 4311 ORRS r1,r1,r2
|
|
00000a 430b ORRS r3,r3,r1
|
|
00000c 2108 MOVS r1,#8
|
|
00000e 430b ORRS r3,r3,r1
|
|
000010 6083 STR r3,[r0,#8]
|
|
;;;107 }
|
|
000012 bd10 POP {r4,pc}
|
|
;;;108
|
|
ENDP
|
|
|
|
|
|
AREA ||i.SPI_EnableFIFO||, CODE, READONLY, ALIGN=1
|
|
|
|
SPI_EnableFIFO PROC
|
|
;;;149 */
|
|
;;;150 void SPI_EnableFIFO(SPI_T *spi, uint32_t u32TxThreshold, uint32_t u32RxThreshold)
|
|
000000 b510 PUSH {r4,lr}
|
|
;;;151 {
|
|
;;;152 spi->FIFOCTL = (spi->FIFOCTL & ~(SPI_FIFOCTL_TXTH_Msk | SPI_FIFOCTL_RXTH_Msk) |
|
|
000002 6c03 LDR r3,[r0,#0x40]
|
|
000004 2433 MOVS r4,#0x33
|
|
000006 0624 LSLS r4,r4,#24
|
|
000008 43a3 BICS r3,r3,r4
|
|
00000a 0709 LSLS r1,r1,#28
|
|
00000c 430b ORRS r3,r3,r1
|
|
00000e 0611 LSLS r1,r2,#24
|
|
000010 430b ORRS r3,r3,r1
|
|
000012 6403 STR r3,[r0,#0x40]
|
|
;;;153 (u32TxThreshold << SPI_FIFOCTL_TXTH_Pos) |
|
|
;;;154 (u32RxThreshold << SPI_FIFOCTL_RXTH_Pos));
|
|
;;;155
|
|
;;;156 spi->CTL |= SPI_CTL_FIFOEN_Msk;
|
|
000014 6801 LDR r1,[r0,#0]
|
|
000016 2201 MOVS r2,#1
|
|
000018 0552 LSLS r2,r2,#21
|
|
00001a 4311 ORRS r1,r1,r2
|
|
00001c 6001 STR r1,[r0,#0]
|
|
;;;157 }
|
|
00001e bd10 POP {r4,pc}
|
|
;;;158
|
|
ENDP
|
|
|
|
|
|
AREA ||i.SPI_EnableInt||, CODE, READONLY, ALIGN=1
|
|
|
|
SPI_EnableInt PROC
|
|
;;;201 */
|
|
;;;202 void SPI_EnableInt(SPI_T *spi, uint32_t u32Mask)
|
|
000000 07ca LSLS r2,r1,#31
|
|
;;;203 {
|
|
000002 d004 BEQ |L10.14|
|
|
;;;204 if((u32Mask & SPI_IE_MASK) == SPI_IE_MASK)
|
|
;;;205 spi->CTL |= SPI_CTL_UNITIEN_Msk;
|
|
000004 6802 LDR r2,[r0,#0]
|
|
000006 2301 MOVS r3,#1
|
|
000008 045b LSLS r3,r3,#17
|
|
00000a 431a ORRS r2,r2,r3
|
|
00000c 6002 STR r2,[r0,#0]
|
|
|L10.14|
|
|
;;;206
|
|
;;;207 if((u32Mask & SPI_SSTA_INTEN_MASK) == SPI_SSTA_INTEN_MASK)
|
|
00000e 074a LSLS r2,r1,#29
|
|
000010 d504 BPL |L10.28|
|
|
;;;208 spi->SLVCTL |= SPI_SLVCTL_SLVSTIEN_Msk;
|
|
000012 6bc2 LDR r2,[r0,#0x3c]
|
|
000014 2301 MOVS r3,#1
|
|
000016 029b LSLS r3,r3,#10
|
|
000018 431a ORRS r2,r2,r3
|
|
00001a 63c2 STR r2,[r0,#0x3c]
|
|
|L10.28|
|
|
;;;209
|
|
;;;210 if((u32Mask & SPI_FIFO_TX_INTEN_MASK) == SPI_FIFO_TX_INTEN_MASK)
|
|
00001c 070a LSLS r2,r1,#28
|
|
00001e d503 BPL |L10.40|
|
|
;;;211 spi->FIFOCTL |= SPI_FIFOCTL_TXTHIEN_Msk;
|
|
000020 6c02 LDR r2,[r0,#0x40]
|
|
000022 2308 MOVS r3,#8
|
|
000024 431a ORRS r2,r2,r3
|
|
000026 6402 STR r2,[r0,#0x40]
|
|
|L10.40|
|
|
;;;212
|
|
;;;213 if((u32Mask & SPI_FIFO_RX_INTEN_MASK) == SPI_FIFO_RX_INTEN_MASK)
|
|
000028 06ca LSLS r2,r1,#27
|
|
00002a d503 BPL |L10.52|
|
|
;;;214 spi->FIFOCTL |= SPI_FIFOCTL_RXTHIEN_Msk;
|
|
00002c 6c02 LDR r2,[r0,#0x40]
|
|
00002e 2304 MOVS r3,#4
|
|
000030 431a ORRS r2,r2,r3
|
|
000032 6402 STR r2,[r0,#0x40]
|
|
|L10.52|
|
|
;;;215
|
|
;;;216 if((u32Mask & SPI_FIFO_RXOV_INTEN_MASK) == SPI_FIFO_RXOV_INTEN_MASK)
|
|
000034 068a LSLS r2,r1,#26
|
|
000036 d503 BPL |L10.64|
|
|
;;;217 spi->FIFOCTL |= SPI_FIFOCTL_RXOVIEN_Msk;
|
|
000038 6c02 LDR r2,[r0,#0x40]
|
|
00003a 2340 MOVS r3,#0x40
|
|
00003c 431a ORRS r2,r2,r3
|
|
00003e 6402 STR r2,[r0,#0x40]
|
|
|L10.64|
|
|
;;;218
|
|
;;;219 if((u32Mask & SPI_FIFO_TIMEOUT_INTEN_MASK) == SPI_FIFO_TIMEOUT_INTEN_MASK)
|
|
000040 0649 LSLS r1,r1,#25
|
|
000042 d504 BPL |L10.78|
|
|
;;;220 spi->FIFOCTL |= SPI_FIFOCTL_RXTOIEN_Msk;
|
|
000044 6c01 LDR r1,[r0,#0x40]
|
|
000046 2201 MOVS r2,#1
|
|
000048 0552 LSLS r2,r2,#21
|
|
00004a 4311 ORRS r1,r1,r2
|
|
00004c 6401 STR r1,[r0,#0x40]
|
|
|L10.78|
|
|
;;;221 }
|
|
00004e 4770 BX lr
|
|
;;;222
|
|
ENDP
|
|
|
|
|
|
AREA ||i.SPI_GetBusClock||, CODE, READONLY, ALIGN=2
|
|
|
|
SPI_GetBusClock PROC
|
|
;;;173 */
|
|
;;;174 uint32_t SPI_GetBusClock(SPI_T *spi)
|
|
000000 b510 PUSH {r4,lr}
|
|
;;;175 {
|
|
000002 4604 MOV r4,r0
|
|
;;;176 uint32_t u32Div;
|
|
;;;177 uint32_t u32ClkSrc;
|
|
;;;178
|
|
;;;179 if((CLK->CLKSEL1 & CLK_CLKSEL1_SPISEL_Msk) == CLK_CLKSEL1_SPISEL_XTAL) {
|
|
000004 480e LDR r0,|L11.64|
|
|
000006 6941 LDR r1,[r0,#0x14]
|
|
000008 0689 LSLS r1,r1,#26
|
|
00000a 0f89 LSRS r1,r1,#30
|
|
00000c d00d BEQ |L11.42|
|
|
;;;180 if((u32ClkSrc = CLK_GetHXTFreq()) == 0)
|
|
;;;181 u32ClkSrc = CLK_GetLXTFreq();
|
|
;;;182 } else if((CLK->CLKSEL1 & CLK_CLKSEL1_SPISEL_Msk) == CLK_CLKSEL1_SPISEL_PLL)
|
|
00000e 6940 LDR r0,[r0,#0x14]
|
|
000010 0680 LSLS r0,r0,#26
|
|
000012 0f80 LSRS r0,r0,#30
|
|
000014 2802 CMP r0,#2
|
|
000016 d00f BEQ |L11.56|
|
|
;;;183 u32ClkSrc = CLK_GetPLLClockFreq();
|
|
;;;184 else
|
|
;;;185 u32ClkSrc = CLK_GetHCLKFreq();
|
|
000018 f7fffffe BL CLK_GetHCLKFreq
|
|
|L11.28|
|
|
;;;186
|
|
;;;187 u32Div = spi->CLKDIV & SPI_CLKDIV_DIVIDER_Msk;
|
|
00001c 6861 LDR r1,[r4,#4]
|
|
00001e 0609 LSLS r1,r1,#24
|
|
;;;188
|
|
;;;189 return ( u32ClkSrc / ((u32Div + 1)*2) );
|
|
000020 0dc9 LSRS r1,r1,#23
|
|
000022 1c89 ADDS r1,r1,#2
|
|
000024 f7fffffe BL __aeabi_uidivmod
|
|
;;;190 }
|
|
000028 bd10 POP {r4,pc}
|
|
|L11.42|
|
|
00002a f7fffffe BL CLK_GetHXTFreq
|
|
00002e 2800 CMP r0,#0 ;180
|
|
000030 d1f4 BNE |L11.28|
|
|
000032 f7fffffe BL CLK_GetLXTFreq
|
|
000036 e7f1 B |L11.28|
|
|
|L11.56|
|
|
000038 f7fffffe BL CLK_GetPLLClockFreq
|
|
00003c e7ee B |L11.28|
|
|
;;;191
|
|
ENDP
|
|
|
|
00003e 0000 DCW 0x0000
|
|
|L11.64|
|
|
DCD 0x50000200
|
|
|
|
AREA ||i.SPI_Open||, CODE, READONLY, ALIGN=1
|
|
|
|
SPI_Open PROC
|
|
;;;37 */
|
|
;;;38 uint32_t SPI_Open(SPI_T *spi,
|
|
000000 b510 PUSH {r4,lr}
|
|
;;;39 uint32_t u32MasterSlave,
|
|
;;;40 uint32_t u32SPIMode,
|
|
;;;41 uint32_t u32DataWidth,
|
|
;;;42 uint32_t u32BusClock)
|
|
;;;43 {
|
|
;;;44 if(u32DataWidth == 32)
|
|
000002 9c02 LDR r4,[sp,#8]
|
|
000004 2b20 CMP r3,#0x20
|
|
000006 d100 BNE |L12.10|
|
|
;;;45 u32DataWidth = 0;
|
|
000008 2300 MOVS r3,#0
|
|
|L12.10|
|
|
;;;46
|
|
;;;47 spi->CTL = u32MasterSlave | (u32DataWidth << SPI_CTL_DWIDTH_Pos) | (u32SPIMode);
|
|
00000a 00db LSLS r3,r3,#3
|
|
00000c 430b ORRS r3,r3,r1
|
|
00000e 4313 ORRS r3,r3,r2
|
|
000010 6003 STR r3,[r0,#0]
|
|
;;;48
|
|
;;;49 if(u32MasterSlave == SPI_SLAVE)
|
|
000012 2201 MOVS r2,#1
|
|
000014 0492 LSLS r2,r2,#18
|
|
000016 4291 CMP r1,r2
|
|
000018 d101 BNE |L12.30|
|
|
;;;50 spi->SSCTL = SPI_SSCTL_SSLTEN_Msk;
|
|
00001a 2110 MOVS r1,#0x10
|
|
00001c 6081 STR r1,[r0,#8]
|
|
|L12.30|
|
|
;;;51
|
|
;;;52 return ( SPI_SetBusClock(spi, u32BusClock) );
|
|
00001e 4621 MOV r1,r4
|
|
000020 f7fffffe BL SPI_SetBusClock
|
|
;;;53 }
|
|
000024 bd10 POP {r4,pc}
|
|
;;;54
|
|
ENDP
|
|
|
|
|
|
AREA ||i.SPI_SetBusClock||, CODE, READONLY, ALIGN=2
|
|
|
|
SPI_SetBusClock PROC
|
|
;;;114 */
|
|
;;;115 uint32_t SPI_SetBusClock(SPI_T *spi, uint32_t u32BusClock)
|
|
000000 b570 PUSH {r4-r6,lr}
|
|
;;;116 {
|
|
000002 4606 MOV r6,r0
|
|
;;;117 uint32_t u32Div = 0;
|
|
;;;118 uint32_t u32ClkSrc;
|
|
;;;119
|
|
;;;120 if((CLK->CLKSEL1 & CLK_CLKSEL1_SPISEL_Msk) == CLK_CLKSEL1_SPISEL_XTAL) {
|
|
000004 4819 LDR r0,|L13.108|
|
|
000006 460d MOV r5,r1 ;116
|
|
000008 6941 LDR r1,[r0,#0x14]
|
|
00000a 0689 LSLS r1,r1,#26
|
|
00000c 0f89 LSRS r1,r1,#30
|
|
00000e d021 BEQ |L13.84|
|
|
;;;121 if((u32ClkSrc = CLK_GetHXTFreq()) == 0)
|
|
;;;122 u32ClkSrc = CLK_GetLXTFreq();
|
|
;;;123 } else if((CLK->CLKSEL1 & CLK_CLKSEL1_SPISEL_Msk) == CLK_CLKSEL1_SPISEL_PLL)
|
|
000010 6940 LDR r0,[r0,#0x14]
|
|
000012 0680 LSLS r0,r0,#26
|
|
000014 0f80 LSRS r0,r0,#30
|
|
000016 2802 CMP r0,#2
|
|
000018 d023 BEQ |L13.98|
|
|
;;;124 u32ClkSrc = CLK_GetPLLClockFreq();
|
|
;;;125 else
|
|
;;;126 u32ClkSrc = CLK_GetHCLKFreq();
|
|
00001a f7fffffe BL CLK_GetHCLKFreq
|
|
|L13.30|
|
|
00001e 4604 MOV r4,r0 ;124
|
|
|L13.32|
|
|
;;;127
|
|
;;;128 if(u32BusClock > u32ClkSrc)
|
|
000020 42a5 CMP r5,r4
|
|
000022 d900 BLS |L13.38|
|
|
;;;129 u32BusClock = u32ClkSrc;
|
|
000024 4605 MOV r5,r0
|
|
|L13.38|
|
|
;;;130
|
|
;;;131 if(u32BusClock != 0) {
|
|
000026 2d00 CMP r5,#0
|
|
000028 d01e BEQ |L13.104|
|
|
;;;132 u32Div = (((u32ClkSrc / u32BusClock) + 1) >> 1) - 1;
|
|
00002a 4629 MOV r1,r5
|
|
00002c 4620 MOV r0,r4
|
|
00002e f7fffffe BL __aeabi_uidivmod
|
|
000032 1c40 ADDS r0,r0,#1
|
|
000034 0840 LSRS r0,r0,#1
|
|
000036 1e40 SUBS r0,r0,#1
|
|
;;;133 if(u32Div > SPI_CLKDIV_DIVIDER_Msk)
|
|
000038 28ff CMP r0,#0xff
|
|
00003a d900 BLS |L13.62|
|
|
;;;134 u32Div = SPI_CLKDIV_DIVIDER_Msk;
|
|
00003c 20ff MOVS r0,#0xff
|
|
|L13.62|
|
|
;;;135 } else
|
|
;;;136 return 0;
|
|
;;;137
|
|
;;;138 spi->CLKDIV = (spi->CLKDIV & ~SPI_CLKDIV_DIVIDER_Msk) | u32Div;
|
|
00003e 6871 LDR r1,[r6,#4]
|
|
000040 0a09 LSRS r1,r1,#8
|
|
000042 0209 LSLS r1,r1,#8
|
|
000044 4301 ORRS r1,r1,r0
|
|
000046 6071 STR r1,[r6,#4]
|
|
;;;139
|
|
;;;140 return ( u32ClkSrc / ((u32Div+1)*2) );
|
|
000048 0041 LSLS r1,r0,#1
|
|
00004a 4620 MOV r0,r4
|
|
00004c 1c89 ADDS r1,r1,#2
|
|
00004e f7fffffe BL __aeabi_uidivmod
|
|
;;;141 }
|
|
000052 bd70 POP {r4-r6,pc}
|
|
|L13.84|
|
|
000054 f7fffffe BL CLK_GetHXTFreq
|
|
000058 0004 MOVS r4,r0 ;121
|
|
00005a d1e1 BNE |L13.32|
|
|
00005c f7fffffe BL CLK_GetLXTFreq
|
|
000060 e7dd B |L13.30|
|
|
|L13.98|
|
|
000062 f7fffffe BL CLK_GetPLLClockFreq
|
|
000066 e7da B |L13.30|
|
|
|L13.104|
|
|
000068 2000 MOVS r0,#0 ;136
|
|
00006a bd70 POP {r4-r6,pc}
|
|
;;;142
|
|
ENDP
|
|
|
|
|L13.108|
|
|
DCD 0x50000200
|
|
|
|
;*** Start embedded assembler ***
|
|
|
|
#line 1 "..\\..\\..\\Library\\StdDriver\\src\\spi.c"
|
|
AREA ||.rev16_text||, CODE
|
|
THUMB
|
|
EXPORT |__asm___5_spi_c_SPI_Open____REV16|
|
|
#line 388 "..\\..\\..\\Library\\CMSIS\\Include\\cmsis_armcc.h"
|
|
|__asm___5_spi_c_SPI_Open____REV16| PROC
|
|
#line 389
|
|
|
|
rev16 r0, r0
|
|
bx lr
|
|
ENDP
|
|
AREA ||.revsh_text||, CODE
|
|
THUMB
|
|
EXPORT |__asm___5_spi_c_SPI_Open____REVSH|
|
|
#line 402
|
|
|__asm___5_spi_c_SPI_Open____REVSH| PROC
|
|
#line 403
|
|
|
|
revsh r0, r0
|
|
bx lr
|
|
ENDP
|
|
|
|
;*** End embedded assembler ***
|