添加PAN159资料
This commit is contained in:
@@ -0,0 +1,602 @@
|
||||
; 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 ***
|
||||
Reference in New Issue
Block a user