ATSAMD21. Синхронизация регистров

Кто любит RISC в жизни, заходим, не стесняемся.
Ответить
vervain
Родился
Сообщения: 2
Зарегистрирован: Чт сен 22, 2016 10:43:24

ATSAMD21. Синхронизация регистров

Сообщение vervain »

Всем доброго времени суток.

Разбираюсь с Atmel-овским SAMD21. Возник вопрос по поводу регистров, требующих синхронизации после записи (Write-Synchronized). Записываю данные в регистр и жду синхронизации примерно так

Код: Выделить всё

    SERCOM2->USART.CTRLA.reg = (SERCOM_USART_CTRLA_DORD | SERCOM_USART_CTRLA_RXPO(1) | SERCOM_USART_CTRLA_MODE(1));
    while(SERCOM2->USART.SYNCBUSY.bit.ENABLE) {};
После чего программа останавливается в вечном ожидании снятия бита ENABLE, хотя судя по даташиту он вроде должен сам сброситься когда синхронизация завершится. Может, что не так делаю или кто-то уже сталкивался с подобным и подскажет в чём дело?
Заранее благодарю.
Реклама
BorisSPB
Встал на лапы
Сообщения: 145
Зарегистрирован: Ср фев 01, 2012 10:55:53

Re: ATSAMD21. Синхронизация регистров

Сообщение BorisSPB »

Синхронизация относится только к биту CTRLA.ENABLE а не ко всему CTRLA
Enabling and disabling the SERCOM (CTRLA.ENABLE) requires synchronization. When written, the
SYNCBUSY.ENABLE bit will be set until synchronization is complete.
Вот пример как делают:

Код: Выделить всё

void SERCOM::enableUART()
{
  //Setting  the enable bit to 1
  sercom->USART.CTRLA.bit.ENABLE = 0x1u;

  //Wait for then enable bit from SYNCBUSY is equal to 0;
  while(sercom->USART.SYNCBUSY.bit.ENABLE);
}
Реклама
vervain
Родился
Сообщения: 2
Зарегистрирован: Чт сен 22, 2016 10:43:24

Re: ATSAMD21. Синхронизация регистров

Сообщение vervain »

BorisSPB, спасибо. Синхронизировать и правда нужно только ENABLE. Но и теперь когда синхронизирую только его (один в один как в примере), повторяется та же история - бит не сбрасывается.
Ответить

Вернуться в «ARM»