Настройка таймера нулевого времени Arduino

Где я могу найти информацию о том, как настроить таймеры Arduino Zero?

Потому что это ...

  // Timer stuff
  // Set up the generic clock (GCLK4) used to clock timers
  REG_GCLK_GENDIV = GCLK_GENDIV_DIV(1) |          // Divide the 48MHz clock source by divisor 1: 48MHz/1=48MHz
                    GCLK_GENDIV_ID(4);            // Select Generic Clock (GCLK) 4
  while (GCLK->STATUS.bit.SYNCBUSY);              // Wait for synchronization

  REG_GCLK_GENCTRL = GCLK_GENCTRL_IDC |           // Set the duty cycle to 50/50 HIGH/LOW
                     GCLK_GENCTRL_GENEN |         // Enable GCLK4
                     GCLK_GENCTRL_SRC_DFLL48M |   // Set the 48MHz clock source
                     GCLK_GENCTRL_ID(4);          // Select GCLK4
  while (GCLK->STATUS.bit.SYNCBUSY);              // Wait for synchronization

  // Feed GCLK4 to TC4 and TC5
  REG_GCLK_CLKCTRL = GCLK_CLKCTRL_CLKEN |         // Enable GCLK4 to TC4 and TC5
                     GCLK_CLKCTRL_GEN_GCLK4 |     // Select GCLK4
                     GCLK_CLKCTRL_ID_TC4_TC5;     // Feed the GCLK4 to TC4 and TC5
  while (GCLK->STATUS.bit.SYNCBUSY);              // Wait for synchronization

  REG_TC4_COUNT16_CC0 = 150;                      // Set the TC4 CC0 register as the TOP value in match frequency mode
  while (TC4->COUNT16.STATUS.bit.SYNCBUSY);       // Wait for synchronization

  //NVIC_DisableIRQ(TC4_IRQn);
  //NVIC_ClearPendingIRQ(TC4_IRQn);
  NVIC_SetPriority(TC4_IRQn, 0);    // Set the Nested Vector Interrupt Controller (NVIC) priority for TC4 to 0 (highest)
  NVIC_EnableIRQ(TC4_IRQn);         // Connect TC4 to Nested Vector Interrupt Controller (NVIC)

  REG_TC4_INTFLAG |= TC_INTFLAG_OVF;              // Clear the interrupt flags
  REG_TC4_INTENSET = TC_INTENSET_OVF;             // Enable TC4 interrupts
  // REG_TC4_INTENCLR = TC_INTENCLR_OVF;          // Disable TC4 interrupts

  REG_TC4_CTRLA |= TC_CTRLA_PRESCALER_DIV256 |   // Set prescaler to 1024, 48MHz/1024 = 46.875kHz
                   TC_CTRLA_WAVEGEN_MFRQ |        // Put the timer TC4 into match frequency (MFRQ) mode 
                   TC_CTRLA_ENABLE;               // Enable TC4
  while (TC4->COUNT16.STATUS.bit.SYNCBUSY);       // Wait for synchronization

Является полностью неразборчивым и подверженным ошибкам.

2 голоса | спросил Cody Smith 13 J000000Thursday17 2017, 13:25:24

2 ответа


2

BOTTOM UP

Ардуино Zero использует Atmel samd21 μController. В этом видео объясняется, как программировать чипы samd снизу вверх или, по крайней мере, как собрать всю необходимую информацию для этого. Если видео больше не работает, я кратко перефразирую его здесь. Основные шаги:

  • Выясните требуемые регистры, прочитав лист данных
  • Проконсультируйтесь с Atmel Software Framework (ASF) , чтобы выяснить соответствующие структуры данных.
  • Настройка эскиза внутри среды разработки arduino

Процесс снизу может быть очень трудоемким, потому что вы ищете иглу из стога сена, например, таблицы данных и ASF. Поэтому вам нужно заняться всеми крошечными битами, прежде чем строить все это.

TOP DOWN

В некоторых ситуациях лучше искать рабочую примерную программу и пытаться выяснить, как это делается. Для этого я рекомендую репозиторий arduino github . Это очень хороший ресурс для выяснения того, как ардуино использует ASF и помогает мне настраивать определенные функции.

Таким образом, процесс сверху вниз позволяет разложить большую рабочую функцию на ее меньшие части и выкопать в интересные части. Тем не менее, для этого требуется что-то работать в начале, которое не всегда доступно.

расшифровка

Некоторые примеры кода непонятны с самого начала. Как только вы знаете, что делает код, я рекомендую разделить большие части, такие как этот регистр и раздел модификации бит, на более мелкие. Извлеките эти разделы в функции с самоочевидными именами, и если все сделано правильно, вы можете избавиться от комментариев.

Надеюсь, что это поможет;)

ответил isaias-b 18 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowMon, 18 Sep 2017 02:14:03 +0300 2017, 02:14:03
0
  

Где я могу найти информацию о том, как настроить таймеры Arduino Zero?

Попробуйте выполнить техническое описание.

То, что вы показали там, довольно типично, может быть на примитивной стороне для чипов такого рода.

Больше мощности приходит с большей сложностью.

ответил dannyf 13 J000000Thursday17 2017, 13:49:16

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132