Mar. 24th, 2012

kincajou: (Default)
Есть две железяки, построенные очень схоже. В основе - AT90CAN128. Оба дивайса бОльшую часть времени проводят в спячке, время от времени просыпаясь, делая своё дело и снова засыпая. Так вот, в первом случае асинхронный таймер (от кварца 32768Гц) свои прерывания генерит вполне исправно, а во втором - не генерит. Точнее сказать, не генерит тогда, когда надо генерить: не пробуждает процессор. Хотя сам таймер работает, осциллом прекрасно видно колебания с нужной частотой.

У этих микроконтроллеров есть несколько рабочих режимов - обычный, когда ядро молотит программу на полной скорости; "холостой", когда ядро и флэш-память отключены, но работает вся периферия; "энергосберегающий" (когда работает только _асинхронная_ периферия, в т.ч. медленный таймер); "отключенный" (когда работает только асинхронная периферия, но БЕЗ медленного таймера) и режим "ожидания", когда всё то же самое, как и в "отключенном", только жрёт на 10 мА больше.

Я всегда использую "энергосберегающий" - не потому, что я весь из себя такой гринписный чувак, а потому что батарейки менять лучше всё-таки пореже. И до сих пор всё прекрасно работало - я инициализировал таймер, разрешал его прерывания, прописывал нужный режим сна и, собсно, давал команду SLEEP.

Но теперь всё то же самое не работает. Просто нету прерываний, и всё тут. Можно, конечно, использовать "холостой" режим - он тоже заметно снижает потребление по сравнению с обычным ходом, но мне не нужно 10..12 мА потребления, мне надо не более 3 мА. Почему всё вдруг поломалось, я не знаю и не могу понять.

Самое печальное, что отладчик рапортует бодро, мол, всё в порядке, вот прерывание"... Но прерывания реально НЕТ!

Неужели проц глючный?

проклятый кусок проклятого кода.. )

December 2016

S M T W T F S
    123
45678910
11121314151617
18192021222324
25 262728293031

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Sep. 22nd, 2017 12:55 am
Powered by Dreamwidth Studios