嵌入式實驗四實驗報告
一、實驗目的
學習lm3s9b92的串列埠通訊
學習應用超級終端除錯串列埠
學會應用UART有關的庫函式
二、實驗裝置
計算機、LM3S9B92開發板、USB A型公口轉 Mini B型 5Pin 資料線1 條
三、實驗原理
Stellaris系列ARM的UART具有完全可程式設計、16C550型序列介面的特性。Stellaris系列ARM含有2至3個UART模組。
該指導書在第一部分的1.2節中說明,該開發板使用了FT2232晶片實現usb到串列埠的轉換。並設定在晶片的B通道上使用虛擬COM介面(VCP)。虛擬串列埠(VCP)與LM3s9b92上的UART0模組連線。在安裝FTDI驅動程式後,windows會分配一個序列通訊埠號到VCP通道,並允許windows應用程式(如超級終端)通過USB與LM3s9b92上的UART0進行通訊。 利用Windows超級終端除錯UART的方法
對於該開發板,使用的是USB虛擬的COM埠,無須使用DB9聯結器。因此下面講解一下如何利用Windows附帶的超級終端來除錯UART介面。
Windows附件裡的“超級終端”是個非常實用的應用程式,可以用來除錯電腦的COM序列口,也能很好地支援通過USB虛擬的COM口。以下是超級終端配置COM埠的'過程:
四、實驗要求
採用超級終端作為外部輸入與輸出的介面,實現多位數的相加。即通過UART串列埠分別輸入需要相加的多位數A與B,最後把A和B兩個多位數相加的過程和結果,回顯給使用者。具體實現方法:既可以採用輪詢的方式也可以應用中斷。
五、實驗步驟
1、 連線實驗裝置:使用USB mini B線纜的mini端與開發板ICDI口相連,另一端接到PC機的USB插口上。
2、 根據實驗要求編寫、除錯、執行程式。並要求在程式碼上附上相關的註釋。
#include
#include "inc/hw_ints.h"
#include "inc/hw_memmap.h"
#include "inc/hw_types.h"
#include "driverlib/debug.h"
#include "driverlib/gpio.h"
#include "driverlib/interrupt.h"
#include "driverlib/sysctl.h"
#include "driverlib/uart.h"
#include "grlib/grlib.h"
#include "drivers/kitronix320x240x16_ssd2119_8bit.h"
#include "drivers/set_pinout.h"
#include "systemInit.h"
void uartInit(void)
{
SysCtlPeriEnable(SYSCTL_PERIPH_UART0); // 使能UART模組
SysCtlPeriEnable(SYSCTL_PERIPH_GPIOA); // 使能RX/TX所在的GPIO埠 GPIOPinTypeUART(GPIO_PORTA_BASE, // 配置RX/TX所在管腳為
GPIO_PIN_0 | GPIO_PIN_1); // UART收發功能
UARTConfigSet(UART0_BASE, // 配置UART埠
9600, // 波特率:9600
UART_CONFIG_WLEN_8| // 資料位:8
UART_CONFIG_STOP_ONE | // 停止位:1
UART_CONFIG_PAR_NONE); // 校驗位:無
UARTEnable(UART0_BASE); // 使能UART埠
}
void uartPuts(const char *s)
{
while (*s != '')
{
UARTCharPut(UART0_BASE, *(s++));
}
}
main(void)
{
char c,a[12];
int sum=0,num=0,i;
// jtagWait( ); // 防止 JTAG 失效,重要!
clockInit( ); // 時鐘初始化:晶振, 6MHz
uartInit( ); // UART 初始化
uartPuts("輸入格式 m+n= ");
for (;;)
{
c = UARTCharGet(UART0_BASE); // 等待接收字元
if(c>='0'&&c<='9')//判斷收到的是否為字元{
num=num*10+c-'0'; //將收到的字元轉換為整形儲存 }
else if(c=='+'){ //接收第二個數 sum=sum+num;
num=0;
}
else if(c=='=') //輸出
{
sum=sum+num;
num=0;
for(i=0;sum!=0;i++)
{
a[i]=sum%10;
sum=(sum-a[i])/10;
}
for(i--;i>=0;i--){
UARTCharPut(UART0_BASE, a[i]+'0'); }
UARTCharPut(UART0_BASE, ' '); }
if (c == ' ') // 如果遇到回車
{
UARTCharPut(UART0_BASE, ' '); // 多回顯一個換行}
}
}
3、 書寫實驗報告,要求附上程式流程圖。
六、實驗心得
比較輪詢方式與中斷方式