User Tag List

Страница 2 из 2 ПерваяПервая 12
Показано с 11 по 14 из 14

Тема: Z80 PIO не генерирует прерывание

  1. #11

    Регистрация
    30.12.2018
    Адрес
    г. Москва
    Сообщений
    1,375
    Спасибо Благодарностей отдано 
    11
    Спасибо Благодарностей получено 
    384
    Поблагодарили
    346 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от fromzero2infinity Посмотреть сообщение
    Поменял.... пока так же....
    логично. в доке нигде не сказано что вектор надо писать при включенных прерываниях, да и здравый слысл подсказывает что разрешать прерывания при неустановленном векторе - как-то неправильно.

    Пока поэтапно тестировал сигналы, обнаружил, что клава шлет селф-тест последовательности при подаче питания. Присмотрелся - да.. вроде ~INT по ~STB + фронту... Какой-то короткий, но все же получается есть. Масштаб = 10uS, значит ~INT примерно 2 uS.
    ~INT снимается по подтверждению прерывания процессором, длительность зависит в т.ч. от тактовой частоты. с виду нормально.

    Генерится только при первом ~STB, потом хоть выспись - жми 100 раз - ничего на ~INT.
    а вот это похоже на то что PIO зависает в состоянии "under service" - то есть "мое прерывание обрабатывают но еще не обработали". выход из этого состояния - по команде RETI на шине данных.
    можно засинхронизироваться от ~INT и посмотреть что на IEO происходит.

    Что,похоже свидетельствует о програмной ошибке.
    а возможно и нет. CLK куда зацеплен? если отличается от CLK процессора - возможны нюансы. а еще возможно влияют длинные провода на которых все собрано или контакт где-то не очень...

    Зверинецъ

    Специалист (был когда-то "совсем стандарт") - 1988-2023
    Ленинград1 +256К +AY+BDI+VGA выход +Ethernet (Speccyboot) +Xmodem (115200)+divmmc
    Ленинград2 + CF карта
    Платформа 8085+Z80+CPLD (Специалист МХ2 +SD +FDD +PS/2kbd)
    БК0010-01 стоковый
    [свернуть]

  2. #12

    Регистрация
    13.08.2021
    Адрес
    г. Краснодар
    Сообщений
    10
    Спасибо Благодарностей отдано 
    1
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Кажется я где-то близко, Вашими молитвами.
    Поюнул на все, разобрал.
    Собрал свои портики. Выходной и взодной. Выходной ничего интересного, а вот входной, где по кнопочке генерится INT. Немного мудрено, но это что б микросхемок поменьше.

    Написал тестик, где использую mod1.

    ; Test #05
    ; Test interrupt in Mode 1
    PORTOUT .equ 0Fh
    .org 0h ; RESET
    ld sp, 0fff0h
    im 1
    ld a, 55h
    ld hl, 8000h
    ld (hl), a
    ei
    MAIN: ld a, (hl)
    out (PORTOUT), a
    jp MAIN
    .org 38h
    ex af, af' ; save A, FLAGS
    ld a, (hl)
    inc a
    ld (hl), a
    ex af, af' ; restore A, FLAGS
    ei
    ret
    .END

    Работает как часы... Увеличивает (HL) и отображает на выходном порту.

    Цепляю к этому портику вектор (RST4).
    Чутка меняю тестик.
    im0 и .org 20h на обработчик..... Включаю - НЕ работает. ~INT есть, ~INTAck есть... а не работает. 55h висит на выходе и все.
    И тут приходит мысль - до проца не дожодит вектор прерывания. Ну логично, если без вектора в режиме 1 работает,я тут нет.
    Открываю UM0080.pdf и вижу

    ~RD не уходит на низкий уровень.
    А у меня на шине данных вот такой гейт стоит....

    Т.е. при ~RD = 1 он включен A->B, на шину, а не на CPU.
    Вот и нету вектора к процессору.

    Похоже так. Все остальное при этом b стек и субрутины работают, что дало мне чувство в правильности дизайна самой моверборд...

    Пожалуйста, подтвердите ход моих мыслей или ткните где не прав. Если есть готовое решения на управление буфером шины данных - киньтесь им в меня пожалуйста.
    По моему разумению надо (~RD AND ~INTack) использовать. Но может еще какие случаи есть о которых я не знаю пока. Так сказать, что б позже опять не получить такую штангу.

    Пока буду думать как пилить дорожки и паяться проводками к материнке, что б проверить.
    Последний раз редактировалось fromzero2infinity; 20.08.2021 в 18:29.

  3. #13

    Регистрация
    30.12.2018
    Адрес
    г. Москва
    Сообщений
    1,375
    Спасибо Благодарностей отдано 
    11
    Спасибо Благодарностей получено 
    384
    Поблагодарили
    346 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от fromzero2infinity Посмотреть сообщение
    Кажется я где-то близко, Вашими молитвами.
    Поюнул на все, разобрал.
    Написал тестик, где использую mod1.

    Работает как часы... Увеличивает (HL) и отображает на выходном порту.

    Цепляю к этому портику вектор (RST4).
    Чутка меняю тестик.
    im0 и .org 20h на обработчик..... Включаю - НЕ работает. ~INT есть, ~INTAck есть... а не работает. 55h висит на выходе и все.
    И тут приходит мысль - до проца не дожодит вектор прерывания. Ну логично, если без вектора в режиме 1 работает,я тут нет.
    Открываю UM0080.pdf и вижу

    ~RD не уходит на низкий уровень.
    А у меня на шине данных вот такой гейт стоит....

    Т.е. при ~RD = 1 он включен A->B, на шину, а не на CPU.
    Вот и нету вектора к процессору.

    Похоже так.
    Семен Семеныч!
    в исходной схеме буфер не показан был. естественно так работать не будет.


    Все остальное при этом b стек и субрутины работают, что дало мне чувство в правильности дизайна самой моверборд...
    ну они-то работают по нормальным ~RD, ~WR, обработка прерываний - особый случай.

    Пожалуйста, подтвердите ход моих мыслей или ткните где не прав. Если есть готовое решения на управление буфером шины данных - киньтесь им в меня пожалуйста.
    По моему разумению надо (~RD AND ~INTack) использовать.
    правильно.

    Но может еще какие случаи есть о которых я не знаю пока. Так сказать, что б позже опять не получить такую штангу.
    сходу не припомню, разве что ~BUSRQ когда-нибудь будет задействован...

    Зверинецъ

    Специалист (был когда-то "совсем стандарт") - 1988-2023
    Ленинград1 +256К +AY+BDI+VGA выход +Ethernet (Speccyboot) +Xmodem (115200)+divmmc
    Ленинград2 + CF карта
    Платформа 8085+Z80+CPLD (Специалист МХ2 +SD +FDD +PS/2kbd)
    БК0010-01 стоковый
    [свернуть]

  4. #14

    Регистрация
    13.08.2021
    Адрес
    г. Краснодар
    Сообщений
    10
    Спасибо Благодарностей отдано 
    1
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Теперь c моими портами все работает. RST отрабатывает, обработчик считает, на out порту все отображается.


    Буду переделывать материнку, подключать PIO и обратно на im2. Думаю, что проблем не возникнет.
    Поучительно...
    Еще можно ~BUSACK прицепить на ~СE, но пока до DMA очень далеко... пусть так пока будет.

    Друзья, Serg6845 и Sayman спасибо Вам от всего сердца.
    Мало того, что железную проблему решили, так еще и спасли меня от еще одного месяца(ев) взрывания мозга с неправильно понятым мною Mode2 и таблице прерываний.
    Последний раз редактировалось fromzero2infinity; 23.08.2021 в 16:40.

Страница 2 из 2 ПерваяПервая 12

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. z80-ftpclient
    от asve79 в разделе Софт
    Ответов: 3
    Последнее: 28.02.2019, 08:13
  2. Аппаратное прерывание в КР580ВМ80А
    от DenSam в разделе Разное
    Ответов: 1
    Последнее: 17.02.2017, 21:56
  3. Особенности программирования Z80 PIO
    от dk_spb в разделе Для начинающих
    Ответов: 2
    Последнее: 07.05.2014, 21:36
  4. Справочник Z80
    от goblinish в разделе Программирование
    Ответов: 8
    Последнее: 26.08.2012, 17:52
  5. Вопрос про прерывание LDIRа
    от ZEK в разделе Программирование
    Ответов: 2
    Последнее: 02.07.2006, 19:02

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •