eldarkg / emdr1986x-std-per-lib

Milandr MCU 1986x Standard Peripherals Library. Mirror:

Home Page:https://code.launchpad.net/~eldar/emdr1986x-std-per-lib/+git/emdr1986x-std-per-lib

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

ADC divider

DmitrijProF opened this issue · comments

There is a problem with ADC divider.

In Datasheet:

Таблица 294 – Описание бит регистра ADC1_CFG:

Cfg_REG_DIVCLK[3:0]
Выбор коэффициента деления частоты процессора:
0000 – CPU_CLK = HCLK;
0001 – CPU_CLK = HCLK/2;
0010 – CPU_CLK = HCLK/4;
0011 – CPU_CLK = HCLK/8;

1011 – CPU_CLK = HCL K/2048
Остальные CPU_CLK = HCLK

In MDR32F9Qx_adc.h:

#define ADC_CLK_div_None   (((uint32_t)0x0) << ADC1_CFG_REG_DIVCLK_Pos) /*!< The input ADC clock devides by 1.     */
#define ADC_CLK_div_2      (((uint32_t)0x1) << ADC1_CFG_REG_DIVCLK_Pos) /*!< The input ADC clock devides by 2.     */
…                        
#define ADC_CLK_div_32768  (((uint32_t)0xF) << ADC1_CFG_REG_DIVCLK_Pos) /*!< The input ADC clock devides by 32768. */

So, if you use divider greater then 2048 ADC will be clocked from HCLK directly.
Checked experimentally.

@DmitrijProF See 1986VE1T datasheet (Таблица 304 – Описание бит регистра ADCx_CFG)

@DmitrijProF You can use preprocessor to enable this fields for not all MCU.

Current SPL is for 1986VE9x, 1986VE3T, 1901VC1T and 1986VE1T.
In datasheets maximum divider is:

  • for 1986VE9x - 2048;
  • for 1986VE3T - 2048;
  • for 1901VC1T - 2048;
  • for 1986VE1T - 32768.

We manually checked divider greater then 2048 for 1986VE1T. Result was the same as for 1986VE9x: ADC was clocked directly from system clock. So, it seems there is a bug in 1986VE1T datasheet.

@DmitrijProF you should to report about this issue to milandr support and repost what they say

Finally!

From: Отдел технической поддержки ЦП ИС АО ПКК Миландр
To: DmitrijProF

  1. В спецификации на микроконтроллер 1986ВЕ1Т в таблице 304 (описание бит регистра ADCx_CFG) указано, что максимальный коэффициент деления входной частоты (биты 15..12) составляет 32768. Мы проверили это экспериментально на имеющемся в наличии микроконтроллере (ревизия 4, выпуск 1444) и выяснили, что максимальный коэффициент деления - 2048, как и в других близких МК (1986ВЕ9x, 1986ВЕ3Т, 1901ВЦ1Т). При превышении максимального делителя АЦП начинает тактироваться напрямую. В официальной сборке Standard Peripherals Library для этих микроконтроллеров так же определены делители до 32768 (группа ADC Clock Prescaler в файле MDR32F9Qx_adc.h). Является ли это ошибкой спецификации или нашего макетирования?

Вы правы. В спецификации на 1986ВЕ9х это указано в табл. 294 стр. 315. В 1901ВЦ1 тоже тоже самое.
В спецификацию на 1986ВЕ1Т будет внесено исправление, задание писателям поставлено.
В SPL значения менять не будем, поскольку возможно в ранних ревизиях коэффициент не имел ограничения.

Мне кажется, что было бы правильнее проверить ранние ревизии и сделать условную трансляцию, если в них ограничения действительно не было. Просто ничего не менять, потому что "может быть раньше это было правильно" - это как-то не очень, прямо скажем, в новых ревизиях-то точно есть ограничение.
Хотя бы можно выяснить, начиная с какой ревизии это ограничение точно появилось, и в SPL ввести коррекцию аналогично, а для более ранних ревизий - ничего не менять.
Тем более, по SPL с помощью doxygen генерируется хелп, которым иногда пользуются, и который запросто введёт в заблуждение по поводу возможных предделителей.
На самом деле, не совсем понятно, чем продиктована боязнь менять SPL. SPL ведь сама собой не обновляется у пользователей на машинах. А если пользователь ее обновляет сам, то он должен быть готов, что что-то может сломаться. Ну и будем честны, люди, которые используют старые ревизии процессоров, вряд ли будут SPL обновлять -_-'

...
2. Информация про делитель <...> передана сотруднику отвечающему за SPL.

What do you think about correcting SPL?

@DmitrijProF I'm OK with this corrections. I think we shouldn't make possible to use possibilities that don't support with all MCU in one serie because this break interchangeability of MCU different revisions. I don't understand of support opinion.
What about the MDR1986BE4?

I asked support. Here's response:

В свете обсуждения делителя АЦП в 1986ВЕ1Т возник ещё один вопрос: а как обстоят дела в 1986ВЕ4У? И в его спецификации, и в SPL так же указан диапазон 1-32768. Это ошибка?
К сожалению, сам проверить не могу: мы ещё не сталкивались с этими МК, у меня его нет.

Да, в 1986ВЕ4У делитель работает так-же. Тикет писателям завели.

So, there is a bug too.
Pull request created.