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

📄 tmcbsp55.c.bak

📁 TI OMAP5910(1510)的最简单测试程序,用于 硬件最初的调试,简要文档含环境配置
💻 BAK
📖 第 1 页 / 共 2 页
字号:
//test mcbsp
#ifndef	_MCBSP55_C
#define _MCBSP55_C
 

#include "includes.h"
#include "includes_async.h"
#include "dsp_includes.h"

/* 
#define MCBSP_RX_MSK_BIT	0
#define MCBSP_TX_MSK_BIT	1
#define MCBSP_RX_USED_BIT	2
#define MCBSP_TX_USED_BIT	3

#define MCBSP_AS_GPIO	1
#define MCBSP_AS_NORMAL	0
*/
static volatile Uint16 mcbsp_msk=0;  //共16比特,channel0 ~3各自占用5比特
/*	
	mcbsp_msk[4:0]--->mc_bsp0
	mcbsp_msk[9:5]--->mc_bsp1
	mcbsp_msk[14:10]--->mc_bsp2
	
	bit0:0 接受初始化为 mcbsp,1初始化为io
	bit1:0 发送初始化为 mcbsp,1初始化为io
	bit2:
  
*/
Uint16 McBspGetMskBit(Uint16 dev_no,Uint16 bit_no)
{
	Uint16 bit_num=0,bit_val=0;
	bit_num=dev_no*5+bit_no;
	bit_val=mcbsp_msk&(1<<bit_num);
	if(bit_val)
		return(1);
	else
		return(0);
}

void McBspSetMskBit(Uint16 dev_no,Uint16 bit_no,Uint16 bit_val)
{
	Uint16 bit_num=0,bit_msk=0;
	bit_num=dev_no*5+bit_no;
	bit_msk=(1<<bit_num);
	if(bit_val)
		mcbsp_msk=mcbsp_msk|bit_msk;
	else
		mcbsp_msk=mcbsp_msk&(~bit_msk);
}


MCBSP_Handle InitMcBsp( Uint16 dev_no /*设备号:0,2*/ )
//做必要的缺省设置并打开一个mcbsp
//不支持multichannel、partion、channel的mask
{
	Uint16 msk[3]={0x001f,0x03e0,0x7c00};
	MCBSP_Config tempconfig1;

	MCBSP_Handle handle1;


	mcbsp_msk=mcbsp_msk&(~msk[dev_no]);
	handle1 = MCBSP_open(dev_no, MCBSP_OPEN_RESET);
	
	tempconfig1.spcr1 = MCBSP_SPCR1_RMK(	MCBSP_SPCR1_DLB_OFF,
						MCBSP_SPCR1_RJUST_RZF, //字符向lsb对齐,高位添0
						MCBSP_SPCR1_CLKSTP_DISABLE, //正常,非spi方式
						MCBSP_SPCR1_DXENA_OFF,
                    				MCBSP_SPCR1_ABIS_DISABLE,
				    		MCBSP_SPCR1_RINTM_RRDY,
						MCBSP_SPCR1_RSYNCERR_NO,
						MCBSP_SPCR1_RFULL_NO,
						MCBSP_SPCR1_RRDY_NO,
						MCBSP_SPCR1_RRST_DISABLE);

	tempconfig1.spcr2 = MCBSP_SPCR2_RMK( 	MCBSP_SPCR2_FREE_YES, //emulator断点不影响mcbsp
				      		MCBSP_SPCR2_SOFT_NO, //无影响
						MCBSP_SPCR2_FRST_FSG,
						MCBSP_SPCR2_GRST_CLKG,
						MCBSP_SPCR2_XINTM_XRDY,
						MCBSP_SPCR2_XSYNCERR_NO,
						MCBSP_SPCR2_XEMPTY_YES,
						MCBSP_SPCR2_XRDY_NO,
				      		MCBSP_SPCR2_XRST_DISABLE);
	tempconfig1.rcr1  = MCBSP_RCR1_RMK(	MCBSP_RCR1_RFRLEN1_OF(0),
				    		MCBSP_RCR1_RWDLEN1_16BIT);

	tempconfig1.rcr2  = MCBSP_RCR2_RMK(	MCBSP_RCR2_RPHASE_SINGLE, //单pahse方式
				    		MCBSP_RCR2_RFRLEN2_OF(1),
					    	MCBSP_RCR2_RWDLEN2_16BIT,
					    	MCBSP_RCR2_RCOMPAND_MSB, //无compand,msb在先发
 					    	MCBSP_RCR2_RFIG_YES, //不理会不合适的fsync信号???应该置为no
					    	MCBSP_RCR2_RDATDLY_0BIT);

	tempconfig1.xcr1  = MCBSP_XCR1_RMK(MCBSP_XCR1_XFRLEN1_OF(1),
				    	MCBSP_XCR1_XWDLEN1_16BIT);

	tempconfig1.xcr2  = MCBSP_XCR2_RMK(MCBSP_XCR2_XPHASE_SINGLE,
				    	MCBSP_XCR2_XFRLEN2_OF(1),
				    	MCBSP_XCR2_XWDLEN2_16BIT,
				    	MCBSP_XCR2_XCOMPAND_MSB,
				    	MCBSP_XCR2_XFIG_YES,
				    	MCBSP_XCR2_XDATDLY_0BIT);
	tempconfig1.srgr1 = MCBSP_SRGR1_RMK(MCBSP_SRGR1_FWID_OF(1),
				     	MCBSP_SRGR1_CLKGDV_OF(1));

	tempconfig1.srgr2 = MCBSP_SRGR2_RMK(MCBSP_SRGR2_GSYNC_FREE, //忽略相当于忽略外部fsr
				     	MCBSP_SRGR2_CLKSP_RISING,
				     	MCBSP_SRGR2_CLKSM_INTERNAL,
				     	MCBSP_SRGR2_FSGM_DXR2XSR,
				     	MCBSP_SRGR2_FPER_OF(15));

	tempconfig1.mcr1  = MCBSP_MCR1_RMK(MCBSP_MCR1_RMCME_NO,
				    	MCBSP_MCR1_RPBBLK_SF1,
				    	MCBSP_MCR1_RPABLK_SF0,
				    	MCBSP_MCR1_RCBLK_SF0 ,
				    	MCBSP_MCR1_RMCM_CHENABLE); //全部通道都设置为有效,非multi channel方式

	tempconfig1.mcr2  = MCBSP_MCR2_RMK(MCBSP_MCR2_XMCME_NO,
				    	MCBSP_MCR2_XPBBLK_SF1,
				    	MCBSP_MCR2_XPABLK_SF0,
				    	MCBSP_MCR2_XCBLK_SF0,
				    	MCBSP_MCR2_XMCM_ENNOMASK); //所有通道都设置为有效,非multi channel方式

	tempconfig1.pcr   = MCBSP_PCR_RMK(MCBSP_PCR_IDLEEN_RESET,
				   	MCBSP_PCR_XIOEN_SP,
			       		MCBSP_PCR_RIOEN_SP,
		 		   	MCBSP_PCR_FSXM_INTERNAL,
				   	MCBSP_PCR_FSRM_EXTERNAL,
				   	MCBSP_PCR_SCLKME_NO,
				   	MCBSP_PCR_CLKSSTAT_0,
				   	MCBSP_PCR_DXSTAT_0,
				   	MCBSP_PCR_DRSTAT_0,
				   	MCBSP_PCR_CLKXM_OUTPUT,
                    			MCBSP_PCR_CLKRM_INPUT,
					MCBSP_PCR_FSXP_ACTIVEHIGH,
					MCBSP_PCR_FSRP_ACTIVEHIGH,
					MCBSP_PCR_CLKXP_RISING,
					MCBSP_PCR_CLKRP_FALLING);

		tempconfig1.rcera = MCBSP_RCERA_DEFAULT;
		tempconfig1.rcerb = MCBSP_RCERB_DEFAULT;
		tempconfig1.rcerc = MCBSP_RCERC_DEFAULT;
		tempconfig1.rcerd = MCBSP_RCERD_DEFAULT;
		tempconfig1.rcere = MCBSP_RCERE_DEFAULT;
		tempconfig1.rcerf = MCBSP_RCERF_DEFAULT;
		tempconfig1.rcerg = MCBSP_RCERG_DEFAULT;
		tempconfig1.rcerh = MCBSP_RCERH_DEFAULT;
		tempconfig1.xcera = MCBSP_XCERA_DEFAULT;
		tempconfig1.xcerb = MCBSP_XCERB_DEFAULT;
		tempconfig1.xcerc = MCBSP_XCERC_DEFAULT;
		tempconfig1.xcerd = MCBSP_XCERD_DEFAULT;
		tempconfig1.xcere = MCBSP_XCERE_DEFAULT;
		tempconfig1.xcerf = MCBSP_XCERF_DEFAULT;
		tempconfig1.xcerg = MCBSP_XCERG_DEFAULT;
		tempconfig1.xcerh = MCBSP_XCERH_DEFAULT;

		MCBSP_config(handle1, &tempconfig1);

//		MCBSP_start(HANDLE,MCBSP_RCV_START|MCBSP_XMIT_START|
//				MCBSP_SRGR_START|MCBSP_SRGR_FRAMESYNC,0x300u);
   		

	 return(handle1);
}

void  McBspLocalLoopBack(MCBSP_Handle hmc,Uint16 loop)  //loop=0:normal;1:loop back
{
	MCBSP_FSET_H(hmc,SPCR1,DLB,loop);
}

void  McBspSetRxGpio(MCBSP_Handle hmc,Uint16 port_mode )
 //portmode=0 表示设置为正常(mcbsp),
 //	    1,表示设置为gpio
{
	MCBSP_FSET_H(hmc,PCR,RIOEN,port_mode);
}

void  McBspSetTxGpio(MCBSP_Handle hmc,Uint16 port_mode )
 //portmode=0 表示设置为正常(mcbsp),
 //	    1,表示设置为gpio
{
	MCBSP_FSET_H(hmc,PCR,XIOEN,port_mode);
}

void McBspSetRxFrameWord(MCBSP_Handle hmc,Uint16 word_len,Uint16 fr_len,Uint16 fr_wid,
		          Uint16 dat_dly /*数据首比特相对frame的延迟delay:0/1/2*/ 
		       )
/*
word_len取下值之一:
	#define MCBSP8BIT	0
	#define MCBSP12BIT	1
	#define MCBSP16BIT	2
	#define MCBSP20BIT	3
	#define MCBSP24BIT	4
	#define MCBSP32BIT	5

*/		       
{	Uint16 fclk_len=0;
	Uint16 word_sz[6]={8,12,16,20,24,32};
        fclk_len=fr_len*word_sz[word_len]-1;
	MCBSP_FSET_H(hmc,RCR1,RWDLEN1,word_len);
	MCBSP_FSET_H(hmc,RCR1,RFRLEN1,(fr_len-1)); //len个word
	MCBSP_FSET_H(hmc,RCR2,RDATDLY,dat_dly);
	MCBSP_FSET_H(hmc,SRGR2,FPER,fclk_len);
	MCBSP_FSET_H(hmc,SRGR1,FWID,(fr_wid-1));
}

void McBspSetTxFrameWord(MCBSP_Handle hmc,Uint16 word_len,Uint16 fr_len,Uint16 fr_wid,
		          Uint16 dat_dly /*数据首比特相对frame的延迟delay:0/1/2*/ 
		       )
/*
word_len取下值之一:
	#define MCBSP8BIT	0
	#define MCBSP12BIT	1
	#define MCBSP16BIT	2
	#define MCBSP20BIT	3
	#define MCBSP24BIT	4
	#define MCBSP32BIT	5

*/		       
{	Uint16 fclk_len=0;
	Uint16 word_sz[6]={8,12,16,20,24,32};
        fclk_len=fr_len*word_sz[word_len]-1;
	MCBSP_FSET_H(hmc,XCR1,XWDLEN1,word_len);
	MCBSP_FSET_H(hmc,XCR1,XFRLEN1,(fr_len-1)); //len个word
	MCBSP_FSET_H(hmc,XCR2,XDATDLY,dat_dly);
	MCBSP_FSET_H(hmc,SRGR2,FPER,fclk_len);
	MCBSP_FSET_H(hmc,SRGR1,FWID,(fr_wid-1));
}

void McBspSetRxFrame(MCBSP_Handle hmc,Uint16 fs_extern /*是否是外部fs*/,
		     Uint16 pola /*帧同步的极性*/
		     )
/*
#define MCBSP_EXTERNAL_FS	0 //外部帧同步信号
#define MCBSP_INTERNAL_FS	1 //内部帧同步信号

#define MCBSP_FS_POLAR_HIGH	0  //正极性
#define MCBSP_FS_POLAR_LOW		1  //负极性

*/
{
	if(fs_extern==MCBSP_EXTERNAL_FS){
	  MCBSP_FSET_H(hmc,PCR,FSRM,0);
	  MCBSP_FSET_H(hmc,SRGR2,GSYNC,1); //始终与外部fsr同步
	}
	else{
	  MCBSP_FSET_H(hmc,PCR,FSRM,1);
	  MCBSP_FSET_H(hmc,SRGR2,GSYNC,0); //忽略相当于忽略外部fsr
	}
	  
	MCBSP_FSET_H(hmc,PCR,FSRP,pola);
	  
}

void McBspSetTxFrame(MCBSP_Handle hmc,Uint16 fs_extern /*是否是外部fs*/,
		     Uint16 pola /*帧同步的极性*/
		     )
/*
#define MCBSP_EXTERNAL_FS	0
#define MCBSP_INTERNAL_FS	1

#define MCBSP_FS_POLAR_HIGH	0  //正极性
#define MCBSP_FS_POLAR_LOW		1  //负极性

*/
{
	if(fs_extern==MCBSP_EXTERNAL_FS){
	  MCBSP_FSET_H(hmc,PCR,FSXM,0);
	 
	}
	else{
	  MCBSP_FSET_H(hmc,PCR,FSXM,1);
	 
	}
	  
	//MCBSP_FSET_H(hmc,SPGR2,GSYNC,0); //忽略相当于忽略外部fsr
	
	 MCBSP_FSET_H(hmc,SRGR2,FSGM,1); //1:通过sample rate generator产生fs;0:每发一个数据产生一个fs
	
	MCBSP_FSET_H(hmc,PCR,FSXP,pola);
	
	  
}

void McBspSetTxClk(MCBSP_Handle hmc,Uint16 div /*分频比*/,Uint16 clk_src /*是否是外部fs*/,
		     Uint16 pola /*帧同步的极性*/
		     )
/*
#define MCBSP_EXTERNAL_SGR_CLK			0
#define MCBSP_CPU_SGR_CLK			1
#define MCBSP_CLKR_CLK				2
#define MCBSP_CLKX_CLK				3
#define MCBSP_CLKR_SGR_CLK			4
#define MCBSP_CLKX_SGR_CLK			5

#define MCBSP_CLK_POLAR_UP		1  //上升沿采样
#define MCBSP_CLK_POLAR_DOWN		0  //下降沿采样

#define MCBSP_CLK_SRC_YES	0
#define MCBSP_CLK_SRC_NO	1
*/
{	
	
	
	switch(clk_src){
		case MCBSP_EXTERNAL_SGR_CLK:
			MCBSP_FSET_H(hmc,PCR,CLKXM,1); 
			MCBSP_FSET_H(hmc,SRGR2,CLKSM,0); 
			MCBSP_FSET_H(hmc,PCR,SCLKME,0);
			MCBSP_FSET_H(hmc,SRGR2,CLKSP,(1^pola));  

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -