#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;
|
|
}
|
|
|
}
|