"Железный" вопрос.
Добавлено: 24 июн 2009, 22:25
Возникла необходимость "вмешаться" в "нормальную, т.е.штатную работу ноутбука, а точнее, в работу SUPER I/O чипа FDC37N958FR. Ноут - DELL Latitude 500CPx. Для чего это нужно? Дело в том, что этот девайс содержит ДВА полноценных UART, но на один из них (UART2) посажен инфракрасный порт. Так вот этот порт надо сделать "обычным" СОМ2 портом. В BIOS SETUP этого сделать нельзя )-;!
Но ведь если нельзя, но ооочень хочется - то можно. А хочется очень.
При первом прочтении DataCheet на камень показалось, что ничего страшного нет. Вот кусок программы, переводящий UART2 в режим обычного, не IR COM порта:
INDEX_PORT EQU 03F0H
DATA_PORT EQU INDEX_PORT+1
CONF_STATE = 55H
RUN_STATE = 0AAH
DSEG ENDS
CSEG SEGMENT PARA PUBLIC 'CODE'
ASSUME CS:CSEG,DS:DSEG,SS:STCK
ENTRY PROC FAR
PUSH DS ;сохранить для выхода
SUB AX,AX ;из программы
PUSH AX ;в DOS
MOV AX,DSEG ;инициировать адрес
MOV DS,AX ;сегмента данных
MOV DX,INDEX_PORT ;переводим камень в режим
MOV AX,CONF_STATE
OUT DX,AX ;конфигурирования
MOV AX,7H ;выбираем логическое устройство
OUT DX,AX
MOV AX,5H ;СОМ2
INC DX
oUT DX,AX
MOV AX,30H ;активизируем
DEC DX
OUT DX,AX
MOV AX,1H ;его
INC DX
OUT DX,AX
MOV AX,0F0H ;здесь переводим
DEC DX ;его в нормальный
OUT DX,AX ;
MOV AX,0 ;СОМ режим
INC DX
OUT DX,AX
MOV AX,0F1H
DEC DX
OUT DX,AX
MOV AX,0
INC DX
OUT DX,AX
MOV AX,60H ;а здеся задаём
DEC DX
OUT DX,AX
MOV AX,2H ;BASE I/O ADDRESS
INC DX
OUT DX,AX
MOV AX,61H
DEC DX
OUT DX,AX
MOV AX,0F8H ;2F8h
INC DX
OUT DX,AX
MOV AX,62H ;сюда
DEC DX ;
OUT DX,AX ;пишется
MOV AX,0 ;
INC DX ;BASE
OUT DX,AX ;I/O
MOV AX,63H ;ADDRESS
DEC DX ;
OUT DX,AX ;для
MOV AX,0 ;
INC DX ;InfraRed
OUT DX,AX ;порта
MOV DX,INDEX_PORT ;выходим из
MOV AX,RUN_STATE ;режима
OUT DX,AX ;конфигурирования
RET ;возврат управления DOS
ENTRY ENDP ;
CSEG ENDS
END ENTRY
Всё просто, НО!!!
Но сигналов на ногах чипа нЕТУ! А чтобы он появился, надо тоже записать в Multiplexing register определённое значение. Но дело в том, что адрес его - четырёхбайтовый.(7FXXh). При более глубоком вникании в документацию выяснилось, что есть ещё т.н.ACCSESS.bus И Mailbox. Вот через них то и происходит взаимодействие внедрённого 8051 c памятью. Есть в доке и инструкции для MASM51. Но это, как я понимаю, нужно при первоначальном программировании микроконтроллера.
Меня же интересует взаимодействие с ним из среды DOS 6.22 с помощью TASM2.0.
Короче. Что-то я запутался с этим. Может у кого есть какие свежие мысли по этому поводу? Буду очень признателен.
PS. DataCheet на камень: http://www.datasheetcatalog.com/datashe ... 58FR.shtml
Но ведь если нельзя, но ооочень хочется - то можно. А хочется очень.
При первом прочтении DataCheet на камень показалось, что ничего страшного нет. Вот кусок программы, переводящий UART2 в режим обычного, не IR COM порта:
INDEX_PORT EQU 03F0H
DATA_PORT EQU INDEX_PORT+1
CONF_STATE = 55H
RUN_STATE = 0AAH
DSEG ENDS
CSEG SEGMENT PARA PUBLIC 'CODE'
ASSUME CS:CSEG,DS:DSEG,SS:STCK
ENTRY PROC FAR
PUSH DS ;сохранить для выхода
SUB AX,AX ;из программы
PUSH AX ;в DOS
MOV AX,DSEG ;инициировать адрес
MOV DS,AX ;сегмента данных
MOV DX,INDEX_PORT ;переводим камень в режим
MOV AX,CONF_STATE
OUT DX,AX ;конфигурирования
MOV AX,7H ;выбираем логическое устройство
OUT DX,AX
MOV AX,5H ;СОМ2
INC DX
oUT DX,AX
MOV AX,30H ;активизируем
DEC DX
OUT DX,AX
MOV AX,1H ;его
INC DX
OUT DX,AX
MOV AX,0F0H ;здесь переводим
DEC DX ;его в нормальный
OUT DX,AX ;
MOV AX,0 ;СОМ режим
INC DX
OUT DX,AX
MOV AX,0F1H
DEC DX
OUT DX,AX
MOV AX,0
INC DX
OUT DX,AX
MOV AX,60H ;а здеся задаём
DEC DX
OUT DX,AX
MOV AX,2H ;BASE I/O ADDRESS
INC DX
OUT DX,AX
MOV AX,61H
DEC DX
OUT DX,AX
MOV AX,0F8H ;2F8h
INC DX
OUT DX,AX
MOV AX,62H ;сюда
DEC DX ;
OUT DX,AX ;пишется
MOV AX,0 ;
INC DX ;BASE
OUT DX,AX ;I/O
MOV AX,63H ;ADDRESS
DEC DX ;
OUT DX,AX ;для
MOV AX,0 ;
INC DX ;InfraRed
OUT DX,AX ;порта
MOV DX,INDEX_PORT ;выходим из
MOV AX,RUN_STATE ;режима
OUT DX,AX ;конфигурирования
RET ;возврат управления DOS
ENTRY ENDP ;
CSEG ENDS
END ENTRY
Всё просто, НО!!!
Но сигналов на ногах чипа нЕТУ! А чтобы он появился, надо тоже записать в Multiplexing register определённое значение. Но дело в том, что адрес его - четырёхбайтовый.(7FXXh). При более глубоком вникании в документацию выяснилось, что есть ещё т.н.ACCSESS.bus И Mailbox. Вот через них то и происходит взаимодействие внедрённого 8051 c памятью. Есть в доке и инструкции для MASM51. Но это, как я понимаю, нужно при первоначальном программировании микроконтроллера.
Меня же интересует взаимодействие с ним из среды DOS 6.22 с помощью TASM2.0.
Короче. Что-то я запутался с этим. Может у кого есть какие свежие мысли по этому поводу? Буду очень признателен.
PS. DataCheet на камень: http://www.datasheetcatalog.com/datashe ... 58FR.shtml