я, наверное, проклят - 2
Mar. 24th, 2012 12:08 amЕсть две железяки, построенные очень схоже. В основе - AT90CAN128. Оба дивайса бОльшую часть времени проводят в спячке, время от времени просыпаясь, делая своё дело и снова засыпая. Так вот, в первом случае асинхронный таймер (от кварца 32768Гц) свои прерывания генерит вполне исправно, а во втором - не генерит. Точнее сказать, не генерит тогда, когда надо генерить: не пробуждает процессор. Хотя сам таймер работает, осциллом прекрасно видно колебания с нужной частотой.
У этих микроконтроллеров есть несколько рабочих режимов - обычный, когда ядро молотит программу на полной скорости; "холостой", когда ядро и флэш-память отключены, но работает вся периферия; "энергосберегающий" (когда работает только _асинхронная_ периферия, в т.ч. медленный таймер); "отключенный" (когда работает только асинхронная периферия, но БЕЗ медленного таймера) и режим "ожидания", когда всё то же самое, как и в "отключенном", только жрёт на 10 мА больше.
Я всегда использую "энергосберегающий" - не потому, что я весь из себя такой гринписный чувак, а потому что батарейки менять лучше всё-таки пореже. И до сих пор всё прекрасно работало - я инициализировал таймер, разрешал его прерывания, прописывал нужный режим сна и, собсно, давал команду SLEEP.
Но теперь всё то же самое не работает. Просто нету прерываний, и всё тут. Можно, конечно, использовать "холостой" режим - он тоже заметно снижает потребление по сравнению с обычным ходом, но мне не нужно 10..12 мА потребления, мне надо не более 3 мА. Почему всё вдруг поломалось, я не знаю и не могу понять.
Самое печальное, что отладчик рапортует бодро, мол, всё в порядке, вот прерывание"... Но прерывания реально НЕТ!
Неужели проц глючный?
( проклятый кусок проклятого кода.. )
У этих микроконтроллеров есть несколько рабочих режимов - обычный, когда ядро молотит программу на полной скорости; "холостой", когда ядро и флэш-память отключены, но работает вся периферия; "энергосберегающий" (когда работает только _асинхронная_ периферия, в т.ч. медленный таймер); "отключенный" (когда работает только асинхронная периферия, но БЕЗ медленного таймера) и режим "ожидания", когда всё то же самое, как и в "отключенном", только жрёт на 10 мА больше.
Я всегда использую "энергосберегающий" - не потому, что я весь из себя такой гринписный чувак, а потому что батарейки менять лучше всё-таки пореже. И до сих пор всё прекрасно работало - я инициализировал таймер, разрешал его прерывания, прописывал нужный режим сна и, собсно, давал команду SLEEP.
Но теперь всё то же самое не работает. Просто нету прерываний, и всё тут. Можно, конечно, использовать "холостой" режим - он тоже заметно снижает потребление по сравнению с обычным ходом, но мне не нужно 10..12 мА потребления, мне надо не более 3 мА. Почему всё вдруг поломалось, я не знаю и не могу понять.
Самое печальное, что отладчик рапортует бодро, мол, всё в порядке, вот прерывание"... Но прерывания реально НЕТ!
Неужели проц глючный?