isz 0 4 октября, 2016 Опубликовано 4 октября, 2016 · Жалоба Добрый день. В библиотеке 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; Для чего это сделано и как работает? Я догадываюсь что для пересечения клоковых доменов, но не совсем понимаю почему именно так. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
scifi 1 4 октября, 2016 Опубликовано 4 октября, 2016 · Жалоба Почитайте еррату. Там сказано, что если в один и тот же регистр записывать повторно без должной задержки, то получится ерунда. Поскольку у них есть привычка каждый бит записывать отдельно, приходится страховаться от этого случая. У меня всё содержимое регистра записывается одним махом, поэтому такой проблемы нет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
isz 0 4 октября, 2016 Опубликовано 4 октября, 2016 · Жалоба Хм, эррату почитаю. Но здесь же нет побитовой записи. Запись в регистр происходит сразу из переменной tempreg1. Затем читает, ждет и опять пишет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
scifi 1 4 октября, 2016 Опубликовано 4 октября, 2016 · Жалоба Но здесь же нет побитовой записи. Запись в регистр происходит сразу из переменной tempreg1. Затем читает, ждет и опять пишет. Ненужные пляски с бубном. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
isz 0 4 октября, 2016 Опубликовано 4 октября, 2016 · Жалоба Спасибо за ответ. Инфу в эррате нашел. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться