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

📄 mcbsp_inti.c

📁 6713DSP 多通道音频串口 AD编程
💻 C
📖 第 1 页 / 共 3 页
字号:
   					 MCBSP_SRGR_START| MCBSP_SRGR_FRAMESYNC,
   			  MCBSP_SRGR_DEFAULT_DELAY);
  
}
/***********************************************************************/
/*	函数声明:	中断初始化							                   */
/*                                                                     */
/*	函数功能:						                                   */
/***********************************************************************/
void interrupt_init(void) {
  
   /* Disable interrupt. */
	IRQ_globalDisable();
	IRQ_RSET(EXTPOL,0x0F);
	IRQ_setVecs(vectors);     /* point to the IRQ vector table	*/
    IRQ_map(IRQ_EVT_RINT0,13);
	IRQ_disable(IRQ_EVT_RINT0);
	IRQ_clear(IRQ_EVT_RINT0);    
	/* Enable interrupt */
  	IRQ_enable(IRQ_EVT_RINT0);
  	IRQ_globalEnable();       /* Globally enable interrupts       */ 
    /* Enable NMI interrupt */
  	IRQ_nmiEnable(); 

}
/***********************************************************************/
/*	函数声明:	MCBSP数据发送; 发送命令帧时用此函数                    */
/*                                                                     */
/*	函数功能:	每次发送一帧的长度                                     */
/*                                                                     */
/*	参数:		addr,发送数据的地址                                    */
/***********************************************************************/
void mcbsp_tx(unsigned short * addr)
{
	int tempdata,tempnum;
	unsigned short check = 0;

    for(tempnum=0;tempnum<(FRAMLONGTH-1);tempnum++)
	{
	    tempdata=*(addr++);
	    check=check^tempdata;	 
    	while (!MCBSP_xrdy(hMcbsp));                       
    	    MCBSP_write32(hMcbsp,tempdata);
   	}
	if(tempnum==(FRAMLONGTH-1))
    {
    	*addr=check;
    	while (!MCBSP_xrdy(hMcbsp));                       
            MCBSP_write32(hMcbsp,check);
    }
	tempnum=0; 
}
/*******************************************************/
/* mcbspx的初始化: inti_mcbspx                        */
/******************************************************  
void inti_mcbspx()
{
   for(i=0;i<FRAMLONGTH;i++)
	    mcbspx[i]=0;
}*/
/***********************************************************************/
/*	函数声明:	MCBSP数据接收                                          */
/*                                                                     */
/*	函数功能:	响应中断,读取MCBSP的接收BUFFER内的数据,将数据        */
/*			    放在RevBuffer变量中                                    */
/*                                                                     */
/*  参数:                                                             */
/*              Channel:    有效的串口句柄			    			   */
/*	            datarevlength:  每次从缓冲区读取的长度                 */
/*	            recvaddr:    缓冲区的首址                              */
/*                                                                     */
/*  返回值      0:接收完成  				             			   */
/*              1:数据未准备好                                        */
/*              0xFFFF:串口接收错误                                    */
/*              2:中断超时错误                                        */
/*              3: 较验出错                                            */
/***********************************************************************/
unsigned short mcbsp_rx(unsigned short * recvaddr)
{
	unsigned short check = 0;
	int j=0;
	//数据未准备好
	if(datarevlength<FRAMLONGTH)
	{ 
	   sys_statbuff[RECEIVE_RDY]=1;
	   return 1;
	}
	//中断超时
	if(timeout==0)
	{
	   sys_statbuff[INT_ERR]=1;
	   datarevlength=0;
	   timeout = 0x8000;
	   return 2;
    }
    //串口接收错误
   	if(datarevlength>FRAMLONGTH)
	{ 
       sys_statbuff[RECEIVE_RDY] = 0;
	   sys_statbuff[MCBSP_ERR]=1;
	   datarevlength=0;
	   timeout = 0x8000;
	   return 0xffff;
    }
    //接收完成
	if(datarevlength==FRAMLONGTH)
	{
 	   for(j = 0; j<FRAMLONGTH-1;j++)
       {
	       *(recvaddr++) = RevBuffer[j];
	       check = check ^RevBuffer[j];
       }
       //接收校验
       *recvaddr = RevBuffer[j];
	   if((*recvaddr) == check)
	   {
	      sys_statbuff[CHECK_ERROR] = 0;
		  sys_statbuff[RECEIVE_RDY] = 0;
       }
       //校验出错
       else
	   {
	      sys_statbuff[CHECK_ERROR] = 1;
		  sys_statbuff[RECEIVE_RDY] = 0;
	      datarevlength=0;
	      timeout = 0x8000;
	      return 3;		   		
	   }
	   sys_statbuff[RECEIVE_NEW]=1;
  	   datarevlength=0;
	   timeout = 0x8000;
	   return 0;
    }
}
	
/***********************************************************************/
/*  函数声明:	串口接收状态,并设置相应的寄存器默认值  	               */
/*                                                                     */
/*  返回值      0:接收完成  				         				   */
/*              1:数据未准备好                                        */
/*              0xFFFF:串口接收错误                                    */
/*              2:中断超时错误                                        */
/*              3: 较验出错                                            */
/***********************************************************************/
short mcbsp_status()
{
	/*中断超时错误*/
	if(sys_statbuff[INT_ERR] ==1)
	{
		sys_statbuff[INT_ERR] = 0;
		return 2;  	
	}
	/*串口接收错误*/
	if(sys_statbuff[MCBSP_ERR] == 1)
	{
		sys_statbuff[MCBSP_ERR] = 0;
		return 0xffff;
	}
	/*数据较验出错*/
	if(sys_statbuff[CHECK_ERROR] == 1)
	{
		sys_statbuff[CHECK_ERROR] = 0;
		return 3;
	}
	/*数据未准备好*/
	if(sys_statbuff[RECEIVE_NEW] != 1)
	{
		return 1;
	}
	/*接收完成*/
	else
	{
		sys_statbuff[RECEIVE_NEW] = 0;
	}
	return 0;
}

/***********************************************************************/
/*  函数声明:	接收中断的中断程序                                     */
/**********************************************************************/
void interrupt c_int13 (void)		
{
	if(MCBSP_rrdy(hMcbsp) == 1)
	{   
       RevBuffer[datarevlength] = MCBSP_read32(hMcbsp);
       datarevlength++;
    }
    timeout--;   
    return;
}
/***********************************************************************/
/***********************************************************************/
//	函数名:		Com_Datareq()	
//  功能:     	要求进行数据发送						    	       	
/***********************************************************************/ 
Com_Datareq(unsigned short sample,unsigned short num_datasend)
{   
     // psend=(PMcbspForDec6713)(&mcbspx[0]);   
	  psend->Length=FRAMLONGTH;
      psend->Type=FRAME_CMD;
      psend->Mutul=FRAME_SING;
      psend->Data[0]=DATA_SEND;
      psend->Data[1]=sample;
      psend->Data[2]=num_datasend;
      mcbsp_tx((unsigned short *) psend);
}
/***********************************************************************/
//	函数名:		Com_Checkerr()	
//  功能:     	通知主机程序通讯出错,准备重发						  		
/***********************************************************************/
Com_Checkerr(Uint16 check_err)
{     //psend=(PMcbspForDec6713)(&mcbspx[0]);
      psend->Length = FRAMLONGTH;
	  psend->Type = FRAME_CMD;
	  psend->Data[0] = check_err;
	  psend->Mutul = FRAME_SING;
}
/***********************************************************************/
//	函数名:		Com_Datasend()	
//  功能:     	通过判断number是否为0来决定是否把sample的值赋给s,防止
//              进入sample的值不变。
//  参数:      
//             psend:      是指向结构体的指针
//             FRAME_END:  结束帧

⌨️ 快捷键说明

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