?? lm3s-uart0.c
字號:
#include <hw_memmap.h>
#include <hw_types.h>
#include <hw_ints.h>
#include <hw_sysctl.h>
#include <hw_gpio.h>
#include <hw_uart.h>
#include <interrupt.h>
#include <sysctl.h>
#include <gpio.h>
#include <uart.h>
#include <string.h>
#include "LM3S-UART0.H"
#define SysCtlPeriEnable SysCtlPeripheralEnable
/* UART初始化 */
void uart0Init(void)
{
SysCtlPeriEnable(SYSCTL_PERIPH_GPIOA); /* 使能UART0所在的GPIOA端口 */
SysCtlPeriEnable(SYSCTL_PERIPH_UART0); /* 使能UART0模塊 */
GPIOPinTypeUART(GPIO_PORTA_BASE , /* 配置PA0和PA1為UART功能 */
GPIO_PIN_0 | GPIO_PIN_1);
UARTConfigSet(UART0_BASE ,
9600 , /* 波特率:9600 */
UART_CONFIG_WLEN_8 | /* 數(shù)據(jù)位:8 */
UART_CONFIG_STOP_ONE | /* 停止位:1 */
UART_CONFIG_PAR_NONE); /* 校驗位:無 */
UARTFIFOLevelSet(UART0_BASE , /* 設置發(fā)送和接收的FIFO深度 */
UART_FIFO_TX4_8 ,
UART_FIFO_RX4_8);
UARTIntEnable(UART0_BASE , UART_INT_TX); /* 使能發(fā)送中斷 */
IntEnable(INT_UART0); /* 使能UART0總中斷 */
IntMasterEnable(); /* 使能處理器中斷 */
UARTEnable(UART0_BASE); /* 使能UART0端口 */
}
/* 定義發(fā)送數(shù)據(jù)的最大限制長度 */
#define TX_MAX 80
/* 定義全局變量 */
char GcBuf[1 + TX_MAX]; /* 定義緩沖區(qū) */
short GsCnt = 0; /* 發(fā)送計數(shù)器 */
short GsLen = 0; /* 數(shù)據(jù)有效長度 */
tBoolean GbBusy = false; /* 忙標志:true-正在發(fā)送 */
/* false-空閑 */
/* 填充發(fā)送FIFO(填滿FIFO之后就退出,不會等待) */
void uart0FIFOFill(void)
{
for (;;) {
/* 如果已經發(fā)送完畢,則清除忙標志,并退出 */
if ( GsCnt >= GsLen ) {
GbBusy = false;
break;
}
/* 如果發(fā)送FIFO里沒有可用空間,則退出(不必等待) */
if ( !UARTSpaceAvail(UART0_BASE) ) {
break;
}
/* 如果未發(fā)送完,并且發(fā)送FIFO里有可用空間,則填充發(fā)送FIFO */
UARTCharPutNonBlocking(UART0_BASE , GcBuf[GsCnt++]);
}
}
/* 發(fā)送字符串(FIFO中斷方式,高效) */
void uart0FIFOIntPutS(const char *pStr)
{
/* 如果上次發(fā)送還沒有結束,則暫時等待 */
while ( GbBusy );
/* 發(fā)送之前的初始化配置 */
GsCnt = 0;
strncpy(GcBuf , pStr , TX_MAX);
GsLen = strlen(GcBuf);
GbBusy = true;
/* 填充發(fā)送FIFO,啟動中斷發(fā)送過程 */
uart0FIFOFill();
/* 不必等待發(fā)送完畢就退出,其余數(shù)據(jù)的FIFO填充任務由中斷服務函數(shù)完成 */
return;
}
// UART0中斷服務函數(shù)
void UART0_ISR(void)
{
UARTIntClear(UART0_BASE , UART_INT_TX); /* 清除發(fā)送中斷 */
uart0FIFOFill(); /* 填充發(fā)送FIFO */
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -