61499

[i] Работа модуля МКИО на отладочных платах Миландр К1986ВЕ8Т

Дата последнего изменения: 05.12.2025 12:33:09

Компания "Миландр" выпускает модули МКИО на базе двух разных микросхем приемопередатчиков: 5559ИН13У2 и 5559ИН67Т. Данные микросхемы представляют собой приёмопередатчик, предназначенный для построения устройств интерфейса по ГОСТ Р 52070-2003 (MIL-STD-1553). Краткая информация об интерфейсе ГОСТ Р 52070-2003 приведена в статье [i] Начальные сведения о МКИО.

Для модуля МКИО на базе 5559ИН13У2 в регистре CONTROL блока МКИО 19-й бит INVTR (разрешение инверсии сигналов) должен быть установлен в "0", а для модуля МКИО на базе 5559ИН67Т - в "1".

В данной статье рассмотрена работа модулей МКИО на отладочной плате для К1986ВЕ8Т.

Содержание

1. Подключение модулей МКИО к отладочной плате для К1986ВЕ8Т
2. Проект МКИО для К1986ВЕ8Т
    2.1 Инициализация структуры MIL
    2.2 Основной цикл и передача слова
    2.3 Структура памяти данных
3. Запуск программы

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

Файлы для скачивания

Документация

Теги

Была ли статья полезной?