Перейти к содержанию
    

Настроил АЦП nrf52832 на непрерывное преобразование а он не работает.

Привет.

Вот код:

     

volatile int16_t result = 0;

NRF_SAADC->CH[0].CONFIG = (SAADC_CH_CONFIG_GAIN_Gain1_2    << SAADC_CH_CONFIG_GAIN_Pos) |
                           (SAADC_CH_CONFIG_MODE_SE         << SAADC_CH_CONFIG_MODE_Pos) |
                           (SAADC_CH_CONFIG_REFSEL_VDD1_4 << SAADC_CH_CONFIG_REFSEL_Pos) |
                           (SAADC_CH_CONFIG_RESN_Bypass     << SAADC_CH_CONFIG_RESN_Pos) |
                           (SAADC_CH_CONFIG_RESP_Bypass     << SAADC_CH_CONFIG_RESP_Pos) |
                           (SAADC_CH_CONFIG_TACQ_40us        << SAADC_CH_CONFIG_TACQ_Pos);

   NRF_SAADC->CH[0].PSELP = SAADC_CH_PSELP_PSELP_AnalogInput0 << SAADC_CH_PSELP_PSELP_Pos;
   NRF_SAADC->CH[0].PSELN = SAADC_CH_PSELN_PSELN_NC << SAADC_CH_PSELN_PSELN_Pos;

   NRF_SAADC->RESOLUTION = SAADC_RESOLUTION_VAL_14bit << SAADC_RESOLUTION_VAL_Pos;


   NRF_SAADC->RESULT.MAXCNT = 1;
   NRF_SAADC->RESULT.PTR = (uint32_t)&result;

     // No automatic sampling, will trigger with TASKS_SAMPLE.
   NRF_SAADC->SAMPLERATE = 0x400 | SAADC_SAMPLERATE_MODE_Timers << SAADC_SAMPLERATE_MODE_Pos;

   NRF_SAADC->ENABLE = SAADC_ENABLE_ENABLE_Enabled << SAADC_ENABLE_ENABLE_Pos;

   NRF_SAADC->TASKS_CALIBRATEOFFSET = 1;
   while (NRF_SAADC->EVENTS_CALIBRATEDONE == 0);
   NRF_SAADC->EVENTS_CALIBRATEDONE = 0;
   while (NRF_SAADC->STATUS == (SAADC_STATUS_STATUS_Busy <<SAADC_STATUS_STATUS_Pos));

   // Start the SAADC and wait for the started event.
   NRF_SAADC->TASKS_START = 1;
   while (NRF_SAADC->EVENTS_STARTED == 0);
   NRF_SAADC->EVENTS_STARTED = 0;

   // Do a SAADC sample, will put the result in the configured RAM buffer.
   NRF_SAADC->TASKS_SAMPLE = 1;
   while (NRF_SAADC->EVENTS_END == 0);
   NRF_SAADC->EVENTS_END = 0;

 

Переменная result не изменяется в зависимости от напряжения на входе AIN0.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Здравствуйте. Удалось справиться с проблемой? Подобно вашему инициализирую модуль, но запускаю от ppi по таймеру. EVENTS_END не происходит, хотя EVENTS_DONE срабатывают.

Такое ощущение, что DMA не передаёт результат в буфер

Изменено пользователем adrvyho

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...