Здравствуйте! Нужно реализовать обмен по ГОСТ Р 52070-2003 на МК 1986ВЕ3Т в режиме ОУ. Используется второй контроллер ГОСТ Р 52070-2003. Вот код.
Код:
void MkioInit()
{
MDR_RST_CLK->PER_CLOCK |= (1 << 10) | (1 << 21) | (1 << 29); //разрешаем тактирование портов А и F и контроллера MIL_STD_15532
MDR_RST_CLK->ETH_CLOCK |= 1 << 25; //разрешаем MAN_CLK
MDR_RST_CLK->ETH_CLOCK &= ~(0xff << 8); //делитель для MAN_CLK = 1
PORTA->OE &= ~((1 << 8) | (1 << 9)); //ноги 8 и 9 на вход
PORTA->FUNC |= (3 << 16) | (3 << 18); //переопределенная функция
PORTA->ANALOG |= (1 << 8) | (1 << 9); //цифровые
PORTA->PWR |= (3 << 16) | (3 << 18); //максимально быстрый фронт
PORTF->OE &= ~((1 << 6) | (1 << 5)); //ноги 5,6 на вход
PORTF->OE |= 0x3f << 7; //ноги 7, 8, 9, 10, 11, 12 на выход
PORTF->FUNC |= (1 << 10) | (1 << 12) | (1 << 14) | (1 << 16) | (1 << 18) | (1 << 20) | (1 << 22) | (1 << 24); //основная функция
PORTF->ANALOG |= (1 << 5) | (1 << 6) | (1 << 7) | (1 << 8) | (1 << 9) | (1 << 10) | (1 << 11) | (1 << 12); //цифровые
PORTF->PWR |= (3 << 10) | (3 << 12) | (3 << 14) | (3 << 16) | (3 << 18) | (3 << 20) | (3 << 22) | (3 << 24); //максимально быстрый фронт
MDR_MIL_STD_15532->CONTROL = 1; //сбрасываем контроллер по ГОСТ Р 52070-2003
MDR_MIL_STD_15532->CONTROL = (2 << 2) //ОУ
| (3 << 4) //разблокировать основной и резервный передатчики
| (80 << 11); //делитель, чтобы получить 1 МГц
MDR_MIL_STD_15532->StatusWord1 = 0; //ответное слово
__enable_irq();
MDR_MIL_STD_15532->INTEN = 2; //прерывание только при приеме достоверного слова
NVIC_EnableIRQ(MIL_STD_15532_IRQn); //разрешаем прерывания
}
Обработчик прерывания не срабатывает. Данные МК получает от компа. На компе установлена плата TX1-PC. Сам МК тактируется от кварца на 10 МГц. Через блок PLL разгоняю его до 80 МГц. Параллельно с МКИО работает CAN. Данные по CAN контроллер посылает. В чем может быть ошибка?