MIPS 平台下 I O 埠的讀寫 以龍芯為例

2021-04-13 02:22:58 字數 1128 閱讀 7694

mips 下,i/o 埠是直接對映到位址空間的,不像x86下有專用的 i/o 空間,使用專用的 in/out 指令訪問之。

故而 mips 上訪問 i/o 埠直接使用訪存指令訪問對應的位址即可。

但是各種控制器的暫存器對映到位址空間的何處,具體的平台就不一樣了。下面以龍芯2e為例說明之。

龍芯2e 下使用 c語言讀寫 8259a 的 0x20 埠

char *p_port;

char data;

p_port = (char *)(0xbfd00000+0x20);   /* 64位模式下為 0xffff ffff bfd0 0000 */

data = *p_port;     /* read io port */

data |= 0x1;

*p_port = data;     /* write io port */

現龍芯2e的io基位址對映在0xbfd00000(64位為0xffffffffbfd00000)處,為了和ibm pc的io埠位址空間保持某種程度上的對應,常用的控制器的io埠位址只要在原來的基礎上加上這個基位址就可以了。

如8042 鍵盤控制器的0x60,0x61,0x64埠,cmos rtc/ram(相容mc146818)的 0x70,0x71埠,8259a的0x20,0x21,0xa0,0xa1等等,現在loongson2e下訪問之,只要加上0xbfd00000, 就是其io位址。讀寫埠方式與記憶體讀寫方式一致。

另外,由於龍芯2e下io位址空間對映在kseg1(0xa0000000~0xc0000000),訪問該位址空間需要在核心態下。

ps: 北橋bonito內的一些控制器對映在0xbfe00000處。

如 0xbfe00000+0x130 處對映為bonito之intenset暫存器

0xbfe00000+0x134 處對映為bonito之intenclr暫存器

0xbfe00000+0x138 處對映為bonito之inten暫存器

0xbfe00000+0x13c 處對映為bonito之intisr暫存器

尚有intedge(對映到0xbfe00124)、intsteer(對映到0xbfe00128)、intpol(對映到0xbfe0012c)

詳細用途參見: 《龍芯2e體系結構之異常、中斷》

幾個常用IO埠讀寫函式

dos中,幾個常用埠讀寫函式 int inport int prot 從指定的輸入埠讀入乙個字,並返回這個字 int inportb int port 從指定的輸入埠讀入乙個位元組,並返回這個位元組 void outport int port,int word 將字word寫入指定的輸出埠port ...

Emacs linux 平台下的神器

emacs,請大家去網上google 一下,本人應用有近三年,略懂皮毛,但沒有她的時候,我會第乙個找到她,然後才開始工作 無論是在linux下,還是不得已情況下用w.emacs 的使用步驟 1.用新立德安裝emacs 23,有好多版本,選最新的,有好多外掛程式,選了解的,逐漸追加 2.emacs 最...

DOCKER Windows平台下的安裝

重新開啟docker,呼叫映象,然後virtualbox啟動,這個時候在你本機的網路介面卡裡可以看到oracle虛擬機器裡的linux的網路,這種網路是dhcp協議分配的,當然你也可以開啟virtualbox 檢視 網絡卡1配置的連線方式是nat 網路位址轉換 這種大意舉個例子,本來你在學校裡上電腦...