|
#include "global.h"
|
#include <sru.h>
|
|
asm("#include <def21489.h>");
|
|
void clearDAIpins(void)
|
{
|
//------------------------------------------------------------------------
|
// Tie the pin buffer inputs LOW for all DAI pins. Even though
|
// these pins are inputs to the SHARC, tying unused pin buffer inputs
|
// LOW is "good coding style" to eliminate the possibility of
|
// termination artifacts internal to the IC. Note that signal
|
// integrity is degraded only with a few specific SRU combinations.
|
// In practice, this occurs VERY rarely, and these connections are
|
// typically unnecessary. This is GROUP D
|
SRU(LOW, DAI_PB01_I);
|
SRU(LOW, DAI_PB02_I);
|
SRU(LOW, DAI_PB03_I);
|
SRU(LOW, DAI_PB04_I);
|
SRU(LOW, DAI_PB05_I);
|
SRU(LOW, DAI_PB06_I);
|
SRU(LOW, DAI_PB07_I);
|
SRU(LOW, DAI_PB08_I);
|
SRU(LOW, DAI_PB09_I);
|
SRU(LOW, DAI_PB10_I);
|
SRU(LOW, DAI_PB11_I);
|
SRU(LOW, DAI_PB12_I);
|
SRU(LOW, DAI_PB13_I);
|
SRU(LOW, DAI_PB14_I);
|
SRU(LOW, DAI_PB15_I);
|
SRU(LOW, DAI_PB16_I);
|
SRU(LOW, DAI_PB17_I);
|
SRU(LOW, DAI_PB18_I);
|
SRU(LOW, DAI_PB19_I);
|
SRU(LOW, DAI_PB20_I);
|
|
//------------------------------------------------------------------------
|
// Tie the pin buffer enable inputs LOW for all DAI pins so
|
// that they are always input pins. This is GROUP F.
|
SRU(LOW, PBEN01_I);
|
SRU(LOW, PBEN02_I);
|
SRU(LOW, PBEN03_I);
|
SRU(LOW, PBEN04_I);
|
SRU(LOW, PBEN05_I);
|
SRU(LOW, PBEN06_I);
|
SRU(LOW, PBEN07_I);
|
SRU(LOW, PBEN08_I);
|
SRU(LOW, PBEN09_I);
|
SRU(LOW, PBEN10_I);
|
SRU(LOW, PBEN11_I);
|
SRU(LOW, PBEN12_I);
|
SRU(LOW, PBEN13_I);
|
SRU(LOW, PBEN14_I);
|
SRU(LOW, PBEN15_I);
|
SRU(LOW, PBEN16_I);
|
SRU(LOW, PBEN17_I);
|
SRU(LOW, PBEN18_I);
|
SRU(LOW, PBEN19_I);
|
SRU(LOW, PBEN20_I);
|
}
|
|
|
|
void InitDAI()
|
{
|
clearDAIpins();
|
}
|
|
void aud_clk_generate(void)
|
{
|
SRU(HIGH, PBEN18_I);
|
SRU(DAI_PB03_O,DAI_PB18_I); //MCLK
|
|
SRU(DAI_PB03_O,PCG_EXTA_I);
|
|
SRU(PCG_CLKA_O,PCG_EXTB_I);
|
|
SRU(HIGH, PBEN16_I); //clk
|
SRU(PCG_FSB_O,DAI_PB16_I);
|
|
SRU(HIGH, PBEN14_I); //fs
|
SRU(PCG_FSA_O,DAI_PB14_I);
|
}
|
|
|
void DAI_map(void)
|
{
|
//analog in
|
SRU(DAI_PB01_O , SPORT1_DA_I);
|
SRU(DAI_PB19_O , SPORT1_DB_I);
|
|
|
//---dante in --
|
SRU(DAI_PB13_O, SPORT3_DA_I);
|
SRU(DAI_PB07_O, SPORT3_DB_I);
|
|
//usb
|
}
|
|
|
void USB_pinmap(int dual_dsp, int dsp_index)
|
{
|
extern int usb_master;
|
if(usb_master){
|
SRU(DAI_PB06_O,SPORT4_CLK_I);
|
SRU(DAI_PB05_O,SPORT4_FS_I);
|
SRU(DAI_PB06_O,SPORT5_CLK_I);
|
SRU(DAI_PB05_O,SPORT5_FS_I);
|
|
if(dsp_index == 0 ){
|
if(dual_dsp == 0){
|
SRU(DAI_PB09_O, SPORT5_DA_I);//input
|
|
SRU(HIGH, PBEN17_I);
|
SRU(SPORT4_DA_O, DAI_PB17_I);
|
|
//usb audio
|
SRU(HIGH, PBEN06_I);
|
SRU(HIGH, PBEN05_I);
|
SRU(PCG_CLKC_O,DAI_PB06_I);
|
SRU(PCG_FSC_O,DAI_PB05_I);
|
SRU(DAI_PB18_O,PCG_EXTC_I); //MCLK
|
}
|
else{
|
SRU(DAI_PB09_O, SPORT5_DA_I); //do , dsp input
|
|
SRU(HIGH, PBEN17_I);
|
SRU(SPORT6_DA_O, DAI_PB17_I); //di, dsp output tdm
|
}
|
}
|
else{
|
SRU(DAI_PB09_O, SPORT7_DA_I);//tdm input
|
//
|
SRU(HIGH, PBEN17_I);
|
SRU(SPORT4_DA_O, DAI_PB17_I); //i2s output
|
}
|
|
return;
|
}
|
|
SRU(HIGH, PBEN02_I);
|
SRU(HIGH, PBEN11_I);
|
SRU(PCG_CLKC_O,DAI_PB02_I);
|
SRU(PCG_FSC_O,DAI_PB11_I);
|
SRU(DAI_PB18_O,PCG_EXTC_I); //MCLK
|
|
if(dual_dsp ){
|
if(dsp_index ==0){
|
|
SRU(HIGH, PBEN17_I);
|
SRU(SPORT6_DA_O, DAI_PB17_I); //di, dsp output tdm
|
|
//usb
|
SRU(DAI_PB06_O,SRC0_CLK_IP_I);
|
SRU(DAI_PB05_O,SRC0_FS_IP_I);
|
SRU(DAI_PB09_O,SRC0_DAT_IP_I);
|
|
SRU(DAI_PB02_O,SRC0_CLK_OP_I);
|
SRU(DAI_PB02_O,SPORT5_CLK_I);
|
SRU(DAI_PB11_O,SRC0_FS_OP_I);
|
SRU(DAI_PB11_O,SPORT5_FS_I);
|
|
SRU(SRC0_DAT_OP_O,SPORT5_DA_I);
|
}
|
if(dsp_index == 1){
|
SRU(DAI_PB09_O, SPORT7_DA_I);//tdm input
|
|
//usb
|
SRU(DAI_PB11_O,SPORT5_FS_I);
|
SRU(DAI_PB02_O,SPORT5_CLK_I);
|
|
SRU(DAI_PB02_O,SPORT4_CLK_I);
|
SRU(DAI_PB11_O,SPORT4_FS_I);
|
SRU(DAI_PB02_O,SRC1_CLK_IP_I);
|
SRU(DAI_PB11_O,SRC1_FS_IP_I);
|
SRU(SPORT4_DA_O,SRC1_DAT_IP_I);
|
|
SRU(DAI_PB06_O,SRC1_CLK_OP_I);
|
SRU(DAI_PB05_O,SRC1_FS_OP_I);
|
|
SRU(HIGH, PBEN17_I);
|
SRU(SRC1_DAT_OP_O,DAI_PB17_I);
|
}
|
}
|
else{
|
//sport 4 for usb output, sport 5 for usb input.
|
SRU(DAI_PB06_O,SRC0_CLK_IP_I);
|
SRU(DAI_PB05_O,SRC0_FS_IP_I);
|
SRU(DAI_PB09_O,SRC0_DAT_IP_I);
|
|
SRU(DAI_PB02_O,SRC0_CLK_OP_I);
|
SRU(DAI_PB02_O,SPORT5_CLK_I);
|
SRU(DAI_PB11_O,SRC0_FS_OP_I);
|
SRU(DAI_PB11_O,SPORT5_FS_I);
|
|
SRU(SRC0_DAT_OP_O,SPORT5_DA_I);
|
|
//usb output.
|
SRU(DAI_PB02_O,SPORT4_CLK_I);
|
SRU(DAI_PB11_O,SPORT4_FS_I);
|
SRU(DAI_PB02_O,SRC1_CLK_IP_I);
|
SRU(DAI_PB11_O,SRC1_FS_IP_I);
|
SRU(SPORT4_DA_O,SRC1_DAT_IP_I);
|
|
SRU(DAI_PB06_O,SRC1_CLK_OP_I);
|
SRU(DAI_PB05_O,SRC1_FS_OP_I);
|
|
SRU(HIGH, PBEN17_I);
|
SRU(SRC1_DAT_OP_O,DAI_PB17_I);
|
|
}
|
}
|
|
void AudioConfigRule(int dual_dsp, int dsp_index, int extern_clock)
|
{
|
SRU(DAI_PB16_O, SPORT0_CLK_I);
|
SRU(DAI_PB16_O, SPORT1_CLK_I);
|
SRU(DAI_PB16_O, SPORT2_CLK_I);
|
SRU(DAI_PB16_O, SPORT3_CLK_I);
|
SRU(DAI_PB16_O, SPORT6_CLK_I);
|
SRU(DAI_PB16_O, SPORT7_CLK_I);
|
|
SRU(DAI_PB14_O, SPORT0_FS_I);
|
SRU(DAI_PB14_O, SPORT1_FS_I);
|
SRU(DAI_PB14_O, SPORT2_FS_I);
|
SRU(DAI_PB14_O, SPORT3_FS_I);
|
SRU(DAI_PB14_O, SPORT6_FS_I);
|
SRU(DAI_PB14_O, SPORT7_FS_I);
|
|
//input
|
SRU(DAI_PB07_O, SPORT1_DA_I);
|
SRU(DAI_PB13_O, SPORT1_DB_I);
|
SRU(DAI_PB19_O, SPORT3_DA_I);
|
SRU(DAI_PB01_O, SPORT3_DB_I);
|
|
|
//output
|
SRU(HIGH, PBEN10_I);
|
SRU(SPORT0_DA_O, DAI_PB10_I);
|
SRU(HIGH, PBEN20_I);
|
SRU(SPORT0_DB_O, DAI_PB20_I);
|
SRU(HIGH, PBEN08_I);
|
SRU(SPORT2_DA_O, DAI_PB08_I);
|
SRU(HIGH, PBEN04_I);
|
SRU(SPORT2_DB_O, DAI_PB04_I);
|
|
|
if(dsp_index ==1){
|
DAI_map();
|
}
|
|
if(dsp_index ==0 && extern_clock ==0 ){
|
aud_clk_generate();
|
}
|
|
USB_pinmap(dual_dsp , dsp_index);
|
}
|
|
/***************************NX****************************/
|
|
void UsbConfigNx(int dual_dsp, int dsp_index, int master)
|
{
|
if(master){
|
//USB
|
SRU(DAI_PB12_O, SPORT4_CLK_I);
|
SRU(DAI_PB12_O, SPORT5_CLK_I);
|
|
SRU(DAI_PB15_O, SPORT4_FS_I);
|
SRU(DAI_PB15_O, SPORT5_FS_I);
|
|
if(dsp_index == 0){
|
//usb input
|
SRU(DAI_PB11_O, SPORT5_DA_I);
|
|
//USB AUTOMIXER AEC
|
if(dual_dsp){
|
SRU(HIGH, PBEN05_I);
|
SRU(SPORT6_DA_O, DAI_PB05_I);
|
}
|
else{
|
//usb output
|
SRU(HIGH, PBEN05_I);
|
SRU(SPORT4_DA_O, DAI_PB05_I);
|
}
|
|
//USB CLOCK
|
SRU(HIGH, PBEN12_I);
|
SRU(HIGH, PBEN15_I);
|
SRU(PCG_CLKC_O,DAI_PB12_I);
|
SRU(PCG_FSC_O,DAI_PB15_I);
|
SRU(DAI_PB06_O,PCG_EXTC_I);//MCLK
|
}
|
else{
|
//usb output
|
SRU(HIGH, PBEN11_I);
|
SRU(SPORT4_DA_O, DAI_PB11_I);
|
|
//USB AUTOMIXER AEC
|
SRU(DAI_PB05_O, SPORT7_DA_I);
|
}
|
}
|
else{
|
if(dsp_index == 0){
|
//USB AUTOMIXER AEC
|
if(dual_dsp){
|
SRU(HIGH, PBEN05_I);
|
SRU(SPORT6_DA_O, DAI_PB05_I);
|
|
//usb
|
SRU(DAI_PB12_O,SRC0_CLK_IP_I);
|
SRU(DAI_PB15_O,SRC0_FS_IP_I);
|
SRU(DAI_PB11_O,SRC0_DAT_IP_I);
|
|
SRU(DAI_PB18_O,SRC0_CLK_OP_I);
|
SRU(DAI_PB18_O,SPORT5_CLK_I);
|
SRU(DAI_PB04_O,SRC0_FS_OP_I);
|
SRU(DAI_PB04_O,SPORT5_FS_I);
|
|
SRU(SRC0_DAT_OP_O,SPORT5_DA_I);
|
}
|
else{
|
//sport 4 for usb output, sport 5 for usb input.
|
SRU(DAI_PB12_O,SRC0_CLK_IP_I);
|
SRU(DAI_PB15_O,SRC0_FS_IP_I);
|
SRU(DAI_PB11_O,SRC0_DAT_IP_I);
|
|
SRU(DAI_PB18_O,SRC0_CLK_OP_I);
|
SRU(DAI_PB18_O,SPORT5_CLK_I);
|
SRU(DAI_PB04_O,SRC0_FS_OP_I);
|
SRU(DAI_PB04_O,SPORT5_FS_I);
|
|
SRU(SRC0_DAT_OP_O,SPORT5_DA_I);
|
|
//usb output.
|
SRU(DAI_PB18_O,SPORT4_CLK_I);
|
SRU(DAI_PB04_O,SPORT4_FS_I);
|
SRU(DAI_PB18_O,SRC1_CLK_IP_I);
|
SRU(DAI_PB04_O,SRC1_FS_IP_I);
|
SRU(SPORT4_DA_O,SRC1_DAT_IP_I);
|
|
SRU(DAI_PB12_O,SRC1_CLK_OP_I);
|
SRU(DAI_PB15_O,SRC1_FS_OP_I);
|
|
SRU(HIGH, PBEN05_I);
|
SRU(SRC1_DAT_OP_O,DAI_PB05_I);
|
}
|
}
|
else{
|
SRU(DAI_PB05_O, SPORT7_DA_I);//tdm input
|
|
//usb
|
SRU(DAI_PB04_O,SPORT5_FS_I);
|
SRU(DAI_PB18_O,SPORT5_CLK_I);
|
|
SRU(DAI_PB18_O,SPORT4_CLK_I);
|
SRU(DAI_PB04_O,SPORT4_FS_I);
|
SRU(DAI_PB18_O,SRC1_CLK_IP_I);
|
SRU(DAI_PB04_O,SRC1_FS_IP_I);
|
SRU(SPORT4_DA_O,SRC1_DAT_IP_I);
|
|
SRU(DAI_PB12_O,SRC1_CLK_OP_I);
|
SRU(DAI_PB15_O,SRC1_FS_OP_I);
|
|
SRU(HIGH, PBEN11_I);
|
SRU(SRC1_DAT_OP_O,DAI_PB11_I);
|
}
|
|
//USB CLOCK
|
SRU(HIGH, PBEN18_I);
|
SRU(HIGH, PBEN04_I);
|
SRU(PCG_CLKC_O,DAI_PB18_I);
|
SRU(PCG_FSC_O,DAI_PB04_I);
|
SRU(DAI_PB06_O,PCG_EXTC_I);//MCLK
|
}
|
}
|
|
void AudioConfigNx(int dual_dsp, int dsp_index, int usb_master)
|
{
|
/***************AUDIO ROUTE****************/
|
//ANALOG
|
SRU(DAI_PB19_O, SPORT0_CLK_I);
|
SRU(DAI_PB19_O, SPORT1_CLK_I);
|
SRU(DAI_PB19_O, SPORT6_CLK_I);
|
SRU(DAI_PB19_O, SPORT7_CLK_I);
|
|
SRU(DAI_PB20_O, SPORT0_FS_I);
|
SRU(DAI_PB20_O, SPORT1_FS_I);
|
SRU(DAI_PB20_O, SPORT6_FS_I);
|
SRU(DAI_PB20_O, SPORT7_FS_I);
|
|
|
//DANTE
|
SRU(DAI_PB13_O, SPORT2_CLK_I);
|
SRU(DAI_PB13_O, SPORT3_CLK_I);
|
|
SRU(DAI_PB03_O, SPORT2_FS_I);
|
SRU(DAI_PB03_O, SPORT3_FS_I);
|
|
//DATA
|
if(dsp_index == 0){
|
//analog input
|
SRU(DAI_PB17_O, SPORT1_DA_I);
|
SRU(DAI_PB16_O, SPORT1_DB_I);
|
|
//analog output
|
SRU(HIGH, PBEN09_I);
|
SRU(SPORT0_DA_O, DAI_PB09_I);
|
SRU(HIGH, PBEN14_I);
|
SRU(SPORT0_DB_O, DAI_PB14_I);
|
|
//dante input
|
SRU(DAI_PB02_O, SPORT3_DA_I);
|
SRU(DAI_PB01_O, SPORT3_DB_I);
|
|
//dante output
|
SRU(HIGH, PBEN08_I);
|
SRU(SPORT2_DA_O, DAI_PB08_I);
|
SRU(HIGH, PBEN10_I);
|
SRU(SPORT2_DB_O, DAI_PB10_I);
|
}
|
else{
|
//analog input
|
SRU(DAI_PB09_O, SPORT1_DA_I);
|
SRU(DAI_PB14_O, SPORT1_DB_I);
|
|
//analog output
|
SRU(HIGH, PBEN17_I);
|
SRU(SPORT0_DA_O, DAI_PB17_I);
|
SRU(HIGH, PBEN16_I);
|
SRU(SPORT0_DB_O, DAI_PB16_I);
|
|
//dante input
|
SRU(DAI_PB08_O, SPORT3_DA_I);
|
SRU(DAI_PB10_O, SPORT3_DB_I);
|
|
//dante output
|
SRU(HIGH, PBEN02_I);
|
SRU(SPORT2_DA_O, DAI_PB02_I);
|
SRU(HIGH, PBEN01_I);
|
SRU(SPORT2_DB_O, DAI_PB01_I);
|
}
|
/******************************************/
|
|
/******************CLOCK*******************/
|
if(dsp_index == 0){
|
//ADC CLOCK
|
SRU(DAI_PB06_O,PCG_EXTA_I);//MCLK
|
SRU(PCG_CLKA_O,PCG_EXTB_I);
|
SRU(HIGH, PBEN19_I); //clk
|
SRU(PCG_FSB_O,DAI_PB19_I);
|
SRU(HIGH, PBEN20_I); //fs
|
SRU(PCG_FSA_O,DAI_PB20_I);
|
}
|
/*******************************************/
|
|
/**********************USB**********************/
|
UsbConfigNx(dual_dsp, dsp_index, usb_master);
|
/***********************************************/
|
}
|
|
|
|
void InitSRC(void)
|
{
|
|
//============================================================
|
//
|
// Configure SRC Control Register (SRCCTL0).
|
//
|
// SRC1_IN_I2S : SRC1 Serial Input Format= I2S mode
|
// SRC1_OUT_I2S: SRC1 Serial Output Format= I2S mode
|
// SRC1_OUT_24 : Output Word Length= 24 bits
|
//------------------------------------------------------------
|
*pSRCCTL0 = SRC0_IN_I2S | SRC0_OUT_I2S | SRC0_OUT_24 | SRC1_IN_I2S | SRC1_OUT_I2S | SRC1_OUT_24;
|
//*pSRCCTL0 = SRC0_IN_LJ | SRC0_OUT_LJ | SRC0_OUT_24 |SRC1_IN_LJ | SRC1_OUT_LJ | SRC1_OUT_24;
|
// Enable SRC1 in a different cycle than setting the configuration
|
*pSRCCTL0 |= SRC0_ENABLE|SRC1_ENABLE;
|
//*pSRCCTL0 = SRC0_SMODEIN0 | SRC0_SMODEOUT0 | SRC0_ENABLE ;
|
}
|