Я кусаю губы от своих первых шагов с ASF, предоставленным Atmel.
Кажется, что ASF во многих местах написан неэффективно, и вдобавок документация кажется неточной, или я уже слишком выгорел, чтобы здраво мыслить.
Самая актуальная проблема, которая стоила мне многих часов:
pio_configure_pin() versus pio_configure_pin_group()
Описано здесь: http://asf.atmel.com/docs/latest/sam3u/html/group__sam__drivers__pio__group.html#ga66c09a2f5c8d11223eb107cf8fbfddb2
На основе документации:
Первый параметр configure_pin: ul_pin Битовая маска одного или нескольких контактов для настройки
Второй параметр configure_pin_group: ul_mask Битовая маска одного или нескольких контактов( с) настроить
На самом деле: первый параметр configure_pin НЕ является битовой маской. Если я хочу настроить контакт PB 28, я должен использовать значение 60!
#define PIO_PB28_IDX 60
Если я хочу настроить один и тот же пин, используя групповую функцию, я должен использовать значение 2415919104.
#define PIO_PB28 (1u << 28)
Неправильная документация, отсутствие примеров и записи на форуме с неправильными примерами привели к потере многих часов.
Если я ошибаюсь, дайте мне знать, возможно, я что-то упустил из документации. Ведь драйвер PIO, скорее всего, один из самых важных, он нужен практически при любом использовании чипа. И эти две функции действительно важны.
Может быть, эксперт по Atmel SAM поможет мне решить, стоит ли вообще продолжать использовать ASF? Используют ли его специалисты для своих разработок или лучше все написать с нуля.
Мне казалось, что когда я пришел из разработки AVR, вся легкость исчезла, и ASF был способом Atmel сделать его снова проще, однако, если он содержит ошибки и не находится в надлежащем состоянии выпуска, он может быть бесполезен.