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

📄 tmcbsp55.c.bak

📁 TI OMAP5910(1510)的最简单测试程序,用于 硬件最初的调试,简要文档含环境配置
💻 BAK
📖 第 1 页 / 共 2 页
字号:
			//CLKSP/CLKXP对沿的定义与MCBSP_CLK_POLAR_UP相反
			break;
		case MCBSP_CPU_SGR_CLK:
			MCBSP_FSET_H(hmc,PCR,CLKXM,1); 
			
			MCBSP_FSET_H(hmc,SRGR2,CLKSM,1); 
			MCBSP_FSET_H(hmc,PCR,SCLKME,0); //永远是上升沿
			break;
		case MCBSP_CLKR_SGR_CLK:
			MCBSP_FSET_H(hmc,PCR,CLKXM,1); 
			MCBSP_FSET_H(hmc,PCR,CLKRM,1); 
			MCBSP_FSET_H(hmc,SRGR2,CLKSM,0); 
			MCBSP_FSET_H(hmc,PCR,SCLKME,1);
			MCBSP_FSET_H(hmc,PCR,CLKRP,pola);
			break;
		case MCBSP_CLKX_CLK:
			MCBSP_FSET_H(hmc,PCR,CLKXM,0); 
			/*
				MCBSP_FSET_H(hmc,SRGR2,CLKSM,1); 
				MCBSP_FSET_H(hmc,PCR,SCLKME,1);
			*/
			//CLKSP/CLKXP对沿的定义与MCBSP_CLK_POLAR_UP相反
			MCBSP_FSET_H(hmc,PCR,CLKXP,(1^pola));
			break;
		case MCBSP_CLKX_SGR_CLK:
			MCBSP_FSET_H(hmc,PCR,CLKXM,1); 
			
			MCBSP_FSET_H(hmc,SRGR2,CLKSM,1); 
			MCBSP_FSET_H(hmc,PCR,SCLKME,1);
			
			//CLKSP/CLKXP对沿的定义与MCBSP_CLK_POLAR_UP相反
			MCBSP_FSET_H(hmc,PCR,CLKXP,(1^pola));
			break;
		default:
			puts("invallid mcbsp clk source\n");
			break;
	}
	  

	MCBSP_FSET_H(hmc,SRGR1,CLKGDV,(div-1));
	  
}

void McBspSetRxClk(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,CLKRM,1); 
			MCBSP_FSET_H(hmc,SRGR2,CLKSM,0); 
			MCBSP_FSET_H(hmc,PCR,SCLKME,0);
			MCBSP_FSET_H(hmc,SRGR2,CLKSP,(1^pola));  
			//CLKSP/CLKXP对沿的定义与MCBSP_CLK_POLAR_UP相反
			break;
		case MCBSP_CPU_SGR_CLK:
			MCBSP_FSET_H(hmc,PCR,CLKRM,1); 
			MCBSP_FSET_H(hmc,SRGR2,CLKSM,1); 
			MCBSP_FSET_H(hmc,PCR,SCLKME,0); //永远是上升沿
			break;
		case MCBSP_CLKR_CLK:
			MCBSP_FSET_H(hmc,PCR,CLKRM,0); 
			MCBSP_FSET_H(hmc,PCR,CLKRP,pola);
			break;
		case MCBSP_CLKR_SGR_CLK:
			MCBSP_FSET_H(hmc,PCR,CLKRM,1); 
			MCBSP_FSET_H(hmc,SRGR2,CLKSM,0); 
			MCBSP_FSET_H(hmc,PCR,SCLKME,1);
			MCBSP_FSET_H(hmc,PCR,CLKRP,pola);
			break;
		case MCBSP_CLKX_SGR_CLK:
			MCBSP_FSET_H(hmc,PCR,CLKRM,1); 
			MCBSP_FSET_H(hmc,PCR,CLKXM,0); 
			MCBSP_FSET_H(hmc,SRGR2,CLKSM,1); 
			MCBSP_FSET_H(hmc,PCR,SCLKME,1);
			MCBSP_FSET_H(hmc,PCR,CLKXP,(1^pola));
			//CLKSP/CLKXP对沿的定义与MCBSP_CLK_POLAR_UP相反
			break;
		default:
			puts("invallid mcbsp clk source\n");
			break;
	}
	  

	MCBSP_FSET_H(hmc,SRGR1,CLKGDV,(div-1));
	
	  
}


void McBspSetRxInt(MCBSP_Handle hmc,Uint16 sync_err,Uint16 int_mode,void (*func)(),Uint16 prio)
/*
sync_err:1,frame_sync有错误时会产生中断;0忽略错误????
int_mode:
#define MCBSP_INTM_WORD		0
#define MCBSP_INTM_BLOCK	1
#define MCBSP_INTM_FS		2
#define MCBSP_INTM_ERR		3  //如果设置呢ie_msl!=0,则无论int_mode设置成什么值,接收错误都会引发中断
#define MCBSP_INTM_NULL		255
*/
{
	Uint16 flag=0,int_no=0;
	
	  MCBSP_FSET_H(hmc,SPCR1,RSYNCERR,sync_err);
	  if(sync_err)
	     flag=1;
	  if(int_mode!=MCBSP_INTM_NULL){
	     MCBSP_FSET_H(hmc,SPCR1,RINTM,int_mode);
	     flag=1;
	  }
	  if(!flag)
	     return;
	     
	  int_no=MCBSP_getRcvEventId(hmc);
	 
	  //MCBSP_RGET_H(hdma,DMACSR);
	  
	  //读相应的域,清除以往的状态???是否应该改成写操作
	  MCBSP_FGET_H(hmc,SPCR1,RSYNCERR);
	  MCBSP_FGET_H(hmc,SPCR1,RFULL);
	  MCBSP_FGET_H(hmc,SPCR1,RRDY);
	  
	  MCBSP_FSET_H(hmc,SPCR1,RSYNCERR,0);
	  MCBSP_FSET_H(hmc,SPCR1,RFULL,0);
	  MCBSP_FSET_H(hmc,SPCR1,RRDY,0);
	  
	  IRQ_clear(int_no);
	  IRQ_plug(int_no,func,prio);
	  IRQ_enable(int_no);

}


void McBspSetTxInt(MCBSP_Handle hmc,Uint16 sync_err,Uint16 int_mode,void (*func)(),Uint16 prio)
/*
sync_err:1,frame_sync有错误时会产生中断;0忽略错误????
int_mode:
#define MCBSP_INTM_WORD		0
#define MCBSP_INTM_BLOCK	1
#define MCBSP_INTM_FS		2
#define MCBSP_INTM_ERR		3  //如果设置呢ie_msl!=0,则无论int_mode设置成什么值,接收错误都会引发中断
#define MCBSP_INTM_NULL		255
*/
{
	Uint16 flag=0,int_no=0;
	
	  MCBSP_FSET_H(hmc,SPCR2,XSYNCERR,sync_err);
	  if(sync_err)
	     flag=1;
	  if(int_mode!=MCBSP_INTM_NULL){
	     MCBSP_FSET_H(hmc,SPCR2,XINTM,int_mode);
	     flag=1;
	  }
	  if(!flag)
	     return;
	  int_no=MCBSP_getXmtEventId(hmc);
	  
	  //MCBSP_RGET_H(hdma,DMACSR);
	  
	  //读相应的域,清除以往的状态???是否应该改成写操作
	  MCBSP_FGET_H(hmc,SPCR2,XSYNCERR);
	  MCBSP_FGET_H(hmc,SPCR2,XEMPTY);
	  MCBSP_FGET_H(hmc,SPCR2,XRDY);
	  
	  MCBSP_FSET_H(hmc,SPCR2,XSYNCERR,0);
	  MCBSP_FSET_H(hmc,SPCR2,XEMPTY,0);
	  MCBSP_FSET_H(hmc,SPCR2,XRDY,0);
	  
	  
	  IRQ_clear(int_no);
	  IRQ_plug(int_no,func,prio);
	  IRQ_enable(int_no);

}

void McBspStartTx(MCBSP_Handle hmc)
{
	McBspSetMskBit(MCBSP_getPort(hmc),MCBSP_RX_USED_BIT,1);  //
	McBspTxReset(hmc,1);
}

void McBspStartRx(MCBSP_Handle hmc)
{
	McBspSetMskBit(MCBSP_getPort(hmc),MCBSP_RX_USED_BIT,1);  //
	McBspRxReset(hmc,1);
	
}

void McBspStopTx(MCBSP_Handle hmc)
{
	McBspTxReset( hmc, 0);
	
}

void McBspStopRx(MCBSP_Handle hmc)
{
	McBspRxReset( hmc, 0);
}       

void McBspClose(MCBSP_Handle hmc)
{	 
	 McBspSetMskBit( MCBSP_getPort(hmc), MCBSP_TX_USED_BIT, 0);  //              
	 McBspSetMskBit( MCBSP_getPort(hmc), MCBSP_TX_MSK_BIT, MCBSP_AS_GPIO);  //    
	 McBspSetMskBit( MCBSP_getPort(hmc), MCBSP_RX_USED_BIT, 0);  //               
	 McBspSetMskBit( MCBSP_getPort(hmc), MCBSP_RX_MSK_BIT, MCBSP_AS_GPIO);  //    

	 MCBSP_close(hmc);
}
void McBspRxReset(MCBSP_Handle hmc,Uint16 val)
//val=0 reset and disable
//	1 enable
{	
	MCBSP_FSET_H(hmc,SPCR1,RRST,val);
}

void McBspTxReset(MCBSP_Handle hmc,Uint16 val)
{
	MCBSP_FSET_H(hmc,SPCR2,XRST,val);
}
void McBspSampleRateGeneratorReset(MCBSP_Handle hmc,Uint16 val)
//Sample rate generator reset
{
	MCBSP_FSET_H(hmc,SPCR2,GRST,val);
}

void McBspFrameSyncLogicReset(MCBSP_Handle hmc,Uint16 val)
//Frame-synchronization logic reset
{
	MCBSP_FSET_H(hmc,SPCR2,FRST,val);
}
Int16 MCBSP_RdIO(MCBSP_Handle hmc,Uint16 gpio_no)
/*gpio_no:
#define MCBSP_CLKX_IO 	0
#define MCBSP_CLKR_IO 	1
#define MCBSP_FSX_IO 	2
#define MCBSP_FSR_IO 	3
#define MCBSP_DX_IO 	4
#define MCBSP_DR_IO 	5
#define MCBSP_CLKS_IO 	6
*/
/*
 如果端口类型不对,返回-1;否则返回恰当的值
*/

{
	
  return(-1);
}


Int16 MCBSP_WrIO(MCBSP_Handle hmc,Uint16 gpio_no,Uint16 val)
/*gpio_no:
#define MCBSP_CLKX_IO 	0
#define MCBSP_CLKR_IO 	1
#define MCBSP_FSX_IO 	2
#define MCBSP_FSR_IO 	3
#define MCBSP_DX_IO 	4
#define MCBSP_DR_IO 	5
#define MCBSP_CLKS_IO 	6
*/
/*
 如果端口类型不对,返回-1;否则返回val
*/
{
	
 return(-1);
}
void McBspIdle(MCBSP_Handle hdmc,Uint16 isidle)
{
	//使mcbsp进入低功耗状态
}
extern MCBSP_Handle hbsp;
Uint32 tx_test=0x55aa55aa; 
void BspRxIsr(void)
  //给dma中断写的一个中断服务程序 查询frame/last frame/block中断
  //blk中断后关闭dma并清空fifo。
{
 	Uint32 i;
	//MCBSP_RGET_H
	i=i^0xffffffff;
	
	MCBSP_write32(hbsp,i);
	puts("mcbsp rx interrupt\n");
}
void BspTxIsr(void)
  //给dma中断写的一个中断服务程序 查询frame/last frame/block中断
  //blk中断后关闭dma并清空fifo。
{	Uint32 i=0;

	//MCBSP_RGET_H
	i=MCBSP_read32(hbsp);
	i=i+1;
	puts("mcbsp tx interrupt\n");
}

#endif //_MCBSP55_C

⌨️ 快捷键说明

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