Николай Коровин (19.08.2008 02:39, просмотров: 2608)
128-я мега игнорирует OCR1C Чудеса и удивительности. Гоняю первый таймер-каунтер, Fast PWM, non-inverted, prescaler, в общем, никаких хитростей. Топаю через икру... то есть TOP задаю через ICR1 (даблбуфер не нужен и даже вреден), стало быть, OCR1A свободен, но нужен мне не он. Нужен мне канал C, который очень странно себя ведет. То есть он вообще никак себя не ведет: что бы я не писал в OCR1C, импульс имеет длительность в один таймерный такт (ну то есть частота/прескалинг), то есть как будто я вообще туда ничего не писал. Проверяю значение считыванием -- точно, что положил, то и лежит. Но действия почему-то не оказывает. На икру реагирует исправно: период меняется в строгом соответствии с. На окр1ц -- ноль внимания. Причем при попытке сделать inverted он, собака, исправно инвертирует этот единичный импульс (который становится такой же единичной паузой).
С горя уж кинул в OCR1A циферку (ну и врубил канал через TCCR1A, естественно) -- все работает. Исправнейшим образом откликается на кидаемые туда циферки, все длины рисует в строжайшем соответствии, на канале А, естественно. Канал С -- вглухую. Окр1ц находится в расширенном пространстве (в отличие от двоих своих братьев), поэтому я уж грешил на кривую запись (ну не туда что-то пишу типа) -- попробовал варианта 4 разных записей на си и асме, с одинаковым (нулевым) результатом. Про атомические операции помню, прервать священное "старший-младший" ничего не могло: тупо нечему, я в умственном тупике закомментил весь код, кроме семи строчек инициализации.
Ну вот что за бред, а, кто что предположить хоть может? :)
ЗЫ: признаюсь честно -- WinAVR, хотя какая, на фиг, разница, если я на асме даже номера регистров вбивал ручками-циферкой, на случай какого-то не того инклюда?
ЗЫЫ: Fuse M103C = 0, раз 10 проверил %)