Программирование ARM nRF5x SDK: настройка CONFIG_GPIO_AS_PINRESET для вывода сброса Tue, January 25 2022  

Поделиться

Нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.

nRF5x SDK: настройка CONFIG_GPIO_AS_PINRESET для вывода сброса Печать
Добавил(а) microsin   

Во многих проектах примеров устройств из SDK используется опция CONFIG_GPIO_AS_PINRESET, чтобы назначить определенный вывод GPIO под функцию сброса.

Работает это следующим образом. Если для препроцессора определен макрос CONFIG_GPIO_AS_PINRESET (это делается через свойства проекта путем редактирования определений препроцессора), то выбранная ножка GPIO (выбор определяется макросом RESET_PIN) конфигурируется под функцию сброса. Это делается, когда нужна функция сброса от внешнего вывода (Pin Reset). Если этот макрос не определен, то сброс от внешнего вывода недоступен. В таком случае один вывод GPIO (какой именно, см. даташит на используемый MCU) будет зарезервирован для PinReset, и он не будет доступен как обычный вывод GPIO.

По умолчанию CONFIG_GPIO_AS_PINRESET определен, и назначается ножка сброса на порт P0.21 (вывод 24 корпуса QFN48). Ножка порта P0.21 используется как вывод сброса на макетной плате PCA10040. При этом если подать лог. 0 на этот вывод, то произойдет сброс.

Конфигурирование выбранной ножки делает код запуска в процедуре SystemInit (находится в модуле system_nrf52.c). При изменении конфигурации CONFIG_GPIO_AS_PINRESET перекомпилируйте проект, чтобы изменить поведение кода SystemInit.

Код SystemInit, который настраивает поведение вывода для сброса:

#if defined (CONFIG_GPIO_AS_PINRESET)
   if (((NRF_UICR->PSELRESET[0] & UICR_PSELRESET_CONNECT_Msk) !=
      (UICR_PSELRESET_CONNECT_Connected << UICR_PSELRESET_CONNECT_Pos)) ||
      ((NRF_UICR->PSELRESET[1] & UICR_PSELRESET_CONNECT_Msk) !=
      (UICR_PSELRESET_CONNECT_Connected << UICR_PSELRESET_CONNECT_Pos)))
   {
      nvmc_config(NVMC_CONFIG_WEN_Wen);
      NRF_UICR->PSELRESET[0] = RESET_PIN;
      nvmc_wait();
      NRF_UICR->PSELRESET[1] = RESET_PIN;
      nvmc_wait();
      nvmc_config(NVMC_CONFIG_WEN_Ren);
      NVIC_SystemReset();
   }
#endif

Важный момент: если необходимо поменять конфигурацию CONFIG_GPIO_AS_PINRESET, недостаточно просто исключить или просто добавить определение макроса CONFIG_GPIO_AS_PINRESET. Пока не будет предварительно выполнена полная очистка памяти, это изменение не вступит в силу. Причина в том, что настройка конфигурации для вывода сброса делается в энергонезависимой памяти, которая должна быть очищена, а это возможно только через полную очистку FLASH.

Очистку памяти чипа nRF5x можно выполнить либо с помощью J-Link Commander [1], либо с помощью утилиты nrfjprog [2] (с помощью команды nrfjprog --recover).

[Ссылки]

1Keil IDE: настройка меню Tools.
2. nRF Command Line Tools.

 

Добавить комментарий


Защитный код
Обновить

Top of Page