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

📄 uart.c

📁 ti_dsp_6000系列,开发环境ccs3.1 6000系列uart的使用
💻 C
📖 第 1 页 / 共 2 页
字号:
			DMA_SECCTL_FRAMECOND_CLEAR,		
			DMA_SECCTL_SXIE_DISABLE,
			DMA_SECCTL_SXCOND_CLEAR			
		),

		/* SRC Setup */
		DMA_SRC_RMK((Uint32) xmitbuf),				/*xmitbuf*/

		/* DST Setup */
		DMA_DST_RMK(MCBSP_getXmtAddr(hMcbsp1)),		/*McBSP DXR */
		
		/* XFRCNT Setup */
		DMA_XFRCNT_RMK(
			DMA_XFRCNT_FRMCNT_OF(1),
			DMA_XFRCNT_ELECNT_OF(BUFFER_SIZE*11)
		)

	);         
            
	DMA_configArgs(hDma2,
		
		/* PRICTL Setup */
		DMA_PRICTL_RMK(
			DMA_PRICTL_DSTRLD_NONE,
			DMA_PRICTL_SRCRLD_NONE,
			DMA_PRICTL_EMOD_HALT,
			DMA_PRICTL_FS_DISABLE,
			DMA_PRICTL_TCINT_ENABLE,
			DMA_PRICTL_PRI_DMA,
			DMA_PRICTL_WSYNC_NONE,
			DMA_PRICTL_RSYNC_REVT1,
			DMA_PRICTL_INDEX_NA,
			DMA_PRICTL_CNTRLD_NA,
			DMA_PRICTL_SPLIT_DISABLE,
			DMA_PRICTL_ESIZE_16BIT,
			DMA_PRICTL_DSTDIR_INC,
			DMA_PRICTL_SRCDIR_NONE,
			DMA_PRICTL_START_STOP
		),  

		/* SECCTL Setup */
		DMA_SECCTL_RMK(
			DMA_SECCTL_WSPOL_ACTIVEHIGH,
			DMA_SECCTL_RSPOL_ACTIVEHIGH,
			DMA_SECCTL_FSIG_NORMAL,
			DMA_SECCTL_DMACEN_FRAMECOND,
			DMA_SECCTL_WSYNCCLR_NOTHING,	
			DMA_SECCTL_WSYNCSTAT_CLEAR, 	
			DMA_SECCTL_RSYNCCLR_NOTHING, 	
			DMA_SECCTL_RSYNCSTAT_CLEAR,		
			DMA_SECCTL_WDROPIE_DISABLE,
			DMA_SECCTL_WDROPCOND_CLEAR, 	
			DMA_SECCTL_RDROPIE_DISABLE,
			DMA_SECCTL_RDROPCOND_CLEAR,		
			DMA_SECCTL_BLOCKIE_ENABLE,		/* BLOCK IE=1: enables DMA channel int */
			DMA_SECCTL_BLOCKCOND_CLEAR, 
			DMA_SECCTL_LASTIE_DISABLE,
			DMA_SECCTL_LASTCOND_CLEAR,		
			DMA_SECCTL_FRAMEIE_DISABLE,
			DMA_SECCTL_FRAMECOND_CLEAR,		
			DMA_SECCTL_SXIE_DISABLE,
			DMA_SECCTL_SXCOND_CLEAR			
		),                                        
                             
		/* SRC Setup */
        DMA_SRC_RMK(MCBSP_getRcvAddr(hMcbsp1)),		/*McBSP DRR */
		
		/* DST Setup */
		DMA_DST_RMK((Uint32) recvbuf),              /*recvbuf*/

		/* XFRCNT Setup */
		DMA_XFRCNT_RMK(
			DMA_XFRCNT_FRMCNT_OF(1),
			DMA_XFRCNT_ELECNT_OF(BUFFER_SIZE*11)
		)
        
	);         
            
} /* End of ConfigDMA() */

#endif
  		
/*******************************************************************/
/* void ConfigMcBSP(void): Setup for McBSP Configuration           */
/*******************************************************************/
void ConfigMcBSP(void)
{

	MCBSP_Config mcbspCfg1 = {
		
		/* SPCR Setup */
		#if (DMA_SUPPORT)
			MCBSP_SPCR_RMK(		
				MCBSP_SPCR_FRST_DEFAULT,		/* 0  */
				MCBSP_SPCR_GRST_DEFAULT,		/* 0  */
				MCBSP_SPCR_XINTM_XRDY,			/* 00 */
				MCBSP_SPCR_XSYNCERR_DEFAULT,	        /* 0  */
				MCBSP_SPCR_XRST_DEFAULT,		/* 0  */
				MCBSP_SPCR_DLB_OFF,			/* 0  */
				MCBSP_SPCR_RJUST_RZF,			/* 00 */
				MCBSP_SPCR_CLKSTP_DISABLE,		/* 0x */
				MCBSP_SPCR_RINTM_RRDY,			/* 00 */
				MCBSP_SPCR_RSYNCERR_DEFAULT,	        /* 0  */
				MCBSP_SPCR_RRST_DEFAULT			/* 0  */
			),
		#endif
		#if (EDMA_SUPPORT)
			MCBSP_SPCR_RMK(	
				MCBSP_SPCR_FREE_YES,			/* 1  */
				MCBSP_SPCR_SOFT_DEFAULT,		/* 0  */	
				MCBSP_SPCR_FRST_DEFAULT,		/* 0  */
				MCBSP_SPCR_GRST_DEFAULT,		/* 0  */
				MCBSP_SPCR_XINTM_XRDY,			/* 00 */
				MCBSP_SPCR_XSYNCERR_DEFAULT,	        /* 0  */
				MCBSP_SPCR_XRST_DEFAULT,		/* 0  */
				MCBSP_SPCR_DLB_OFF,			/* 0  */
				MCBSP_SPCR_RJUST_RZF,			/* 00 */
				MCBSP_SPCR_CLKSTP_DISABLE,		/* 0  */
				MCBSP_SPCR_DXENA_OFF,			/* 0  */
				MCBSP_SPCR_RINTM_RRDY,			/* 00 */
				MCBSP_SPCR_RSYNCERR_DEFAULT,	        /* 0  */
				MCBSP_SPCR_RRST_DEFAULT			/* 0  */
			),
		#endif
		
		/* RCR Setup */	
		#if (DMA_SUPPORT)
			MCBSP_RCR_RMK(
  		  	MCBSP_RCR_RPHASE_DUAL,			/* 1     */
 		   	MCBSP_RCR_RFRLEN2_OF(1),		/* 00010 */
    			MCBSP_RCR_RWDLEN2_8BIT,			/* 000	 */
    			MCBSP_RCR_RCOMPAND_MSB,			/* 00	 */
    			MCBSP_RCR_RFIG_YES,			/* 1	 */
    			MCBSP_RCR_RDATDLY_1BIT,			/* 01	 */
    			MCBSP_RCR_RFRLEN1_OF(8),		/* 01000 */
    			MCBSP_RCR_RWDLEN1_16BIT			/* 010	 */
    		),
  		#endif
		#if (EDMA_SUPPORT)
			MCBSP_RCR_RMK(
  		  	MCBSP_RCR_RPHASE_DUAL,			/* 1     */
 		   	MCBSP_RCR_RFRLEN2_OF(1),		/* 00010 */
    			MCBSP_RCR_RWDLEN2_8BIT,			/* 000	 */
    			MCBSP_RCR_RCOMPAND_MSB,			/* 00	 */
    			MCBSP_RCR_RFIG_YES,			/* 1	 */
    			MCBSP_RCR_RDATDLY_1BIT,			/* 01	 */
    			MCBSP_RCR_RFRLEN1_OF(8),		/* 01000 */
    			MCBSP_RCR_RWDLEN1_16BIT,		/* 010	 */
    			MCBSP_RCR_RWDREVRS_DISABLE 		/* 0     */	
    		),
  		#endif
  	
  		/* XCR Setup */
  		#if (DMA_SUPPORT)
  			MCBSP_XCR_RMK(
            	MCBSP_XCR_XPHASE_DUAL,			/* 1     */
            	MCBSP_XCR_XFRLEN2_OF(1),		/* 00010 */	
    		MCBSP_XCR_XWDLEN2_8BIT,			/* 000	 */
    		MCBSP_XCR_XCOMPAND_MSB,			/* 00	 */
    		MCBSP_XCR_XFIG_YES,			/* 1	 */
    		MCBSP_XCR_XDATDLY_0BIT,			/* 00	 */
    		MCBSP_XCR_XFRLEN1_OF(8),		/* 01000 */
    		MCBSP_XCR_XWDLEN1_16BIT			/* 010	 */
			),
		#endif
  		#if (EDMA_SUPPORT)
  			MCBSP_XCR_RMK(
            	MCBSP_XCR_XPHASE_DUAL,			/* 1     */
            	MCBSP_XCR_XFRLEN2_OF(1),		/* 00010 */	
    		MCBSP_XCR_XWDLEN2_8BIT,			/* 000	 */
    		MCBSP_XCR_XCOMPAND_MSB,			/* 00	 */
    		MCBSP_XCR_XFIG_YES,			/* 1	 */
    		MCBSP_XCR_XDATDLY_0BIT,			/* 00	 */
    		MCBSP_XCR_XFRLEN1_OF(8),		/* 01000 */
    		MCBSP_XCR_XWDLEN1_16BIT,		/* 010	 */
		MCBSP_XCR_XWDREVRS_DISABLE		/* 0	 */
			),
		#endif
				
		/* SRGR Setup */    
		MCBSP_SRGR_RMK(
    		MCBSP_SRGR_GSYNC_FREE,				/* 0	  */
    		MCBSP_SRGR_CLKSP_RISING,			/* 0	  */		
    		MCBSP_SRGR_CLKSM_INTERNAL,			/* 1	  */
    		MCBSP_SRGR_FSGM_DXR2XSR,			/* 0 	  */
    		MCBSP_SRGR_FPER_DEFAULT,			/* 0	  */
    		MCBSP_SRGR_FWID_DEFAULT,			/* 0	  */
 //   	 	MCBSP_SRGR_CLKGDV_OF(40)			/* CLKGDV */
    	 	MCBSP_SRGR_CLKGDV_OF(108)			/* CLKGDV */    	 	
  		),
		
		/* MCR Setup */
  		MCBSP_MCR_DEFAULT,  					/* default values */

		/* RCER Setup */
		#if (C64_SUPPORT)
			MCBSP_RCERE0_DEFAULT,
			MCBSP_RCERE1_DEFAULT,
			MCBSP_RCERE2_DEFAULT,
			MCBSP_RCERE3_DEFAULT, 
		#else	
  			MCBSP_RCER_DEFAULT, 					/* default values */
		#endif
		
		/* XCER Setup */
		#if (C64_SUPPORT)
			MCBSP_XCERE0_DEFAULT,
			MCBSP_XCERE1_DEFAULT,
			MCBSP_XCERE2_DEFAULT,
			MCBSP_XCERE3_DEFAULT, 
		#else
  			MCBSP_XCER_DEFAULT, 					/* default values */
		#endif
		
		/* PCR Setup */
  		MCBSP_PCR_RMK(
    		MCBSP_PCR_XIOEN_SP,				/* 0 */
    		MCBSP_PCR_RIOEN_SP,				/* 0 */
    		MCBSP_PCR_FSXM_INTERNAL,			/* 1 */
    		MCBSP_PCR_FSRM_EXTERNAL,			/* 0 */
    		MCBSP_PCR_CLKXM_OUTPUT,				/* 1 */
    		MCBSP_PCR_CLKRM_OUTPUT,				/* 1 */
    		MCBSP_PCR_CLKSSTAT_0,				/* 0 */
    		MCBSP_PCR_DXSTAT_0,				/* 0 */
    		MCBSP_PCR_FSXP_ACTIVELOW,			/* 1 */
    		MCBSP_PCR_FSRP_ACTIVELOW,			/* 1 */
    		MCBSP_PCR_CLKXP_RISING,				/* 0 */
		MCBSP_PCR_CLKRP_FALLING				/* 0 */
    	)
	};
	
	MCBSP_config(hMcbsp1, &mcbspCfg1);
	
}	/* end of Config_McBSP(void) */



/*******************************************************************/
/* void ProcessTransmitData(void)                                  */
/*                                                                 */
/* This function expands each of the 8-bit ASCII characters in the */
/* transmit string "xmit_msg" into UART transmission 16-bit word   */
/* and place them in the transmit buffer "xmitbuf".  In addition,  */
/* 16-bit Start and 8-bit Stop framing words, respectively, are    */
/* inserted before and after each of the ASCII characters in the   */
/* buffer.                                                         */
/*******************************************************************/
void ProcessTransmitData(void)
{
	int		i;
	short	cnt = 1;
	unsigned char 	xmit_char;
	unsigned short	*xmitbufptr;
	
	/* point to Transmit Buffer	*/
	xmitbufptr = (unsigned short *)xmitbuf;

	for (i=0; i<(sizeof(xmitbuf)/sizeof(unsigned int)); i++)
	{
		xmitbufptr[i] = 0x0000;	/* zero fill buffer	*/
	}

	xmitbufptr = (unsigned short *)xmitbuf;	
	
	/* Process data BYTES in xmit_msg[] and put in xmit buffer	*/
	for (i = 0; i < BUFFER_SIZE; i++)
	{     
	    /*Get transmit character (one byte) from xmit_msg[] and put in xmit buffer*/
		xmit_char	=	xmit_msg[i];
	
		/* Process each BYTE of transmit character	*/
		for (cnt = -1; cnt < 10; cnt++)
		{
			if (cnt == -1)
				*xmitbufptr++ 	= 	0x0000;
			
			else if (cnt == 8 || cnt ==9)
				*xmitbufptr++ 	= 	0xFFFF;
			
			else if (xmit_char & (1 << cnt))
				*xmitbufptr++	=	0xFFFF;
			
			else
				*xmitbufptr++	=	0x0000;
								
		}	/* end for cnt	*/	      
		
	}	/* end for i	*/
	
}	/* end ProcessTransmitData	*/


/*******************************************************************/
/* void ProcessReceiveData(void)                                   */
/*                                                                 */
/* This function decodes the data in the receive buffer, "recvbuf" */
/* and strips the framing start (0x0000) and Stop (0xFFFF) words.  */
/* It calls the subroutine VoteLogic() to determine each bit of    */
/* the ASCII character.  It then puts the result in recv_msg.      */
/*******************************************************************/
void ProcessReceiveData(void)
{
	int	i;
	unsigned char recv_char = 0;
	short cnt = -1;
	short recv_val;
	unsigned short	raw_data;
	unsigned short	*recvbufptr;    /*receive buffer pointer*/

	/* Point to the receive buffer	*/
	recvbufptr	= (unsigned short *)recvbuf;

	/* Process all data in the Receive buffer	*/
	for (i = 0; i < BUFFER_SIZE; i++)
	{
		recv_char = 0;
		
		/* Process each UART frame	*/
		for (cnt = -1; cnt < 10; cnt++)
		{
			if(cnt == -1 || cnt == 8 || cnt == 9)
			{
				/* Ignore Start and Stop bits	*/
				*recvbufptr++;
			}
			else
			{
				/* Get 16-bit data from receive buffer	*/
				raw_data	=	*recvbufptr;
				recvbufptr++;
				
				/* get the value of the majority of the bits	*/
				recv_val	=	VoteLogic(raw_data);
				
				/* put received bit into proper place	*/
				recv_char	+= recv_val << cnt;
			}	
		}	/* end for cnt	*/
	
		/* A full BYTE is decoded. Put in result: recv_msg[i]	*/
		recv_msg[i]	=	recv_char;

	}	/* end for i	*/
	
}	/* end ProcessReceiveData() function	*/


/*******************************************************************/
/* void CheckTestCase(void)                                        */
/*******************************************************************/
int CheckTestCase(void)
{
	unsigned short *source;
	unsigned short *result;
	unsigned int i = 0;
	short cnt = -1;
	int error = 0;
	
	source = (unsigned short *) xmitbuf;
	result = (unsigned short *) recvbuf;
	
	for (i = 0; i < BUFFER_SIZE ; i++)
	{
		for (cnt = -1; cnt < 10; cnt++)
		{
			/* Ignore the start and stop bits */
			if(cnt == -1 || cnt == 8 || cnt ==9)
			{
				source++;
				result++;
			}
			else
			{
				if (*source != *result)
				{
					error = i + 1;
					break;
				}
				source++;
				result++;
			}
		}
	}
	
	return(error);
	
}	/* end CheckTestCase() function */


/*******************************************************************/
/* short VoteLogic(unsigned short)                                 */
/*                                                                 */
/* This function decoded the received character by testing the     */
/* center 4 bits of the baud.  A majority rule is used for the     */
/* decoding.                                                       */
/*******************************************************************/
short VoteLogic(unsigned short value)
{
	short returnvalue;

	switch	((value	>>	6)	& 0x0F)
	{
		case	0:
		case	1:			
		case	2:	
		case	3:				
		case	4:	
		case	5:	
		case	6:	
		case	8:	
		case	9:												
		case	10:
						returnvalue = 0;
						break;	
		case	7:	
		case	11:							
		case	12:	
		case	13:	
		case	14:							
        case	15:
        				returnvalue = 1 ;
        				break;
	}	/* end switch	*/ 
	
	return (returnvalue);

}	/* end VoteLogic() funciton	*/     


/*******************************************************************/
/* EDMA Data Transfer Completion ISRs                              */
/*******************************************************************/

  
interrupt void c_int11(void)  /* DMA 2 */
{
	#if (DMA_SUPPORT)
		transmit_done = TRUE;
		printf("Transmit Completed\n");
	#endif
}

interrupt void c_int09(void)  /* DMA 1 */
{
	#if (DMA_SUPPORT)
		receive_done = TRUE;
		printf("Receive Completed\n");
	#endif
}


interrupt void c_int08(void)
{
	#if (EDMA_SUPPORT)
		if (EDMA_intTest(14))
		{
			EDMA_intClear(14);
			transmit_done = TRUE;
			printf("Transmit Completed\n");
		}
	
		if (EDMA_intTest(15))
		{
			EDMA_intClear(15);
			receive_done = TRUE;
			printf("Receive Completed\n\n");
		}
	#endif
}

⌨️ 快捷键说明

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