|
|
  |
Глюк в новых Atmega8, Это любопытно. |
|
|
|
Jan 14 2010, 16:07
|
;
     
Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509

|
Доброго времени! Наблюдаю странный глюк в купленных недавно мегах 8. Старых камней нету - все горелые. Пожалуйста, если кому интересно, проверьте, не боян ли. Исходные: глючит программа при read-modify-write к регистру компаратора. прерывания компаратора запрещены. Общие разрешены. Код void do_ACMP(void) { if(ACSR &(1<<ACI)) { // ACSR |= (1<<ACI); // так не работает ACSR = (1<<ACI); // пришлось объяснить по-русски, куда ему пойти // далее по тексту - к делу не относится. } } WinAVR, конечно же ACSR |= (1<<ACI) оптимизирует до sbi ACSR,ACI - и начались пляски. Предположительно, уходит в отсутствующий вектор прерывания, видать какие-то иголки на вход ACIE наводятся. Раньше, когда писАл на асме, никогда не пользовался битовыми инструкциями применительно к ACSR, поэтому не могу знать, как давно такое безобразие имеет место быть.
|
|
|
|
|
Jan 14 2010, 17:13
|
Гуру
     
Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823

|
Цитата(_Pasha @ Jan 14 2010, 20:07)  Наблюдаю странный глюк в купленных недавно мегах 8. "С компаратором не работал, но осуждаю "  Смысл не подскажете - если в разряде единица, то добавить туда еще одну? Глянул даташит, смысл стал понятнее, пардон.
--------------------
Уходя, оставьте свет...
|
|
|
|
|
Jan 16 2010, 20:22
|
Гуру
     
Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521

|
Цитата(_Pasha @ Jan 15 2010, 12:11)  Если бы предположения о том, куда уходит программа, не подтвердились, я бы написАл. По поводу ACSR - это уже факт. Остается только узнать, как обстоит дело с камнями из других партий. То есть OUT-ом всё работает, а SBI - нет?  Тогда я извиняюсь. Неразобрался. Меги то есть, но на коленке трудно проверить, а девайса подходящего пока нет.
|
|
|
|
|
Jan 17 2010, 07:34
|

Нечётный пользователь.
     
Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417

|
Тю, странно. Вроде бы работал с компаратором на меге 8 и вроде бы проблем не было. Сначала странное показалось, потом вспомнил, что в ACSR этот ACI - единственный флаг, сбрасываемый единичкой и проблем с RMW-шностью SBI быть не должно.
Есть ATMEGA8L даты 0237, торчит в макетке для отладки avreal, все ноги свободны - всё равно что на каких ногах. Могу залить прислнный hex, потыкать осциллографом в "Hello World!"-ножки и сказать, что было.
--------------------
Ну, я пошёл… Если что – звоните…
|
|
|
|
|
Jan 17 2010, 10:34
|

Профессионал
    
Группа: Свой
Сообщений: 1 818
Регистрация: 15-10-09
Из: Владивосток
Пользователь №: 52 955

|
Цитата(ReAl @ Jan 17 2010, 17:34)  в ACSR этот ACI - единственный флаг, сбрасываемый единичкой и проблем с RMW-шностью SBI быть не должно. Наверное так, если бы это была внешняя нога порта. А как схемотехнически устроены эти внутренние регистры, я допустим, не знаю. Но следуя этой логике, все разряды внутренних регистров, сбрасываемые в 0 записью единицы, будут вести себя также.
Сообщение отредактировал V_G - Jan 17 2010, 10:34
|
|
|
|
|
Jan 17 2010, 15:25
|

Нечётный пользователь.
     
Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417

|
Цитата(V_G @ Jan 17 2010, 12:34)  Наверное так, если бы это была внешняя нога порта. А как схемотехнически устроены эти внутренние регистры, я допустим, не знаю. Но следуя этой логике, все разряды внутренних регистров, сбрасываемые в 0 записью единицы, будут вести себя также. Обязательно будут. Просто обязаны. У меги 8. У 88 - нет. Я тоже не знаю, как они устроены "внутри", но я читал документацию на их "внешнее" поведение. atmega8/atmega8L, документ от 10.2004, то же самое в atmega8A, документ от 07.2009 Раздел AVR memories / IO memory Цитата Some of the Status Flags are cleared by writing a logical one to them. Note that the CBI and SBI instructions will operate on all bits in the I/O Register, writing a one back into any flag read as set, thus clearing the flag. А вот для mega48..168 Цитата Some of the Status Flags are cleared by writing a logical one to them. Note that, unlike most other AVRs, the CBI and SBI instructions will only operate on the specified bit, and can therefore be used on registers containing such Status Flags. Обсуждалось уже http://electronix.ru/forum/index.php?s=&am...st&p=576439Ещё где-то было раньше, там я про мегу64/128 писал, и ещё кто-то отзывался, мол, "мега128 устаревший кристалл, что уже про него вспоминать, его с производства снимут скоро". Сняли. В пользу меги128А. Так что внимательность к документации на конкретный кристалл всё равно нужна.
--------------------
Ну, я пошёл… Если что – звоните…
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|