rat 0 22 ноября, 2021 Опубликовано 22 ноября, 2021 · Жалоба День добрый. С STM32 на новой работе пришлось пересаживаться на SAMD21, использую ASF. Запустил проц на 48МГц (как я думаю). Цепочка такая - 12МГц XOSC подается на DPLL, с него на GCLK generator 1, затем на GCLK generator 0. GCLK generator 1 вывожу на внешний пин и на нем вижу осциллографом 48МГц. /* SYSTEM_CLOCK_SOURCE_DPLL configuration - Digital Phase-Locked Loop */ # define CONF_CLOCK_DPLL_ENABLE true # define CONF_CLOCK_DPLL_ON_DEMAND true # define CONF_CLOCK_DPLL_RUN_IN_STANDBY false # define CONF_CLOCK_DPLL_LOCK_BYPASS false # define CONF_CLOCK_DPLL_WAKE_UP_FAST true//false # define CONF_CLOCK_DPLL_LOW_POWER_ENABLE false # define CONF_CLOCK_DPLL_LOCK_TIME SYSTEM_CLOCK_SOURCE_DPLL_LOCK_TIME_8MS # define CONF_CLOCK_DPLL_REFERENCE_CLOCK SYSTEM_CLOCK_SOURCE_DPLL_REFERENCE_CLOCK_XOSC # define CONF_CLOCK_DPLL_FILTER SYSTEM_CLOCK_SOURCE_DPLL_FILTER_DEFAULT # define CONF_CLOCK_DPLL_REFERENCE_FREQUENCY 12000000 # define CONF_CLOCK_DPLL_REFERENCE_DIVIDER 6 # define CONF_CLOCK_DPLL_OUTPUT_FREQUENCY 48000000 /* DPLL GCLK reference configuration */ # define CONF_CLOCK_DPLL_REFERENCE_GCLK_GENERATOR GCLK_GENERATOR_1//CONF_CLOCK_DPLL_REFERENCE_CLOCK//GCLK_GENERATOR_1 /* DPLL GCLK lock timer configuration */ # define CONF_CLOCK_DPLL_LOCK_GCLK_GENERATOR GCLK_GENERATOR_1 /* Set this to true to configure the GCLK when running clocks_init. If set to * false, none of the GCLK generators will be configured in clocks_init(). */ # define CONF_CLOCK_CONFIGURE_GCLK true /* Configure GCLK generator 0 (Main Clock) */ # define CONF_CLOCK_GCLK_0_ENABLE true # define CONF_CLOCK_GCLK_0_RUN_IN_STANDBY false # define CONF_CLOCK_GCLK_0_CLOCK_SOURCE GCLK_GENERATOR_1//SYSTEM_CLOCK_SOURCE_DPLL # define CONF_CLOCK_GCLK_0_PRESCALER 1 # define CONF_CLOCK_GCLK_0_OUTPUT_ENABLE false /* Configure GCLK generator 1 */ # define CONF_CLOCK_GCLK_1_ENABLE true # define CONF_CLOCK_GCLK_1_RUN_IN_STANDBY false # define CONF_CLOCK_GCLK_1_CLOCK_SOURCE SYSTEM_CLOCK_SOURCE_DPLL//SYSTEM_CLOCK_SOURCE_XOSC # define CONF_CLOCK_GCLK_1_PRESCALER 1 # define CONF_CLOCK_GCLK_1_OUTPUT_ENABLE true Затем в main инициализирую Systick timer int main (void) { system_init(); SysTick_Config(480000); system_interrupt_enable(SYSTEM_INTERRUPT_SYSTICK); NVIC_EnableIRQ(SysTick_IRQn); /* Insert application code here, after the board has been initialized. */ for(;;) { } } В обработчике инвертирую пин void SysTick_Handler(void) { port_pin_toggle_output_level(PIN_PA01); } Ожидаю на осцоллографе увидеть 10Гц, но реально вижу 8,3Гц Вопрос: 1) Задавая в SysTick_Config(480000); я вообще должен видеть 100Гц, потому как промахнулся на один 0, но реально вижу 8,3Гц 2) Если я задаю в SysTick_Config(400000); то вижу 10 Гц, такое впечатление, что между главным клоком и клоком Systick timer стоит делитель на 12, но его там быть не должно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 60 22 ноября, 2021 Опубликовано 22 ноября, 2021 · Жалоба Может быть очевидность скажу, но Вы регистры систика смотрели? Там точно то, что Вам нужно оказывается? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rat 0 22 ноября, 2021 Опубликовано 22 ноября, 2021 · Жалоба 3 minutes ago, haker_fox said: Может быть очевидность скажу, но Вы регистры систика смотрели? Там точно то, что Вам нужно оказывается? Да, в регистрах систика все норм. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 131 22 ноября, 2021 Опубликовано 22 ноября, 2021 · Жалоба 1 час назад, rat сказал: GCLK generator 1 вывожу на внешний пин и на нем вижу осциллографом 48МГц. А его зачем? Судя по блок-схеме, правильнее выводить именно с GCLK generator 0, т.к. с него тактируется CPU. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rat 0 22 ноября, 2021 Опубликовано 22 ноября, 2021 · Жалоба 28 minutes ago, Arlleex said: А его зачем? Судя по блок-схеме, правильнее выводить именно с GCLK generator 0, т.к. с него тактируется CPU. Его вывести мне не удалось, хотя делал все так же, как и для GCLK generator 1, поэтому я не уверен, что главный клок у меня 48МГц Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 131 22 ноября, 2021 Опубликовано 22 ноября, 2021 · Жалоба А что мешает? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rat 0 22 ноября, 2021 Опубликовано 22 ноября, 2021 · Жалоба 8 minutes ago, Arlleex said: А что мешает? На назначенном пине нет клока, почему, пока не удалось выяснить, причем я перепробовал несколько пинов, GCLK generator 1 выводится, а GCLK generator 0 нет. 12 minutes ago, Arlleex said: А что мешает? config_pinmux.mux_position = PINMUX_PB15H_GCLK_IO1; config_pinmux.direction = SYSTEM_PINMUX_PIN_DIR_OUTPUT; config_pinmux.input_pull = SYSTEM_PINMUX_PIN_PULL_NONE; system_pinmux_pin_set_config(PIN_PB15H_GCLK_IO1, &config_pinmux); /*config_pinmux.mux_position = PINMUX_PB22H_GCLK_IO0; config_pinmux.direction = SYSTEM_PINMUX_PIN_DIR_OUTPUT; config_pinmux.input_pull = SYSTEM_PINMUX_PIN_PULL_NONE; system_pinmux_pin_set_config(PIN_PB22H_GCLK_IO0, &config_pinmux);*/ Фрагменты кода для 0 и 1 генераторов, для 1 работает, для 0 (закомментаренный фрагмент) не работает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 131 22 ноября, 2021 Опубликовано 22 ноября, 2021 · Жалоба Корпус какой? Наименование МК полностью? Там этих пинов с GCLK_IO0 еще довольно много. PA27, PA28, PA30, например. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rat 0 22 ноября, 2021 Опубликовано 22 ноября, 2021 · Жалоба 20 minutes ago, Arlleex said: Корпус какой? Наименование МК полностью? Там этих пинов с GCLK_IO0 еще довольно много. PA27, PA28, PA30, например. 64. SAMD21J18A. Пробовал на PA27 и PA28. Не заработало. Я впервые работаю с микрочиповскими армами, думал мож, что общеизвестное для тех, кто в теме, сразу и подскажут. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 131 22 ноября, 2021 Опубликовано 22 ноября, 2021 · Жалоба По регистрам GCLK проще ориентироваться - возможно, верхний Ваш код никак не влияет на регистры GCLK0, в частности вывод его частоты на GPIO. Поправил: конечно же, GCLK0, а не GCLK1. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rat 0 22 ноября, 2021 Опубликовано 22 ноября, 2021 · Жалоба 1 minute ago, Arlleex said: По регистрам GCLK проще ориентироваться - возможно, верхний Ваш код никак не влияет на регистры GCLK1, в частности вывод его частоты на GPIO. Не понял, что Вы хотели сказать. GCLK1 выводится без проблем на PB15. GCLK0 не выводится. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dimka76 42 22 ноября, 2021 Опубликовано 22 ноября, 2021 · Жалоба 50 minutes ago, rat said: На назначенном пине нет клока, почему, пока не удалось выяснить, причем я перепробовал несколько пинов, GCLK generator 1 выводится, а GCLK generator 0 нет. Возможно у вас генератор GCLK generator 0 не настроен, поэтому и не выводится ничего. Плюньте на этот ASF и сами все настройте. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rat 0 22 ноября, 2021 Опубликовано 22 ноября, 2021 · Жалоба Just now, dimka76 said: Возможно у вас генератор GCLK generator 0 не настроен, поэтому и не выводится ничего. Согласно коду, он настроен. Или возможны косяки ASF? 3 minutes ago, dimka76 said: Возможно у вас генератор GCLK generator 0 не настроен, поэтому и не выводится ничего. Плюньте на этот ASF и сами все настройте. Я сам больше люблю работать с регистрами, но на этом месте работы принято работать на ASF, плюс сроки дичайше ограничены, а для ASF мне предоставили много примеров. Если в ближайшее время не разберусь, возможно, буду писать на регистрах, но, имхо, для этого потребуется больше времени и риск не уложиться в сроки возрастет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 131 22 ноября, 2021 Опубликовано 22 ноября, 2021 · Жалоба 13 минут назад, rat сказал: Не понял, что Вы хотели сказать. GCLK1 выводится без проблем на PB15. GCLK0 не выводится. Я хотел сказать, что все эти пляски с ASF и кубоподобием вполне могут указывать на банально кривой код настройки генераторов. Выведите значения всех регистров модуля GCLK, их там всего 5 штук... Там и будет видно, что и как настроено. Цитата ...для этого потребуется больше времени и риск не уложиться в сроки возрастет. За прошедших 2 часа уже несколько раз можно было считать регистры GCLK и сравнить с даташитом - чего там настроено. Цитата # define CONF_CLOCK_GCLK_0_OUTPUT_ENABLE false Ну и чего Вы ждете тогда на GPIO от GCLK0? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rat 0 22 ноября, 2021 Опубликовано 22 ноября, 2021 · Жалоба 7 minutes ago, Arlleex said: Я хотел сказать, что все эти пляски с ASF и кубоподобием вполне могут указывать на банальный кривой код настройки генераторов. Выведите значения всех регистров модуля GCLK, их там всего 5 штук... Там и будет видно, что и как настроено. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться