📄 uart.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 + -