Мысли на будущее...
Использование штырей МК ATmega1284P
"""""""""""""""""""""""""""""""""""
Порт D : PD0, PD1 - Последовательный (аппаратный) порт для связи МК с PC;
PD2, PD3 - Последовательный (аппаратный) порт для связи, например, по UART/Bluetooth;
PD4, PD5 - PWM-ы (пока ещё свободны или Интерфейс порта мыши PS/2);
PD6, PD7 - Мл. биты регистра порта ввода БК.
Порт C : PC2..PC7 - Старшие биты младшего байта порта ввода УП БК0010/11М. PC0, PC1 - Шина I2C.
Порт A : PA0,PA1,...,PA7 - Для подключения младшего байта регистра порта вывода УП БК0010/11М.
Порт B : PB4..PB7 - Шина SPI (master); PB0..PB1 - Интерфейс порта мыши PS/2 (если возможно);
Порт B : PB2, PB3 - сигналы управления. Для PB2(2/Rx): 0 - выбор виртуального устройства и его регистра,
1 - передача (запись) данных (байта) в регистр виртуального устройства (согласно протокола),
в котором биты поделены так: ddddRRRR, где dddd (биты 7..4) -- номер вирт. устройства, а
RRRR (биты 3..0) -- номер регистра виртуального устройства.
PB3(3/Tx): 0 - Используется для подачи в БК сигнала ДАННЫЕ ГОТОВЫ. 1 - НЕТ ДАННЫХ (байта) для БК.
Подтверждение приема байта производится записью сигнала БАЙТ ПРИНЯТ, в регистр соответствующего устройства.
PB2(2) dddd.RRRR (Данные инвертированы под код на БК0010/11М. В ардуине использовать инверсию!)
1 0000.0000 Выбор устройства адаптера мыши "Марсианка" (используется/работает по-умолчанию).
0 0000.0000 Очистка регистра вывода порта УП БК.
PB2(2) dddd.RRRR (Данные инвертированы под код на БК0010/11М. В ардуине использовать инверсию!)
1 0001.0000 Выбор устройства последовательного интерфейса UART, например, для связи с PC.
0 хххх.хххх Запись байта в регистр данных UART.
1 0001.0001 Выбор регистра сигнала СТРОБ ДАННЫХ. Ардуино начинает его ждать...
0 0001.0001 СТРОБ ДАННЫХ. При его выставлении переданный байт данных отправляется на UART.
1 0001.1000 Выбор регистра сигнала БАЙТ ПРИНЯТ.
0 0001.1000 БАЙТ ПРИНЯТ. При его получении Ардуино выставляет на порт C новый инвертированный байт,
если он есть, либо пишет в него 0xFF (что для БК == 0).
PB2(2) dddd.RRRR (Данные инвертированы под код на БК0010/11М. В ардуине использовать инверсию!)
1 0010.0000 Выбор устройства последовательного интерфейса UART, например, для связи по Bluetooth.
0 хххх.хххх Запись байта в регистр данных UART.
1 0010.0001 Выбор регистра сигнала СТРОБ ДАННЫХ. Ардуино начинает его ждать...
0 0010.0001 СТРОБ ДАННЫХ. При его выставлении переданный байт данных отправляется на UART.
1 0010.1000 Выбор регистра сигнала БАЙТ ПРИНЯТ.
0 0010.1000 БАЙТ ПРИНЯТ. При его получении Ардуино выставляет на порт C новый инвертированный байт,
если он есть, либо пишет в него 0xFF (что для БК == 0).
PB2(2) dddd.RRRR (Данные инвертированы под код на БК0010/11М. В ардуине использовать инверсию!)
1 0011.0000 Выбор шины SPI для работы с видеоАдаптером "EMT16 - Эмулятор ТВ-драйвера БК0010(-01)".
1 0011.0100 Выбор регистра сигнала SS (выбор ведомого устройства, начало сеанса связи).
0 0011.0100 Выставить на шину сигнал SS для начала сеанса связи. Ардуино начинает ждать байты от БК.
...
1 0011.0000 Выбор устройства SPI для работы с видеоАдаптером.
0 хххх.хххх Запись байта в регистр данных интерфейса SPI.
1 0011.0001 Выбор регистра сигнала СТРОБ ДАННЫХ. Ардуино начинает его ждать...
0 0011.0001 СТРОБ ДАННЫХ. При его выставлении переданный байт данных отправляется на шину.
...
1 0011.0100 Выбор регистра сигнала SS (выбор ведомого устройства, начало сеанса связи).
0 0011.0000 Снять с шины сигнал SS для завершения сеанса связи. Ардуино завершает ждать байты от БК.
1 0011.1000 Выбор регистра сигнала БАЙТ ПРИНЯТ.
0 0011.1000 БАЙТ ПРИНЯТ. При его получении Ардуино выставляет на порт C новый инвертированный байт,
если он есть, либо пишет в него 0xFF (что для БК == 0).
PB2(2) dddd.RRRR (Данные инвертированы под код на БК0010/11М. В ардуине использовать инверсию!)
1 0100.0000 Выбор шины для работы с ЦАП-ами SuperCovox. (Байт1L + Байт2L + Байт3L + Байт4L => ЦАП)
0 хххх.хххх Запись байта в регистр данных интерфейса.
1 0100.0001 Выбор регистра сигнала СТРОБ ДАННЫХ. Ардуино начинает его ждать...
0 0100.0001 СТРОБ ДАННЫХ. При его выставлении переданный байт данных отправляется на шину.
...
1 0100.1000 Выбор регистра сигнала БАЙТ ПРИНЯТ. (SuperCovox "возвращает" сумму в виде двух байт).
0 0100.1000 БАЙТ ПРИНЯТ. При его получении Ардуино выставляет на порт C новый инвертированный байт,
если он есть, либо пишет в него 0xFF (что для БК == 0).
PB2(2) dddd.RRRR (Данные инвертированы под код на БК0010/11М. В ардуине использовать инверсию!)
1 0110.0000 Выбор шины для работы с ЦАП-ами SuperCovox @ Stereo Mode.
(Байт1L + Байт1R + Байт2L + Байт2R + Байт3L + Байт3R + Байт4L + Байт4R => ЦАП-ы)
0 хххх.хххх Запись байта в регистр данных интерфейса.
1 0110.0001 Выбор регистра сигнала СТРОБ ДАННЫХ. Ардуино начинает его ждать...
0 0110.0001 СТРОБ ДАННЫХ. При его выставлении переданный байт данных отправляется на шину.
...
1 0110.1000 Выбор регистра сигнала БАЙТ ПРИНЯТ. (SuperCovox "возвращает" суммы в виде двух пар байт).
0 0110.1000 БАЙТ ПРИНЯТ. При его получении Ардуино выставляет на порт C новый инвертированный байт,
если он есть, либо пишет в него 0xFF (что для БК == 0).
PB2(2) dddd.RRRR (Данные инвертированы под код на БК0010/11М. В ардуине использовать инверсию!)
1 0101.0000 Выбор канала для работы с таймером реального времени.
PB2(2) dddd.RRRR (Данные инвертированы под код на БК0010/11М. В ардуине использовать инверсию!)
1 0111.0000 Выбор канала для работы с ускорителем расчётов MUL16, DIV16, MUL32, DIV32
PB2(2) dddd.RRRR (Данные инвертированы под код на БК0010/11М. В ардуине использовать инверсию!)
1 1000.0000 Выбор канала для работы с ускорителем векторной графики.
На вход подаем координаты ХY экрана БК, тип фигуры и её геом./цвет. параметры --
на выходе получаем поток адресов, масок гашения и свечения.
PB2(2) dddd.RRRR (Данные инвертированы под код на БК0010/11М. В ардуине использовать инверсию!)
1 1001.0000 Выбор шины SPI, например, для работы с LCD-экраном.
1 1001.0100 Выбор регистра сигнала SS (выбор ведомого устройства, начало сеанса связи).
0 1001.0100 Выставить на шину сигнал SS для начала сеанса связи. Ардуино начинает ждать байты от БК.
...
1 1001.0000 Выбор устройства SPI, например, для работы с LCD-экраном или видеоАдаптером.
0 хххх.хххх Запись байта в регистр данных интерфейса SPI.
1 1001.0001 Выбор регистра сигнала СТРОБ ДАННЫХ. Ардуино начинает его ждать...
0 1001.0001 СТРОБ ДАННЫХ. При его выставлении переданный байт данных отправляется на шину.
...
1 1001.0100 Выбор регистра сигнала SS (выбор ведомого устройства, начало сеанса связи).
0 1001.0000 Снять с шины сигнал SS для завершения сеанса связи. Ардуино завершает ждать байты от БК.
1 1001.1000 Выбор регистра сигнала БАЙТ ПРИНЯТ.
0 1001.1000 БАЙТ ПРИНЯТ. При его получении Ардуино выставляет на порт C новый инвертированный байт,
если он есть, либо пишет в него 0xFF (что для БК == 0).