📄 uart_send.c
字号:
#include "hw_ints.h"
#include "hw_memmap.h"
#include "hw_types.h"
#include "gpio.h"
#include "interrupt.h"
#include "sysctl.h"
#include "uart.h"
#define TXD_LED GPIO_PIN_7
#define UART0_PIN GPIO_PIN_0 | GPIO_PIN_1
static volatile const unsigned char *g_pucBuffer = 0; // 发送数据缓冲区指针
static volatile unsigned long g_ulCount = 0; // 发送数据个数
static const unsigned char g_pucString[] = "wellcomg to http://www.zlgmcu.com\r\n";
void UART0_ISR (void) // UART0中断服务函数
{
unsigned long ulStatus;
ulStatus = UARTIntStatus(UART0_BASE, true); // 获得中断状态。
UARTIntClear(UART0_BASE, ulStatus); // 清除等待响应的中断。
if(ulStatus & UART_INT_TX) // 检查是否有未响应的传输中断。
{
while(g_ulCount && UARTSpaceAvail(UART0_BASE)) // 处理传输中断。
{
UARTCharNonBlockingPut(UART0_BASE, *g_pucBuffer++); // 发送下一个字符。
g_ulCount--; // 发送字符数自减。
}
}
}
void UARTSend(const unsigned char *pucBuffer, unsigned long ulCount) // 发送数据处理函数
{
while(g_ulCount); // 等待,直到之前的字符串发送完毕。
g_pucBuffer = pucBuffer; // 保存待传输的数据缓冲。
g_ulCount = ulCount; // 保存计数值。
// UARTIntDisable(UART0_BASE, UART_INT_TX); // 使能发送前先禁能。
// 当FIFO没有空间或g_ulCount==0时退出
while(UARTSpaceAvail(UART0_BASE)&&g_ulCount) // 处理传输中断。
{
UARTCharNonBlockingPut(UART0_BASE, *g_pucBuffer++); // 发送下一个字符。
g_ulCount--; // 发送字符数自减。
}
// UARTIntEnable(UART0_BASE, UART_INT_TX); // 使能UART发送。
}
int main(void)
{
SysCtlClockSet(SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN |
SYSCTL_XTAL_6MHZ); // 设置晶振为时钟源。
SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD);
IntMasterEnable();
GPIODirModeSet(GPIO_PORTA_BASE, UART0_PIN, GPIO_DIR_MODE_HW);
// 设置GPIO的A0和A1为UART引脚。
// (A0->RXD,A1->TXD)
GPIODirModeSet( GPIO_PORTD_BASE, TXD_LED, // 设置 GPIO B0和B1为输出口
GPIO_DIR_MODE_OUT);
GPIOPinWrite(GPIO_PORTD_BASE, TXD_LED, 0); // 初始化IO口。
UARTConfigSet(UART0_BASE, 9600, (UART_CONFIG_WLEN_8 |
UART_CONFIG_STOP_ONE |
UART_CONFIG_PAR_NONE));
// 配置UART 为 9600波特率, 8-N-1模式发送数据。
UARTIntEnable(UART0_BASE, UART_INT_TX);
IntEnable(INT_UART0);
while(1)
{
UARTSend(g_pucString, sizeof(g_pucString) - 1); // 向UART发送一个字符串。
GPIOPinWrite( GPIO_PORTD_BASE, TXD_LED,
GPIOPinRead(GPIO_PORTD_BASE, TXD_LED) ^ TXD_LED);
// 翻转GPIO B4 端口
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -