Я хочу менять лишь значения прескалера у MCK. Как это сделать в даташите не описано, на диаграмах такой вариант не показан и в примерах кода - его нет.
Интересует именно эта процедура и её последствия на работу ДМА в режиме ведомого.
Как по вашему мнению - принимая данные на RK,RD со скоростью 300кбит я могу поменять MCK с 30МГц на 1МГц, а затем обратно при помощи прескалера?
Или данные будут потеряны, а синхронизация собьётся?
Фраз о том, что в момент смены делителя частоты я должен отключить всю переферию, а затем включить и переинициализировать заново - я не нашел.
Цитата(aaarrr @ Apr 6 2012, 00:05)

В даташите: If at some stage one of the following parameters, CSS or PRES, is modified, the MCKRDY bit will go low to indicate that the Master Clock and the Processor Clock are not ready yet. The user must wait for MCKRDY bit to be set again before using the Master and Processor Clocks.
Там же: Each time PMC_MCKR is written to define a new Master Clock, the MCKRDY bit is cleared in PMC_SR. It reads 0 until the Master Clock is established. Then, the MCKRDY bit is set and can trigger an interrupt to the processor. This feature is useful when switching from a high-speed clock to a lower one
to inform the software when the change is actually done.Т.е. Это просто информационный бит, чтоб я знал что MCK уже изменилось и весь дальнейший мой алгоритм точно работает на новой частоте.
Цитата(aaarrr @ Apr 6 2012, 00:05)

По поводу простоя обратите внимание на текст в 25.8.1 Master Clock Switching Timings.
Если прескалер включен, то ко времени переключения нужно прибавить еще 64 такта нового клока.
А если я не меняю источник, а хочу лишь изменить делитель - прескалер то мне всё равно ждать 64 такта нового клока?
Цитата
25.7 Programming Sequence
4. Selection of Master Clock and Processor Clock
The PMC_MCKR register must not be programmed in a single write operation. The preferred programming sequence for the PMC_MCKR register is as follows:
*If a new value for CSS field corresponds to PLL Clock,
– Program the PRES field in the PMC_MCKR register.
– Wait for the MCKRDY bit to be set in the PMC_SR register.
– Program the CSS field in the PMC_MCKR register.
– Wait for the MCKRDY bit to be set in the PMC_SR register.
* If a new value for CSS field corresponds to Main Clock or Slow Clock,
– Program the CSS field in the PMC_MCKR register.
– Wait for the MCKRDY bit to be set in the PMC_SR register.
– Program the PRES field in the PMC_MCKR register.
– Wait for the MCKRDY bit to be set in the PMC_SR register.
Получается, что как минимум на Main Clock никто не мешает мне просто обновлять значение PRES и в соответствии
с таблицей 25-1. Clock Switching Timings (Worst Case): From Main Clock To Main Clock время переключения будет равно прочерку.
Что это значит - я не знаю, то ли так нельзя переключаться, толи переключение произойдёт мгновенно.
С режимом PLL Clock тоже не понятно. Или я должен записать в PRES новое значение и выждав MCKRDY, зачем-то опять записать в CSS то же число.
Или изменение PRES не возможно без изменения частоты PLL.
Повторяю: я не хочу менять источник частоты. Лишь его делитель. Как же коряво нужно создать кристалл, чтоб при изменении делителя происходил пропуск частоты или происходил её перезахват и нужно было ресетить всю систему? Неужели всё так хреново у Атмела?