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
- В спецификации на микроконтроллер 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.
@DmitrijProF thank you