24.04.2014, 00:07
|
|
Частый гость
Регистрация: 23.04.2014
Сообщений: 20
Сказал спасибо: 4
Сказали Спасибо 1 раз в 1 сообщении
|
PIC parallel slave port (PSP) или PIC и ISA-8
Добрый день!
Есть у меня задумка - сделать контроллер SD-карт для старых компьютеров типа XT (8088 процессор). Для чего вся эта рухлядь - не спрашивайте, все равно вряд-ли получится объяснить. Ну есть типа странные люди, которые коллекционируют и возятся со старыми компами. За бугром многие тащатся по Atari/Amiga/Commodore 64/MSX и тд. У нас ZX Spectrum в почёте. Типа ностальджи, что-ли, и все такое. Шина ISA-8 соответственно.
И вот не так давно я заинтересовался PIC'ами, и прочитал про такую феню в них, как Parallel Slave Port aka PSP. На бумаге все вроде здорово - данные к данным, /WR /RD и /CS в соответствии с внешним дешифратором. Цикл обмена у ISA ~180us, а значит если процедура обработки PSP прерывания небольшая, должен укладываться. Теоретически.
Ну и вот купил я значится PIC18F452, у которого есть аппаратный SPI, PSP, памяти дофига и в DIP корпусе. Так, как я нуб в электронике а тем более в PIC, решено было писать не на православном асме или хотя бы на человеческом си, а на инструменте для нубов - mikroc. Мне хотелось проверить быстрее аппаратную часть, и просто пообщаться с контроллером.
Суть идеи такова, что контроллер должен принимать управляющие команды с компа, через регистр команд. Команды типа: "установить сектор", "читать сектор", "писать сектор" и тд. Это порт 0x3b1h. И через порт данных слать или принимать данные. Это порт 0x3b0h.
Спаял и вроде как-то даже работает, но, есть глюки: когда я начинаю быстро читать из порта данные, например так:
Код:
|
mov dx,3b0h
in al,dx
xchg al,ah
in al,dx |
То в AX у меня сидит только первый байт, а второй - ноль. Если же вставить небольшую задержку между чтением, то все читается нормально.
Код:
|
mov dx,3b0h
in al,dx
jmp $+2
jmp $+2
xchg al,ah
in al,dx |
Из иструментов ессно нет нихрена, кроме китайского мультиметра, поэтому что там у меня творится с сигналами я могу только гадать. Идеи две: 1) я не придерживаюсь временных диаграмм чтения/записи из даташита, например сигнал /CS у меня выдается позже чем сигнал /RD или /WR. 2) я не успеваю обрабатывать PSP-прерывание.
Такой вот говнокод:
PHP код:
|
void Interrupt() {
TRISA.B0 = 0;
PORTA.B0 = 0; // set READY signal low for IO
if (intcon3.B0) { // RB1 (INT1). Connected to "command write" 0x3b1h
flag_b1 = 1;
intcon3.B0 = 0;
}
else // 0x3b0h
{
if (trise.B7 == 1) { // RD (data read)
dataBuffer[t_x] = portd;
if ((flag_b1 == 0) && (t_x ‹ 514)) t_x++;
}
else // WR (data write)
if ((trise.B6 == 0) && (flag_b1 == 0)) {
portd = dataBuffer[r_x];
if (r_x ‹ 514) r_x++;
}
pir1.B7 = 0; // clear PSP Interrupt flag
}
TRISA.B0 = 1; // set READY signal high impedance
}
|
Основной цикл:
PHP код:
|
while (1)
{
if (flag_b1 == 1)
{
cmd = dataBuffer[t_x];
do_command();
flag_b1 = 0;
}
}
}
|
Может у кого был опыт сопряжения пик и иса, гляньте опытным взглядом? В архиве там сорец на MikroC...
|
|
|
|
24.04.2014, 01:23
|
|
Почётный гражданин KAZUS.RU
Регистрация: 20.06.2006
Адрес: Украина, Запорожье
Сообщений: 8,003
Сказал спасибо: 0
Сказали Спасибо 4,946 раз(а) в 2,374 сообщении(ях)
|
Re: PIC parallel slave port (PSP) или PIC и ISA-8
Сообщение от Tronix286
|
Цикл обмена у ISA ~180us, а значит если процедура обработки PSP прерывания небольшая, должен укладываться. Теоретически
|
это при 4.77-8МГц на шине и 2-х тактах на пересылку?
ваш документ в студию!
и еще - тестером вы ничего не измерите, да еще и с таким монтажом. осциллограф вам крайне необходим, хотя б 10-20МГц
|
|
|
|
24.04.2014, 08:50
|
|
Частый гость
Регистрация: 23.04.2014
Сообщений: 20
Сказал спасибо: 4
Сказали Спасибо 1 раз в 1 сообщении
|
Re: PIC parallel slave port (PSP) или PIC и ISA-8
Сообщение от jump
|
это при 4.77-8МГц на шине и 2-х тактах на пересылку?
ваш документ в студию!
и еще - тестером вы ничего не измерите, да еще и с таким монтажом. осциллограф вам крайне необходим, хотя б 10-20МГц
|
Ориентируюсь на книжку "Разработка устройств сопряжения для персонального компьютера типа IBM PC" Ю.В.Новиков, О.А.Калашников, С.Э.Гуляев.
Плюс, я ж еще вроде контролирую сигнал IO READY, то есть по входу в прерывание делаю его низким, по выходу перевожу в высокоимпедальное состояние. Теоретически, если бы я не влазил в цикла обмена, на это время (на время занижения READY) он должен продляться. И с другой стороны, если бы я его держал слишком долго, то у меня бы не отрефрешивалась системная динамическая память и комп бы вис постоянно.
Осциллограф да, хочется но пока колится, коплю постепенно. Подумываю пока над логическим анализатором типа USBee за 300 рублей из китая. Вроде 10Mhz то точно должен держать.
|
|
|
|
24.04.2014, 10:03
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
|
Re: PIC parallel slave port (PSP) или PIC и ISA-8
Tronix286, что делает проверка трисов ? Что проверяем ?
Код:
|
if (trise.B7 == 1)
...
if ((trise.B6 == 0) |
__________________
Осторожно , злой кот
Последний раз редактировалось dosikus; 24.04.2014 в 10:05.
|
|
|
|
25.04.2014, 22:41
|
|
Частый гость
Регистрация: 23.04.2014
Сообщений: 20
Сказал спасибо: 4
Сказали Спасибо 1 раз в 1 сообщении
|
Re: PIC parallel slave port (PSP) или PIC и ISA-8
Сообщение от dosikus
|
Tronix286, что делает проверка трисов ? Что проверяем ?
Код:
|
if (trise.B7 == 1)
...
if ((trise.B6 == 0) |
|
Я все думал думал и не понял - это вопрос или намек? Ну по идее, trise.b7 это бит статуса приемного буфера PSP. Как я понимаю, если байт принят - оно должно быть равно 1.
trise.b6 - это бит статуса передающего буфера. Если 1 - то байт, ранее выданный в порт, еще не был прочитан.
|
|
|
|
26.04.2014, 00:10
|
|
Заблокирован
Регистрация: 12.09.2009
Сообщений: 420
Сказал спасибо: 148
Сказали Спасибо 166 раз(а) в 118 сообщении(ях)
|
Re: PIC parallel slave port (PSP) или PIC и ISA-8
Сообщение от Tronix286
|
Я все думал думал и не понял - это вопрос или намек? Ну по идее, trise.b7 это бит статуса приемного буфера PSP. Как я понимаю, если байт принят - оно должно быть равно 1.
trise.b6 - это бит статуса передающего буфера. Если 1 - то байт, ранее выданный в порт, еще не был прочитан.
|
вы уверены что через trise проверяется? trise вроде направление порта вход\ выход. могу конечно ошибаться, но trise не связан "с уровнем на порту".
Последний раз редактировалось gromovi; 26.04.2014 в 00:13.
|
|
|
|
26.04.2014, 10:26
|
|
Частый гость
Регистрация: 23.04.2014
Сообщений: 20
Сказал спасибо: 4
Сказали Спасибо 1 раз в 1 сообщении
|
Re: PIC parallel slave port (PSP) или PIC и ISA-8
Сообщение от gromovi
|
вы уверены что через trise проверяется? trise вроде направление порта вход\ выход. могу конечно ошибаться, но trise не связан "с уровнем на порту".
|
Судя по этой доке http://www.microchip.su/attachment.p...4&d=1392211389 да, в режиме PSP именно trise
|
|
|
|
26.04.2014, 11:03
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
|
Re: PIC parallel slave port (PSP) или PIC и ISA-8
gromovi, Да не, здесь вроде все верно ...
Не въеду пока в код , но надо рыть листинг а МикроС для сего не лучший вариант .
__________________
Осторожно , злой кот
|
|
|
|
30.04.2014, 11:17
|
|
Частый гость
Регистрация: 23.04.2014
Сообщений: 20
Сказал спасибо: 4
Сказали Спасибо 1 раз в 1 сообщении
|
Re: PIC parallel slave port (PSP) или PIC и ISA-8
Может в порт сразу значения выдавать, не дожидаясь прерывания? А в прерывании если пошло считывание только увеличивать индекс массива....
|
|
|
|
30.04.2014, 12:02
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
|
Re: PIC parallel slave port (PSP) или PIC и ISA-8
Tronix286, Надо логический анализатор и смотреть листинг .
Так только гадать будем...
__________________
Осторожно , злой кот
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
Книги
|
dosikus |
Делимся опытом |
11242 |
29.12.2015 23:45 |
Литература по микроконтроллерам (AVR, PIC, ПЛИС и т.д.). Сборка книг - (256 книг+ 27 CD c примерами из книг) [обновление 2011, PDF, DJVU]
|
yurinform |
Микроконтроллеры, АЦП, память и т.д |
5 |
05.07.2011 19:00 |
USB интерфейс для PIC (или FPGA)
|
VVK |
Микроконтроллеры, АЦП, память и т.д |
8 |
09.08.2007 13:38 |
Передача по PSP (Parallel Slave Port) для PIC
|
moyaproba |
Микроконтроллеры, АЦП, память и т.д |
6 |
29.11.2006 21:54 |
Часовой пояс GMT +4, время: 17:12.
|
|