hey folks ! i'm a student and have to connect two and more TMS320C6711-DSPs, but have work with DSPs never before. now i have a simple program to output a sinewave to the AD535-DAC, and my problem is to find the funtion, which calls the ISR "c_int11 ()"-funtion in "sine8_intr.c". it have to be somewhere in the "comm_intr()"-funtion in "c6xdskinit.c" but there are many interrupt-routines and find no "c_int11"-function-call :( can anybody help me ?? ----------sine8intr.c------------- //sine8_intr.c Sine generation using 8 points, f=Fs/(# of points) //Comm routines and support files included in C6xdskinit.c short loop = 0; short sin_table[8] = {0,707,1000,707,0,-707,-1000,-707}; //sine values short amplitude = 10; //gain factor interrupt void c_int11() //interrupt service routine { output_sample(sin_table[loop]*amplitude); //output each sine value if (loop < 7) ++loop; //increment index loop else loop = 0; //reinit index @ end of buffer return; //return from interrupt } void main() { comm_intr(); //init DSK, codec, McBSP while(1); //infinite loop } -------------------------------END------------------ -------------c6xdskinit.c----------------------------- //C6xdskinit.c Init DSK,AD535,McBSP(includes functions provided with DSK) #include <c6x.h> #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 } -------------------------END--------------------- -----------------------C6xinterrupts.c--------------- //C6xinterrupts.c Provided by TI #define DSPINT 0x0 /* 00000b DSPINT Host port host to DSP interrupt */ #define TINT0 0x1 /* 00001b TINT0 Timer 0 interrupt */ #define TINT1 0x2 /* 00010b TINT1 Timer 1 interrupt */ #define SD_INT 0x3 /* 00011b SD_INT EMIF SDRAM timer interrupt */ #define EXT_INT4 0x4 /* 00100b EXT_INT4 External interrupt 4 */ #define EXT_INT5 0x5 /* 00101b EXT_INT5 External interrupt 5 */ #define EXT_INT6 0x6 /* 00110b EXT_INT6 External interrupt 6 */ #define EXT_INT7 0x7 /* 00111b EXT_INT7 External interrupt 7 */ #define EDMA_INT 0x8 /* 01000b EDMA_INT EDMA channel (0 through 15) interrupt */ #define XINT0 0xC /* 01100b XINT0 McBSP 0 transmit interrupt */ #define RINT0 0xD /* 01101b RINT0 McBSP 0 receive interrupt */ #define XINT1 0xE /* 01110b XINT1 McBSP 1 transmit interrupt */ #define RINT1 0xF /* 01111b RINT1 McBSP 1 receive interrupt */ /********************************************************* * Interrupt Initialization Functions * * (CSR and IER are CPU registers defined in c6x.h) * *********************************************************/ /* Enable Interrupts Globally (set GIE bit in CSR = 1) */ void enableGlobalINT(void) { CSR |= 0x1; } /* Enable NMI (non-maskable interrupt); must be enabled * or no other interrupts can be recognized by 'C6000 CPU */ void enableNMI(void) { IER = _set(IER, 1, 1); } /* Enable a specific interrupt; * (INTnumber = {4,5,6,...,15}) */ void enableSpecificINT(int INTnumber) { IER = _set(IER, INTnumber, INTnumber); } /********************************************************* * C6000 devices have hardware configurable interrupts. * To use the McBSP interrupts you must configure them since * they are selected by default. * You must set the appropriate interrupt select bits in the * IML and IMH memory-mapped int select registers. * IML and IMH addresses are defined in c6211dsk.h. *********************************************************/ void config_Interrupt_Selector(int INTnumber, int INTsource) { /* INTnumber = {4,5,6,...,15} INTsource = see #define list above */ union { struct { unsigned int INTSEL4 : 5; unsigned int INTSEL5 : 5; unsigned int INTSEL6 : 5; unsigned int rsvbit15 : 1; unsigned int INTSEL7 : 5; unsigned int INTSEL8 : 5; unsigned int INTSEL9 : 5; unsigned int rsvbit31 : 1; }exp; unsigned int reg; }IMLvalue; /* = {0,0,0,0,0,0,0,0}; */ union { unsigned int reg; struct { unsigned int INTSEL10 : 5; unsigned int INTSEL11 : 5; unsigned int INTSEL12 : 5; unsigned int rsvbit15 : 1; unsigned int INTSEL13 : 5; unsigned int INTSEL14 : 5; unsigned int INTSEL15 : 5; unsigned int rsvbit31 : 1; }exp; }IMHvalue; IMLvalue.reg = *(unsigned volatile int *)IML; IMHvalue.reg = *(unsigned volatile int *)IMH; switch (INTnumber) { case 4 : IMLvalue.exp.INTSEL4 = INTsource; break; case 5 : IMLvalue.exp.INTSEL5 = INTsource; break; case 6 : IMLvalue.exp.INTSEL6 = INTsource; break; case 7 : IMLvalue.exp.INTSEL7 = INTsource; break; case 8 : IMLvalue.exp.INTSEL8 = INTsource; break; case 9 : IMLvalue.exp.INTSEL9 = INTsource; break; case 10 : IMHvalue.exp.INTSEL10 = INTsource; break; case 11 : IMHvalue.exp.INTSEL11 = INTsource; break; case 12 : IMHvalue.exp.INTSEL12 = INTsource; break; case 13 : IMHvalue.exp.INTSEL13 = INTsource; break; case 14 : IMHvalue.exp.INTSEL14 = INTsource; break; case 15 : IMHvalue.exp.INTSEL15 = INTsource; break; default : break; } *(unsigned volatile int *)IML = IMLvalue.reg; *(unsigned volatile int *)IMH = IMHvalue.reg; return; } ----------------END-------------------- |
question: where is the output-funtion ??
Started by ●June 15, 2003