Миландр

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

Часовой пояс: UTC+03:00




Начать новую тему  Ответить на тему  [ 169 сообщений ]  На страницу « 16 7 8 9 1012 »
Автор Сообщение
 Заголовок сообщения: Re: Расчет частот тактирования
СообщениеДобавлено: 2015-авг-10 13:17 
Не в сети

Зарегистрирован: 2013-июн-06 10:43
Сообщения: 16
Откуда: Тамбов
AntonAS, изложил свои мысли разработчикам мк (тема Wizard для Cortex), а они мягко перенаправили к Вам. Прочтите сообщение и напишите что думаете.


Вернуться к началу
 Заголовок сообщения: Re: Расчет частот тактирования
СообщениеДобавлено: 2015-авг-10 13:32 
Не в сети
Аватара пользователя

Зарегистрирован: 2012-ноя-22 13:54
Сообщения: 72
Откуда: Нижний Новгород
ua3rad писал(а):
AntonAS, изложил свои мысли разработчикам мк (тема Wizard для Cortex), а они мягко перенаправили к Вам. Прочтите сообщение и напишите что думаете.
В Вашей теме НЕМАН правильно написал, что я не против менять свою программку. Лишь бы сами разработчики были активны и подкидывали идеи.
Что касается добавления кода работы с периферией, то тема хорошая.
Так что можно обсудить этот вопрос...Главное начать )))
Пишите.Предлагайте.Критикуйте.
У нас вместе получится результат. :D


Вернуться к началу
 Заголовок сообщения: Re: Расчет частот тактирования
СообщениеДобавлено: 2015-авг-10 15:18 
Не в сети

Зарегистрирован: 2013-июн-06 10:43
Сообщения: 16
Откуда: Тамбов
Попробую изложить свои мысли.
1. Программа генерирует файл с настройками периферии.
2. Настройка, как отдельного, так и группы выводов.
3. Настройка таймера (счет вверх, счет вниз)
4. На примере АЦП. Есть инициализации, а как считать с канала значение нет, т.е. типа функции ADC_read (chanel);
5. Также по UART. Считать байт, стоку, записать байт/строку.
6. Нет ЦАП, ШИМ.
7. Если есть готовые библиотеки (программный UART, SPI, OneWire, сохранение в eeprom(Flash)) было бы очень полезно.
В этом плане хорошо преуспел mikroe. Масса библиотек и примеры к ним. Небольшая программа пишется да 10-20 минут.
Совсем забыл- Keil uVision5 комментарии из Вашей программы не распознает. Можно ли писать комментарии в ANSI, а не в UTF-8


Вернуться к началу
 Заголовок сообщения: Re: Расчет частот тактирования
СообщениеДобавлено: 2015-авг-10 18:46 
Не в сети
Аватара пользователя

Зарегистрирован: 2011-окт-19 17:25
Сообщения: 555
Откуда: г. Владимир ОАО "ВКБР"
ua3rad писал(а):
AntonAS, изложил свои мысли разработчикам мк (тема Wizard для Cortex), а они мягко перенаправили к Вам. Прочтите сообщение и напишите что думаете.
И не разработчик я вовсе, у меня ж под Аватаркой разве написано "ЗАО "ПКК Миландр""? Вроде нет)
Я просто обратил внимание, что есть СуперМегаЧеловечище, которому ещё хватает энтузиазма заниматься прекрасным, светлым и чистым, поэтому почему-бы и нет?:)

_________________
"В радиотехнике, как в церкви - многое не понятно, но приходится верить"
ВлГУ. к.т.н Садовский Н.В


Вернуться к началу
 Заголовок сообщения: Re: Расчет частот тактирования
СообщениеДобавлено: 2015-авг-11 08:02 
Не в сети

Зарегистрирован: 2013-июн-06 10:43
Сообщения: 16
Откуда: Тамбов
не обратил внимание!!!


Вернуться к началу
 Заголовок сообщения: Re: Расчет частот тактирования
СообщениеДобавлено: 2015-авг-12 08:47 
Не в сети

Зарегистрирован: 2015-июл-26 18:58
Сообщения: 28
Уважаемый, AntonAS а возможно ли добавить в программу, для быстрой настройки периферии ещё и МК 1986ВЕ4?


Вернуться к началу
 Заголовок сообщения: Re: Расчет частот тактирования
СообщениеДобавлено: 2015-авг-27 11:57 
Не в сети

Зарегистрирован: 2015-июн-09 15:26
Сообщения: 4
Программа была бы полезной, если бы её кто-то нибудь хоть как-то нибудь протестировал.
Скачал чтобы посмотреть: что из себя представляет? Первым делом - настроить порт...

1986ВЕ9х, PortA, Pin0, направление - выход, подтяжек - нет

Что видим:
MDR_PORTA->PULL |= ((0 << 0) | (0 << (0 << 16))); //запрещение подтяжки к GND и запрещение подтяжки к VCC
т.е. вместо оператора "+" стоит "<<" ! Сразу выявилась ошибка! Дальше смотреть не стал. Осадочек нехороший остался...

P.S. Добавлю замеченное. При настройке АЦП потерялась закрывающая скобочка при определении источника для ADC_C1:
     MDR_RST_CLK->ADC_MCO_CLOCK = ((0 << 0/*источник для ADC_C1*/
                                | (2 << 4)/*источник для ADC_C2*/
                                | (0 << 8)/*делитель для ADC_C3*/
                                | (1 << 13));/*разрешение тактовой частоты ADC_CLK*/
А, при настройке системного таймера потерялась открывающая скобка:
    SysTick->CTRL = (1 << 0) //включение таймера
                  | (0 << 1) //запрещение прерывания
                  | (0 << 2));//источник синхросигнала = LSI


Вернуться к началу
 Заголовок сообщения: Re: Расчет частот тактирования
СообщениеДобавлено: 2015-сен-13 01:26 
Не в сети
Аватара пользователя

Зарегистрирован: 2011-окт-19 17:25
Сообщения: 555
Откуда: г. Владимир ОАО "ВКБР"
Вот настраиваем мы допустим CPU для 1986ВЕ1
Открыть CPU_init
void CPU_init ( void ){
     //Необходимая пауза для работы Flash-памяти программ
     EEPROM->CMD |= (0 << 3);

     RST_CLK->HS_CONTROL = 0x01;// вкл. HSE осцилятора
     while ((RST_CLK->CLOCK_STATUS & (1 << 2)) == 0x00);// ждем пока HSE выйдет в рабочий режим

     RST_CLK->PLL_CONTROL = ((1 << 2) | (0 << 8));//вкл. PLL  | коэф. умножения = 1
     while ((RST_CLK->CLOCK_STATUS & 0x02) != 0x02);// ждем когда PLL выйдет в раб. режим

     RST_CLK->CPU_CLOCK = ((2 << 0)//источник для CPU_C1
                         | (1 << 2)//источник для CPU_C2
                         | (0 << 4)//предделитель для CPU_C3
                         | (1 << 8));//источник для HCLK

     BKP->REG_0E |= (5 << 0); //режим встроенного регулятора напряжения DUcc
     BKP->REG_0E |= (5 << 3); //выбор доп.стабилизирующей нагрузки
}//void CPU_init
Закрыть
А потом настраиваем порты ввода-вывода, из вкладки для 1986ВЕ9х
Открыть PortA_Pin0_init
void PortA_Pin0_init( void  ){
    MDR_RST_CLK->PER_CLOCK   |= (1UL << 21); //разрешение тактирования порта A

    MDR_PORTA->OE     |= ((0 << 0)); //направление передачи данных = Вход
    MDR_PORTA->ANALOG |= ((0 << 0)); //режим работы контроллера = Аналоговый
    MDR_PORTA->PULL   |= ((0 << 0) | (1 << (0 << 16))); //запрещение подтяжки к GND и разрешение подтяжки к VCC
    MDR_PORTA->PD     |= ((0 << (0 << 16))); //режим работы входа = выкл. триг. Шмитта
    MDR_PORTA->PWR    |= ((1 << 0*2)); //скорость фронта вывода = медленный
    MDR_PORTA->GFEN   |= ((1 << 0)); //входной фильтр = включен
}//void PortA_Pin0_init
Закрыть
Дак вот во втором случае, у регистров везде приставка "MDR_" и если писать без неё, то компилятор не собирает проект.

Ещё для авиационника по крайней мере надо как-то отразить, хотя бы закомментированными, возможные значения регистров PORTx_SETTX и PORTx_CLRTX.

И когда для 1986ВЕ1Т устанавливаешь тактовую больше 80ти МГц, то в комментариях пишется "Частота > 80 MHz: работа микросхемы не гарантируется!!!", то есть это видимо осталось ещё с конфигурации 1986ВЕ9х.

Ну и ещё, мне кажется, что общее разрешение тактирования порта MDR_RST_CLK->PER_CLOCK нужно вынести в раздел CPU, т.к всё же это глобальное разрешение тактирования всего порта, а не какого-либо пина.

_________________
"В радиотехнике, как в церкви - многое не понятно, но приходится верить"
ВлГУ. к.т.н Садовский Н.В


Вернуться к началу
 Заголовок сообщения: Re: Расчет частот тактирования
СообщениеДобавлено: 2015-сен-14 21:43 
Не в сети
Аватара пользователя

Зарегистрирован: 2011-окт-19 17:25
Сообщения: 555
Откуда: г. Владимир ОАО "ВКБР"
При работе с таймером для авиационника
Открыть Timer4
void Timer4_Init( void  ){
    RST_CLK->PER_CLOCK |= 1 << 19;//разрешение тактирования Таймера 1
    RST_CLK->UART_CLOCK = ((0 << 16) /* делитель тактовой частоты Таймера 4 = /1*/
                          |(1 << 26)); /* разешение тактирования Таймера 4 */
    TIMER4->PSG = 0x0;//Делитель основного счета
    TIMER4->ARR = 0xF;//Делитель основного счета
    TIMER4->IE = (1 << 1);//Разрешение прерывание по событию совпадения CNT и ARR
    TIMER4->CNTRL = 0x01//счет вверх по TIM_CLK, таймер вкл.

    NVIC_EnableIRQ(Timer1_IRQn);
}//Timer1_Init


void Timer1_IRQHandler( void  ){

    //Исполняемый код

    TIMER1->CNT = 0x0000;
    TIMER1->STATUS &= ~(1 << 1);
    NVIC_ClearPendingIRQ(Timer1_IRQn);
}
Закрыть
То есть речь идёт о таймере №4, а обработчик прерывания выводится для 1-ого.

И потом ещё какой-то глюк с установкой тактовой частоты. Вот в разделе CPU, особенно авиационника, выставляешь исходную частоту 16МГц, а потом, перейдя на вкладку допустим того же таймера снова видим дефолтные 12МГц.

Кстати по-моему, в одной из прошлых версий в отдельной менюшке был своего рода конвертер, если не изменяет память - BitByte назывался, по-моему в версии 1.1, и куда-то он потерялся вдруг)

_________________
"В радиотехнике, как в церкви - многое не понятно, но приходится верить"
ВлГУ. к.т.н Садовский Н.В


Вернуться к началу
 Заголовок сообщения: Re: Расчет частот тактирования
СообщениеДобавлено: 2015-сен-16 23:31 
Не в сети
Аватара пользователя

Зарегистрирован: 2011-окт-19 17:25
Сообщения: 555
Откуда: г. Владимир ОАО "ВКБР"
Обратите внимание на название регистров, вернее на строчные и заглавные буквы в их названиях, например:
Для 4ого таймера выводится код:
Открыть
void Timer4_Init( void  ){
    RST_CLK->PER_CLOCK |= 1 << 19;//разрешение тактирования Таймера 1
    RST_CLK->UART_CLOCK = ((0 << 16) /* делитель тактовой частоты Таймера 4 = /1*/
                          |(1 << 26)); /* разешение тактирования Таймера 4 */
    TIMER4->PSG = 0x0;//Делитель основного счета
    TIMER4->ARR = 0xB71AFF;//Делитель основного счета
    TIMER4->IE = (1 << 1);//Разрешение прерывание по событию совпадения CNT и ARR
    TIMER4->CNTRL = 0x01//счет вверх по TIM_CLK, таймер вкл.

    NVIC_EnableIRQ(Timer1_IRQn);
}//Timer1_Init


void Timer1_IRQHandler( void  ){

    //Исполняемый код

    TIMER1->CNT = 0x0000;
    TIMER1->STATUS &= ~(1 << 1);
    NVIC_ClearPendingIRQ(Timer1_IRQn);
}
Закрыть
но дело в том, что если Вы напишите Timer1_IRQHandler то компилятор ничего не скажет, но вот код работать не будет, потому как должно быть "TIMER1_IRQHandler". Ну и соответственно TIMER1_IRQn вместо Timer1_IRQn и т.д

_________________
"В радиотехнике, как в церкви - многое не понятно, но приходится верить"
ВлГУ. к.т.н Садовский Н.В


Вернуться к началу
 Заголовок сообщения: Re: Расчет частот тактирования
СообщениеДобавлено: 2015-сен-21 12:39 
Не в сети
Аватара пользователя

Зарегистрирован: 2012-ноя-22 13:54
Сообщения: 72
Откуда: Нижний Новгород
Палыч писал(а):
DR_PORTA->PULL |= ((0 << 0) | (0 << (0 << 16))); //запрещение подтяжки к GND и запрещение подтяжки к VCC
т.е. вместо оператора "+" стоит "<<" ! Сразу выявилась ошибка! Дальше смотреть не стал. Осадочек нехороший остался...

P.S. Добавлю замеченное. При настройке АЦП потерялась закрывающая скобочка при определении источника для ADC_C1:
Код:
MDR_RST_CLK->ADC_MCO_CLOCK = ((0 << 0/*источник для ADC_C1*/
| (2 << 4)/*источник для ADC_C2*/
| (0 << 8)/*делитель для ADC_C3*/
| (1 << 13));/*разрешение тактовой частоты ADC_CLK*/

А, при настройке системного таймера потерялась открывающая скобка:
Код:
SysTick->CTRL = (1 << 0) //включение таймера
| (0 << 1) //запрещение прерывания
| (0 << 2));//источник синхросигнала = LSI
Исправил.
Согласен, что ошибки есть.
Мой минус - не проверяю генерируемый код в отладочной среде. Постараюсь это исправить, чтобы не было подобных ошибок.
HEMAH писал(а):
А потом настраиваем порты ввода-вывода, из вкладки для 1986ВЕ9х
Открыть PortA_Pin0_init
Код:
void PortA_Pin0_init( void ){
MDR_RST_CLK->PER_CLOCK |= (1UL << 21); //разрешение тактирования порта A

MDR_PORTA->OE |= ((0 << 0)); //направление передачи данных = Вход
MDR_PORTA->ANALOG |= ((0 << 0)); //режим работы контроллера = Аналоговый
MDR_PORTA->PULL |= ((0 << 0) | (1 << (0 << 16))); //запрещение подтяжки к GND и разрешение подтяжки к VCC
MDR_PORTA->PD |= ((0 << (0 << 16))); //режим работы входа = выкл. триг. Шмитта
MDR_PORTA->PWR |= ((1 << 0*2)); //скорость фронта вывода = медленный
MDR_PORTA->GFEN |= ((1 << 0)); //входной фильтр = включен
}//void PortA_Pin0_init


Дак вот во втором случае, у регистров везде приставка "MDR_" и если писать без неё, то компилятор не собирает проект.
Потому что второй случай специально для серии 1986ВЕ9х. Судя по всему, придется создавать вкладки на всю периферию серии 1986ВЕ1, как в серии 1986ВЕ9х, а то будут постоянные проблемы из-за MDR_ и чего нибудь еще.
HEMAH писал(а):
Ещё для авиационника по крайней мере надо как-то отразить, хотя бы закомментированными, возможные значения регистров PORTx_SETTX и PORTx_CLRTX.

К сожалению, не смотрел настройку портов для этой серии. Думал что она аналогична серии 1986ВЕ9х.
HEMAH писал(а):
И когда для 1986ВЕ1Т устанавливаешь тактовую больше 80ти МГц, то в комментариях пишется "Частота > 80 MHz: работа микросхемы не гарантируется!!!", то есть это видимо осталось ещё с конфигурации 1986ВЕ9х.
Исправил.
HEMAH писал(а):
Ну и ещё, мне кажется, что общее разрешение тактирования порта MDR_RST_CLK->PER_CLOCK нужно вынести в раздел CPU, т.к всё же это глобальное разрешение тактирования всего порта, а не какого-либо пина.
Разрешение тактирования порта специально вынесено в настройку порта, чтобы было наглядно видно что мы включаем его тактирование. Возможно настройка самого порта реализована не совсем корректно. Думаю переделать с настройки одного пина на настройку сразу нескольких пинов (если они имею одинаковую настройку)
HEMAH писал(а):
То есть речь идёт о таймере №4, а обработчик прерывания выводится для 1-ого.

И потом ещё какой-то глюк с установкой тактовой частоты. Вот в разделе CPU, особенно авиационника, выставляешь исходную частоту 16МГц, а потом, перейдя на вкладку допустим того же таймера снова видим дефолтные 12МГц.
Исправил.
HEMAH писал(а):
Кстати по-моему, в одной из прошлых версий в отдельной менюшке был своего рода конвертер, если не изменяет память - BitByte назывался, по-моему в версии 1.1, и куда-то он потерялся вдруг)
Действительно, в HTML-версиях программы было такое дело. Думал, что им мало кто пользуется и решил не реализовывать в данной версии. Если она необходимо, то постараюсь сделать.

Вообщем, выкладываю поправленную версию.


Вложения:
MilandrPLLv2.5.1.zip [309.04 КБ]
389 скачиваний
Вернуться к началу
 Заголовок сообщения: Re: Расчет частот тактирования
СообщениеДобавлено: 2015-окт-06 08:46 
Не в сети

Зарегистрирован: 2015-окт-05 08:54
Сообщения: 9
Для 1986ВЕ9 в категории UART нельзя выбрать сразу 2 UART плюс куда пропало при выборе UART2 делитель HSLK


Вернуться к началу
 Заголовок сообщения: Re: Расчет частот тактирования
СообщениеДобавлено: 2015-окт-06 13:15 
Не в сети
Аватара пользователя

Зарегистрирован: 2012-ноя-22 13:54
Сообщения: 72
Откуда: Нижний Новгород
MATAN писал(а):
Для 1986ВЕ9 в категории UART нельзя выбрать сразу 2 UART
UART1 стоит по умолчанию. И во всех блоках так сделано (первый выбран по умолчанию).
MATAN писал(а):
... плюс куда пропало при выборе UART2 делитель HSLK
Ни куда не пропадает. Просто нужно нажать кнопочку Рассчитать и данные с кодом обновятся.


Вернуться к началу
 Заголовок сообщения: Re: Расчет частот тактирования
СообщениеДобавлено: 2015-окт-23 16:20 
Не в сети

Зарегистрирован: 2013-фев-20 16:57
Сообщения: 22
В версии 2.5.1 нашел косяки с расчетом таймеров для 1986ВЕ9х :
1. В окошке "делитель основного счета", после входа в окно расчета таймеров,при нажатии на кнопки цифра меняется не сразу, а после второго нажатия на кнопку одного направления , при этом значение PSG неправильное (обычно больше на 1). Если ввести с клавиатуры цифру отличную от ранее установленной, то PSG рассчитывается правильно.
2. ARR 16 бит, однако ваша программа может рассчитать и большее, если задан интервал, который не влезает в 16 бит. Лучше выдавать предупреждение, предлагающие поменять PSG или предделитель.
3. Имя Timer1_IRQn указанно неправильно, в файле MDR32Fx.h прописано имя TIMER1_IRQn - компилятор ругается


Вернуться к началу
 Заголовок сообщения: Re: Расчет частот тактирования
СообщениеДобавлено: 2015-ноя-03 16:40 
Не в сети
Аватара пользователя

Зарегистрирован: 2012-ноя-22 13:54
Сообщения: 72
Откуда: Нижний Новгород
Всем, здравствуйте!
Спасибо за найденные баги.
К сожалению, не было времени, чтобы оперативно все исправить.
Выкладываю версию с исправлениями. + начата работа с блоком конвертирования данных, пока работает только HEX_to_BIN.


Вложения:
MilandrPLLv2.5.2.zip [316.06 КБ]
373 скачивания
Вернуться к началу
Показать сообщения за:  Поле сортировки  
Начать новую тему  Ответить на тему  [ 169 сообщений ]  На страницу « 16 7 8 9 1012 »

Часовой пояс: UTC+03:00


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

Сейчас этот форум просматривают: Google [Bot] и 5 гостей


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

Перейти: 

cron
Создано на основе phpBB® Forum Software © phpBB Limited
Русская поддержка phpBB