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

📄 uart.c

📁 hyesco AT91RM9200 ucos-ii source code
💻 C
📖 第 1 页 / 共 3 页
字号:
{
    //* Disable interrupts
    pUSART->US_IDR = (unsigned int) -1;

    //* Reset receiver and transmitter
    pUSART->US_CR = AT91C_US_RSTRX | AT91C_US_RSTTX | AT91C_US_RXDIS | AT91C_US_TXDIS;

	//* Write the Timeguard Register
	AT91F_US_SetTimeguard(pUSART, timeguard);
	
	//* Define the USART mode
    pUSART->US_MR = mode;
	
	//* Define the baud rate divisor register
	AT91F_US_SetBaudrate(pUSART, main_Clock, baudRate);

    //* Clear Transmit and Receive Counters
    //AT91F_PDC_Open((AT91PS_PDC) &(pUSART->US_RPR));
    pUSART->US_RHR=0x0;
    pUSART->US_THR=0x0;
    

    

}

//*----------------------------------------------------------------------------
//* \fn    AT91F_US_EnableRx
//* \brief Enable receiving characters
//*----------------------------------------------------------------------------
void AT91F_US_EnableRx (
	AT91PS_USART pUSART)     // \arg pointer to a USART controller
{
    //* Enable receiver
    pUSART->US_CR = AT91C_US_RXEN;
}

//*----------------------------------------------------------------------------
//* \fn    AT91F_US_EnableTx
//* \brief Enable sending characters
//*----------------------------------------------------------------------------
void AT91F_US_EnableTx (
	AT91PS_USART pUSART)     // \arg pointer to a USART controller
{
    //* Enable  transmitter
    pUSART->US_CR = AT91C_US_TXEN;
}

//*----------------------------------------------------------------------------
//* \fn    AT91F_US_ResetRx
//* \brief Reset Receiver and re-enable it
//*----------------------------------------------------------------------------
void AT91F_US_ResetRx (
	AT91PS_USART pUSART)     // \arg pointer to a USART controller
{
	//* Reset receiver
	pUSART->US_CR = AT91C_US_RSTRX;
    //* Re-Enable receiver
    pUSART->US_CR = AT91C_US_RXEN;
}

//*----------------------------------------------------------------------------
//* \fn    AT91F_US_ResetTx
//* \brief Reset Transmitter and re-enable it
//*----------------------------------------------------------------------------
void AT91F_US_ResetTx (
	AT91PS_USART pUSART)     // \arg pointer to a USART controller
{
	//* Reset transmitter
	pUSART->US_CR = AT91C_US_RSTTX;
    //* Enable transmitter
    pUSART->US_CR = AT91C_US_TXEN;
}

//*----------------------------------------------------------------------------
//* \fn    AT91F_US_DisableRx
//* \brief Disable Receiver
//*----------------------------------------------------------------------------
void AT91F_US_DisableRx (
	AT91PS_USART pUSART)     // \arg pointer to a USART controller
{
    //* Disable receiver
    pUSART->US_CR = AT91C_US_RXDIS;
}

//*----------------------------------------------------------------------------
//* \fn    AT91F_US_DisableTx
//* \brief Disable Transmitter
//*----------------------------------------------------------------------------
void AT91F_US_DisableTx (
	AT91PS_USART pUSART)     // \arg pointer to a USART controller
{
    //* Disable transmitter
    pUSART->US_CR = AT91C_US_TXDIS;
}


//*----------------------------------------------------------------------------
//* \fn    AT91F_US_TxReady
//* \brief Return 1 if a character can be written in US_THR
//*----------------------------------------------------------------------------
unsigned int AT91F_US_TxReady (
	AT91PS_USART pUSART )     // \arg pointer to a USART controller
{
    return (pUSART->US_CSR & AT91C_US_TXRDY);
}

//*----------------------------------------------------------------------------
//* \fn    AT91F_US_RxReady
//* \brief Return 1 if a character can be read in US_RHR
//*----------------------------------------------------------------------------
unsigned int AT91F_US_RxReady (
	AT91PS_USART pUSART )     // \arg pointer to a USART controller
{
    return (pUSART->US_CSR & AT91C_US_RXRDY);
}

//*----------------------------------------------------------------------------
//* \fn    AT91F_US_Error
//* \brief Return the error flag
//*----------------------------------------------------------------------------
unsigned int AT91F_US_Error (
	AT91PS_USART pUSART )     // \arg pointer to a USART controller
{
    return (pUSART->US_CSR &
    	(AT91C_US_OVRE |  // Overrun error
    	 AT91C_US_FRAME | // Framing error
    	 AT91C_US_PARE));  // Parity error
}

//*----------------------------------------------------------------------------
//* \fn    AT91F_US_PutChar
//* \brief Send a character,does not check if ready to send
//*----------------------------------------------------------------------------
void AT91F_US_PutChar (   
	AT91PS_USART pUSART,
	 int character )
{
        pUSART->US_THR = (character&0x1ff);
}

//*----------------------------------------------------------------------------
//* \fn    AT91F_US_GetChar
//* \brief Receive a character,does not check if a character is available
//*----------------------------------------------------------------------------
int AT91F_US_GetChar (
	const AT91PS_USART pUSART)
{   while(!AT91F_US_RxReady(pUSART));
    return((pUSART->US_RHR) & 0x1FF);
}
//*----------------------------------------------------------------------------
//*\fn AT91F_US_GetChar_Timeout
//*\brief Receive a character with Timeout
//*----------------------------------------------------------------------------
volatile int AT91F_US_GetChr_Timeout(const unsigned timeout,AT91PS_USART pUSART)
{
   unsigned long counter=timeout*400;
   while((!(pUSART->US_CSR & AT91C_US_RXRDY))&&(counter>0))
   counter--;
   if(!(pUSART->US_CSR & AT91C_US_RXRDY))
   return -1;
   else
   return((volatile int)pUSART->US_RHR&0x1ff);
}

//*----------------------------------------------------------------------------
//*\fn AT91F_US_Flush
//*\Receive a character
//*----------------------------------------------------------------------------
unsigned int AT91F_US_Flush(AT91PS_USART pUSART)
{   
    int  temp;
    if(pUSART->US_CSR & AT91C_US_RXRDY)
    {   
        temp=pUSART->US_RHR&0x1ff;
        return 1;
    }
    else
        return 0;
}
//-------------------------------------------------------------------------------
//*\AT91F_US_Sputs
//Send a character,check if the Character is available
//-------------------------------------------------------------------------------
unsigned int AT91F_US_Sputs(AT91PS_USART pUSART,int ch)
{   
    while(!((pUSART->US_CSR) &AT91C_US_TXRDY));
    AT91F_US_PutChar(pUSART,ch);
    return 1;
}
//-----------------------------------------------------------------------------
//* \fn    AT91F_US_PutStr
//*\brief Send str,does not check if the str is available
//*----------------------------------------------------------------------------
void AT91F_US_PutStr(AT91PS_USART pUSART, char str[256])
{
     unsigned int i;
     unsigned int sz=0;
     sz=strlen(str);
     for(i=0;i<sz;i++) 
     {      
            while(!(AT91F_US_Sputs(pUSART,str[i])));
            
     }
}  


//-----------------------------------------------------------------------------
//*\fn AT91F_US_Printf
//*\brief Formatted Output String
//*----------------------------------------------------------------------------
void AT91F_US_Printf(char *fmt,...)
{
    va_list argptr;
    char temp_buf[256];
    va_start(argptr, fmt);
    vsprintf(temp_buf, fmt, argptr);
    AT91F_US_PutStr((AT91PS_USART)AT91C_BASE_US0,temp_buf);
    va_end(argptr);
}



//*----------------------------------------------------------------------------
//* \fn    AT91F_SDRC_CfgPIO
//* \brief Configure PIO controllers to drive SDRC signals
//*----------------------------------------------------------------------------
void AT91F_SDRC_CfgPIO (void)
{
	// Configure PIO controllers to periph mode
	AT91F_PIO_CfgPeriph(
		AT91C_BASE_PIOC, // PIO controller base address
		((unsigned int) AT91C_PC20_D20     ) |
		((unsigned int) AT91C_PC21_D21     ) |
		((unsigned int) AT91C_PC30_D30     ) |
		((unsigned int) AT91C_PC22_D22     ) |
		((unsigned int) AT91C_PC31_D31     ) |
		((unsigned int) AT91C_PC23_D23     ) |
		((unsigned int) AT91C_PC16_D16     ) |
		((unsigned int) AT91C_PC24_D24     ) |
		((unsigned int) AT91C_PC17_D17     ) |
		((unsigned int) AT91C_PC25_D25     ) |
		((unsigned int) AT91C_PC18_D18     ) |
		((unsigned int) AT91C_PC26_D26     ) |
		((unsigned int) AT91C_PC19_D19     ) |
		((unsigned int) AT91C_PC27_D27     ) |
		((unsigned int) AT91C_PC28_D28     ) |
		((unsigned int) AT91C_PC29_D29     ), // Peripheral A
		0); // Peripheral B
}





//*----------------------------------------------------------------------------
//* \fn    AT91F_US0_CfgPMC
//* \brief Enable Peripheral clock in PMC for  US0
//*----------------------------------------------------------------------------
void AT91F_US0_CfgPMC (void)
{
	AT91F_PMC_EnablePeriphClock1(
		(AT91PS_PMC)AT91C_BASE_PMC, // PMC controller base address
        (AT91PS_CKGR)AT91C_BASE_CKGR, //CKGR
		((unsigned int) 1 << AT91C_ID_US0));
}

//*----------------------------------------------------------------------------
//* \fn    AT91F_US0_CfgPIO
//* \brief Configure PIO controllers to drive US0 signals
//*----------------------------------------------------------------------------
void AT91F_US0_CfgPIO (void)
{
	// Configure PIO controllers to periph mode
	AT91F_PIO_CfgPeriph(
		(AT91PS_PIO)AT91C_BASE_PIOA, // PIO controller base address
		((unsigned int) AT91C_PA17_TXD0    ) |
		((unsigned int) AT91C_PA18_RXD0    ) , // Peripheral A
		0); // Peripheral B
}




#endif // lib_AT91RM9200_H
//*---------------------------------------------------------------------------------
//*Init usart0
//*---------------------------------------------------------------------------------
void AT91F_US0_Init(void)
{
  
  //*step1 Drive US0 signals
  AT91F_US0_CfgPIO ();
//*step2 Enable Peripheral clock in PMC for  US0 
 AT91F_US0_CfgPMC();
//*step3 configure US0
  AT91F_US_Configure((AT91PS_USART)AT91C_BASE_US0,MCK,AT91C_US_ASYNC_MODE,BAUD_RATE,TIME_GUARD);
//*step4 Enable Tx and Rx
  AT91F_US_EnableTx((AT91PS_USART)AT91C_BASE_US0);
  AT91F_US_EnableRx((AT91PS_USART)AT91C_BASE_US0);
  
}
//*----------------------------------------------------------------------------
//* \fn    AT91F_DBGU_CfgPIO
//* \brief Configure PIO controllers to drive DBGU signals
//*----------------------------------------------------------------------------
__inline void AT91F_DBGU_CfgPIO (void)
{
	// Configure PIO controllers to periph mode
	AT91F_PIO_CfgPeriph(
		AT91C_BASE_PIOA, // PIO controller base address
		((unsigned int) AT91C_PA31_DTXD    ) |
		((unsigned int) AT91C_PA30_DRXD    ), // Peripheral A
		0); // Peripheral B
}

//*---------------------------------------------------------------------------------
//*Init DBUG
//*---------------------------------------------------------------------------------
void AT91F_DBUG_Init(void)
{
  // Open PIO for DBGU
  AT91F_DBGU_CfgPIO();
    // Configure DBGU
	AT91F_US_Configure (
		(AT91PS_USART) AT91C_BASE_DBGU,          // DBGU base address
		60000000,             // 60 MHz
		AT91C_US_ASYNC_MODE,  // mode Register to be programmed
		115200 ,              // baudrate to be programmed

⌨️ 快捷键说明

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