|
Виж темите без отговор | Виж активните теми
Дата и час: Пон Юли 27, 2026 11:45 pm
Търся простичък примерен проект за ISA контролер
| Автор |
Съобщение |
|
Реконструктор
Ранг: Форумен бог
Регистриран на: Съб Сеп 25, 2004 12:32 pm Мнения: 8382 Местоположение: София
|
 |  |  |  | MYXATA написа: Реконструктор, какво по-просто от иса-шината...  1.компаратор -> за адресите - поне 12 бита(може и с по-малко но за ДОС) 2.входно-изходни буфери-> поне 8бита(със 16 повече ядове полза никва) 3.системен такт - > идва от ПЦ-то(ха сега де като че ли беше 8мегахерца ) 4.+12;+5 волта->идва от пц-то 5.IRQ-та-> мисля, че бяха 4..... вече с 1 ЦПЛД си го правиш и си пееш... софтварето ...най-лесно ми беше с borlandС |  |  |  |  |
Относно тактуването, няма ли си някакъв latch? Ако тактуването е отделно, как се синхронизира с mcu-то?
|
| Вто Апр 17, 2007 11:56 am |
|
 |
|
ps66
Ранг: Форумен бог
Регистриран на: Пет Яну 19, 2007 9:16 am Мнения: 1063 Местоположение: путинофили: "иди н***й"
|
както ти е мисал @мухата - от ISA-та по-просто няма  :
- трябва ти адресен дешифратор (адр. шина) и сигнала за I/O адрес (за ... чипселект)
- сигнал R/W
- буфер за данновата (8-бит примерно)
- ако ти трябвa irq го вързваш на съответния пин на ISA-та (IRQ 2...15)
и ъъъ... май-това беше
.. преди 10-12г правихме една ISA карта с 2 COM порта (16ц450/16ц550) ... обаче е останало само CDO-то ... схемата я е Фанала липсата (сигутно е архивирана на хартиен носител  )
софтуерно ... е възможно най-просто:
инсталираш си обработчика на прекъсване (директно в таблицата ... сегмент:отместване)
обработчика на прекъсването трябва да изчисти флага за прекъсване в irq контролера
примерче  :
void InstallIRQHandler (void)
{
asm CLI
asm SUB AX,AX
asm MOV ES,AX
/* обработчик на IRQ */
asm MOV BX, CS:[BaseIRQ] /* номера на IRQ */
asm CMP BX, 8
asm JB E_34
asm ADD BX, 0x70-8 /* IRQ8-15 -> 70h-77h */
asm JMP E_35
E_34:
asm ADD BX, 8 /* IRQ0-7 -> 8-F */
E_35:
asm SHL BX,1
asm SHL BX,1
asm MOV WORD PTR ES:[BX+0],offset InterruptHandler
asm MOV WORD PTR ES:[BX+2],CS
...
}
interrupt InterruptHandler (void)
{
asm STI
// изчистване на флага за прекъсване
asm MOV DX, CS:[IRQcntrl] /* CS:[IRQcntrl] -> адреса на IRQ контролера: за IRQ0-IRQ7 е 0x21, за IRQ8-IRQ15 е 0xA1 */
asm DEC DX
asm MOV AL, 20h
asm CMP DL, AL
asm JE E_13
asm OUT DX, AL
E_13:
asm OUT 20h,AL
...
/* четене/писане в регистрите на ISA картата  */
...
}

|
| Вто Апр 17, 2007 12:32 pm |
|
 |
|
MYXATA
Ранг: Форумен бог
Регистриран на: Пон Юни 05, 2006 1:48 pm Мнения: 4906 Местоположение: където небето среща земята, ракията е Jameson, а бирата Guinness
|
Реконструктор..
лесна е работата само кажи нещо конктретно...
или просто за себе си искаш да изясниш за исата нещата...
ако гледаш по - от SW страната:
нищо освен пишеш на адрес конфигурационни данни, данни за обмен и т.н
и при IRQ(IRQ-та) четеш данни от съответния адрес привързан към IRQ-то
начи имаше фатки и за ДМА. но едвали ти трябва точно това...
_________________ ... ако трети ден не ти се работи... това означава, че е сряда !
|
| Вто Апр 17, 2007 12:48 pm |
|
 |
|
ps66
Ранг: Форумен бог
Регистриран на: Пет Яну 19, 2007 9:16 am Мнения: 1063 Местоположение: путинофили: "иди н***й"
|
погледни идеята на паралелния порт - това е обмен м/у PC и MCU (принтера!) и ... си е ISA карта (на практика)
има 2-3 адреса (буфери) дето се използват: данни, статус (строб...) и с малко подобрения ще имаш двупосочен обмен на данни 
|
| Вто Апр 17, 2007 1:07 pm |
|
 |
|
Реконструктор
Ранг: Форумен бог
Регистриран на: Съб Сеп 25, 2004 12:32 pm Мнения: 8382 Местоположение: София
|
Добре, значи в най-простия случай, имаме следната схема:
Значи когато имаме нещо такова: кво се случва с тоците: в "адрес" отива 225h, в "данни" отива AAh и RW бита става 0 Ако имаме обратната операция:
в "адрес" отива 225h, RW бита става 1, mcu-то слага данните в шината "данни"
до тук вярно ли е?
|
| Вто Апр 17, 2007 1:47 pm |
|
 |
|
ps66
Ранг: Форумен бог
Регистриран на: Пет Яну 19, 2007 9:16 am Мнения: 1063 Местоположение: путинофили: "иди н***й"
|
не !
когато искащ примерно да четеш с
in 225h, dx
MPU-то няма да смогне да изведе данните на данновата шина - затова ти трябват буфери - идеята на паралелния порт:
mov DX, 0x378
out DX, al (пращаш данните в регистъра - те се извеждат на някой порт на MCU-to)
даваш сигнал на MPU-то че има данни - и то си ги чете (може да му генерира прекъсване!)
обратното с също валидно:
MPU-то пише в регистър (примерно статус регистъра на принтера е за четене от PC-то) - който PC-то може да чете на определен адрес и му генерира прекъсване - за да си вземе данните
... или нещо подобно 
|
| Вто Апр 17, 2007 2:09 pm |
|
 |
|
MYXATA
Ранг: Форумен бог
Регистриран на: Пон Юни 05, 2006 1:48 pm Мнения: 4906 Местоположение: където небето среща земята, ракията е Jameson, а бирата Guinness
|
бих казал :
-------< адрес >------------------
.........._ _ _ _ _
клок_| |_| |_| |_| |_| |_
......___ ____________
R/W |__|
Data----<D0-7>------------
но в интерфейсния модул се записват данните и контролна логика ти дава прекъсване на мцу-то на модула! ти си го обработваш и като имаш данни за иса-шината
ги записваш в изходния лач, и подаваш IRQ на иса-шината към ПЦ-то. оттам като четеш от адрес отваряш tristate буфера и изчиташ данни от изходния лач.
//**Write a Byte to Interface module '**/
void Write_to_IntMod(unsigned aa)
{
volatile unsigned int *addr;
addr = (unsigned int *) BASE_ADDR;
*addr = aa; // 1st bus cycle /
}
//*********************************************************************/
//**Read a Byte from Interface Module**/
unsigned Read_from_IntMod(void)
{
volatile unsigned int *from_addr;
from_addr = (unsigned int *) BASE_ADDR;
return *from_addr;
}
_________________ ... ако трети ден не ти се работи... това означава, че е сряда !
|
| Вто Апр 17, 2007 2:32 pm |
|
 |
|
Реконструктор
Ранг: Форумен бог
Регистриран на: Съб Сеп 25, 2004 12:32 pm Мнения: 8382 Местоположение: София
|
 |  |  |  | ps66 написа: не ! когато искащ примерно да четеш с in 225h, dx MPU-то няма да смогне да изведе данните на данновата шина - затова ти трябват буфери - идеята на паралелния порт: mov DX, 0x378 out DX, al (пращаш данните в регистъра - те се извеждат на някой порт на MCU-to) даваш сигнал на MPU-то че има данни - и то си ги чете (може да му генерира прекъсване!) обратното с също валидно: MPU-то пише в регистър (примерно статус регистъра на принтера е за четене от PC-то) - който PC-то може да чете на определен адрес и му генерира прекъсване - за да си вземе данните ... или нещо подобно  |  |  |  |  |
Ами мен тоците ме интересуват, синхронизацията ще я измисля някак си. 
|
| Вто Апр 17, 2007 3:04 pm |
|
 |
|
MYXATA
Ранг: Форумен бог
Регистриран на: Пон Юни 05, 2006 1:48 pm Мнения: 4906 Местоположение: където небето среща земята, ракията е Jameson, а бирата Guinness
|
Реконструктор,
ама ти какво разбираш по "тоци"?
аз явно не включвам...
_________________ ... ако трети ден не ти се работи... това означава, че е сряда !
|
| Вто Апр 17, 2007 4:05 pm |
|
 |
|
ike
Ранг: Форумен бог
Регистриран на: Пет Фев 04, 2005 9:59 pm Мнения: 6019 Местоположение: София
|
1. "Търся простичък примерен проект за ISA контролер"
Заглавието малко обърква, поне мен. Аз това го чета как да си направя хост ISA контролер.
2."После, като компенсация се насочих към паралелния порт - в EPP режим е още по-лесно. Обаче и той тръгна да изчезва. Все пак е по-перспективен от ISA-та. "
USB е по бързо от ISA и по-переспективно, въпреки че чувам че ще го заменят с безжично USB.
3. "инсталираш си обработчика на прекъсване (директно в таблицата ... сегмент:отместване)
обработчика на прекъсването трябва да изчисти флага за прекъсване в irq контролера "
Навремето като си играх с параления порт имаше една уловка. А. Трябва в контролния регистър на параления порт да му окажеш че му разрешаваш прекъсванията. Б. След това програмираш контролера на прекъсванията че това прекъсване е активно. В. Забраняваш прекъсванията. Г. Вършиш си работата (разбирай нещо максимално бързо и елементарно примерно сетване на флаг, в този момент нямаш много време за моткане само няколко микросекунди). Д. Казваш на контролера на прекъсванията че си готов. Е. разрешаваш прекъсванията.
За реда на на Д и Е не съм убеден беше едва ли не в друг живот.
4. "out 225h, dx
in 225h, dx"
Това са неверни инструкции някое дете може да copy-paste от тука и ще се опари. Ще го откажете от малко
5. "Ами мен тоците ме интересуват, синхронизацията ще я измисля някак си. "
Това на български иска да каже(според мен) каква команда трябва да подам за да получа на адресната шина състояние ХХХХХХХХХХХ и на шината за данни състояние УУУУУУУ
6. И един въпрос от мене. По какво се разбира че на адресната шина е зададен адрес на порт, а не адрес в паметта?
|
| Вто Апр 17, 2007 4:34 pm |
|
 |
|
MYXATA
Ранг: Форумен бог
Регистриран на: Пон Юни 05, 2006 1:48 pm Мнения: 4906 Местоположение: където небето среща земята, ракията е Jameson, а бирата Guinness
|
ике,
по. т.6 има едно нещо дето е memory map....
_________________ ... ако трети ден не ти се работи... това означава, че е сряда !
|
| Вто Апр 17, 2007 4:50 pm |
|
 |
|
ike
Ранг: Форумен бог
Регистриран на: Пет Фев 04, 2005 9:59 pm Мнения: 6019 Местоположение: София
|
@MYXATA
Може ли малко по подробно.
Мемори маповете съм ги ползвал за windows за да "вкарам" някой голям фаил в паметта и да работя с него все едно се намира в рама. Но в конкретния конттекст не ми се връзва.
Значи една ISA платка може да има следните ресурси Port, Memmory, IRQ, DMA някой има ли практически опит в всичко това или само сме го гледали по шибаните филми за вампири?
|
| Вто Апр 17, 2007 4:59 pm |
|
 |
|
Ки4о
Ранг: Форумен бог
Регистриран на: Съб Юли 22, 2006 9:50 pm Мнения: 1638
|
@ike,смисъла е като си правиш сам системата.Примерно-имаш проц и искаш да му навържеш периферия,рам... Прави се блок за адресна селекция (най често с 74LS138).Съставя се таблица,която на практика ти е мемори-мап (показва ти кое устройство на кой адрес е и разположението на паметта) и чрез нея знаеш кое къде се намира.Обръщението се прави през дешифратора.Най често рама си го слагаш в началото,за да можеш да ползваш директна адресация.А мемори мапа на виндоуса го полваш на готово,някой вече е направил платката и следваш неговия замисъл
|
| Вто Апр 17, 2007 5:14 pm |
|
 |
|
ike
Ранг: Форумен бог
Регистриран на: Пет Фев 04, 2005 9:59 pm Мнения: 6019 Местоположение: София
|
Разглеждам заетите ресурси на компютъра на който седя в момента.
Портове от 00000 до 0000F са заети от DMA контролера, това означава ли че клетките от паметта
от адрес 00000 до 0000F не мога да ги ползвам?
Каква е разликата м/у
MOV al, 12
MOV 0378h, al
MOV ax, 0378h
OUT ax, 12
|
| Вто Апр 17, 2007 5:48 pm |
|
 |
|
ps66
Ранг: Форумен бог
Регистриран на: Пет Яну 19, 2007 9:16 am Мнения: 1063 Местоположение: путинофили: "иди н***й"
|
голяма
при OUT - процесора генерира сигнал че на адресната шина има I/O адрес (адрес на порт)
при MOV - адреса е в рама !
не мЪ питай как е името на сигнала - изведен е на един пин на ISA шината - и естественно ще се използва от дешифратора на адресите на ISA картите ...
|
| Вто Апр 17, 2007 6:15 pm |
|
|
Кой е на линия |
Потребители разглеждащи този форум: 0 регистрирани и 2 госта |
|
Вие не можете да пускате нови теми Вие не можете да отговаряте на теми Вие не можете да променяте собственото си мнение Вие не можете да изтривате собствените си мнения Вие не можете да прикачвате файл
|
|