📄 xllp_ac97.cod
字号:
; Listing generated by Microsoft (R) Optimizing Compiler Version 13.10.4345
TTL F:\wm520\PLATFORM\intel_dbpxa27x\Public\CSP\ARM\INTEL\PXA27X\XLLP\SOURCE\.\xllp_ac97.c
CODE32
00000 AREA |.drectve|, DRECTVE
DCB "-defaultlib:coredll.lib "
DCB "-defaultlib:corelibc.lib "
EXPORT |XllpAc97GetStatus|
; File f:\wm520\platform\intel_dbpxa27x\public\csp\arm\intel\pxa27x\xllp\source\xllp_ac97.c
00000 AREA |.text| { |XllpAc97GetStatus| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$XllpAc97GetStatus|, PDATA, SELECTION=5, ASSOC=|.text| { |XllpAc97GetStatus| } ; comdat associative
|$T1417| DCD |$L1416|
DCD 0x40000d00
; Function compile flags: /Ogsy
00000 AREA |.text| { |XllpAc97GetStatus| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |XllpAc97GetStatus| PROC
; 226 : {
00000 |$L1416|
00000 |$M1414|
00000 e3520000 cmp r2, #0
; 227 : if (XLLP_AC97_CODEC_PRIMARY == codecSel)
; 228 : {
; 229 : pStat->codecReady = (pAc97Reg->GSR & XLLP_AC97_GSR_PCRDY_MSK) ? XLLP_TRUE : XLLP_FALSE;
00004 e591301c ldr r3, [r1, #0x1C]
00008 1a000004 bne |$L1264|
0000c e3130c01 tst r3, #1, 24
00010 |$L1413|
00010 0a000004 beq |$L1406|
00014 e3a03001 mov r3, #1
; 230 : }
; 231 : else
; 232 : {
; 233 : pStat->codecReady = (pAc97Reg->GSR & XLLP_AC97_GSR_SCRDY_MSK) ? XLLP_TRUE : XLLP_FALSE;
00018 e5803000 str r3, [r0]
; 234 : }
; 235 : } // Ac97CtrlGetStatus()
0001c e12fff1e bx lr
00020 |$L1264|
; 230 : }
; 231 : else
; 232 : {
; 233 : pStat->codecReady = (pAc97Reg->GSR & XLLP_AC97_GSR_SCRDY_MSK) ? XLLP_TRUE : XLLP_FALSE;
00020 e3130c02 tst r3, #2, 24
00024 eafffff9 b |$L1413|
00028 |$L1406|
00028 e3a03000 mov r3, #0
0002c e5803000 str r3, [r0]
; 234 : }
; 235 : } // Ac97CtrlGetStatus()
00030 e12fff1e bx lr
00034 |$M1415|
ENDP ; |XllpAc97GetStatus|
EXPORT |XllpAc97ColdReset|
IMPORT |XllpGpioSetOutputState1|
IMPORT |XllpOstDelayMicroSeconds|
00000 AREA |.text| { |XllpAc97ColdReset| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$XllpAc97ColdReset|, PDATA, SELECTION=5, ASSOC=|.text| { |XllpAc97ColdReset| } ; comdat associative
|$T1435| DCD |$L1434|
DCD 0x40003402
; Function compile flags: /Ogsy
00000 AREA |.text| { |XllpAc97ColdReset| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |XllpAc97ColdReset| PROC
; 557 : {
00000 |$L1434|
00000 e92d43f0 stmdb sp!, {r4 - r9, lr}
00004 e24dd018 sub sp, sp, #0x18
00008 |$M1432|
00008 e1a05000 mov r5, r0
; 558 : XLLP_AC97_ERROR_T status = XLLP_AC97_NO_ERROR;
; 559 : P_XLLP_AC97_T pAC97 = pAc97ctxt->pAc97Reg;
; 560 : P_XLLP_OST_T pOstRegs = pAc97ctxt->pOstRegs;
0000c e595900c ldr r9, [r5, #0xC]
00010 e5958008 ldr r8, [r5, #8]
; 561 : XLLP_BOOL_T priCodecReady, secCodecReady;
; 562 : XLLP_UINT32_T timeRemaining;
; 563 :
; 564 : pAC97->GCR = 0;
00014 e3a03000 mov r3, #0
; 565 :
; 566 : // Hold reset active for a minimum time
; 567 : XllpOstDelayMicroSeconds(pOstRegs, XLLP_AC97_COLD_HOLDTIME);
00018 e1a00009 mov r0, r9
0001c e3a01064 mov r1, #0x64
00020 e588300c str r3, [r8, #0xC]
00024 e3a07000 mov r7, #0
00028 eb000000 bl XllpOstDelayMicroSeconds
; 568 :
; 569 : // Deactivate cold reset condition
; 570 : pAC97->GCR |= XLLP_AC97_GCR_COLD_RESET_MSK;
0002c e598300c ldr r3, [r8, #0xC]
; 571 :
; 572 : // Set nReset high. This is a workaround for some strange behavior of nReset pin.
; 573 : {
; 574 : XLLP_UINT32_T pins[6];
; 575 : pins[0] = 1;
00030 e3a02001 mov r2, #1
; 576 : pins[1] = 113;
00034 e3a0e071 mov lr, #0x71
00038 e3833002 orr r3, r3, #2
0003c e588300c str r3, [r8, #0xC]
; 577 : XllpGpioSetOutputState1(pAc97ctxt->pGpioReg, pins);
00040 e5950000 ldr r0, [r5]
00044 e28d1000 add r1, sp, #0
00048 e58d2000 str r2, [sp]
0004c e58de004 str lr, [sp, #4]
00050 eb000000 bl XllpGpioSetOutputState1
; 578 : }
; 579 :
; 580 : // And wait with timeout for all codecs to respond.
; 581 :
; 582 : priCodecReady = XLLP_FALSE;
; 583 : if (XLLP_FALSE == pAc97ctxt->useSecondaryCodec)
00054 e5953018 ldr r3, [r5, #0x18]
; 584 : {
; 585 : secCodecReady = XLLP_TRUE;
; 586 : }
; 587 : else
; 588 : {
; 589 : secCodecReady = XLLP_FALSE;
; 590 : }
; 591 : timeRemaining = pAc97ctxt->maxSetupTimeOutUs;
00058 e5955014 ldr r5, [r5, #0x14]
0005c e3a06000 mov r6, #0
00060 e3530000 cmp r3, #0
00064 03a04001 moveq r4, #1
00068 13a04000 movne r4, #0
0006c |$L1352|
; 592 : do
; 593 : {
; 594 : XllpOstDelayMicroSeconds(pOstRegs, 1);
0006c e3a01001 mov r1, #1
00070 e1a00009 mov r0, r9
00074 eb000000 bl XllpOstDelayMicroSeconds
; 595 : if (pAC97->GSR & XLLP_AC97_GSR_PCRDY_MSK)
00078 e598301c ldr r3, [r8, #0x1C]
0007c e3130c01 tst r3, #1, 24
; 596 : priCodecReady = XLLP_TRUE;
; 597 : if (pAC97->GSR & XLLP_AC97_GSR_SCRDY_MSK)
00080 e598301c ldr r3, [r8, #0x1C]
00084 13a06001 movne r6, #1
00088 e3130c02 tst r3, #2, 24
; 598 : secCodecReady = XLLP_TRUE;
0008c 13a04001 movne r4, #1
; 599 : }
; 600 : while (timeRemaining-- && ((priCodecReady == XLLP_FALSE) || (secCodecReady == XLLP_FALSE)));
00090 e3550000 cmp r5, #0
00094 e2455001 sub r5, r5, #1
00098 0a000003 beq |$L1357|
0009c e3560000 cmp r6, #0
000a0 0afffff1 beq |$L1352|
000a4 e3540000 cmp r4, #0
000a8 0affffef beq |$L1352|
000ac |$L1357|
; 601 :
; 602 : // Timeout status if some of the devices weren't ready.
; 603 : if ((priCodecReady == XLLP_FALSE) || (secCodecReady == XLLP_FALSE))
000ac e3560000 cmp r6, #0
000b0 0a000001 beq |$L1359|
000b4 e3540000 cmp r4, #0
000b8 1a000000 bne |$L1358|
000bc |$L1359|
; 604 : {
; 605 : status = XLLP_AC97_CODEC_NOT_READY;
000bc e3a07002 mov r7, #2
000c0 |$L1358|
; 606 : }
; 607 :
; 608 : return (status);
000c0 e1a00007 mov r0, r7
; 609 : } // XllpAc97ColdReset ()
000c4 e28dd018 add sp, sp, #0x18
000c8 e8bd43f0 ldmia sp!, {r4 - r9, lr}
000cc e12fff1e bx lr
000d0 |$M1433|
ENDP ; |XllpAc97ColdReset|
EXPORT |XllpAc97ShutdownAclink|
00000 AREA |.text| { |XllpAc97ShutdownAclink| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$XllpAc97ShutdownAclink|, PDATA, SELECTION=5, ASSOC=|.text| { |XllpAc97ShutdownAclink| } ; comdat associative
|$T1453| DCD |$L1452|
DCD 0x40001601
; Function compile flags: /Ogsy
00000 AREA |.text| { |XllpAc97ShutdownAclink| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |XllpAc97ShutdownAclink| PROC
; 635 : {
00000 |$L1452|
00000 e92d40f0 stmdb sp!, {r4 - r7, lr}
00004 |$M1450|
00004 e1a07001 mov r7, r1
00008 e1a06000 mov r6, r0
; 636 : XLLP_AC97_ERROR_T status = XLLP_AC97_NO_ERROR;
; 637 : XLLP_UINT32_T timeRemaining = XLLP_AC97_LINKOFF_TIMEOUT_DEF;
; 638 :
; 639 : pAc97Reg->GCR |= XLLP_AC97_GCR_LINK_OFF_MSK;
0000c e596300c ldr r3, [r6, #0xC]
; 640 :
; 641 : while (!(pAc97Reg->GSR & XLLP_AC97_GSR_ACOFFD_MSK))
00010 e3a04000 mov r4, #0
00014 e3a05f7d mov r5, #0x7D, 30
00018 e3833008 orr r3, r3, #8
0001c e586300c str r3, [r6, #0xC]
00020 ea000004 b |$L1449|
00024 |$L1368|
; 642 : {
; 643 : timeRemaining --;
00024 e2555001 subs r5, r5, #1
; 644 : if (0 == timeRemaining)
00028 0a000006 beq |$L1440|
; 647 : break;
; 648 : }
; 649 : XllpOstDelayMicroSeconds(pOstRegs, 1);
0002c e3a01001 mov r1, #1
00030 e1a00007 mov r0, r7
00034 eb000000 bl XllpOstDelayMicroSeconds
00038 |$L1449|
00038 e596301c ldr r3, [r6, #0x1C]
0003c e3130008 tst r3, #8
00040 0afffff7 beq |$L1368|
; 644 : if (0 == timeRemaining)
00044 ea000000 b |$L1369|
00048 |$L1440|
; 645 : {
; 646 : status = XLLP_AC97_LINK_SHUTDOWN_FAIL;
00048 e3a04003 mov r4, #3
0004c |$L1369|
; 650 : }
; 651 :
; 652 : return(status);
0004c e1a00004 mov r0, r4
; 653 : }
00050 e8bd40f0 ldmia sp!, {r4 - r7, lr}
00054 e12fff1e bx lr
00058 |$M1451|
ENDP ; |XllpAc97ShutdownAclink|
00000 AREA |.text| { |XllpAc97LinkLock| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$XllpAc97LinkLock|, PDATA, SELECTION=5, ASSOC=|.text| { |XllpAc97LinkLock| } ; comdat associative
|$T1464| DCD |$L1463|
DCD 0x40000901
; Function compile flags: /Ogsy
00000 AREA |.text| { |XllpAc97LinkLock| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |XllpAc97LinkLock| PROC
; 680 : {
00000 |$L1463|
00000 e24dd004 sub sp, sp, #4
00004 |$M1461|
; 681 : XLLP_BOOL_T status = XLLP_TRUE;
; 682 : XLLP_VUINT32_T carTmp;
; 683 :
; 684 : carTmp = pAc97Reg->CAR;
00004 e5903020 ldr r3, [r0, #0x20]
00008 e3a00001 mov r0, #1
0000c e58d3000 str r3, [sp]
; 685 : if (carTmp & XLLP_AC97_CAR_CAIP_MSK) // "1" in CAIP bit means lock failed.
00010 e59d3000 ldr r3, [sp]
00014 e3130001 tst r3, #1
; 686 : {
; 687 : status = XLLP_FALSE;
00018 13a00000 movne r0, #0
; 688 : }
; 689 : return (status);
; 690 : } // XllpAc97LinkLock()
0001c e28dd004 add sp, sp, #4
00020 e12fff1e bx lr
00024 |$M1462|
ENDP ; |XllpAc97LinkLock|
EXPORT |XllpAc97Init|
IMPORT |XllpGpioSetDirectionIn|
IMPORT |XllpGpioSetDirectionOut|
IMPORT |XllpGpioSetOutput0|
IMPORT |XllpGpioSetAlternateFn|
00000 AREA |.text| { |XllpAc97Init| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$XllpAc97Init|, PDATA, SELECTION=5, ASSOC=|.text| { |XllpAc97Init| } ; comdat associative
|$T1477| DCD |$L1476|
DCD 0x40005602
; Function compile flags: /Ogsy
00000 AREA |.text| { |XllpAc97Init| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |XllpAc97Init| PROC
; 73 : {
00000 |$L1476|
00000 e92d43f0 stmdb sp!, {r4 - r9, lr}
00004 e24dd030 sub sp, sp, #0x30
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -