//C6xdskinit.c Init DSK,AD535,McBSP(includes functions provided with DSK) #include #include "c6xdsk.h" #include "c6xdskinit.h" #include "c6xinterrupts.h" char polling = 0; void mcbsp0_init() //set up McBSP0 { *(unsigned volatile int *)McBSP0_SPCR = 0; //reset serial port *(unsigned volatile int *)McBSP0_PCR = 0; //set pin control reg *(unsigned volatile int *)McBSP0_RCR = 0x10040; //set rx control reg one 16 bit data/frame *(unsigned volatile int *)McBSP0_XCR = 0x10040; //set tx control reg one 16 bit data/frame *(unsigned volatile int *)McBSP0_DXR = 0; *(unsigned volatile int *)McBSP0_SPCR = 0x12001;//setup SP control reg } void mcbsp0_write(int out_data) //function for writing { int temp; if (polling) //bypass if interrupt-driven { temp = *(unsigned volatile int *)McBSP0_SPCR & 0x20000; while ( temp == 0) temp = *(unsigned volatile int *)McBSP0_SPCR & 0x20000; } *(unsigned volatile int *)McBSP0_DXR = out_data; } int mcbsp0_read() //function for reading { int temp; if (polling) { temp = *(unsigned volatile int *)McBSP0_SPCR & 0x2; while ( temp == 0) temp = *(unsigned volatile int *)McBSP0_SPCR & 0x2; } temp = *(unsigned volatile int *)McBSP0_DRR; return temp; } void TLC320AD535_Init() //init AD535 { mcbsp0_read(); //setting up AD535 Register 3 mcbsp0_write(0); mcbsp0_read(); mcbsp0_write(0); mcbsp0_read(); mcbsp0_write(0); mcbsp0_read(); mcbsp0_write(1); //send bit for Secondary Communications mcbsp0_read(); mcbsp0_write(0x0386); //voice channel reset,pre-amps selected mcbsp0_read(); mcbsp0_write(0); //clear Secondary Communications mcbsp0_read(); mcbsp0_write(0); mcbsp0_read(); mcbsp0_write(0); mcbsp0_read(); mcbsp0_write(1); //send bit for Secondary Communications mcbsp0_read(); mcbsp0_write(0x0306); //voice channel clear reset,pre-amps selected mcbsp0_read(); mcbsp0_write(0); //clear Secondary Communications mcbsp0_read(); mcbsp0_write(0); //setting up AD535 Register 4 mcbsp0_read(); mcbsp0_write(0); mcbsp0_read(); mcbsp0_write(1); mcbsp0_read(); mcbsp0_write(0x0400); //set microphone pre-amp gain to 20 dB mcbsp0_read(); mcbsp0_write(0); mcbsp0_read(); mcbsp0_write(0); //setting up AD535 Register 5 mcbsp0_read(); mcbsp0_write(0); mcbsp0_read(); mcbsp0_write(1); mcbsp0_read(); mcbsp0_write(0x0502); //DAC PGA = 0 dB mcbsp0_read(); mcbsp0_write(0); mcbsp0_read(); } void c6x_dsk_init() //dsp and peripheral init { CSR=0x100; //disable all interrupts IER=1; //disable interrupts except NMI ICR=0xffff; //clear pending interrupts *(unsigned volatile int *)EMIF_GCR = 0x3300; //EMIF global control *(unsigned volatile int *)EMIF_CE0 = 0x30; //EMIF CE0 control *(unsigned volatile int *)EMIF_CE1 = 0xffffff03; //EMIF CE1 control,8bit async *(unsigned volatile int *)EMIF_SDCTRL = 0x07117000; //EMIF SDRAM control *(unsigned volatile int *)EMIF_SDRP = 0x61a; //EMIF SDRM refresh period *(unsigned volatile int *)EMIF_SDEXT = 0x54519; //EMIF SDRAM extension mcbsp0_init(); TLC320AD535_Init(); } void comm_poll() //for communication/init using polling { polling = 1; //if polling c6x_dsk_init(); //call init DSK function } void comm_intr() //for communication/init using interrupt { polling = 0; //if interrupt-driven c6x_dsk_init(); //call init DSK function config_Interrupt_Selector(11, XINT0); //using transmit interrupt INT11 enableSpecificINT(11); //for specific interrupt enableNMI(); //enable NMI enableGlobalINT(); //enable GIE for global interrupt mcbsp0_write(0); //write to SP0 } void output_sample(int out_data) //added for output { mcbsp0_write(out_data & 0xfffe); //mask out LSB } int input_sample() //added for input { return mcbsp0_read(); //read from McBSP0 }