#include "global.h" #include asm("#include "); 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 ; }