Миландр

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

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




Начать новую тему Ответить на тему  [ Сообщений: 295 ]  На страницу Пред.  1 ... 4, 5, 6, 7, 8, 9, 10 ... 20  След.
Автор Сообщение
 Заголовок сообщения: Re: Standart Peripheral Library MDR32F9x, MDR1986VE1T, VE3T
СообщениеДобавлено: 2014-сен-24 19:54 
Не в сети

Зарегистрирован: 2014-авг-11 19:26
Сообщения: 115
Добрый день!
Есть вопросы по поводу UART, инициализирую так:
Код:
RST_CLK_PCLKcmd(RST_CLK_PCLK_UART1, ENABLE);
UART_BRGInit(MDR_UART1, UART_HCLKdiv1);
NVIC_EnableIRQ(UART1_IRQn);
UART_InitStructure.UART_BaudRate                = ulBaudRate;
UART_InitStructure.UART_WordLength              = UART_WordLength8b;
UART_InitStructure.UART_Parity                  = UART_Parity_No;
UART_InitStructure.UART_FIFOMode                = UART_FIFO_OFF;
UART_InitStructure.UART_HardwareFlowControl     = UART_HardwareFlowControl_RXE | UART_HardwareFlowControl_TXE;
UART_Init (MDR_UART1,&UART_InitStructure);

UART_ITConfig (MDR_UART1, UART_IT_TX, ENABLE);
UART_Cmd(MDR_UART1,ENABLE);
UART_DMACmd(MDR_UART1,UART_DMA_TXE,ENABLE);


Прервывание от передатчика собственно вызывает нормально эту функцию:
Код:
void UART1_IRQHandler(void)
{
if (UART_GetITStatusMasked(MDR_UART1, UART_IT_TX) == SET)
  {   
      UART_ClearITPendingBit(MDR_UART1, UART_IT_TX);
// Доп код для исполнения
  }
}


Но это прерывание по передаче, а для детектирования уровня буфера передачи есть соответствующие настройки в DMA UART :
Код:
// и здесь выставляем на каком уровне прерывание сразабывает (1\8 заполнения или выше.)
UART_DMAConfig(MDR_UART1, UART_IT_FIFO_LVL_2words, UART_IT_FIFO_LVL_2words);

Так вот, если использовать UART_DMAConfig настройку и при использовании DMA в UART какое прерывание вызывается ? UART_IT_TX и UART_IT_RX если они разрешены или же вызывается ниже приведенная функция ?
Код:
void DMA_IRQHandler(void)
{
}

Пробовал разрешить прерывание NVIC_EnableIRQ(DMA_IRQn); так вот, оно постоянно срабатывает (вызывая выше приведенную функцию) и для этого нет сброса флага. Насколько я правильно понял, то NVIC_ClearPendingIRQ(IRQn_Type IRQn) - это сброс флага какого либо прерывания, но если вызвать IRQn_Type IRQn(DMA_IRQn) из DMA_IRQHandler(void) - то ничего не меняется, прерывание по прежнему срабатывает.

Собственно если все выше написанное обобщить - вопрос в том, как настроить прерывание на 1\8 буфера передачи и что при этом вызывается ?

_________________
https://adelectronics.ru
Заходи, не стесняйся! ;)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Standart Peripheral Library MDR32F9x, MDR1986VE1T, VE3T
СообщениеДобавлено: 2014-сен-25 08:30 
Не в сети

Зарегистрирован: 2010-авг-30 19:12
Сообщения: 395
Цитата:
так вот, оно постоянно срабатывает (вызывая выше приведенную функцию)

АЦП в проекте используете? Если да, то это причина срабатывания DMA_IRQ. Подробности в ERRATA ошибка 007.

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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Standart Peripheral Library MDR32F9x, MDR1986VE1T, VE3T
СообщениеДобавлено: 2014-сен-25 10:14 
Не в сети

Зарегистрирован: 2014-авг-11 19:26
Сообщения: 115
редактор писал(а):
АЦП в проекте используете? Если да, то это причина срабатывания DMA_IRQ. Подробности в ERRATA ошибка 007.

Нет, только SPI, UART ну и TIM0 по совпадению.

_________________
https://adelectronics.ru
Заходи, не стесняйся! ;)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Standart Peripheral Library MDR32F9x, MDR1986VE1T, VE3T
СообщениеДобавлено: 2014-сен-25 10:37 
Не в сети

Зарегистрирован: 2014-мар-04 08:52
Сообщения: 53
Откуда: г. Зеленоград ЗАО "НТЦ ЭЛИНС"
при входе в DMA_IRQ запрещайте его полностью, сохраняйте в глобальные переменные регистры, отвечающие за обработку DMA (номера каналов активных и т.п.) - и потом в основном коде спокойно проверяете, какой канал вызвал прерывание, после чего снова разрешаете DMA_IRQ


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Standart Peripheral Library MDR32F9x, MDR1986VE1T, VE3T
СообщениеДобавлено: 2014-сен-29 15:04 
Не в сети

Зарегистрирован: 2014-авг-11 19:26
Сообщения: 115
Спасибо за советы!
Неспешно и отдельными "кусочками", но таки разобрался почти полностью - все это для того, что бы портировать freemodbus RTU на Миландровский МК и запустить через RS-485 (пока только один момент остался, но уже мелочный - вывод RTS корректно переключать при Tx\Rx. Хардварного и толерантного к 5В нет у МК). А в целом - нормально принимает и корректно отвечает на запросы Modbus Master'a.

Во время изучения и освоения МК случился казус, я сначала просто взял другую отладочную плату (их 2 спаял) и полностью отладил на ней все уже, теперь же интересно вернуться к первой, умершей (ли ?).
Схема платы проста (во вложении), не планировал использовать внешнее тактирование или кварц (ибо все прекрасно работает и от внутреннего генератора).
Спаял, подключил, проверил через JTAG - все ок. написал пустой цикл - залил, зашилось, отлаживается. Значит все нормально.
Инициализация тактирования у меня выглядит так:
Код:
void ClockConfigure(void)
{
  // Configure CPU_PLL clock
  RST_CLK_CPU_PLLconfig (RST_CLK_CPU_PLLsrcHSEdiv1, RST_CLK_CPU_PLLmul1); // И вот тут я ошибся
   RST_CLK_CPU_PLLcmd(ENABLE);
   RST_CLK_CPU_PLLuse(ENABLE);
   
   RST_CLK_CPUclkPrescaler(RST_CLK_CPUclkDIV1);
   RST_CLK_CPUclkSelection(RST_CLK_CPUclkCPU_C3);
   
  // Enables the RTCHSE clock on all ports
  RST_CLK_PCLKcmd(ALL_PORTS_CLK, ENABLE);
}

Все бы корректно, но вместо HSI я написал HSE.
Проект скомпилировался, прошился в МК без ошибок и ... тишина. МК больше не отвечает по JTAG и конечно же не мигает светодиодом (как самый простой пример).
Я подпаивал внешний кварц с конденсаторами, пытался давать внешнее тактирование на вход (125кГц) - ничего не помогает.

У кого нибудь было подобное ? Решаемо ли это или МК -кирпич теперь и уже ничем не реанимировать его ? Ревизия на МК - 1328.


Вложения:
Sch.PNG
Sch.PNG [ 128.87 КБ | Просмотров: 9388 ]

_________________
https://adelectronics.ru
Заходи, не стесняйся! ;)
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Standart Peripheral Library MDR32F9x, MDR1986VE1T, VE3T
СообщениеДобавлено: 2014-сен-29 15:39 
Не в сети

Зарегистрирован: 2014-мар-04 08:52
Сообщения: 53
Откуда: г. Зеленоград ЗАО "НТЦ ЭЛИНС"
Дак а вариант перевести выводы BOOT0/1/2 в режим загрузки встроенного bootloader и стереть, используя UART1?
С jtag через консоль пробовали команды слать напрямую? камень явно не сдох, восстанавливаться должен!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Standart Peripheral Library MDR32F9x, MDR1986VE1T, VE3T
СообщениеДобавлено: 2014-сен-29 16:01 
Не в сети

Зарегистрирован: 2014-авг-11 19:26
Сообщения: 115
sguwenka писал(а):
Дак а вариант перевести выводы BOOT0/1/2 в режим загрузки встроенного bootloader и стереть, используя UART1?
С jtag через консоль пробовали команды слать напрямую? камень явно не сдох, восстанавливаться должен!

Хм, не пробовал. Спасибо за совет! Попробую на днях.
Сейчас разобрался с выводом RTS в прошивке, понял почему не корректно управлялось. Но вернулся к одному из первых вопросов, тут нет прерывания по опустошеню буфера, но зато есть по оставшемся количестве в Tx буфере. Использую 1\8 и DMA прерывание и вот такой вот костыль, т.к. Не нашел в каком же регистре читать актуальное количество байт в Tx регистре :
Код:
// 1\8 на заполненность буфера передатчика
volatile uint8_t DMA_TIM = 0x20;
void DMA_IRQHandler(void)
{
   if(DMA_TIM) DMA_TIM--;
   else
   {
      DMA_TIM=0x20;
      pxMBFrameCBTransmitterEmpty();
   }
}

Я считаю это явно не корректным кодом, хоть и работающим стабильно. Как это сделать правильно ? (может я что то упустил и есть регистр, где читать актуальное кол-во байт буфера Tx...)


Upd:
Восстановить МК удалось с пол пинка, MODE = 101 выставил, пины UART получаются на разьеме JTAG B, подключать удобно. Утилитой 1986UARTWSD сразу нормально определила МК и успешно очистила. После возвращения MODE = 0 ,теперь видится и прошивается через JTAG нормально. Спасибо за подсказку!

_________________
https://adelectronics.ru
Заходи, не стесняйся! ;)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Standart Peripheral Library MDR32F9x, MDR1986VE1T, VE3T
СообщениеДобавлено: 2014-окт-01 10:37 
Не в сети

Зарегистрирован: 2010-авг-30 19:12
Сообщения: 395
Цитата:
Дак а вариант перевести выводы BOOT0/1/2 в режим загрузки встроенного bootloader и стереть, используя UART1?

Еще как вариант BOOT в режим работы с внешней памятью.Тогда будет доступ через JTAG

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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Standart Peripheral Library MDR32F9x, MDR1986VE1T, VE3T
СообщениеДобавлено: 2014-окт-01 17:29 
Не в сети
Аватара пользователя

Зарегистрирован: 2012-авг-07 09:58
Сообщения: 132
Обновлен pack для keil.
Добавлен МК 1986ВЕ4.
Устранена возможность выбрать неподходящий драйвер для выбранного МК.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Standart Peripheral Library MDR32F9x, MDR1986VE1T, VE3T
СообщениеДобавлено: 2014-окт-02 07:57 
Не в сети

Зарегистрирован: 2014-мар-04 08:52
Сообщения: 53
Откуда: г. Зеленоград ЗАО "НТЦ ЭЛИНС"
andrey.s, это все изменения в новом паке? Такая просьба есть - можно выкладывать помимо pack файла ещё и просто zip-архив с файлами из этого пака для тех, у кого keil нет?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Standart Peripheral Library MDR32F9x, MDR1986VE1T, VE3T
СообщениеДобавлено: 2014-окт-02 08:00 
Не в сети

Зарегистрирован: 2009-июл-21 14:13
Сообщения: 1159
Откуда: Тула
https://code.google.com/p/mdr1986x-std- ... ce/browse/

_________________
сочувствующий…


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Standart Peripheral Library MDR32F9x, MDR1986VE1T, VE3T
СообщениеДобавлено: 2014-окт-02 08:54 
Не в сети

Зарегистрирован: 2014-мар-04 08:52
Сообщения: 53
Откуда: г. Зеленоград ЗАО "НТЦ ЭЛИНС"
Угу, только там в ревизии 4 выложен pack-файл для keil :) Смысл мне от такого googlecode?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Standart Peripheral Library MDR32F9x, MDR1986VE1T, VE3T
СообщениеДобавлено: 2014-окт-02 09:43 
Не в сети

Зарегистрирован: 2009-июл-21 14:13
Сообщения: 1159
Откуда: Тула
Это да, беда.
Скачайте свежий демо Keil и установите пак. На мой 5.1.0.0 не хочет устанавливаться.
В результате получите распакованные файлы.

UPD: И да, пардон. Файлы для ВЕ4 уже были в репозитории, или это не то, что надо?

_________________
сочувствующий…


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Standart Peripheral Library MDR32F9x, MDR1986VE1T, VE3T
СообщениеДобавлено: 2014-окт-02 16:58 
Не в сети

Зарегистрирован: 2012-дек-11 21:35
Сообщения: 170
Откуда: Казань
Зачем мне с linux системой качать кейл, чтобы распаковать архив?! Согласен с sguwenka


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Standart Peripheral Library MDR32F9x, MDR1986VE1T, VE3T
СообщениеДобавлено: 2014-окт-02 17:02 
Не в сети

Зарегистрирован: 2014-мар-04 08:52
Сообщения: 53
Откуда: г. Зеленоград ЗАО "НТЦ ЭЛИНС"
Ну есть подозрение, что мало ли - в библиотеке ещё что-то поменялось ;) был бы коммит сразу по исходникам - я бы вопросов не задавал...


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 295 ]  На страницу Пред.  1 ... 4, 5, 6, 7, 8, 9, 10 ... 20  След.

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


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

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


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

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