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

📄 uart_function.c

📁 DSP的片子上程序
💻 C
字号:

/************************************************************************/
/* FileName:	Uart_Function.c											*/
/* Function: 	Define  writting function of uart on chip				*/
/************************************************************************/

#include <csl.h>
#include <csl_uart.h>
#include "Timer.h"


#define LENGTH 20

/* Function/ISR prototypes */
interrupt void UartIsr(void);
Uint16 DestData[LENGTH];
Uint16 DataCount = 0;
CSLBool PctoDsp = FALSE;

/****************************************************************/
/*	函数名:		Write_Uart() 									*/
/* 	功能:		通过UART向PC发指定长度的数据					*/
/*	参数:														*/
/*				无												*/
/*  返回值:														*/
/*				无												*/
/****************************************************************/
extern void Write_Uart(unsigned int longth) 
{
	UART_FSET(URLCR, DLAB, 0);				
	Counter = 0;						// 字符发送计数器清0
	GPT_start(hGpt);					// 启动定时器,开始计时
	  
    while(!(Counter>=longth));			// 等待数据发送完毕	
    
    GPT_stop(hGpt);						// 停止定时器
}	

/****************************************************************/
/*	函数名:		Uart_Config() 									*/
/* 	功能:		配置UART控制寄存器								*/
/*	参数:														*/
/*				无												*/
/*  返回值:														*/
/*				无												*/
/****************************************************************/
extern void Uart_Config(void)
{
	/* Set BSR to disable SP2MODE */
    CHIP_FSET(XBSR, SP2MODE,0) ;

    /* Disable all UART events */
    UART_FSET(URLCR,DLAB,0);
    UART_RSET(URIER, UART_RINT);

    /* Reset and  disable FIFOs */
    UART_RSET(URFCR, 0x7);
    UART_RSET(URFCR, 0); 

    /* Set DLL and DLM to values appropriate for the required baudrate */
   	UART_FSET(URLCR, DLAB, 1);	// DLAB = 1 
    //UART_RSET(URDLL, 0x45);		// 9600bps
    UART_RSET(URDLL, 0xE8);		// 9600bps
    UART_RSET(URDLM, 0x01);
    UART_FSET(URLCR, DLAB, 0);  // DLAB = 0

    /* Setup word size, stop bits, parity */
    UART_RSET(URLCR, 0x0B);		// 8 data bits, odd parity, one stop bit

    /* Disable loopback control */
    UART_RSET(URMCR, 0); 
               
    /* UART out of reset */
    UART_FSET(URPECR,URST,1);
    
    /* Temporarily disable all maskable interrupts */
	IRQ_globalDisable();   
	
	/* Clear interrupt enable bit */
	IRQ_disable(IRQ_EVT_RINT2);
	
	/* Clear any pending Timer interrupts */
	IRQ_clear(IRQ_EVT_RINT2);

	/* Place interrupt service routine address at */
	/* associated vector location */
	IRQ_plug(IRQ_EVT_RINT2, &UartIsr);
	
	 /* Enable Timer interrupt */
	IRQ_enable(IRQ_EVT_RINT2);             

	/* Enable all maskable interrupts */
	IRQ_globalEnable();   
}

/*UART的中断程序*/
interrupt void UartIsr(void)
{
 	// Transimit seriz of serial debugger on pc is: 
  	// 1112131415161718191A1B1C1D1E1F2021222324
  	UART_FSET(URLCR, DLAB, 0);
 
    /* wait for RX empty */
    while(!UART_FGET(URLSR,DR));
    DestData[DataCount++] = UART_RGET(URRBR);
   		
 	if(DataCount>=LENGTH)
	{
		DataCount = 0;
		PctoDsp = TRUE;
	}
}

/*****************************************************************************************/
//	No	more
/*****************************************************************************************/

⌨️ 快捷键说明

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