1、打開S+core IDE,使用“S+core IDE eCos Project"範本採用預設設置新建一個專案;
2、刪除專案資料夾目錄下的“default_install"資料夾;
3、打開eCos config tool,使用預設範本建立源碼包,並添加“File IO"packages;
4、選中“I/O sub-system—>Serial device drivers—>Hardware serial device drivers",此時其下的SPCE3200的串列埠packages sunplus SCORE/SPCE3200 board serial device drivers由灰色變為高亮色,表示此packages被加入到當前範本中,將被編譯;
5、選中“I/O sub-system—>Serial device drivers—>Termios compatible TTY drivers—>Termios TTY channel #0",並修改其下選項“Termios TTY channel #0 device”的值為“/dev/serial"。
6、以“default.ecc"為檔案名將eCos範本保存至專案目錄下並將其編譯;
7、按照圖 1.5所示的程式流程編寫使用UART讀寫的程式;
8、修改、編譯(Rebuild All)直到沒有任何錯誤;
9、將S2的TX、RX指撥開關撥向上方;
10、使用串列埠連接開發板和PC,並在PC端打開串口除錯助手或超級終端機,設置串列傳輸速率115200,資料位元8位元,停止位1位,無;
//============================================================
//程式功能:
// 使用UART將開發版與PC連接,鍵盤輸入字元由超級終端機顯現出來
//硬體連接:
// 將S2的TX、RX指撥開關撥向上方
//============================================================
#include <cyg/hal/hal_arch.h>
#include <cyg/kernel/kapi.h>
#include <cyg/io/io.h>
#include <stdio.h> // 標準I/O輸入輸出標頭檔
#include <unistd.h> // Unix標準函數定義
#include <cyg/fileio/fileio.h> // POSIX標準文件訪問函數定義
#include <termios.h> // PPSIX終端控制定義
#define STACK_SIZE CYGNUM_HAL_STACK_SIZE_TYPICAL
cyg_uint8 stack[STACK_SIZE]; // 執行緒堆疊
cyg_handle_t h_UART_test; // 執行緒控制碼
cyg_thread UART_test_s; // 執行緒訊息結構體
int serial; // 定義eCos I/O設備(串列埠)的控制碼
//====================================================
// 語法格式:void UART_test(cyg_addrword_t data)
// 功能描述: 主執行緒
//====================================================
void UART_test(cyg_addrword_t data)
{
char test[20]={0,};
char *pTest = test; // 定義串列埠測試緩沖
while(1)
{
read(serial, pTest, 1); // 從串列埠讀取1個字符并保存到pTest中
write(serial, pTest, 1); // 將pTest中的1個字符發送到串列埠
cyg_thread_delay(10); // 執行緒延時10 ticks
}
}
//====================================================
// 語法格式:void cyg_user_start(void)
// 功能描述: 主函數
//====================================================
void cyg_user_start(void)
{
struct termios Opts;
serial = open("/dev/termios0",O_RDWR); // 以讀寫方式打開串列埠
tcgetattr(serial, &Opts); // 得到串列埠終端屬性
cfsetispeed(&Opts,B115200); // 設置輸入波特率為115200Bps
cfsetospeed(&Opts,B115200); // 設置輸出波特率為115200bps
Opts.c_lflag &= ~ECHO; // 設置串列埠終端屬性為不回顯
tcsetattr(serial,TCSANOW,&Opts); // 使串列埠終端屬性生效
cyg_thread_create(0, // 執行緒優先級
UART_test, // 執行緒函數名
(cyg_addrword_t)0, // 執行緒參數
"Main Thread", // 執行緒名稱
(void *)stack, // 執行緒堆疊
STACK_SIZE, // 執行緒堆疊大小
&h_UART_test, // 返回執行緒控制碼
&UART_test_s); // 執行緒訊息結構體
cyg_thread_resume(h_UART_test); // 啟動執行緒
return;
}
運行結果: