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

📄 uart_send.c

📁 zlg公司研发基于CORTEX-M3内核的UART源代码.高质量,高水平.
💻 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 + -