Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Глюк в новых Atmega8
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
_Pasha
Доброго времени!
Наблюдаю странный глюк в купленных недавно мегах 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, поэтому не могу знать, как давно такое безобразие имеет место быть.
Dog Pawlowa
Цитата(_Pasha @ Jan 14 2010, 20:07) *
Наблюдаю странный глюк в купленных недавно мегах 8.

"С компаратором не работал, но осуждаю " smile.gif
Смысл не подскажете - если в разряде единица, то добавить туда еще одну?

Глянул даташит, смысл стал понятнее, пардон.
SasaVitebsk
Сначала выясните что происходит, а уже потом давайте оценку происходящему. "Глючит" и "плющит", как правило, программистов.
Нет никаких проблем с обнаружением "куда уходит" программа. Не составляет никакого труда вычислить переход на незадействованный вектор. Нетрудно также обнаружить точку проги, откуда производится такой переход.

Так в чём проблема?
_Pasha
Цитата(SasaVitebsk @ Jan 15 2010, 01:04) *
Сначала выясните что происходит, а уже потом давайте оценку происходящему. "Глючит" и "плющит", как правило, программистов.

Если бы предположения о том, куда уходит программа, не подтвердились, я бы написАл. По поводу ACSR - это уже факт. Остается только узнать, как обстоит дело с камнями из других партий.
SasaVitebsk
Цитата(_Pasha @ Jan 15 2010, 12:11) *
Если бы предположения о том, куда уходит программа, не подтвердились, я бы написАл. По поводу ACSR - это уже факт. Остается только узнать, как обстоит дело с камнями из других партий.

То есть OUT-ом всё работает, а SBI - нет? 07.gif Тогда я извиняюсь. Неразобрался.
Меги то есть, но на коленке трудно проверить, а девайса подходящего пока нет.
ReAl
Тю, странно. Вроде бы работал с компаратором на меге 8 и вроде бы проблем не было. Сначала странное показалось, потом вспомнил, что в ACSR этот ACI - единственный флаг, сбрасываемый единичкой и проблем с RMW-шностью SBI быть не должно.

Есть ATMEGA8L даты 0237, торчит в макетке для отладки avreal, все ноги свободны - всё равно что на каких ногах.
Могу залить прислнный hex, потыкать осциллографом в "Hello World!"-ножки и сказать, что было.
V_G
Цитата(ReAl @ Jan 17 2010, 17:34) *
в ACSR этот ACI - единственный флаг, сбрасываемый единичкой и проблем с RMW-шностью SBI быть не должно.

Наверное так, если бы это была внешняя нога порта. А как схемотехнически устроены эти внутренние регистры, я допустим, не знаю. Но следуя этой логике, все разряды внутренних регистров, сбрасываемые в 0 записью единицы, будут вести себя также.
ReAl
Цитата(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А. Так что внимательность к документации на конкретный кристалл всё равно нужна.
V_G
Но проблемы с RMW должны проявляться при записи в другие биты того же регистра. А если команда SBI единственная в обработке инфо от даннго регистра, то вроде как должно все работать у топикстартера.

Так что следует посмотреть, не проводятся ли с данным регистром другие операции класса RMW
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.