因為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...