⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xllp_ac97.cod

📁 pxa270为硬件平台的wince操作系统XLLP驱动源码
💻 COD
📖 第 1 页 / 共 3 页
字号:
; 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 + -