串列埠充當的角色有兩個,乙個是資料傳輸,還有乙個就是充當控制台。串列埠通訊分為同步和非同步,我們通常使用的是非同步串列埠。通訊時,雙方先約定好資料幀的格式,即波特率,資料位,停止位,奇偶校驗位等。我們通常使用的是rs232的9幀串列埠,其中,最重要的是2,3,5腳。
2:rxd接收資料
3:txd傳送資料
5:gnd接地
接下來,我們開始進行串列埠的初始化。在此使用的開發板是飛凌s3c6410。初始化內容主要分為以下四個方面,引腳設定,幀格式設定,工作模式設定,波特率設定。
由核心板原理圖上可找到rxd和txd是通過gpa這個暫存器控制的,所以,在晶元手冊中找到gpacon這個暫存器。
由晶元手冊可得,只要設定gpacon的0到3位和4到7位來分別設定rxd和txd即可。這裡很簡單,只要如下設定
gpacon &=~0xff; /*先將低八位清零*/
gpacon |= 0x22;
引入乙個暫存器ulcon0,線控制暫存器,主要是設定資料格式。
ulcon0暫存器低兩位主要設定資料位個數,第二位設定停止位個數,校驗位暫時不需要使用,其他位使用預設的值。
ulcon0 =0b11;
引用ucon0暫存器,只要設定這個暫存器中的0:3位,其中0:1位設定收模式,2:3位設定發模式,在這裡都設定為polling mode,即輪詢模式,也就是查詢等待模式。
ucon0 =0b0101;
這裡引入兩個暫存器ubrdiv0和udivdlot0,可以從晶元手冊中得到兩個暫存器的值,串列埠的時鐘是由pclk來提供的,在時鐘體系那節中明確寫出pclk被設定成66mhz,波特率一般設定為115200,故ubrdiv0=pclk/(baud*16)-1取整,而udivdlot0則是對小數部分乘上16,取整後查表得出udivdlot0的值,由於pclk等於66mhz,baud為115200,(66000000/(115200*16))-1=34.8,故ubrdiv0=34,0.8*16=12.8,12查表得udivdlot0為0xdddd。
至此,串列埠初始化程式已經完成,但是如何測試串列埠正常工作呢,這裡需要加兩個函式,接收字元和傳送字元。
引入utrstat暫存器
主要檢查這個暫存器第1位是否為0,如果為0,表明前一次資料還沒有傳送完,如果等於1,則可以進行傳送資料,在程式中用while迴圈,將字元送給utxh0暫存器即可。
void putc(unsigned
char ch)
這裡還是使用utrstat暫存器,使用第0位,第0位若為0,表明還沒有接收到資料,為1表明接收到資料,當接收到資料的時候送到urxh0暫存器中進行返回。
unsigned
char getc(void)
else
putc(ret);
return ret;
}
附上整體程式
#define gpacon (*((volatile unsigned short *)
0x7f008000))
#define ulcon0 (*((volatile unsigned long *)
0x7f005000))
#define ucon0 (*((volatile unsigned long *)
0x7f005004))
#define utrstat0 (*((volatile unsigned long *)
0x7f005010))
#define ubrdiv0 (*((volatile unsigned short *)
0x7f005028))
#define utxh0 (*((volatile unsigned char *)
0x7f005020))
#define urxh0 (*((volatile unsigned char *)
0x7f005024))
#define udivslot0 (*((volatile unsigned short *)
0x7f00502c))
#define pclk 66500000
#define baud 115200
void uart_init()
void putc(unsigned char ch)
unsigned char getc(void)
else
putc(ret);
return ret;
}
linux串列埠終端驅動 s3c6410平台(二)
1 終端裝置 在linux系統中,終端是一種字元型裝置,它有多種型別,通常使用tty來簡稱各種型別的終端裝置。tty是teletype的縮寫,teletype是最早出現的一種終端裝置,很像電傳打字機,是由teletype公司生產的。linux中包含如下幾類終端裝置 1 串列埠終端 dev ttysn...
S3C6410的IIS驅動修改
因為硬體是將語音晶元從ac97,修改為其它晶元,所以需要更改驅動程式為iis方式 我認為有幾點需要注意 1 6410有三個iis通道,iis0,iis1和iis2,驅動程式預設是使用iis2,所以需要修改的地方為 hwctxt.cpp檔案 pclk gate和sclk gate暫存器,用於選擇時鐘源...
S3C6410按鍵驅動 中斷方式
本文 cpp view plain copy include include include include include include include include include include include include include 新版核心 include include st...