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

📄 uart.c

📁 LPC1700在线升级方案V1.00
💻 C
字号:
/****************************************Copyright (c)****************************************************
**                            Guangzhou ZLGMCU Development Co., LTD
**
**                                 http://www.zlgmcu.com
**
**--------------File Info---------------------------------------------------------------------------------
** File name:           crc.c
** Last modified Date:  2011-12-23
** Last Version:        V1.0
** Descriptions:        The u16CRC_Calc16() function example template
**
**--------------------------------------------------------------------------------------------------------
** Created by:          Liu zhipeng
** Created date:        2011-12-23
** Version:             V1.00
** Descriptions:        整理应用程序
**
**--------------------------------------------------------------------------------------------------------
** Modified by:         
** Modified date:       
** Version:             
** Descriptions:        
**
**--------------------------------------------------------------------------------------------------------
** Modified by:        
** Modified date:      
** Version:            
** Descriptions:       
**
** Rechecked by:
*********************************************************************************************************/
#include <LPC17xx.h>
#include "uart.h"

/* UART line status register (LSR) bit definitions */
#define LSR_RDR		0x01
#define LSR_OE		0x02
#define LSR_PE		0x04
#define LSR_FE		0x08
#define LSR_BI		0x10
#define LSR_THRE	0x20
#define LSR_TEMT	0x40
#define LSR_RXFE	0x80

/*****************************************************************************
** Function name:	vUARTInit
**
** Descriptions:	Initialize UART0 port, setup pin select, clock, parity,
**                  stop bits, FIFO, etc.
**
** Parameters:		u32BaudRate - UART baudrate
**
** Returned value:	None
**
*****************************************************************************/
void vUARTInit(uint32_t u32BaudRate)
{
	uint32_t Fdiv;
	uint32_t regVal;

	/* Not using interrupts */
	NVIC_DisableIRQ(UART0_IRQn);

	/* UART I/O config */
	LPC_PINCON->PINSEL0 |= (0x01 << 4)|(0x01 << 6); 
    LPC_SC->PCONP |= 0x08;                                              /* 打开串口0功能                */    

	LPC_UART0->LCR = 0x83;             /* 8 bits, no Parity, 1 Stop bit */
	Fdiv = ((SystemFrequency/4)/16)/u32BaudRate ;	/*baud rate */

	LPC_UART0->DLM = Fdiv / 256;
	LPC_UART0->DLL = Fdiv % 256;
	LPC_UART0->LCR = 0x03;		/* DLAB = 0 */
	LPC_UART0->FCR = 0x07;		/* Enable and reset TX and RX FIFO. */

	/* Read to clear the line status. */
	regVal = LPC_UART0->LSR;

	/* Ensure a clean start, no data in either TX or RX FIFO. */
	while ( (LPC_UART0->LSR & (LSR_THRE|LSR_TEMT)) != (LSR_THRE|LSR_TEMT) );

	while ( LPC_UART0->LSR & LSR_RDR )
	{
		regVal = LPC_UART0->RBR;	/* Dump data from RX FIFO */
	}
}

/*****************************************************************************
** Function name:	vUARTReceive
**
** Descriptions:	Reads received data from UART0 FIFO
**
** Parameters:		pu8Buffer - Pointer to buffer in which received characters
** 					are to be stored.
**
** Returned value:	Number of character read out of receive FIFO.
**
*****************************************************************************/
uint8_t u8UARTReceive(uint8_t *pu8Buffer)
{
	uint8_t u8Len = 0;

	if (LPC_UART0->LSR & LSR_RDR)
	{
		*pu8Buffer = LPC_UART0->RBR;
		u8Len++;
	}
	return u8Len;
}

/*****************************************************************************
** Function name:	vUARTSend
**
** Descriptions:	Send a block of data to the UART0.
**
** parameters:		pu8Buffer - Pointer to buffer containing data to be sent.
** 					u32Len - Number of bytes to send.
**
** Returned value:	None
**
*****************************************************************************/
void vUARTSend(uint8_t *pu8Buffer, uint32_t u32Len)
{
	while ( u32Len != 0 )
	{
		/* Send character to UART */
		LPC_UART0->THR = *pu8Buffer;
		/* Wait until transmission is complete */
		while ((LPC_UART0->LSR & LSR_TEMT) == 0);
		pu8Buffer++;
		u32Len--;
	}
}

/******************************************************************************
**                            End Of File
******************************************************************************/

⌨️ 快捷键说明

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