#include "global.h" int sport1a_buf[2][NUM_SAMPLES*SLOTS]; int sport1b_buf[2][NUM_SAMPLES*SLOTS]; int sport0a_buf[2][NUM_SAMPLES*SLOTS]; int sport0b_buf[2][NUM_SAMPLES*SLOTS]; int sport2a_buf[2][NUM_SAMPLES*2]; int sport4a_buf[2][NUM_SAMPLES*2]; int sport5a_buf[2][NUM_SAMPLES*2]; //int xt[1024*1024]; //2 For ping-pong ,each TCB has four registers. int sport1a_tcb[2][4] = { {0, NUM_SAMPLES*SLOTS, 1, (int) sport1a_buf[0]}, {0, NUM_SAMPLES*SLOTS, 1, (int) sport1a_buf[1]} }; int sport1b_tcb[2][4] = { {0, NUM_SAMPLES*SLOTS, 1, (int) sport1b_buf[0]}, {0, NUM_SAMPLES*SLOTS, 1, (int) sport1b_buf[1]} }; ////TDM int sport0a_tcb[2][4] = { {0, NUM_SAMPLES*SLOTS, 1, (int) sport0a_buf[0]}, {0, NUM_SAMPLES*SLOTS, 1, (int) sport0a_buf[1]} }; int sport0b_tcb[2][4] = { {0, NUM_SAMPLES*SLOTS, 1, (int) sport0b_buf[0]}, {0, NUM_SAMPLES*SLOTS, 1, (int) sport0b_buf[1]} }; //usb int sport2a_tcb[2][4] = { {0, NUM_SAMPLES*2, 1, (int) sport2a_buf[0]}, {0, NUM_SAMPLES*2, 1, (int) sport2a_buf[1]} }; int sport4a_tcb[2][4] = { {0, NUM_SAMPLES*2, 1, (int) sport4a_buf[0]}, {0, NUM_SAMPLES*2, 1, (int) sport4a_buf[1]} }; int sport5a_tcb[2][4] = { {0, NUM_SAMPLES*2, 1, (int) sport5a_buf[0]}, {0, NUM_SAMPLES*2, 1, (int) sport5a_buf[1]} }; /* sport 0,2 TDMÊä³ö sport 1,3 TDMÊäÈë sport 4 i2s Êä³ö sport 5, i2s ÊäÈë sport 6 tdmÊä³ö sport 7 tdmÊäÈë */ void InitSPORT(int mask,int sampleRate) { int i; int fs_div = MCLK/RATE_SAMPLES; int sclk_div = MCLK/(RATE_SAMPLES*32*SLOTS); int sclk_div_48k = MCLK/(RATE_SAMPLES*32*2); int reg; /* External clock and frame syncs generated by AD1939 */ *pDIV0 = 0x00000000; // Transmitter (SPORT0) *pDIV1 = 0x00000000; // Receiver (SPORT1) at 12.288 MHz SCLK and 48 kHz sample rate sport0a_tcb[0][0]= ((int)sport0a_tcb[1] + 3)&0x7ffff | (1<<19); sport0a_tcb[1][0]= ((int)sport0a_tcb[0] + 3)&0x7ffff | (1<<19); sport0b_tcb[0][0]= ((int)sport0b_tcb[1] + 3)&0x7ffff | (1<<19); sport0b_tcb[1][0]= ((int)sport0b_tcb[0] + 3)&0x7ffff | (1<<19); sport1a_tcb[0][0]= ((int)sport1a_tcb[1] + 3)&0x7ffff | (1<<19); sport1a_tcb[1][0]= ((int)sport1a_tcb[0] + 3)&0x7ffff | (1<<19); sport1b_tcb[0][0]= ((int)sport1b_tcb[1] + 3)&0x7ffff | (1<<19); sport1b_tcb[1][0]= ((int)sport1b_tcb[0] + 3)&0x7ffff | (1<<19); sport2a_tcb[0][0]= ((int)sport2a_tcb[1] + 3)&0x7ffff | (1<<19); sport2a_tcb[1][0]= ((int)sport2a_tcb[0] + 3)&0x7ffff | (1<<19); sport4a_tcb[0][0]= ((int)sport4a_tcb[1] + 3)&0x7ffff | (1<<19); sport4a_tcb[1][0]= ((int)sport4a_tcb[0] + 3)&0x7ffff | (1<<19); sport5a_tcb[0][0]= ((int)sport5a_tcb[1] + 3)&0x7ffff | (1<<19); sport5a_tcb[1][0]= ((int)sport5a_tcb[0] + 3)&0x7ffff | (1<<19); *pSPCTL0 = *pSPCTL1 = *pSPCTL2=*pSPCTL4=*pSPCTL5=0; *pSPMCTL0 = *pSPMCTL1=*pSPMCTL2=*pSPMCTL4=*pSPMCTL5=0; *pSPCTLN0 =*pSPCTLN1=*pSPCTLN2=*pSPCTLN4=*pSPCTLN5=0; *pCPSP0A = sport0a_tcb[0][0]; *pCPSP0B = sport0b_tcb[0][0]; *pCPSP1A = sport1a_tcb[0][0]; *pCPSP1B = sport1b_tcb[0][0]; //usb *pCPSP2A = sport2a_tcb[0][0]; *pCPSP4A = sport4a_tcb[0][0]; *pCPSP5A = sport5a_tcb[0][0]; //*pSPCTL2 = (OPMODE | SLEN32 | SPEN_A | SCHEN_A | SDEN_A |LFS |CKRE); *pSPCTL5 = (OPMODE | SLEN32 | SPEN_A | SCHEN_A | SDEN_A |LFS |CKRE); *pSPCTL4 = (SPTRAN| OPMODE | SLEN32 | SPEN_A | SCHEN_A | SDEN_A |LFS |CKRE);//output //iis //*pSPCTL1 = (SPTRAN| OPMODE | SLEN32 | SPEN_A | SCHEN_A | SDEN_A); //usb send reg = ( SLEN32 | SCHEN_A | SDEN_A | SCHEN_B | SDEN_B |FSR |CKRE); *pSPCTL1 = reg; //tdm reg = (SPTRAN| SLEN32 | SCHEN_A | SDEN_A | SCHEN_B | SDEN_B |FSR |CKRE ); *pSPCTL0 = reg; *pSP0CS0 = *pSP1CS0 = 0x000000ff; //*pMT0CCS0 = 0; *pSPMCTL0 = *pSPMCTL1 = (NCH7 | MFD1 |MCEA |MCEB); //tdm if(1) { int n,r0 ; *pPCG_CTLA1 =0 ; *pPCG_CTLA0 =0; for (n=0; n<16; n++)asm("NOP;"); r0 = sclk_div | CLKASOURCE | FSASOURCE; *pPCG_CTLA1 = r0 ; r0 = fs_div | ENFSA | ENCLKA ; *pPCG_CTLA0 = r0; //bypass mode PCGB , get invert sclk *pPCG_CTLB1 =0 ; *pPCG_CTLB0 =0; for (n=0; n<16; n++)asm("NOP;"); *pPCG_PW1 = 2| INVFSB ; r0 = sclk_div | CLKBSOURCE | FSBSOURCE; *pPCG_CTLB1 = r0 ; r0 = ENFSB | ENCLKB ; *pPCG_CTLB0 = r0; } //iis if(1) { int n,r0 ; *pPCG_CTLC1 =0 ; *pPCG_CTLC0 =0; for (n=0; n<16; n++)asm("NOP;"); //*pPCG_PW1 =1; //*pPCG_PW2 = STROBEA| INVFSA; r0 = sclk_div_48k| CLKCSOURCE | FSCSOURCE | ((sclk_div_48k/2)<<20); *pPCG_CTLC1 = r0 ; r0 = fs_div | ENFSC | ENCLKC ; *pPCG_CTLC0 = r0; } }