?? dss_dsk6711.c
字號:
/*
* Copyright 2002 by Texas Instruments Incorporated.
* All rights reserved. Property of Texas Instruments Incorporated.
* Restricted rights to use, duplicate or disclose this code are
* granted through contract.
*
*/
/* "@(#) DSP/BIOS 4.80.208 12-06-02 (barracuda-l19)" */
/*
* ======== dss_dsk6211.c ========
*/
#include <std.h>
#include <log.h>
#include "dss.h"
#include "dss_priv.h"
/* function prototypes ... */
static Uns codecControlRead(Uns reg);
static Void codecControlWrite(Uns reg, Uns data);
static Void codecError(Int id);
static Void codecInit(Void);
/*
* ======== DSS_init ========
*/
Void DSS_init(Void)
{
#ifdef _EDMA_
DSS_dmaInit();
/* Enable EDMA interrupt */
IER |= DSS_IERDMABIT;
#else
/* Enable McBSP interrupt */
IER |= DSS_IERRX0BIT;
#endif
/* Reset McBsp then enable Transmit and Receive bits */
MCBSP_RSETH(DSS_hMcbsp0, SPCR, 0x0);
MCBSP_enableRcv(DSS_hMcbsp0);
MCBSP_enableXmt(DSS_hMcbsp0);
codecInit();
}
/*
* ======== DSS_spWrite ========
*/
Void DSS_spWrite(Uns data)
{
while ((MCBSP_RGETH(DSS_hMcbsp0, SPCR) & 0x20000) == 0);
MCBSP_RSETH(DSS_hMcbsp0, DXR, data);
}
/*
* ======== DSS_spRead ========
*/
Uns DSS_spRead(Void)
{
while ((MCBSP_RGETH(DSS_hMcbsp0, SPCR) & 0x2) == 0);
return (MCBSP_RGETH(DSS_hMcbsp0, DRR));
}
/*
* ======== codecInit ========
*/
static Void codecInit(Void)
{
Uns temp;
/* Perform Voice Channel Initialisation of TLC320AD535 Codec */
/* AD535 has 2 serial port channels - Data, Voice */
/* Data Channel Controlled by Registers 1,2 (Reg 0 = NOP) */
/* Voice Channel Controlled by Registers 3,4,5,6 */
/* Only Voice channel used on DSK 6211 */
/* Set-Up Register 0 (NOP) - Dummy Read/Write Codec */
codecControlWrite(0, 0);
/* Set-Up Register 1 / 2 - Only Used by Data Serial Port -NA */
/* Set-Up Register 3 - S/W Reset + Power Down + No loop / gain=0dB */
codecControlWrite(3, 0x00C6); /* + With Reset */
codecControlWrite(3, 0x0006); /* + Without Reset */
temp = codecControlRead(3);
if ((temp & 0x00ff) != 0x0006) {
codecError(3);
}
/* Set-Up Register 4 - Voice ADC gain = 0dB */
codecControlWrite(4, 0x0000);
temp = codecControlRead(4);
if ((temp & 0x00ff) != 0x0000) {
codecError(4);
}
/* Set-Up Register 5 - Spkr L/R gain = 0dB */
codecControlWrite(5, 0x0002);
temp = codecControlRead(5);
if ((temp & 0x00fe) != 0x0002) {
codecError(5);
}
/* Set-Up Register 6 - Handset gain = 0dB */
codecControlWrite(6, 0x0000);
temp = codecControlRead(6);
if ((temp & 0x0080) != 0x0000) {
codecError(6);
}
/* Set-Up Register - (NOP) */
codecControlWrite(0, 0);
temp = codecControlRead(0);
}
/*
* ======== codecControlRead ========
*/
static Uns codecControlRead(Uns reg)
{
Uns temp;
temp = ((reg & 0x001F) << 8) | 0x2000;
DSS_spWrite(0);
DSS_spRead ( );
DSS_spWrite(1);
DSS_spRead ( );
DSS_spWrite(temp);
temp = DSS_spRead ( );
DSS_spWrite(0);
DSS_spRead ( );
return (temp);
}
/*
* ======== codecControlWrite ========
*/
static Void codecControlWrite(Uns reg, Uns data)
{
Uns temp;
temp = ((reg & 0x001F) << 8) | (data & 0x00ff);
DSS_spWrite(0);
DSS_spRead ( );
DSS_spWrite(1);
DSS_spRead ( );
DSS_spWrite(temp);
DSS_spRead ( );
DSS_spWrite(0);
DSS_spRead ( );
}
/*
* ======== codecError ========
*/
static Void codecError(id)
{
LOG_error("Error setting up register %d", id);
for (;;) {
; /* loop forever */
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -