#include "inoutcfg.h"
#include <csl.h>
#include "regs.h"
#include "c6211dsk.h"
#include <c6x.h>
#include <csl_irq.h>
#include <csl_mcbsp.h>
#include <csl_timer.h>
#include <csl_edma.h>
#include <csl_cache.h>
void InoutIsr (void);
void mcbsp0_init();
void mcbsp0_write(int out_data);
int mcbsp0_read();
extern int codec();
void start_timer1();
#define FCPU 150000000 /* CPU clock frequency */
#define SRATE 8000 /* Data sample rate (simulated w/timer */
#define TPRD (FCPU/(4*2*SRATE)) /* Timer period, using the clock mode */
#pragma CODE_SECTION(InoutIsr, "mycode"); /* Makes the program run from internal memory */
short h[8]={0,0,0,0,0,0,0,0};
short X[8]={0,0,0,0,0,0,0,0};
int Y=0;
int E=0;
TIMER_Handle hTimer; /* Handle for the timer device */
void main(void)
{
mcbsp0_init(); /* Initialise the serial port */
codec(); /* Initialise the codec */
start_timer1(); /* Initialise and start the timer */
/* Initialise the interrupts */
IRQ_enable(IRQ_EVT_TINT1);
IRQ_test(IRQ_EVT_TINT1);
IRQ_nmiEnable();
IRQ_globalEnable();
for (;;); /* Wait for an interrupt */
}
void mcbsp0_init()
{
/* Set up McBSP0 */
*(unsigned volatile int *)McBSP0_SPCR = 0; /* Reset serial port */
*(unsigned volatile int *)McBSP0_PCR = 0; /* Set pin control register */
/* Set rx control register to one 16 bit data/frame */
*(unsigned volatile int *)McBSP0_RCR = 0x10040;
/* Set tx control register to one 16 bit data/frame */
*(unsigned volatile int *)McBSP0_XCR = 0x10040;
*(unsigned volatile int *)McBSP0_DXR = 0;
/* setup SP control reg*/
*(unsigned volatile int *)McBSP0_SPCR = 0x12001;
}
void mcbsp0_write(int out_data)
{
int temp;
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()
{
int temp;
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 start_timer1()
{
/* Disable output of Timer 1 */
*(unsigned volatile int *)TIMER1_CTRL = 0x000;
/* Map TINT event to CPU interrupt 8 */
IRQ_map(IRQ_EVT_TINT1,8);
/* Open a handle to the Timer */
hTimer = TIMER_open(TIMER_DEV1, TIMER_OPEN_RESET);
/* Setup the timer */
TIMER_configArgs(hTimer,
TIMER_CTL_OF(0x000003c1),
TIMER_PRD_OF(TPRD),
TIMER_CNT_OF(0)
);
/* Enable the timer */
TIMER_start(hTimer);
}
void InoutIsr (void)
{
int input;
int N=8;
int i;
short BETA_E,D;
int beta = 0x00000174;
input = mcbsp0_read(); /* Read the signal in */
X[0] = (short) input;
D = X[0];
Y=0;
for(i=0;i<N;i++)
Y = Y + ((_mpy(h[i],X[i])) << 1) ;
E = D -(short) (Y>>16);
BETA_E =(short)((_mpy(beta,E)) >>15);
for(i=N-1;i>=0;i--)
{
h[i] = h[i] +((_mpy(BETA_E,X[i])) >> 15);
X[i]=X[i-1];
}
mcbsp0_write((short)(Y>>16)& 0x0fffe); /* Send the signal out */
return;
}
- 1
- 2
- 3
- 4
前往页