串列埠驅動設計(基於S3C6410)

2021-08-05 23:43:58 字數 2839 閱讀 1888

串列埠充當的角色有兩個,乙個是資料傳輸,還有乙個就是充當控制台。串列埠通訊分為同步和非同步,我們通常使用的是非同步串列埠。通訊時,雙方先約定好資料幀的格式,即波特率,資料位,停止位,奇偶校驗位等。我們通常使用的是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...