?? bbu_dd_mcbspadl.c
字號:
/*******************************************************************************
* COPYRIGHT (C) 中國普天研究院 *
********************************************************************************
* 源文件名: BBU_DD_McbspAdl.c *
* 功能描述:Mcbsp Port Operation Module *
* 編寫者:louyajun *
* 版本:1.0.0 *
* 編制日期:07/21/2004 *
* 說明: *
* 修改歷史: *
* *
*******************************************************************************/
#include "BBU_DD_McbspCsl.h"
#include "BBU_DD_EdmaCsl.h"
#include "BBU_DD_Post.h"
/******************************************************************************\
* McBSP Static Global Variable Definitions
\******************************************************************************/
#pragma DATA_SECTION(edmaMcbspXHandle,".gvariable");
EDMA_Handle edmaMcbspXHandle[MCBSP_PORT_CNT];
#pragma DATA_SECTION(edmaMcbspRHandle,".gvariable");
EDMA_Handle edmaMcbspRHandle[MCBSP_PORT_CNT];
#pragma DATA_SECTION(edmaMcbspRLHandle1,".gvariable");
EDMA_Handle edmaMcbspRLHandle1[MCBSP_PORT_CNT];
#pragma DATA_SECTION(edmaMcbspRLHandle2,".gvariable");
EDMA_Handle edmaMcbspRLHandle2[MCBSP_PORT_CNT];
#pragma DATA_SECTION(mcbspPortHandle,".gvariable");
static MCBSP_Handle mcbspPortHandle[MCBSP_PORT_CNT] = {MCBSP_DEVICE_ENTRY(0),
MCBSP_DEVICE_ENTRY(1),
MCBSP_DEVICE_ENTRY(2)
};
#pragma DATA_SECTION(mcbspConfig,".gvariable");
#if MCBSP_LOOPBACK_MODE
/* McBSP port config structures for CPB external digital loopback operation */
static MCBSP_Config mcbspConfig[MCBSP_PORT_CNT] = {
{ /* SPCR RCR XCR SRGR */
0x01302030, 0x00050FA0, 0x00050FA0, 0x12000000,
/* MCR RCERE0 RCERE1 RCERE2*/
0x00010001, 0x0000FFFF, 0x00000000, 0x00000000,
/* RCERE3 XCERE0 XCERE1 XCERE2*/
0x00000000, 0x0000FFFF, 0x00000000, 0x00000000,
/* XCERE3 PCR */
0x00000000, 0x00000A00, },
{ /* SPCR RCR XCR SRGR */
0x01302030, 0x00050FA0, 0x00050FA0, 0x12000000,
/* MCR RCERE0 RCERE1 RCERE2*/
0x00010001, 0x0000FFFF, 0x00000000, 0x00000000,
/* RCERE3 XCERE0 XCERE1 XCERE2*/
0x00000000, 0x0000FFFF, 0x00000000, 0x00000000,
/* XCERE3 PCR */
0x00000000, 0x00000A00, },
{ /* SPCR RCR XCR SRGR */
0x01302030, 0x00050FA0, 0x00050FA0, 0x12000000,
/* MCR RCERE0 RCERE1 RCERE2*/
0x00010001, 0x0000FFFF, 0x00000000, 0x00000000,
/* RCERE3 XCERE0 XCERE1 XCERE2*/
0x00000000, 0x0000FFFF, 0x00000000, 0x00000000,
/* XCERE3 PCR */
0x00000000, 0x00000A00, }};
#else
/* McBSP port config structures for CPB internal digital loopback operation */
static MCBSP_Config mcbspConfig[MCBSP_PORT_CNT] = {
{ /* SPCR RCR XCR SRGR */
0x0130A030, 0x00050FA0, 0x00050FA0, 0x32000005,
/* MCR RCERE0 RCERE1 RCERE2*/
0x00010001, 0x0000FFFF, 0x00000000, 0x00000000,
/* RCERE3 XCERE0 XCERE1 XCERE2*/
0x00000000, 0x0000FFFF, 0x00000000, 0x00000000,
/* XCERE3 PCR */
0x00000000, 0x00000F00, },
{ /* SPCR RCR XCR SRGR */
0x0130A030, 0x00050FA0, 0x00050FA0, 0x32000005,
/* MCR RCERE0 RCERE1 RCERE2*/
0x00010001, 0x0000FFFF, 0x00000000, 0x00000000,
/* RCERE3 XCERE0 XCERE1 XCERE2*/
0x00000000, 0x0000FFFF, 0x00000000, 0x00000000,
/* XCERE3 PCR */
0x00000000, 0x00000F00, },
{ /* SPCR RCR XCR SRGR */
0x0130A030, 0x00050FA0, 0x00050FA0, 0x32000005,
/* MCR RCERE0 RCERE1 RCERE2*/
0x00010001, 0x0000FFFF, 0x00000000, 0x00000000,
/* RCERE3 XCERE0 XCERE1 XCERE2*/
0x00000000, 0x0000FFFF, 0x00000000, 0x00000000,
/* XCERE3 PCR */
0x00000000, 0x00000F00 }};
#endif
/*----------------------------------------------------------------------------*/
/******************************************************************************\
* MCBSP API Function Declarations
\******************************************************************************/
CSLAPI void MCBSP_config(MCBSP_Handle *hMcbsp, MCBSP_Config *config);
CSLAPI void MCBSP_getConfig(MCBSP_Handle *hMcbsp, MCBSP_Config *config);
CSLAPI void MCBSP_reset(MCBSP_Handle *hMcbsp);
CSLAPI MCBSP_Handle *MCBSP_open(Sint32 portNum);
CSLAPI void MCBSP_close(MCBSP_Handle *hMcbsp);
CSLAPI MCBSP_Handle *MCBSP_init(Sint32 portNum);
CSLAPI void MCBSP_startEdmaX(EDMA_Handle hEdma,EDMA_McbspXConfig *config);
CSLAPI void MCBSP_startEdmaR(EDMA_Handle hEdma,EDMA_McbspRConfig *config);
/******************************************************************************\
* MCBSP API Function Definitions
\******************************************************************************/
/*******************************************************************************
* 函數名稱: MCBSP_config *
* 函數描述: Setup the McBSP Device using the configuration structure *
* 相關文檔: *
* 參數描述: *
* 參數名 類型 輸入/輸出 描述 *
* -------- ---- --------- ----------- *
* hMcbsp MCBSP_Handle* in Handle for Mcbsp Device *
* config MCBSP_Config* in Configuration structure for Mcbsp *
* *
* 返回值: 無 *
* 說明: *
*******************************************************************************/
CSLAPI void MCBSP_config(MCBSP_Handle *hMcbsp, MCBSP_Config *config)
{
Uint32 gie;
volatile Uint32 *base = (volatile Uint32 *)(hMcbsp->baseAddr);
register Uint32 x0,x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13;
gie = IRQ_globalDisable();
/* the compiler generates more efficient code if the loads */
/* and stores are grouped together rather than intermixed */
x0 = config->spcr;
x1 = config->rcr;
x2 = config->xcr;
x3 = config->srgr;
x4 = config->mcr;
x5 = config->rcere0;
x6 = config->rcere1;
x7 = config->rcere2;
x8 = config->rcere3;
x9 = config->xcere0;
x10 = config->xcere1;
x11 = config->xcere2;
x12 = config->xcere3;
x13 = config->pcr;
base[MCBSP_SPCR_OFFSET] = MCBSP_SPCR_DEFAULT;
base[MCBSP_RCR_OFFSET] = x1;
base[MCBSP_XCR_OFFSET] = x2;
base[MCBSP_SRGR_OFFSET] = x3;
base[MCBSP_MCR_OFFSET] = x4;
base[MCBSP_RCERE0_OFFSET] = x5;
base[MCBSP_RCERE1_OFFSET] = x6;
base[MCBSP_RCERE2_OFFSET] = x7;
base[MCBSP_RCERE3_OFFSET] = x8;
base[MCBSP_XCERE0_OFFSET] = x9;
base[MCBSP_XCERE1_OFFSET] = x10;
base[MCBSP_XCERE2_OFFSET] = x11;
base[MCBSP_XCERE3_OFFSET] = x12;
base[MCBSP_PCR_OFFSET] = x13;
base[MCBSP_SPCR_OFFSET] = x0;
IRQ_globalRestore(gie);
}
/*----------------------------------------------------------------------------*/
/*******************************************************************************
* 函數名稱: MCBSP_getConfig *
* 函數描述: Get a McBSP Device Configuration *
* 相關文檔: *
* 參數描述: *
* 參數名 類型 輸入/輸出 描述 *
* -------- ---- --------- ----------- *
* hMcbsp MCBSP_Handle* in Handle for Mcbsp Device *
* config MCBSP_Config* out Configuration structure for Mcbsp *
* *
* 返回值: 無 *
* 說明: *
*******************************************************************************/
CSLAPI void MCBSP_getConfig(MCBSP_Handle *hMcbsp, MCBSP_Config *config)
{
Uint32 gie;
volatile Uint32 *base = (volatile Uint32 *)(hMcbsp->baseAddr);
volatile MCBSP_Config *cfg = (volatile MCBSP_Config*)config;
register Uint32 x0,x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13;
gie = IRQ_globalDisable();
/* the compiler generates more efficient code if the loads */
/* and stores are grouped together rather than intermixed */
x0 = base[MCBSP_SPCR_OFFSET];
x1 = base[MCBSP_RCR_OFFSET];
x2 = base[MCBSP_XCR_OFFSET];
x3 = base[MCBSP_SRGR_OFFSET];
x4 = base[MCBSP_MCR_OFFSET];
x5 = base[MCBSP_RCERE0_OFFSET];
x6 = base[MCBSP_RCERE1_OFFSET];
x7 = base[MCBSP_RCERE2_OFFSET];
x8 = base[MCBSP_RCERE3_OFFSET];
x9 = base[MCBSP_XCERE0_OFFSET];
x10 = base[MCBSP_XCERE1_OFFSET];
x11 = base[MCBSP_XCERE2_OFFSET];
x12 = base[MCBSP_XCERE3_OFFSET];
x13 = base[MCBSP_PCR_OFFSET];
cfg->spcr = x0;
cfg->rcr = x1;
cfg->xcr = x2;
cfg->srgr = x3;
cfg->mcr = x4;
cfg->rcere0 = x5;
cfg->rcere1 = x6;
cfg->rcere2 = x7;
cfg->rcere3 = x8;
cfg->xcere0 = x9;
cfg->xcere1 = x10;
cfg->xcere2 = x11;
cfg->xcere3 = x12;
cfg->pcr = x13;
IRQ_globalRestore(gie);
}
/*----------------------------------------------------------------------------*/
/*******************************************************************************
* 函數名稱: MCBSP_reset *
* 函數描述: Resets the given McBSP Device *
* 相關文檔: *
* 參數描述: *
* 參數名 類型 輸入/輸出 描述 *
* -------- ---- --------- ----------- *
* hMcbsp MCBSP_Handle* in Handle for Mcbsp Device *
* *
* 返回值: 無 *
* 說明: *
*******************************************************************************/
CSLAPI void MCBSP_reset(MCBSP_Handle *hMcbsp)
{
Uint32 gie;
gie = IRQ_globalDisable();
if (hMcbsp == MCBSP_HINV)
{
return;
}
else
{
MCBSP_RSETH(hMcbsp,SPCR,MCBSP_SPCR_DEFAULT);
MCBSP_RSETH(hMcbsp,RCR, MCBSP_RCR_DEFAULT);
MCBSP_RSETH(hMcbsp,XCR, MCBSP_XCR_DEFAULT);
MCBSP_RSETH(hMcbsp,SRGR,MCBSP_SRGR_DEFAULT);
MCBSP_RSETH(hMcbsp,MCR, MCBSP_MCR_DEFAULT);
MCBSP_RSETH(hMcbsp,RCERE0,MCBSP_RCERE0_DEFAULT);
MCBSP_RSETH(hMcbsp,RCERE1,MCBSP_RCERE1_DEFAULT);
MCBSP_RSETH(hMcbsp,RCERE2,MCBSP_RCERE2_DEFAULT);
MCBSP_RSETH(hMcbsp,RCERE3,MCBSP_RCERE3_DEFAULT);
MCBSP_RSETH(hMcbsp,XCERE0,MCBSP_XCERE0_DEFAULT);
MCBSP_RSETH(hMcbsp,XCERE1,MCBSP_XCERE1_DEFAULT);
MCBSP_RSETH(hMcbsp,XCERE2,MCBSP_XCERE2_DEFAULT);
MCBSP_RSETH(hMcbsp,XCERE3,MCBSP_XCERE3_DEFAULT);
MCBSP_RSETH(hMcbsp,PCR, MCBSP_PCR_DEFAULT);
IRQ_reset(hMcbsp->xmtEventId);
IRQ_reset(hMcbsp->rcvEventId);
}
IRQ_globalRestore(gie);
}
/*----------------------------------------------------------------------------*/
/*******************************************************************************
* 函數名稱: MCBSP_open *
* 函數描述: Opens and resets a McBSP Device *
* 相關文檔: *
* 參數描述: *
* 參數名 類型 輸入/輸出 描述 *
* -------- ---- --------- ----------- *
* portNum Sint32 in McBSP Port Number *
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -