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

Добрый день.

В библиотеке HAL запись в регистры Ethernet происходит следующим образом

  /* Write to ETHERNET MACCR */
    (heth->Instance)->MACCR = (uint32_t)tmpreg1;
    
    /* Wait until the write operation will be taken into account :
    at least four TX_CLK/RX_CLK clock cycles */
    tmpreg1 = (heth->Instance)->MACCR;
    HAL_Delay(ETH_REG_WRITE_DELAY);
    (heth->Instance)->MACCR = tmpreg1;

 

Для чего это сделано и как работает?

Я догадываюсь что для пересечения клоковых доменов, но не совсем понимаю почему именно так.

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


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

Почитайте еррату. Там сказано, что если в один и тот же регистр записывать повторно без должной задержки, то получится ерунда. Поскольку у них есть привычка каждый бит записывать отдельно, приходится страховаться от этого случая.

У меня всё содержимое регистра записывается одним махом, поэтому такой проблемы нет.

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


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

Хм, эррату почитаю.

 

Но здесь же нет побитовой записи. Запись в регистр происходит сразу из переменной tempreg1. Затем читает, ждет и опять пишет.

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


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

Но здесь же нет побитовой записи. Запись в регистр происходит сразу из переменной tempreg1. Затем читает, ждет и опять пишет.

Ненужные пляски с бубном.

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


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

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

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

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

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

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

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

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

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

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