[i] Работа модуля МКИО на отладочных платах Миландр К1986ВЕ8Т
Компания "Миландр" выпускает модули МКИО на базе двух разных микросхем приемопередатчиков: 5559ИН13У2 и 5559ИН67Т. Данные микросхемы представляют собой приёмопередатчик, предназначенный для построения устройств интерфейса по ГОСТ Р 52070-2003 (MIL-STD-1553). Краткая информация об интерфейсе ГОСТ Р 52070-2003 приведена в статье [i] Начальные сведения о МКИО.
В данной статье рассмотрена работа модулей МКИО на отладочной плате для К1986ВЕ8Т.
Содержание
1. Подключение модулей МКИО к отладочной плате для К1986ВЕ8Т
Рисунок 1 - Модуль расширения МКИО для отладочной платы К1986ВЕ8Т на основе микросхемы 5559ИН13У2
В приложенному к статье проекте использовалась отладочная плата для МК К1986ВЕ8Т с подключенными к ней двумя модулями расширения МКИО. Один модуль МКИО будет выступать в качестве контроллера шины (КШ), другой - в качестве оконечного устройства (ОУ). Подключение между модулями осуществляется кабелем COM 9F/9F (мама - мама) прямой распайки (1-1, 2-2…9-9). МК К1986ВЕ8Т совместно с модулями МКИО реализует обмен данными по двум магистральным шинам - Bus_A и Bus_B. Bus_A используется в качестве основной шины, Bus_B в качестве резервной.
Рисунок 2 - Схема соединения модулей МКИО с помощью кабеля COM 9F/9F
Таким образом, на отладочной плате получили следующую конструкцию:
Рисунок 3 - Отладочная плата с установленными модулями
2. Проект МКИО для К1986ВЕ8Т
Готовый проект МКИО для IDE Keil доступен для скачивания в конце данной статьи. Перейдем к краткому разбору проекта. При успешном обмене данными между КШ (контроллером шины) и ОУ (оконечного устройства) на отладочный плате моргает диод VD_7. Как только обмен по каким-либо причинам прекращается начинает моргать диод VD_14.
2.1 Инициализация структуры MIL
После того, как произведена настройка тактирования необходимых портов, а также сделана их конфигурацию (для диодов и для МКИО), перейдем к инициализации самого блока MIL.
/*-- Настройка ОУ -----------------------------------------*/
MIL_STD_1553xStructInit(&MIL_STD_15531_InitStructure);
/* Инициализация структуры MIL_STD_1553_InitStructure */
MIL_STD_15531_InitStructure.MIL_STD_1553_Mode = MIL_STD_1553_ModeTerminal; // Режим работы
MIL_STD_15531_InitStructure.MIL_STD_1553_RERR = DISABLE; // Сброс ошибок в режиме ОУ
MIL_STD_15531_InitStructure.MIL_STD_1553_DIV = 40; // Делитель частоты РСLK блока МКИО до 1 МГц
MIL_STD_15531_InitStructure.MIL_STD_1553_RTA = 0x01; // Адрес оконечного устройства
MIL_STD_15531_InitStructure.MIL_STD_1553_TRA = ENABLE; // Передатчик основного канала
MIL_STD_15531_InitStructure.MIL_STD_1553_TRB = ENABLE; // Передатчик резервного канала
/* Конфигурация параметров MIL_STD_15531 */
MIL_STD_1553_Init(MIL_STD_15531, &MIL_STD_15531_InitStructure);
/*-- Настройка КШ -----------------------------------------*/
MIL_STD_1553xStructInit(&MIL_STD_15532_InitStructure);
/* Инициализация структуры MIL_STD_1553_InitStructure */
MIL_STD_15532_InitStructure.MIL_STD_1553_Mode = MIL_STD_1553_ModeBusController; // Режим работы
MIL_STD_15532_InitStructure.MIL_STD_1553_RERR = ENABLE; // Сброс ошибок в режиме ОУ
MIL_STD_15532_InitStructure.MIL_STD_1553_DIV = 40; // Делитель частоты РСLK блока МКИО до 1 МГц
MIL_STD_15532_InitStructure.MIL_STD_1553_RTA = 0; // Адрес оконечного устройства (только для ОУ)
MIL_STD_15532_InitStructure.MIL_STD_1553_TRA = ENABLE; // Передатчик основного канала
MIL_STD_15532_InitStructure.MIL_STD_1553_TRB = DISABLE; // Передатчик резервного канала
/* Конфигурация параметров MIL_STD_15532 */
MIL_STD_1553_Init(MIL_STD_15532, &MIL_STD_15532_InitStructure);
Опорная частота блока контроллера МКИО должна быть 1 МГц. В настройках тактирования МК была получена частота 40 МГц, поэтому чтобы получить 1 МГц для МКИО, необходимо указать делитель частоты DIV = 40.
MIL_STD_15532_InitStructure.MIL_STD_1553_DIV = 40; // Делитель частоты РСLK блока МКИО до 1 МГц
В настройках КШ для обмена данными разрешен только основной канал.
MIL_STD_15532_InitStructure.MIL_STD_1553_TRA = ENABLE; // Передатчик основного канала
MIL_STD_15532_InitStructure.MIL_STD_1553_TRB = DISABLE; // Передатчик резервного канала
Для ОУ в общем случае необходимо разрешить обмен данными для всех каналов, так как ОУ не может выбирать, по какому каналу ему передавать СД и ОС, и поэтому их передача происходит по тому каналу, по которому было принято КС.
MIL_STD_15531_InitStructure.MIL_STD_1553_TRA = ENABLE; // Передатчик основного канала
MIL_STD_15531_InitStructure.MIL_STD_1553_TRB = ENABLE; // Передатчик резервного канала
2.2 Основной цикл и передача слова
В основном цикле с помощью функции StartTRM формируется и отправляется командное слово, затем происходит ожидание окончания передачи по биту BCSTART регистра CONTROL. После отправки слова, по значению флага Valmess (флаг успешного завершения транзакции в канале) зажигается либо светодиод VD7 при успешной транзакции, либо VD14, если транзакция завершена с ошибкой.
while(1)
{
MILx_StartTransmision(MIL_STD_15532);
while((MIL_STD_1553_BCSTART_bit_stat(MIL_STD_15532)) != RESET){} // Ожидание окончания передачи
if(MIL_STD_1553_GetFlagStatus(MIL_STD_15532, MIL_STD_1553_FLAG_VALMESS) != RESET) { // Если флаг Valmess == 1
PORT_SetBits(PORTC, PORT_Pin_16); // Зажигаем VD7
PORT_ResetBits(PORTC, PORT_Pin_23); // Гасим VD14
}
if(MIL_STD_1553_GetFlagStatus(MIL_STD_15532, MIL_STD_1553_FLAG_ERR) != RESET) { // Если флаг Err == 1
PORT_SetBits(PORTC, PORT_Pin_23); // Зажигаем VD14
PORT_ResetBits(PORTC, PORT_Pin_16); // Гасим VD7
}
Delay(200000); // Функция задержки
PORT_ResetBits(PORTC, PORT_Pin_16|PORT_Pin_23); // Гасим VD7 и VD14
Delay(200000);
}
void MILx_StartTransmision(MIL1553Control* MIL_STD_1553x)
{
/* Сформировать командное слово для отправки */
MIL_STD_1553_CommandWord1.Fields.Data = 5; // Количество принимаемых или передаваемых СД
MIL_STD_1553_CommandWord1.Fields.Subaddress = 1; // Подадрес для принимаемых или передаваемых СД
MIL_STD_1553_CommandWord1.Fields.ReadWriteBit = 0; // Бит приёма/передачи: 0 - передача от КШ к ОУ, 1 - передача от ОУ к КШ
MIL_STD_1553_CommandWord1.Fields.TerminalDeviceAddress = 1; // Адрес ОУ
/* Записать командное слово в буфер */
MIL_STD_1553_SetCommandWord(MIL_STD_1553x, MIL_STD_1553_COMMAND_WORD1, &MIL_STD_1553_CommandWord1);
/* Установить активным каналом передачи: основной канал */
MIL_STD_1553_Transmitter_CMD(MIL_STD_1553x, MIL_STD_1553_TRANSMITTER_MAIN, ENABLE);
/* Начать передачу */
MIL_STD_1553_StartTransmision(MIL_STD_1553x);
}
2.3 Структура памяти данных
Для хранения данных используется 16-разрядная двухпортовая память. Это значит, что при записи данные попадают в буфер передатчика, а при чтении с того же адреса будут прочитаны данные из буфера приемника. Физически - это две разные ячейки памяти, но доступ к каждой из них осуществляется с одного и того же адреса.3. Запуск программы
Подключаем кабель между модулям МКИО, включаем питание, запускаем проект в режиме отладки. Если передачи идёт корректно, то мигает левый светодиод VD7. Теперь выйдем из режима отладки, выключим питание и отсоединим кабель от одного модуля. Пробуем запустить проект ещё раз. Теперь мигает правый светодиод VD14 - связи в канале нет.
Сохранить статью в PDF