新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > LM3S9B96 的UART以中斷方式收發(fā)數(shù)據(jù)

LM3S9B96 的UART以中斷方式收發(fā)數(shù)據(jù)

作者: 時(shí)間:2016-11-11 來(lái)源:網(wǎng)絡(luò) 收藏
lm3s9b96的uart發(fā)送和接收都可以進(jìn)入用戶編寫(xiě)的中斷處理函數(shù)。

uart的配置無(wú)非是設(shè)置:波特率、數(shù)據(jù)位、停止位、奇偶校驗(yàn)位等。
下面是用uart1為例,配置成中斷方式收發(fā)數(shù)據(jù)

#include "inc/lm3s9b96.h"
#include "inc/hw_memmap.h"
#include "inc/hw_types.h"
#include "inc/hw_ints.h"
#include "driverlib/interrupt.h"
#include "driverlib/gpio.h"
#include "driverlib/uart.h"
#include "driverlib/sysctl.h"

//*****************************************************************************
//
// 延時(shí)函數(shù)
//
//*****************************************************************************
void Delay(volatile signed long nCount)
{
for(; nCount != 0; nCount--);
}

//*****************************************************************************
//
// Send a string to the UART.
//
//*****************************************************************************
void UARTSend(const unsigned char *pucBuffer, unsigned long ulCount)
{
// Loop while there are more characters to send.
while (ulCount--)
{
// Write the next character to the UART.
UARTCharPutNonBlocking(UART1_BASE, *pucBuffer++);
}
}

//*****************************************************************************
//
// UART1初始化函數(shù)
//
//*****************************************************************************
void UART1_Init(void)
{
// 使能UART1外設(shè)
SysCtlPeripheralEnable(SYSCTL_PERIPH_UART1);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);

// Set GPIO B0 and B1 as UART pins
GPIOPinTypeUART(GPIO_PORTB_BASE, GPIO_PIN_0 | GPIO_PIN_1);
GPIOPinConfigure(GPIO_PB0_U1RX);
GPIOPinConfigure(GPIO_PB1_U1TX);

// Configure the UART1 for 115200, 8-N-1 operation
UARTConfigSetExpClk(UART1_BASE, SysCtlClockGet(), 115200, (UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE | UART_CONFIG_PAR_NONE));

// Enable the UART interrupt
IntEnable(INT_UART1);
UARTIntEnable(UART1_BASE, UART_INT_RX | UART_INT_RT);

// Prompt for text to be entered
//UARTSend((unsigned char *)"hello world", 11);
}


//*****************************************************************************
//
// 主函數(shù)
//
//*****************************************************************************
int main(void)
{
// Set the clocking to run directly from the crystal.
SysCtlClockSet(SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN | SYSCTL_XTAL_16MHZ);

UART1_Init();
IntMasterEnable(); // 開(kāi)總中斷

while (1)
{
}
}

//*****************************************************************************
//
// The UART1 interrupt handler.
//
//*****************************************************************************
void UART1IntHandler(void)
{
unsigned long ulStatus;

// Get the interrrupt status.
ulStatus = UARTIntStatus(UART1_BASE, true);

// Clear the asserted interrupts.
UARTIntClear(UART1_BASE, ulStatus);

// Loop while there are characters in the receive FIFO.
while (UARTCharsAvail(UART1_BASE))
{
// Read the next character from the UART and write it back to the UART.
UARTCharPutNonBlocking(UART1_BASE, UARTCharGetNonBlocking(UART1_BASE));
}
}

本文引用地址:http://butianyuan.cn/article/201611/317010.htm如果想發(fā)送數(shù)據(jù)時(shí),也進(jìn)入中斷處理函數(shù),則將:
UARTIntEnable(UART1_BASE, UART_INT_RX | UART_INT_RT);
改為
UARTIntEnable(UART1_BASE,UART_INT_TX| UART_INT_RX | UART_INT_RT);
按照前面講的中斷映射表的配置,將startup_ewarm.c文件中添加兩處代碼。編譯、運(yùn)行即可。


評(píng)論


技術(shù)專區(qū)

關(guān)閉