DSPRelated.com
Forums

question: where is the output-funtion ??

Started by olaf636 June 15, 2003
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--------------------