串列埠位址及暫存器功能詳細資料

2021-06-07 17:49:20 字數 3282 閱讀 5002

因為linux在初始化時間以後就初始化了tty,tty的初始過程包含了串列埠裝置(com1和com2)的初始化,為了理解其中內容,我從轉來了相關的說明。關於linux初始化這部分的分析,我應該在讀完這部分內容後一段時間寫出來,因為畢竟自己也是在邊讀**邊學習麼。雖然發揚愚公移山的精神,但是什麼時候才能寫出自己的作業系統啊。唉~~~~~~~~,漫長啊。

pc機上,com1和com2的位址是3f8~3ff 及2f8~2ff,在這個範圍內的每個位址都有不同的功能,這些功能分別通過暫存器來實現,讀寫這些暫存器就可以執行與串列埠相關的功能。而所謂的暫存器就是暫時存放資訊的地方,這些被存放在此的資訊是以位的形式儲存,通常以8個位(乙個位元組)作為乙個單位。讀寫這些暫存器位址的同時,也就是讀取這些代表的狀態或控制某些功能。

com1

com2

暫存器名稱

簡稱3f8

2f8波特率分頻器(低八位)

bdr3f9

2f9波特率分頻器(高八位)

bdr3f8

2f8傳送資訊/接收資訊暫存器

dr3f9

2f9中斷啟動暫存器

ier3fa

2fa中斷辨識暫存器

iir3fb

2fb傳輸線控制暫存器

lcr3fc

2fc數據機控制暫存器

mcr3fd

2fd傳輸線狀態暫存器

lsr3fe

2fe數據機狀態暫存器

msr上表中,3f8,3f9及2f8,2f9分別有兩種功能,顯然還需要其他暫存器的訊號來加以區別。

在序列通訊中,這一點是通過使用傳輸線控制暫存器(lcr)上的第7位來實現的。這個位被稱為分頻器鎖存器訪問位(divistor latch access bit,dlab),當dlab為0時,表示讀寫資訊暫存器和中斷啟動暫存器;當dlab為1時,表示讀寫波特率分頻器的內容。

以下是各暫存器的說明:

l        bdr:設定使用序列通訊的傳輸速度。

串列埠波特率和資料格式的設定:

首先向lcr(傳輸線控制暫存器)的高位寫入1(即dlab為1),然後再設定波特率:在基位址和基位址+1的地方寫入的資料為1843200/(16*波特率)。然後設定lcr,最後設定modem控制暫存器和中斷允許暫存器。波特率數值=1843200/(16*波特率)(十進位制,可轉化為十六進製制)

outportb(0x3fb,0x80); 對lcr的最高位置『1',是說明以下為輸入波特率因子

outportb(0x3f8,0x0c); //outportb(0x3f8+0,0x0c)輸入波特率因子的低8位/9600

outportb(0x3f9,0x00); //outportb(0x3f8+1,0x00) 輸入波特率因子的高8位

l        dr  先令dlab為0,再讀取3f8就等於讀取被傳送到com1的資訊。若將資訊寫入3f8,則資訊會被放入傳送暫存器中,並被晶元內的移位暫存器一位接著一位地送出去。

l        ier  用來啟動晶元中的4種中斷,該位為1時表示該中斷被啟動。

bit0:接收的資訊有效中斷啟動。

bit1:傳送器保持暫存器已空中斷啟動

bit2:接收器連線狀態中斷啟動

bit3:數據機狀態中斷啟動

bit4-bit7:永遠為0

outportb(0x3f9,0x01); //啟動中斷,接收資料有效

l        iir  通過讀取此暫存器可以知道中斷的產生是由誰所引發。

bit0:為0時表示尚有中斷未處理;為1時表示無中斷。

bit2

bit1

中斷**00

數據機狀態01

傳送器儲存暫存器空著10

接受資訊為有效11

連線控制狀態

bit3~bit7 :永遠為0

outportb(0x3fa,0x07);  //表示處於連線控制狀態

l        lcr  此暫存器定義傳輸資訊的格式。各位的意義如下:

bit0

bit1意義0

0字元長度為5個位01

字元長度為6個位10

字元長度為7個位11

字元長度為8個位

bit2:終止位。設為0表示使用1個終止位;設為1時有兩種情況,字元長度為5時表示1.5個終止位,而字元長度不是5時則表示2個終止位。

bit3:奇偶校驗位啟動。設為0時表示無奇偶校驗位,設為1時表示使用奇偶校驗位。

bit4:奇偶校驗方式選擇。設為0時選擇奇校驗;設為1時選擇偶校驗。

bit5:指定奇偶校驗位的方式。設為0時表示不限制;設為1時,則選擇奇校驗時,奇偶校驗位為1;選擇偶校驗時,奇偶校驗位為0。

bit6:終止控制位。設為0時表示正常輸出;設為1時則強迫輸出0。

bit7:除法器軒鎖位。設為0時表示訪問資訊暫存器;設為1時表示訪問波特率分頻器。

outportb(0x3fb,0x80); //對lcr的最高位置『1',是說明以下**為輸入波特率因子

l        mcr 用來控制數據機的介面訊號。

bit0:設為1時,dtr腳位為low;設為0時,dtr腳位為high。

bit1:設為1時,dts腳位為low;設為0時,rts腳位為high

bit2,bit3:用於控制晶元上的輸出,新型晶元現已不用。

bit4::設為1時,晶元內部作自我診斷。

其他位永遠為0

outportb(0x3fc,0x0b);  //見上

l        lsr 表示資訊傳送過程種的各種狀態。各位為1時表示該狀態成立,為0時不成立

bit0:資料已接收完畢。(data ready)

bit1:資料溢位錯誤。(overrun error)

bit2:奇偶校驗位錯誤。(parity error)

bit3:資訊框錯誤。(framing error)

bit4:終止中斷。(break interrupt)

bit5:傳送器儲存暫存器空閒(transmitter holding register empty)。

bit6:傳送移位暫存器空閒(transmitter shift register empty)。

bit7:永遠為0

l        msr 此暫存器高4位為數據機控制線目前狀態;低4位在數據機有訊號時被設為1,在被讀取後會恢復為0。

bit0:1時表示cts訊號改變

bit1:1時表示dsr訊號改變

bit2:1時表示ri訊號改變

bit3:1時表示dcd訊號改變

bit4:cts訊號的補碼

bit5:dsr的補碼

bit6:ri訊號的補碼

bit7:dcd訊號的補碼。

串列埠位址及暫存器功能詳細資料

pc 機上,com1 和com2 的位址是 3f8 3ff 及2f8 2ff 在這個範圍內的每個位址都有不同的功能,這些功能分別通過暫存器來實現,讀寫這些暫存器就可以執行與串列埠相關的功能。而所謂的暫存器就是暫時存放資訊的地方,這些被存放在此的資訊是以位的形式儲存,通常以 8個位 乙個位元組 作為乙...

省市區詳細位址分離及省市區詳細資料庫

資源包含省市區位址分離演算法和省市區位址資料,需要省市區位址資料的朋友,直接去adsmsq.php檔案中提取。getads new getads ar getads getalladdress 安徽省阜陽市潁上縣南照鎮六里村 var dump ar 輸出結果 array 4 exit 直接呼叫這個方...

點亮LED2資料手冊查閱及暫存器瀏覽

1 gpio概念的引入 gpio general purpose input output 通用輸入輸出 gpio就是晶元的引腳 晶元上的引腳有些不是gpio,只有一部分是 作為gpio的這類引腳,他的功能和特點是可以被程式設計控制它的工作模式,也可以程式設計控制它的電壓高低等。gpj0 3 gpj...