Спасибо, интересно было узнать, в какие моменты читается джойстик в SEGЕ.
Интервал 6 мкс * 7 интервалов - это около 464 такта AVR на частоте 11.0592 МГц. Жалко это время тратить впустую. Лучше прерывания сделать через 50 мкс.
Моя диаграмма в принципе соответствует этому, но лучше скорректировать, как в оригинале.
Тогда получается следующая картина.
1. 0 50 мкс
2. 1 50 мкс
3. 0 50 мкс
4. 1 50 мкс
5. 0 50 мкс
6. 1 50 мкс
7. 0 50 мкс
8. 1 2000 мкс
1 прерывание: читаем B, C, UP, DOWN, LEFT, RIGHT. Затем делаем SYN=0.
2 прерывание: читаем A, START. Затем делаем SYN=1.
3-6 прерывания: меняем SYN на противоположный без чтения из джойстика.
7 прерывание: читаем X, Y, Z, SELECT. Затем делаем SYN=0.
8 прерывание: делаем SYN=1.
9-47 прерывание: просто увеличиваем счетчик прерываний.
48 прерывание: обнуляем счетчик прерываний.
Как только считаются все 12 кнопок (в 8 прерывании) нужно будет записать во флаг SEGA_state значение READY. В основном цикле программа будет опрашивать состояния трех источников данных. Как только появится данное состояние SEGA джойстика - запустится подпрограмма обработки кнопок джойстика. После этого флаг SEGA_state установить в значение PROCESS и записать 11 во все биты входного буфера данных с джойстика. Затем цикл повторяется.





Ответить с цитированием