📄 iar-
字号:
/****************************************Copyright (c)****************************************************
** Guangzhou ZHIYUAN electronics Co.,LTD.
**
** http://www.embedtools.com
**
**--------------File Info---------------------------------------------------------------------------------
** File Name: uart_send.c
** Last modified Date: 2007.12.24
** Last Version: v1.1
** Description: Stellaris系列单片机UART发送程序
** UART发送数据最好采用中断方式以便系统去做其它工作.
**--------------------------------------------------------------------------------------------------------
** Created By: Ni Likao
** Created date: 2007.09.17
** Version: v1.0
** Descriptions: 开发板上LED灯的闪烁表示数据正在被发送.
**
**--------------------------------------------------------------------------------------------------------
** Modified by: Kang qinhua
** Modified date: 2008.01.12
** Version: v1.1
** Description:
**
*********************************************************************************************************/
#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_6
#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[] = "welcome to http://www.zlgmcu.com\r\n";
/*********************************************************************************************************
** Function name: UART0_ISR
** Descriptions: UART0中断服务函数,工作在串口发送中断下.
** 用KEIL软件时,在Startup.S中添加该中断函数名
** input parameters: 无
** output parameters: 无
** Returned value: 无
** Created By: Ni Likao
** Created date: 2007.09.17
**--------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
**--------------------------------------------------------------------------------------------------------
*********************************************************************************************************/
void UART0_ISR (void)
{
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--; /* 发送字符数自减 */
}
}
}
/**********************************************************************************************************
** Function name: UARTSend
** Descriptions: 发送数据处理函数,用于串口数据发送.
** 用KEIL软件时,在Startup.S中添加该中断函数名
** input parameters: *pucBuffer,ulCount
** output parameters: 无
** Returned value: 无
** Created By: Ni Likao
** Created date: 2007.09.17
**--------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
**--------------------------------------------------------------------------------------------------------
*********************************************************************************************************/
void UARTSend (const unsigned char *pucBuffer, unsigned long ulCount)
{
while (g_ulCount) { /* 等待直到之前的字符串发送完毕*/
;
}
g_pucBuffer = pucBuffer; /* 保存待传输的数据缓冲 */
g_ulCount = ulCount; /* 保存计数值 */
while (UARTSpaceAvail(UART0_BASE)) { /* 处理传输中断 */
UARTCharNonBlockingPut(UART0_BASE, *g_pucBuffer++); /* 发送下一个字符 */
g_ulCount--; /* 发送字符数自减 */
}
}
/*********************************************************************************************************
** Function name: main
** Descriptions: 该范例程序演示了串口发送程序,数据通过串口从单片机向上位机发送数据.
** UART将被配置为 9600波特率,8-n-1模式持续发送数据。开发板上LED灯的
** 闪烁表示数据正在被发送.
** input parameters: 无
** output parameters: 无
** Returned value: 无
** Created By: Ni Likao
** Created date: 2007.09.17
**--------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
**--------------------------------------------------------------------------------------------------------
*********************************************************************************************************/
int main (void)
{
SysCtlClockSet(SYSCTL_SYSDIV_16 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN |
SYSCTL_XTAL_6MHZ); /* 设置晶振为时钟源 */
SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0); /* 使能UART外设 */
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA); /* 使能GPIOA外设 */
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB); /* 使能GPIOB外设 */
IntMasterEnable(); /* 开总中断 */
GPIOPinTypeUART(GPIO_PORTA_BASE, UART0_PIN); /* 配置UART功能脚 */
/* 设置GPIO的A0和A1为UART引脚 */
/* (A0->RXD,A1->TXD) */
GPIODirModeSet(GPIO_PORTB_BASE, TXD_LED,
GPIO_DIR_MODE_OUT); /* 设置 GPIO B0和B1为输出口 */
GPIOPadConfigSet(GPIO_PORTB_BASE, TXD_LED, GPIO_STRENGTH_2MA,
GPIO_PIN_TYPE_STD); /* 配置PB6口为2ma驱动电流 */
/* 及PULL-PUSH类型 */
GPIOPinWrite(GPIO_PORTB_BASE, TXD_LED, 0); /* 初始化IO口 */
UARTConfigSet(UART0_BASE, 9600, (UART_CONFIG_WLEN_8 |
UART_CONFIG_STOP_ONE |
UART_CONFIG_PAR_NONE)); /* 配置UART 为 9600波特率 */
UARTIntClear(UART0_BASE, UART_INT_TX); /* 8-N-1模式发送数据 */
UARTIntEnable(UART0_BASE, UART_INT_TX); /* 设置UART中断类型 */
IntEnable(INT_UART0); /* UART中断使能 */
while(1) {
UARTSend(g_pucString, sizeof(g_pucString) - 1); /* 向UART发送一个字符串 */
GPIOPinWrite(GPIO_PORTB_BASE, TXD_LED,
GPIOPinRead(GPIO_PORTB_BASE, TXD_LED) ^ TXD_LED); /* 翻转GPIO B4 端口 */
}
}
/*********************************************************************************************************
END FILE
*********************************************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -