Atmel ASF на SAM - неправильно описан pio_configure_pin?

Я кусаю губы от своих первых шагов с 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 сделать его снова проще, однако, если он содержит ошибки и не находится в надлежащем состоянии выпуска, он может быть бесполезен.


person John    schedule 01.07.2014    source источник


Ответы (2)


Все в порядке. Ошибки часто случаются с документацией. Будь позитивным. Ты открыл это, теперь ты хозяин. Серьезно, это не имеет большого значения. Как только вы его нашли, вставьте макрос или используйте свои собственные функции для такого доступа к PIO. Я всегда предпочел бы открыть заголовок и посмотреть, как один макрос или функция обращается к требуемым битовым полям. Это немного мудрая магия там. Это часто приближается к глубокому и низкоуровневому пониманию конкретной архитектуры, что хорошо для разработчика. В начале стоит потратить часы.

person Ruslan Gerasimov    schedule 02.07.2014

Я тоже наткнулся на эту функцию. Параметр ul_pin на самом деле является порядковым номером вывода. Как видно из функции, сначала она используется для указания указателя Pio на корректировку контроллера PIO путем выяснения того, как много блоков на основе 32 в этом порядковом номере.

Так что вы правы, это ошибка в документации.

person Sergii    schedule 07.07.2014