?? audiodriver.c
字號:
/******************************************************************************\
* Copyright (C) 2004 TongGuangLong Science&Technologies Inc.
* All Rights Reserved
*------------------------------------------------------------------------------
* MODULE NAME... AudioDriver
* FILENAME...... AudioDriver.c
* DATE CREATED.. ShiQuanwang 08/17/2004
* PROJECT....... T0003
* PREREQUISITS..
*------------------------------------------------------------------------------
* HISTORY:
* CREATED: 08/17/2004.
*
*------------------------------------------------------------------------------
* DESCRIPTION:
*
\******************************************************************************/
#include <csl.h>
#include <csl_mcbsp.h>
#include <csl_irq.h>
#include "config2cfg.h"
#include "AudioDriver.h"
#include "queue.h"
#include "McuDspIntf.h"
#include "VarDef.h"
#define DEVICE_NOT_START 0
#define DEVICE_START 1
#define ENCODE 1
#define NO_ENCODE 0
#define DECODE 1
#define NO_DECODE 0
#define SPEECH_LENGTH 200
/*
static int s_swa_NBAudioFirCoef16K[29] = {-179,-151,300,824,601,-391,-845,209,1482,635,-2008,-2474,2407,10075,
13835,10075,2407,-2474,-2008,635,1482,209,-845,-391,601,824,300,-151,-179};
static int s_swa_AudioFirBuff[29];
*/
MCBSP_Handle hMcbsp0;
unsigned int g_uw_AdStartFlag = DEVICE_NOT_START;
Queue g_strc_EncQue;
unsigned int g_uwa_EncBuff[4][4];
unsigned int g_uw_DaStartFlag = DEVICE_NOT_START;
Queue g_strc_RcvQue;
unsigned int g_uwa_RcvBuff[32][8];
extern unsigned char g_uc_CfgAd7331Flg;
extern unsigned char g_uc_Ad7331RstFLg;
static unsigned int s_uw_ADSmpl = 0;
void AudioDAStart(void)
{
if (g_uw_DaStartFlag == DEVICE_NOT_START)
{
IRQ_clear(IRQ_EVT_XINT0);
g_uw_DaStartFlag = DEVICE_START;
hMcbsp0 = MCBSP_open(MCBSP_PORT0, MCBSP_OPEN_RESET);
MCBSP_config(hMcbsp0, &mcbspCfgAudio);
MCBSP_start(hMcbsp0, MCBSP_XMIT_START | MCBSP_SRGR_START | MCBSP_SRGR_FRAMESYNC, 0x0008);
IRQ_enable(IRQ_EVT_XINT0);
}
}
void AudioDAWr(int sw_XData)
{
MCBSP_write(hMcbsp0, sw_XData);
//MCBSP_write(hMcbsp0, i);
}
void AudioDAClose(void)
{
if (g_uw_DaStartFlag == DEVICE_START)
{
MCBSP_close(hMcbsp0);
IRQ_disable(IRQ_EVT_XINT0);
IRQ_clear(IRQ_EVT_XINT0);
g_uw_DaStartFlag = DEVICE_NOT_START;
}
}
short g_shwa_SendSig[512];
unsigned int g_uw_SendSmplCnt = 0;
static short s_shw_RcvSig;
void AudioDAIsr(void)
{
static unsigned short s_uhwa_AD73311Reg[12] =
{0, 0, 0, 0, 0x8111, 0x8279, 0x8300, 0x8001, 0, 0, 0, 0}; //{0x8111, 0x8279, 0x8300, 0x8001};
//{0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555};
static unsigned short s_uhw_CfgRegNo = 0;
static unsigned int s_uw_SendTestData = 0;
//定義一個數組,逐次寫入N個控制字;在寫入所有控制字之后,就將DA緩存的數據寫入DA芯片。
if (g_uc_CfgAd7331Flg == 0)
{
AudioDAWr(s_uhwa_AD73311Reg[s_uhw_CfgRegNo++]);
if (s_uhw_CfgRegNo == 12)
{
g_uc_CfgAd7331Flg = 1;
s_uhw_CfgRegNo = 0;
LOG_printf(&trace, "Config Over");
}
}
else
{
AudioDAWr(g_swa_DaSmpl[g_sw_DaSmplPingPongFlg][g_sw_DaSmplCnt]);
//AudioDAWr(s_uw_ADSmpl);
g_sw_DaSmplCnt++;
if (g_sw_DaSmplCnt >= 2 * SPEECH_LENGTH)
{
g_sw_DaSmplPingPongFlg ^= 0x1;
g_sw_DaSmplCnt = 0;
g_uw_Decoding = DECODE;
}
}
LOG_printf(&trace,"da copy");
}
void AudioADStart(void)
{
if (g_uw_AdStartFlag == DEVICE_NOT_START)
{
IRQ_clear(IRQ_EVT_RINT0);
g_uw_AdStartFlag = DEVICE_START;
hMcbsp0 = MCBSP_open(MCBSP_PORT0, MCBSP_OPEN_RESET);
MCBSP_config(hMcbsp0, &mcbspCfgAudio);
MCBSP_start(hMcbsp0, MCBSP_RCV_START | MCBSP_SRGR_START | MCBSP_SRGR_FRAMESYNC, 0x0008);
IRQ_enable(IRQ_EVT_RINT0);
LOG_printf(&trace, "Ad Cfg Over");
}
}
void AudioDuplexEnd(void)
{
if (g_uw_DaStartFlag == DEVICE_START)
{
MCBSP_close(hMcbsp0);
IRQ_disable(IRQ_EVT_XINT0);
IRQ_disable(IRQ_EVT_RINT0);
IRQ_clear(IRQ_EVT_XINT0);
IRQ_clear(IRQ_EVT_RINT0);
g_uw_DaStartFlag = DEVICE_NOT_START;
}
}
void AudioDuplexStart(void)
{
if (g_uw_AdStartFlag == DEVICE_NOT_START)
{
IRQ_clear(IRQ_EVT_RINT0);
IRQ_clear(IRQ_EVT_XINT0);
g_uw_AdStartFlag = DEVICE_START;
hMcbsp0 = MCBSP_open(MCBSP_PORT0, MCBSP_OPEN_RESET);
MCBSP_config(hMcbsp0, &mcbspCfgAudio);
MCBSP_start(hMcbsp0, MCBSP_RCV_START | MCBSP_XMIT_START|MCBSP_SRGR_START, 10);
IRQ_enable(IRQ_EVT_RINT0);
IRQ_enable(IRQ_EVT_XINT0);
}
}
int AudioADRd(void)
{
int sw_RcvData;
sw_RcvData = MCBSP_read(hMcbsp0);
return(sw_RcvData);
}
void AudioADClose(void)
{
if (g_uw_AdStartFlag == DEVICE_START)
{
MCBSP_close(hMcbsp0);
IRQ_disable(IRQ_EVT_RINT0);
IRQ_clear(IRQ_EVT_RINT0);
g_uw_AdStartFlag = DEVICE_NOT_START;
}
}
void AudioADIsr(void)
{
//g_swa_AdSmpl[g_sw_AdSmplPingPongFlg][g_sw_AdSmplCnt] = AudioADRd();
g_swa_AdSmpl[g_sw_AdSmplPingPongFlg][g_sw_AdSmplCnt] = g_swa_MatlabSinDataInput[g_sw_MatsinDataCnt++];
if(g_sw_MatsinDataCnt >= 99)
{
g_sw_MatsinDataCnt = 0;
}
g_sw_AdSmplCnt++;
if (g_sw_AdSmplCnt >= SPEECH_LENGTH)
{
g_sw_AdSmplPingPongFlg ^= 0x1;
g_sw_AdSmplCnt = 0;
g_uw_Encoding = ENCODE;
}
//LOG_printf(&trace,"here is ADISR");
}
//g_sw_AdSmplPingPongFlg 0 和 1 , 二維數組
void Ad7331Rst(void)
{
unsigned int i;
asm(" ssbx XF ");
for (i = 0; i < 10000; i++)
{
asm(" NOP ");
asm(" NOP ");
asm(" NOP ");
asm(" NOP ");
}
asm(" rsbx XF ");
for (i = 0; i < 60000; i++)
{
asm(" NOP ");
asm(" NOP ");
asm(" NOP ");
asm(" NOP ");
}
asm(" ssbx XF ");
for (i = 0; i < 10000; i++)
{
asm(" NOP ");
asm(" NOP ");
asm(" NOP ");
asm(" NOP ");
}
return;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -