文章目錄
串口通訊的格式:
起始位 資料位元 同位位元 停止位
傳輸速率:
每一個資料位元的寬度定於發送傳輸速率的倒數。微機非同步串列通訊中,常用的傳輸速率為110、
150、300、600、1200、2400、4800、9600、57600、115200 等。
電氣特性:
要完成基本的通訊功能,實際上值需要RXD、TXD 和GND 即可,但由於RS-232-C 標準所
定義的高、低電平訊號於S3C2440A 系統的LVTTL 電路定義的高、低電平訊號完全不同,LVTTL
的標準邏輯“1”對應2-3.3V,標準邏輯“0”對應0-0.4V,而RS-232C 標準採用負邏輯方
式,邏輯“1”對應-5――15V,標準邏輯“0”對應+5-+15V。顯然兩者間要進行通訊,必
須經過電平的轉換,轉換晶片採用max202。
RS-232C 標準規定,當誤碼率小於4%時,要求導線的電容值應小於2500PF。
對於普通導線,其電容值約為170PF/M。則允許距離L=2500PF/(170PF/M)=15M.這一距離的計
算,是偏於保守的,實際應用中,當使用9600bps,普通雙絞屏蔽線時,距離可達30~35 米。
零Modem 的最簡連線(3 線制)
由此可以看出,串口只是適合於短距離的地方,在選擇每一種器件的時候都必須考慮其使用場合,精度,溫度影響,等等。否則前功盡棄。
串口的模組功能圖:
其中包括,控制單元,接受移位,發送移位, 接受/發送fifo模組,傳輸速率產生器。
編程實現:
1)設定串口傳輸格式,資料位元數,同位位元,停止位
2)設定傳輸速率產生器的時鐘源、設定串口工作方式(查詢方式(polling mode), 中斷模式(interrupt mode), DMA( direct memory access))
3)通過各種狀態標誌,或者中斷服務子程式發送、接受資料
原始碼:
AREA |DATA|, CODE, READONLY
ENTRY
;LDR R13,=0x1000 /*將本句注釋掉發現似乎沒有什麼影響,不知道寫上為何用意?刪除後執行效果一樣!*/
IMPORT rs232Main
B rs232Main
END
/*宏定義*/
#define ULCON0 (*(volatile unsigned *)0X50000000) //UART線控制寄存器
#define UCON0 (*(volatile unsigned *)0X50000004) //UART控制寄存器
#define UFCON0 (*(volatile unsigned *)0X50000008) //FIFO控制寄存器
#define UTRSTAT0 (*(volatile unsigned *)0X50000010) //UART狀態寄存器
#define UBRDIV0 (*(volatile unsigned *)0X50000028) //傳輸速率
#define UTXH0 (*(volatile unsigned *)0X50000020)
#define URXH0 (*(volatile unsigned *)0X50000024)
#define GPBDAT (*(volatile unsigned *)0X58000054)
void rs232Main()
{
char buf;
ULCON0 &= 0xffffff00;/*將0-7位置零*/
ULCON0 |= 0x03;/*設定為8位,無同位,停止位1位,正常模式*/
UCON0 = 0X0805;/*查詢方式(polling mode)正常運行模式,不產生,接受或者發送錯誤中斷,串口時鐘是PCLK,*/
/*計算公式:UBRDIVn = (int)( UART clock / ( buad rate x 16) ) - 1*/
/*26+1 = 27 27*16*115200 PCLK 約等於 50M*/
UBRDIV0 = 0x1a; /*設定傳輸速率為115200*/
while (1)
{
while (UTRSTAT0 & 0x01)
{
buf = URXH0;
while (!(UTRSTAT0 & 0X04));
UTXH0 = buf;
}
}//這裡必須使用while(1)不然,其會執行到linux的作業系統上去,最開始還不知道是什麼原因...
}
位址範圍
Please select which region to write : Esc to abort
0 : offset 0x00000000, size 0x00020000 [boot]
1 : offset 0x00020000, size 0x00060000 [bootParam]
2 : offset 0x00080000, size 0x00100000 [pic]
3 : offset 0x00180000, size 0x00380000 [MyApp]
4 : offset 0x00500000, size 0x00300000 [kernel]/*緊跟其後的就是linux核心*/
5 : offset 0x00800000, size 0x03c00000 [fs_yaffs]/*檔案系統*/
6 : offset 0x04400000, size 0x00080000 [eboot]
7 : offset 0x04480000, size 0x03b80000 [wince]
--------------------------------------------------------------堅持不懈、追求卓越--------------------------------------------------------------------------