Миландр

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

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




Начать новую тему  Ответить на тему  [ 324 сообщения ]  На страницу « 118 19 20 21 22
Автор Сообщение
 Заголовок сообщения: Re: Standard Peripherals Library MDR32F9x, VE1, VE3, VE4, VC
СообщениеДобавлено: 2019-апр-29 10:00 
Не в сети

Зарегистрирован: 2017-апр-26 14:51
Сообщения: 462
Организация: Milandr
Откуда: ПКК "Миландр"
Да. Я исправляю у себя, передаю человеку ответственному за pack и отсылаю на GitHub/StartMilandr.


Вернуться к началу
 Заголовок сообщения: Re: Standard Peripherals Library MDR32F9x, VE1, VE3, VE4, VC
СообщениеДобавлено: 2019-окт-02 14:30 
Не в сети
Аватара пользователя

Зарегистрирован: 2019-янв-15 10:14
Сообщения: 34
Организация: ООО "НПП "АСТРОН ЭЛЕКТРОНИКА"
Откуда: г. Орел
Качал последний пак с git или с офф сайта уже не вспомню...
файл lib\MDR32F9_1986ВЕ4_2015\Libraries\MDR1986BE4_StdPeriph_Driver\src\MDR32F9Qx_adc.c
void ADC_Init(const ADC_InitTypeDef* ADC_InitStruct)
{
  uint32_t tmpreg_CFG;
  uint32_t tmpreg_MSK;
  uint32_t tmpreg_TRIM;


  /* Check the parameters */
  assert_param(IS_ADC_START_DELAY_VALUE(ADC_InitStruct->ADC_StartDelay));
  assert_param(IS_ADC_TEMP_SENSOR_CONFIG(ADC_InitStruct->ADC_TempSensor));
  assert_param(IS_ADC_TEMP_SENSOR_AMP_CONFIG(ADC_InitStruct->ADC_TempSensorAmplifier));
  assert_param(IS_ADC_TEMP_SENSOR_CONVERSION_CONFIG(ADC_InitStruct->ADC_TempSensorConversion));
  assert_param(IS_ADC_VREF_CONVERSION_CONFIG(ADC_InitStruct->ADC_IntVRefConversion));
  assert_param(IS_ADC_VREF_TRIMMING_VALUE(ADC_InitStruct->ADC_IntVRefTrimming));
  assert_param(IS_ADC_INT_VREF_AMPLIFIER(ADC_InitStruct->ADC_IntVRefAmplifier));

  tmpreg_CFG = (ADC_InitStruct->ADC_StartDelay << ADC1_CFG_DELAY_ADC_Pos)
             + ADC_InitStruct->ADC_TempSensor
             + ADC_InitStruct->ADC_TempSensorAmplifier
             + ADC_InitStruct->ADC_TempSensorConversion
             + ADC_InitStruct->ADC_IntVRefConversion;

  tmpreg_MSK = ADC1_CFG_DELAY_ADC_Msk
             | ADC1_CFG_TS_EN
             | ADC1_CFG_TS_BUF_EN
             | ADC1_CFG_SEL_TS
             | ADC1_CFG_SEL_VREF;

  tmpreg_TRIM = (ADC_InitStruct->ADC_IntVRefTrimming << ADC1_TRIM_TS_TRIM_Pos)
          | ADC_InitStruct->ADC_IntVRefAmplifier;
  MDR_ADC->ADC1_TRIM  = tmpreg_TRIM;

  MDR_ADC->ADC1_CFG = (MDR_ADC->ADC1_CFG & ~tmpreg_MSK) + tmpreg_CFG;
}
void ADC1_Init(const ADCx_InitTypeDef* ADCx_InitStruct)
{
  uint32_t tmpreg_CFG1;
  uint32_t tmpreg_CFG2;

  /* Check the parameters */
  assert_param(IS_ADC_CLOCK_SOURCE_CONFIG(ADCx_InitStruct->ADC_ClockSource));
  assert_param(IS_ADC_SAMPLING_MODE_CONFIG(ADCx_InitStruct->ADC_SamplingMode));
  assert_param(IS_ADC_CH_SWITCHING_CONFIG(ADCx_InitStruct->ADC_ChannelSwitching));
  assert_param(IS_ADC1_CH_NUM(ADCx_InitStruct->ADC_ChannelNumber));
  assert_param(IS_ADC1_CH_MASK(ADCx_InitStruct->ADC_Channels));
  assert_param(IS_ADC_LEVEL_CONTROL_CONFIG(ADCx_InitStruct->ADC_LevelControl));
  assert_param(IS_ADC_VALUE(ADCx_InitStruct->ADC_LowLevel));
  assert_param(IS_ADC_VALUE(ADCx_InitStruct->ADC_HighLevel));
  assert_param(IS_ADC_VREF_SOURCE_CONFIG(ADCx_InitStruct->ADC_VRefSource));
  assert_param(IS_ADC_INT_VREF_SOURCE_CONFIG(ADCx_InitStruct->ADC_IntVRefSource));
  assert_param(IS_ADC_CLK_div_VALUE(ADCx_InitStruct->ADC_Prescaler));
  assert_param(IS_ADC_DELAY_GO_VALUE(ADCx_InitStruct->ADC_DelayGo));

  tmpreg_CFG1 = MDR_ADC->ADC1_CFG;

  tmpreg_CFG1 &= ~(ADC1_CFG_REG_CLKS
                 | ADC1_CFG_REG_SAMPLE
                 | ADC1_CFG_REG_CHCH
                 | ADC1_CFG_REG_CHS_Msk
                 | ADC1_CFG_REG_RNGC
                 | ADC1_CFG_M_REF
                 | ADC1_CFG_REG_DIVCLK_Msk
                 | ADC1_CFG_DELAY_GO_Msk);

  tmpreg_CFG1 += ADCx_InitStruct->ADC_ClockSource
               + ADCx_InitStruct->ADC_SamplingMode
               + ADCx_InitStruct->ADC_ChannelSwitching
               + (ADCx_InitStruct->ADC_ChannelNumber << ADC1_CFG_REG_CHS_Pos)
               + ADCx_InitStruct->ADC_LevelControl
               + ADCx_InitStruct->ADC_VRefSource
               + ADCx_InitStruct->ADC_Prescaler
               + (ADCx_InitStruct->ADC_DelayGo << ADC1_CFG_DELAY_GO_Pos);

  tmpreg_CFG2 = MDR_ADC->ADC2_CFG;
  tmpreg_CFG2 &= ~ADC2_CFG_ADC1_OP;
  tmpreg_CFG2 += ADCx_InitStruct->ADC_IntVRefSource << ADC2_CFG_ADC1_OP_Pos;

  MDR_ADC->ADC1_CFG = tmpreg_CFG1;
  MDR_ADC->ADC2_CFG = tmpreg_CFG2;

  MDR_ADC->ADC1_L_LEVEL = ADCx_InitStruct->ADC_LowLevel;
  MDR_ADC->ADC1_H_LEVEL = ADCx_InitStruct->ADC_HighLevel;
  MDR_ADC->ADC1_CHSEL   = ADCx_InitStruct->ADC_Channels;
}
Так же в void ADC1_SetChannel(uint32_t Channel), void ADC1_OperationModeConfig(uint32_t SamplingMode, uint32_t SwitchingMode), void ADC1_SamplingModeConfig(uint32_t SamplingMode), void ADC1_ChannelSwithingConfig(uint32_t SwitchingMode), void ADC1_LevelsConfig(uint32_t LowLevel, uint32_t HighLevel, uint32_t NewState)

Наверное лучше стоит использовать операцию побитно или, а не арифметическое сложение. :)


Вернуться к началу
 Заголовок сообщения: Re: Standard Peripherals Library MDR32F9x, VE1, VE3, VE4, VC
СообщениеДобавлено: 2019-окт-02 15:30 
Не в сети

Зарегистрирован: 2017-апр-26 14:51
Сообщения: 462
Организация: Milandr
Откуда: ПКК "Миландр"
Shrek писал(а):
файл lib\MDR32F9_1986ВЕ4_2015\Libraries\MDR1986BE4_StdPeriph_Driver\src\MDR32F9Qx_adc.c
lib - Это больше похоже на скачиваемый архив с SPL. В этом архиве ничего не правилось уже очень давно.

Если для Keil- то лучше качать пак, и открывать его как zip архив, если устанавливать его не планируется.
Shrek писал(а):
Наверное лучше стоит использовать операцию побитно или, а не арифметическое сложение.
Если там флаги, то результат будет одинаковый. Для меня тоже привычней ИЛИ, но автор вполне мог сделать и так.


Вернуться к началу
 Заголовок сообщения: Re: Standard Peripherals Library MDR32F9x, VE1, VE3, VE4, VC
СообщениеДобавлено: 2019-окт-05 12:26 
Не в сети

Зарегистрирован: 2018-янв-05 23:41
Сообщения: 123
Организация: ФГУП "РФЯЦ-ВНИИЭФ"
Vasiliy писал(а):
Если там флаги, то результат будет одинаковый. Для меня тоже привычней ИЛИ, но автор вполне мог сделать и так.
Как это одинаковый?
0x01+0x01=0x02 арифметическое сложение
0x01¦0x01=0x01 побитовое логическое ИЛИ
Как видно из примера, результат разный.
Так что замена операции побитового логического ИЛИ арифметическим сложением недопустима.
Да, есть несколько частных случаев, когда они дают одинаковый результат: 0+0=0|0, 0+1=0|1, 1+0=1|0). Но, в общем случае, результат будет разный. Т.е. х+y=x|y - не есть тождество. Для пары {х=1; y=1} оно не выполняется.

В последней версии пака для Кейла всё именно так и есть. Используется арифметическое сложение, а не побитовое логическое ИЛИ.


Вернуться к началу
 Заголовок сообщения: Re: Standard Peripherals Library MDR32F9x, VE1, VE3, VE4, VC
СообщениеДобавлено: 2019-окт-07 08:49 
Не в сети

Зарегистрирован: 2010-авг-30 19:12
Сообщения: 468
Цитата:
Как это одинаковый?
В приведенных вами примерах кода идет инициализация флагов - в полях структуры все сдвинуто на нужные позиции - и результат будет одинаковый.
Если же рассматривать абстрактный пример с произвольными значениями - тогда вы правы - результат будет различен.

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

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


Вернуться к началу
 Заголовок сообщения: Re: Standard Peripherals Library MDR32F9x, VE1, VE3, VE4, VC
СообщениеДобавлено: 2019-окт-24 19:37 
Не в сети

Зарегистрирован: 2018-янв-05 23:41
Сообщения: 123
Организация: ФГУП "РФЯЦ-ВНИИЭФ"
Пак для Кейла версии 1.5.3, выложенный тут, собран неправильно. Не устанавливается. Зачем-то поместили всё полезное содержимое в лишнюю папку. Надо пересобрать заново, чтобы файл .pdsc и папки с файлами был в корне архива.


Вернуться к началу
 Заголовок сообщения: Re: Standard Peripherals Library MDR32F9x, VE1, VE3, VE4, VC
СообщениеДобавлено: 2019-окт-25 08:37 
Не в сети

Зарегистрирован: 2017-апр-26 14:51
Сообщения: 462
Организация: Milandr
Откуда: ПКК "Миландр"
Спасибо, сейчас исправим.


Вернуться к началу
 Заголовок сообщения: Re: Standard Peripherals Library MDR32F9x, VE1, VE3, VE4, VC
СообщениеДобавлено: 2019-окт-25 18:04 
Не в сети

Зарегистрирован: 2018-янв-05 23:41
Сообщения: 123
Организация: ФГУП "РФЯЦ-ВНИИЭФ"
Еще вопрос по паку
Зачем в драйверах присутствует LIB ? Если его выбрать, то в группу Drivers дерева проекта добавится файл MDR32F9Qx_lib.h, который там совершенно ни к чему, т.к. инклудится во все исходники файлов драйверов. Я не против самого факта существования этого файла. Я против его прямого включения в проект, как самостоятельной единицы трансляции, и наличия драйвера LIB в диалоге Manage RTE.
Открыть Драйвер LIB - что это? Зачем он нужен?
Вложение:
Комментарий к файлу: Непонятный драйвер LIB
[ attachment ]
Manage RTE.png [ 100.67 КБ | 651 просмотр ]
Вложение:
Комментарий к файлу: LIB в группе драйверов проекта
[ attachment ]
Drivers - LIB.png [ 10.36 КБ | 651 просмотр ]
Закрыть
Аналогичный вопрос по двум файлам .h в группе Device: они уже включены в файл system...с и ни к чему им ещё раз повторяться. Они не должны включаться в проект, как самостоятельные единицы трансляции. Они не предназначены для этого.
Открыть Группа Device для 1986ВЕ1Т
Вложение:
Комментарий к файлу: Группа Device проекта
[ attachment ]
Device - pack version.png [ 8.66 КБ | 651 просмотр ]
Закрыть
Т.е. нарушается общее правило построения проекта: в проект должны быть включены только исходники, а все заголовки включаться в текст исходников директивами #include. А с паком получается, что в проекте в группе Device вперемешку включены и исходники и заголовки. Надо бы исправить ситуацию. Конечно, и так жить можно, всё собирается, но ведь это неправильно.
Вот так должна выглядеть группа Device по-хорошему - только исходники:
Открыть Правильная организация группы Device
Вложение:
Комментарий к файлу: Device - only SRC
[ attachment ]
Device - src only.png [ 7.43 КБ | 651 просмотр ]
Закрыть
Это тот же проект, но собранный без подключения пака: все необходимые файлы (кроме стандартных, типа stdint.h) лежат в своих папках внутри папки с проектом. Здесь всё по-канонам - в проекте только исходники, никаких заголовков.

Вобщем, задача такая: надо сделать так, чтобы эти .h - файлы копировались в папку проекта (подпапка RTE), но, при этом, не добавлялись в структуру проекта (группу Device) в качестве самостоятельных единиц трансляции. Позволяет ли синтаксис .pdsc -файла описать такое действие пока не ясно. Надо копать глубже.


Вернуться к началу
 Заголовок сообщения: Re: Standard Peripherals Library MDR32F9x, VE1, VE3, VE4, VC
СообщениеДобавлено: 2019-окт-28 11:02 
Не в сети

Зарегистрирован: 2017-апр-26 14:51
Сообщения: 462
Организация: Milandr
Откуда: ПКК "Миландр"
На сколько могу судить, Lib потребуется при активации сборки с assert-ами.

Цель библиотеки (файл licanse.txt):
Цитата:
"Библиотека SPL предназначена для оказания технической помощи в освоении и демонстрации возможностей микроконтроллера и призвана ускорить процесс освоения микросхемы пользователем.

Компания «Миландр» не возражает против частичного или полного использования библиотеки в проектах пользователя, но без каких-либо дополнительных гарантий и обязательств с нашей стороны по корректности библиотеки, поэтому всю полноту ответственности за конечное качество программного обеспечения несет разработчик, применяющий библиотеку."
Ваши доводы логичны, но демонстрации примеров текущая реализация не мешает.
Если есть желание можете внести правки и скинуть на support@milandr.ru исправленную версию, передадим на рассмотрение.


Вернуться к началу
Показать сообщения за:  Поле сортировки  
Начать новую тему  Ответить на тему  [ 324 сообщения ]  На страницу « 118 19 20 21 22

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


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

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


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

Перейти: 

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