?? 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
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -