📄 mcbsp.c
字号:
#include "regs.h"
#include "stdio.h"
#include "csl.h"
#include "csl_mcbsp.h"
#include "dsk6713_aic23.h"
#include "dsk6713.h"
#include "dsk6713_led.h"
//#define _INT
#define _TEST_TIME
/* Declare CSL objects */
MCBSP_Handle hMcbsp0; /* Handles for McBSP */
MCBSP_Handle hMcbsp1; /* Handles for McBSP */
/* Codec configuration settings */
DSK6713_AIC23_Config config = { \
0x0017, /* 0 DSK6713_AIC23_LEFTINVOL Left line input channel volume */ \
0x0017, /* 1 DSK6713_AIC23_RIGHTINVOL Right line input channel volume */\
0x01f9, /* 2 DSK6713_AIC23_LEFTHPVOL Left channel headphone volume */ \
0x01f9, /* 3 DSK6713_AIC23_RIGHTHPVOL Right channel headphone volume */ \
0x001c, /* 4 DSK6713_AIC23_ANAPATH Analog audio path control0x0011 */ \
0x0000, /* 5 DSK6713_AIC23_DIGPATH Digital audio path control 0000*/ \
0x0000, /* 6 DSK6713_AIC23_POWERDOWN Power down control */ \
0x004f, /* 7 DSK6713_AIC23_DIGIF Digital audio interface format 0x0043*/ \
0x000c, /* 8 DSK6713_AIC23_SAMPLERATE Sample rate control0x0001 */ \
0x0001 /* 9 DSK6713_AIC23_DIGACT Digital interface activation */ \
};
void init_mcbsp1(void);
void init_interrupt(void);
/* main() */
void main(void)
{
#ifndef _INT
unsigned int x;
#endif
#ifdef _TEST_TIME
/* Initialize Board Support Library */
DSK6713_init();
/* Initialize LEDs switches */
DSK6713_LED_init();
#endif
/* initialize the CSL library */
CSL_init();
AIC23_setParams(&config); // Configure the codec
init_mcbsp1();
#ifdef _INT
init_interrupt();
#endif
while(1)
{
#ifndef _INT
while (!MCBSP_rrdy(hMcbsp1));
x = MCBSP_read(hMcbsp1);
//printf("left:%d, right:%d\n", (x& 0xffff0000) >> 16, x & 0x0000ffff);
x &= 0xffff0000;//选左声道
//x &= 0x0000ffff;//选右声道
while (!MCBSP_xrdy(hMcbsp1));
MCBSP_write(hMcbsp1, x);
#endif
};
} /* end main, progam ends here */
void init_mcbsp1(void)
{
/* McBSP codec data channel configuration */
MCBSP_Config mcbspCfg1 = {
MCBSP_FMKS(SPCR, FREE, NO) |
MCBSP_FMKS(SPCR, SOFT, NO) |
MCBSP_FMKS(SPCR, FRST, YES) |
MCBSP_FMKS(SPCR, GRST, YES) |
MCBSP_FMKS(SPCR, XINTM, XRDY) |
MCBSP_FMKS(SPCR, XSYNCERR, NO) |
MCBSP_FMKS(SPCR, XRST, YES) |
MCBSP_FMKS(SPCR, DLB, OFF) |
MCBSP_FMKS(SPCR, RJUST, RZF) |
MCBSP_FMKS(SPCR, CLKSTP, DISABLE) |
MCBSP_FMKS(SPCR, DXENA, OFF) |
MCBSP_FMKS(SPCR, RINTM, RRDY) |
MCBSP_FMKS(SPCR, RSYNCERR, NO) |
MCBSP_FMKS(SPCR, RRST, YES),
MCBSP_FMKS(RCR, RPHASE, SINGLE) |
MCBSP_FMKS(RCR, RFRLEN2, DEFAULT) |
MCBSP_FMKS(RCR, RWDLEN2, DEFAULT) |
MCBSP_FMKS(RCR, RCOMPAND, MSB) |
MCBSP_FMKS(RCR, RFIG, NO) |
MCBSP_FMKS(RCR, RDATDLY, 0BIT) |
MCBSP_FMKS(RCR, RFRLEN1, OF(1)) |
//MCBSP_FMKS(RCR, RWDLEN1, 16BIT) |
MCBSP_FMKS(RCR, RWDLEN1, 32BIT) |
MCBSP_FMKS(RCR, RWDREVRS, DISABLE),
MCBSP_FMKS(XCR, XPHASE, SINGLE) |
MCBSP_FMKS(XCR, XFRLEN2, DEFAULT) |
MCBSP_FMKS(XCR, XWDLEN2, DEFAULT) |
MCBSP_FMKS(XCR, XCOMPAND, MSB) |
MCBSP_FMKS(XCR, XFIG, NO) |
MCBSP_FMKS(XCR, XDATDLY, 0BIT) |
MCBSP_FMKS(XCR, XFRLEN1, OF(1)) |
//MCBSP_FMKS(XCR, XWDLEN1, 16BIT) |
MCBSP_FMKS(XCR, XWDLEN1, 32BIT) |
MCBSP_FMKS(XCR, XWDREVRS, DISABLE),
MCBSP_FMKS(SRGR, GSYNC, DEFAULT) |
MCBSP_FMKS(SRGR, CLKSP, DEFAULT) |
MCBSP_FMKS(SRGR, CLKSM, DEFAULT) |
MCBSP_FMKS(SRGR, FSGM, DEFAULT) |
MCBSP_FMKS(SRGR, FPER, DEFAULT) |
MCBSP_FMKS(SRGR, FWID, DEFAULT) |
MCBSP_FMKS(SRGR, CLKGDV, DEFAULT),
MCBSP_MCR_DEFAULT,
MCBSP_RCER_DEFAULT,
MCBSP_XCER_DEFAULT,
MCBSP_FMKS(PCR, XIOEN, SP) |
MCBSP_FMKS(PCR, RIOEN, SP) |
MCBSP_FMKS(PCR, FSXM, EXTERNAL) |
MCBSP_FMKS(PCR, FSRM, EXTERNAL) |
MCBSP_FMKS(PCR, CLKXM, INPUT) |
MCBSP_FMKS(PCR, CLKRM, INPUT) |
MCBSP_FMKS(PCR, CLKSSTAT, DEFAULT) |
MCBSP_FMKS(PCR, DXSTAT, DEFAULT) |
MCBSP_FMKS(PCR, FSXP, ACTIVEHIGH) |
MCBSP_FMKS(PCR, FSRP, ACTIVEHIGH) |
MCBSP_FMKS(PCR, CLKXP, FALLING) |
MCBSP_FMKS(PCR, CLKRP, RISING)
};
hMcbsp1 = MCBSP_open(MCBSP_DEV1, MCBSP_OPEN_RESET);
MCBSP_config(hMcbsp1, &mcbspCfg1);
MCBSP_start(hMcbsp1, MCBSP_XMIT_START | MCBSP_RCV_START |
MCBSP_SRGR_START | MCBSP_SRGR_FRAMESYNC, 220);
}
void init_interrupt(void)
{
SET_REG(ICR, 0xffff);//clear up all interrupt
RESET_REG_BIT(CSR, GIE);//close interrupt
LOAD_FIELD(MUXL, 0x0f, 0, 5);//选择MCBSP1读中断为4号中断
SET_REG_BIT(IER, IE4);//enable McBSP0
SET_REG_BIT(IER, NMIE);
SET_REG_BIT(CSR, GIE);//open interrupt
}
interrupt void c_int04(void)
{
static int tick = 0;
int x;
x = MCBSP_read(hMcbsp1);
while (!MCBSP_xrdy(hMcbsp1));
MCBSP_write(hMcbsp1, x);
#ifdef _TEST_TIME
tick = tick + 1;
if(tick == 8000)
{
tick = 0;
DSK6713_LED_toggle(0);
}
#endif
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -