⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mcbsp.c

📁 这个程序是在DSP开发平台CCS下运行的
💻 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 + -