Планируется использовать К1921ВК01Т и возникло пару вопросов.
Первый заключается в том, что использовать МК будем для управления двумя DDS 1508ПЛ8Т.
Для этого, разработана следующая схема включения (см. вложение). Схема весьма условная, но основные моменты, затронутые в вопросе на ней указаны.
Подключаем две DDS к шине как внешнюю память к выводам контроллера использующих третью альтернативную функцию (в соответствии с таблицей 7.6 из технического описания).
Тогда DDS отобразятся на адресное пространство 0x40000000 (исходя из таблицы 6.7). Т.к. запись в 1508ПЛ8Т происходит, если сначала указывается на шине адрес внутреннего регистра (при этом бит ADR в 0), потом значение для него (бит ADR в 1), то вполне логично, что записать данные data по адресу address можно следующим образом:
Код: Выделить всё
/** в первую DDS записываем данные data_DDS0 по адресу address_DDS0 */
(*(volatile uint16_t *)0x40000000) = address_DDS0;
(*(volatile uint16_t *)0x40000001) = data_DDS0;
/** во вторую DDS записываем данные data_DDS1 по адресу address_DDS1 */
(*(volatile uint16_t *)0x40000000) = address_DDS1;
(*(volatile uint16_t *)0x40000002) = data1_DDS1;
И ещё, сейчас мне не совсем ясно назначение линий RAM_Ubn и RAM_Lbn. Рискну предположить, что это разрешение на работу старших 8-линий RAM_ADDR15 — RAM_ADDR8 (бит RAM_Ubn) и младших 8-линий RAM_ADDR7 — RAM_ADDR0 (бит RAM_Lbn), и если в моём случае используется все 16 разрядов, то есть смысл эти биты держать всего в активном состоянии.
Также хотелось, в дополнение к первому вопросу ещё узнать, можно ли использовать оставшиеся биты адреса по своему усмотрению? Например, как GPIO или использовать их с другой альтернативной функцией. Просто, даже если используется две DDS, то они займут всего 2 линии адреса (например RAM_ADDR0 и RAM_ADDR1), а остальные 10 линий получается остаются незадействованными.
И ещё по этому же вопросу, хотелось бы узнать временные характеристики работы внешней шины, на какую пропускную способность можно рассчитывать?
И второй небольшой вопрос заключается в следующем: например, у STM32 есть контроллер внешних прерываний, который может ловить прерывания по фронту/спаду и пр. В МК от ПКК «Миландр» внешние прерывания адекватно обработать можно было лишь используя таймер в режиме захвата. Тут, если опять же, все верно понимаю, для этих целей можно использовать блоки захвата (которых аж 6 штук), и заводить нужный сигнал на один из 4-х вход блока. Всего получается можно обработать 24 внешних прерываний (6 блоков по 4 входа в каждом). Могу ли я, использую блок захвата, например, на первом входе обработать прерывание переднего фронта и заднего фронта, а на втором входе, просто задний фронт сигнала? Или можно ещё какими-нибудь способами отрабатывать прерывания?