Widze, ze kolega Qyon zrozumial moj problem :) .
Powiem moze teraz o co mi w ogole chodzi i moze ktos po przeczytaniu mi pomoze.
Otoz buduje programator rownolegly procesorow AVR. Zeby nie komplikowac ukladu elektronicznego zrezygnowalem z interfejsu USB oraz RS-232 i postanowilem wykorzystac LPT. Zeby zaprogramowac procesorek AVR (np. ATMEGA8) rownolegle potrzebuje 8 bitow WE/WY, 9 bitow WY oraz 1 bit WE od strony PC-ta. Port LPT posiada 8 bitow WE/WY, 4 bity WY oraz 5 bitow WE. Dodatkowo uzyje rejestru przesuwnego 4094 zeby z 3 bitow WY zrobic 8 bitow WY, ale to akurat nie jest istotne.
I co mi potrzeba? Otóż potrzeba mi kodu, dzięki któremu bede mogl potraktować port LPT jako maszyne 17-bitową, gdzie 8 bitów jest WE/WY, 4 bity sa WY i 5 bitów jest WE.
Te wszystkie bity są w przestrzeni adresowej PC-ta umieszczone w 3 rejestrach o adresach 378h, 379h i 37Ah (standardowo). Dzięki funkcjom API takich jak ReadFile() WriteFile() mam teoretycznie dostep tylko do rejestru 378h.
W programiku testowym uzylem nastepujacego kodu:
//
*******************************************************************
void __fastcall TForm1::Button1Click(TObject *Sender)
{
HANDLE LPTport=CreateFile("LPT1",GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL);
if(LPTport==INVALID_HANDLE_VALUE)
{
MessageBox(NULL,"Impossible open this LPT port","Error",MB_OK);
ExitProcess(1);
}
BYTE *ByteOut=0xFF;
DWORD CountByte;
WriteFile(LPTport,ByteOut,sizeof(ByteOut),&CountByte,NULL);
CloseHandle(LPTport);
}
//*******************************************************************
jednak on nie działa. Na wyjsciach LPT D0..D7 nie zmienia sie stan i caly czas panuje tam stan niski na wszystkich 8 wyjsciach. (Dodam ze swobodnie moge zmieniac za pomoca funkcji z biblioteki IO.dll pobranej z jakiejs stronki w necie)
Mam wobec tego kilka pytań dla osob ktore naprawde wiedza o co chodzi:
1. Czy w WIN XP do sterowania LPT potrzeba dodatkowego drivera (*.sys) ?
2. Jak mam sie dobrać do rejestrów 379h i 37Ah ? Czy mam użyć struktury DCB tak jak w przypadku korzystania z COM ?