[問題] Memory mapping I/O
遇到的問題: (題意請描述清楚)
小弟有個問題想請問有寫過類似這種Code經驗的人,我已知IO base address(例如:Codec)
這部分已經可以抓到正確base address,而這base address對應到記憶體的某位址,
我必須對這個記憶體的位址裡面register進行存取行為
在網路上找了許多資訊確還是沒有結果請問有這種function可以用的嗎??
希望得到的正確結果:
存取memory中的register
程式跑出來的錯誤結果:
無
開發平台: (例: VC++ or gcc/g++ or Dev-C++, Windows or Linux)
DJGPP(Compiler) + RHIDE(IDE) +純DOS
有問題的code: (請善用置底文標色功能)
#include <stdio.h>
#include <stdlib.h>
#include <pc.h> //include outportb and inportb function
#include <dpmi.h>
#define Func_num 0x00 //Define function number
#define Dev_num 0x1B //Define device number
#define Bus_num 0x00 //Define bus number
#define Reg_num 0x10 //Define Register number
unsigned int selector;
int main(void)
{
unsigned int SMbus_Address, offset, vrb_data, flag; //define smbus base
address
__dpmi_meminfo mi;
offset = (Func_num<<8)+(Dev_num<<11)+(Bus_num<<16)+Reg_num; //offset value
SMbus_Address = 0x80000000 + offset; //bit 31 must be 1
outportl(0xcf8,SMbus_Address); //write value to CONFIG_ADDRESS
SMbus_Address = inportl(0xcfc) & 0xFFFFFFF0; //find SMbus base address
printf("SMbus base address=%x\n",SMbus_Address);
-----------------------------------------------------------------------------
下面部分參考DJGPP LIB ONLINE 有人知道這用意是甚麼嗎?
P.S:我大概了解要做甚麼 但有那種似懂非懂感覺 不知是否有板友能夠解釋
-----------------------------------------------------------------------------
mi.address = SMbus_Address; //base address
mi.size = 0x10000;
__dpmi_physical_address_mapping(&mi);
selector = __dpmi_allocate_ldt_descriptors(1); //define a selector
__dpmi_set_segment_base_address(selector, mi.address);
__dpmi_set_segment_limit(selector, mi.size-1);
--
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 219.85.31.55
※ 編輯: lordking 來自: 219.85.31.55 (06/24 23:46)
※ 編輯: lordking 來自: 219.85.31.55 (06/24 23:48)
推
06/24 23:50, , 1F
06/24 23:50, 1F
→
06/24 23:50, , 2F
06/24 23:50, 2F
→
06/24 23:50, , 3F
06/24 23:50, 3F
→
06/24 23:52, , 4F
06/24 23:52, 4F
→
06/24 23:52, , 5F
06/24 23:52, 5F
→
06/24 23:52, , 6F
06/24 23:52, 6F
→
06/24 23:53, , 7F
06/24 23:53, 7F
V大說的流程我都知道 我只是想了解是否有提共 MMIO function 妳說的應該是
直接對IO去access 這部分我OK ^^
※ 編輯: lordking 來自: 219.85.31.55 (06/24 23:55)
→
06/24 23:54, , 8F
06/24 23:54, 8F
※ 編輯: lordking 來自: 219.85.31.55 (06/24 23:57)
※ 編輯: lordking 來自: 219.85.31.55 (06/24 23:58)
推
06/25 00:05, , 9F
06/25 00:05, 9F
→
06/25 00:05, , 10F
06/25 00:05, 10F
→
06/25 00:07, , 11F
06/25 00:07, 11F
推
06/25 00:14, , 12F
06/25 00:14, 12F