Миландр

Ключевым подразделением нашей компании является Центр Проектирования интегральных микросхем
Текущее время: 2017-сен-26 13:59

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 6 ] 
Автор Сообщение
СообщениеДобавлено: 2017-авг-22 11:03 
Не в сети

Зарегистрирован: 2017-май-22 09:52
Сообщения: 4
Здравствуйте.
Мне нужно организовать обмен по UART_1 и UART_2 на прерываниях от разных источников.
Возникла непонятная ситуация с прерваниями по UART_2.
А именно, в прерывание по UART_1 контроллер поппадает, а в прерывание по UART_2 нет. На прием без прерывания UART_2 тоже не работает.
UART_2 сконфигурирован на PORTD. Сигнал до ноги микроконтроллера доходит(проверено осциллографом).
На передачу UART_2 работает нормально.
Почему и как это исправить?
За основу я взял код из примера который был на диске поставляемом с отладочной платой.
Файл MDR32F9Qx_config.h подправил, отключил определение USE_JTAG_B. Строка 80.

Открыть Функция инициализации:
Код:
void uartInit(void){
/* Enables the HSI clock on PORTB,PORTD */
  RST_CLK_PCLKcmd(RST_CLK_PCLK_PORTB,ENABLE);
  RST_CLK_PCLKcmd(RST_CLK_PCLK_PORTD,ENABLE);


  /* Fill PortInit structure*/
  UsartPORT.PORT_PULL_UP = PORT_PULL_UP_OFF;
  UsartPORT.PORT_PULL_DOWN = PORT_PULL_DOWN_OFF;
  UsartPORT.PORT_PD_SHM = PORT_PD_SHM_OFF;
  UsartPORT.PORT_PD = PORT_PD_DRIVER;
  UsartPORT.PORT_GFEN = PORT_GFEN_OFF;
  UsartPORT.PORT_FUNC = PORT_FUNC_ALTER;
  UsartPORT.PORT_SPEED = PORT_SPEED_MAXFAST;
  UsartPORT.PORT_MODE = PORT_MODE_DIGITAL;

  /* Configure PORTB pins 5 (UART1_TX) as output */
  UsartPORT.PORT_OE = PORT_OE_OUT;
  UsartPORT.PORT_Pin = PORT_Pin_5;
  PORT_Init(MDR_PORTB, &UsartPORT);

  /* Configure PORTB pins 6 (UART1_RX) as input */
  UsartPORT.PORT_OE = PORT_OE_IN;
  UsartPORT.PORT_Pin = PORT_Pin_6;
  PORT_Init(MDR_PORTB, &UsartPORT);


  /* Configure PORTD pins 1 (UART2_TX) as output */
  UsartPORT.PORT_OE = PORT_OE_OUT;
  UsartPORT.PORT_Pin = PORT_Pin_1;
  PORT_Init(MDR_PORTD, &UsartPORT);

  /* Configure PORTD pins 0 (UART1_RX) as input */
  UsartPORT.PORT_OE = PORT_OE_IN;
  UsartPORT.PORT_Pin = PORT_Pin_0;
  PORT_Init(MDR_PORTD, &UsartPORT);
 
   
   /* Выбираем внешний кварц делитель 1*/
  RST_CLK_CPU_PLLconfig (RST_CLK_CPU_PLLsrcHSEdiv1,0);

  /* Enables the CPU_CLK clock on UART1,UART2 */
  RST_CLK_PCLKcmd(RST_CLK_PCLK_UART1, ENABLE);
  RST_CLK_PCLKcmd(RST_CLK_PCLK_UART2, ENABLE);

  /* Set the HCLK division factor = 1 for UART1,UART2*/
  UART_BRGInit(MDR_UART1, UART_HCLKdiv1);
  UART_BRGInit(MDR_UART2, UART_HCLKdiv1);

  /* Initialize UART_InitStructure */
  UART_InitStructure.UART_BaudRate                = 115200;
  UART_InitStructure.UART_WordLength              = UART_WordLength8b;
  UART_InitStructure.UART_StopBits                = UART_StopBits1;
  UART_InitStructure.UART_Parity                  = UART_Parity_No;
  UART_InitStructure.UART_FIFOMode                = UART_FIFO_OFF;
  UART_InitStructure.UART_HardwareFlowControl     = UART_HardwareFlowControl_RXE | UART_HardwareFlowControl_TXE;

  /* Configure UART1 parameters*/
  UART_Init (MDR_UART1,&UART_InitStructure);

  /* Enables UART1 peripheral */
  UART_Cmd(MDR_UART1,ENABLE);

/* Configure UART2 parameters*/
UART_Init (MDR_UART2,&UART_InitStructure);

/* Enables UART2 peripheral */
UART_Cmd(MDR_UART2,ENABLE);
   
NVIC_EnableIRQ(UART1_IRQn);
UART_ITConfig(MDR_UART1, UART_IT_RX, ENABLE);
NVIC_EnableIRQ(UART2_IRQn);
UART_ITConfig(MDR_UART2, UART_IT_RX, ENABLE);
      
}
Закрыть


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2017-авг-22 14:57 
Не в сети

Зарегистрирован: 2010-авг-30 19:12
Сообщения: 364
имя обработчика прерывания должно совпадать с именем из таблицы (в файле startup.s)

_________________
О сколько нам открытий чудных
Готовит просвященья дух,
И опыт - сын ошибок трудных ... (Пушкин)

Пергаменты не утоляют жажду ("Фауст",Гете)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2017-авг-22 16:17 
Не в сети

Зарегистрирован: 2017-май-22 09:52
Сообщения: 4
Да, все верно. Имена совпадают. Я использую MDR32F9Qx_it.c


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2017-авг-22 23:22 
Не в сети

Зарегистрирован: 2016-окт-14 19:39
Сообщения: 23
Откуда: СПБ
А MODE (PORTF[6:4]) в каком состоянии? Я так понял, разговор о 1986ВЕ92?

USE_JTAG_B jtag не включает/отключает, только указывает библиотеке, что он используется (чтобы библиотека корректно с GPIO работала), может быть в этом проблема.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2017-авг-23 09:20 
Не в сети

Зарегистрирован: 2017-май-22 09:52
Сообщения: 4
Микроконтроллер 1986ВЕ93У.
azimuth писал(а):
А MODE (PORTF[6:4]) в каком состоянии?
Перекелючатели в состоянии:
Режим микроконтроллера, код исполняется из FLASH памяти начиная с адреса 0х80000000, отладка через JTAG_A
azimuth писал(а):
USE_JTAG_B jtag не включает/отключает, только указывает библиотеке, что он используется...
Да, все верно. Пока не закомментировал эту строчку UART_2 вообще не работал.

Может есть у кого рабочий пример использования UART_2?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2017-авг-23 12:06 
Не в сети

Зарегистрирован: 2017-май-22 09:52
Сообщения: 4
Уважаемые коллеги спасибо всем кто откликнулся и попытался помочь.
Я разобрался с этой проблемой.
Ошибка была "в полу метре от экрана" :(
А именно, сначала проводилась настройка пинов порта под UART_2, потом под другую периферию. При настройке других выводов этого порта переписывалась настройка пинов под UART_2 и соответственно ничего не работало.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 6 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB