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

Влияние регистра CLKPR (Clock Prescale Register) в режиме программирования

Уважаемые форумчане, помогите разобраться. Как известно, в ATtiny регистр CLKPR задает коэф-т деления и определяет системную тактовую частоту. Если фьюз CKDIV8 запрограммирован, то четыре младших разряда регистра CLKPR равны 0011, а если не запрограммирован, то они равны 0000. Т.к. регистр CLKPR относится к энергозависимой памяти (SRAM), то при отключении питания его содержимое по идее должно сбрасываться в начальное состояние, которое определяется значением фьюза CKDIV8 и которое не зависит от той программы, которая записана в Flash-память м-контроллера.

Проблема собственно в следующем: есть м-сх ATtiny13A, работающая от внутреннего генератора 9,6 МГц. Фьюз CKDIV8 запрограммирован и его состояние я не менял. Сначала (со старой программой) ATtiny13A прекрасно программировалась и читалась программатором. Затем я записал новую программу, в которой применил коэф-т деления генератора на 256 (младшие разряды регистра CLKPR равны 1000). Программа записалась и правильно работала, но контроллер перестал читаться и я не мог его перепрограммировать. Когда же я уменьшил частоту SCK программатора, то м-сх опять стала читаться и программироваться. После этого я снова записал старую программу, в которой не было деления частоты генератора на 256, и снова м-сх стала читаться программатором с высокой частотой SCK.

Вопрос: почему ?

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


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

... то при отключении питания его содержимое по идее должно сбрасываться в начальное состояние, которое определяется значением фьюза CKDIV8 и которое не зависит от той программы, которая записана в Flash-память м-контроллера.

При подаче сигнала Reset (внешний и внутренний). А т.к. программирование всегда начинается с подачи Reset, то содержимое CLKPR не должно влиять на программирование. Точнее на частоту клока программатора.

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

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


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

Хм... Я бы поостерегся утверждать, что "Reset" _после_ подачи питания приводит к тем же результатам, что и сам факт сброса по питанию. Т.е. если программа все ж стартовала и проинициализировала регистр CLKPR - могу допустить, что последующий внешний сброс не изменит состояние. Не проверял, поэтому не уверен (хотя проверить, в общем-то, дело недолгое, состояние CLKPR отправить на ноги и посмотреть, что там появляется). Как обойти - понятно, удерживать активный сброс от момента включения до начала программирования.

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


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

Если только предположить, что разработчики накосячили. Т.к. этот регистр, как и многие другие обязан сбрасываться в стартовое состояние всегда при сбросе, т.к. он задаёт частоту ядра и всего остального. Стартовое значение указывается в комплит даташите. Очевидно, что и по включению питания и по какому-либо сбросу запускаться программа должна одинаково. Но можно пофантазировать, что регистр мог инициализироваться не при активации Reset, а при дезактивации.

 

Как говорил Ленин: практика - критерий истины. Но важно её ещё правильно "интерпретировать", если это аналог чёрного ящика.

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

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


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

Смущает то, что состояние младших четырех битов объявлено "see bit description". А по логике, там должно бы быть только два варианта в зависимости от фьюза CKDIV8.

Когда в очередной раз буду с tiny13 играться - проверю...

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


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

А по логике, там должно бы быть только два варианта в зависимости от фьюза CKDIV8.

Там так и написано. Значение бит будет либо 0000 либо 0011. В переводе на делитель 1/1 или 1/8.

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


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

Я вижу, что именно так написано, например, в даташите на ATmega168, но для tiny13 в даташите Rev. 2535J–AVR–08/10 - явного указания не увидел. Или читаю невнимательно ? Впрочем, все равно при случае проверю...

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


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

Я вижу, что именно так написано, например, в даташите на ATmega168, но для tiny13 в даташите Rev. 2535J–AVR–08/10 - явного указания не увидел. Или читаю невнимательно ? Впрочем, все равно при случае проверю...

 

Да, я тоже заметил этот интересный момент. В даташитах, например, ATtiny2313, ATtiny25, ATtiny48 в разделе, в котором описываются биты CLKPS регистра CLKPR, сказано:

The CKDIV8 Fuse determines the initial value of the CLKPS bits. If CKDIV8 is unprogrammed, the CLKPS bits will be reset to “0000”. If CKDIV8 is programmed, CLKPS bits are reset to “0011”, giving a division factor of eight at start up.

А в соответствующем разделе даташита ATtiny13 этой фразы нет.

 

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


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

Странно, а у меня в Rev 2535D (Preliminary 2004-ого года) почему-то есть. Скрин места сразу над таблицей расшифровки делителей CLKPR. Более новую ревизию не смотрел.

 

На тему CLKPR в даташите нет особых уточнений, что он может инициализироваться только при включении питания. Применяя аналогию с другими регистрами, "initial value" регистра можно толковать как постоянно выставляемую при включении питания и ЛЮБОМ сбросе.

 

В эррате есть какое-то упоминание о проблемах с программированием при фьюзах, задающих очень короткое startup-time. Может из-за этого проблемы.

post-16753-1453585281_thumb.png

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

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


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

Посмотрел, да действительно в предварительной версии даташита (Preliminary 2004-ого года) эта фраза была. А в даташите за 2010 год (Rev 2535J–AVR–08/10) этого уже нет. Почему-то решили убрать.

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


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

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

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

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

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

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

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

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

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

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