среда, 11 мая 2011 г.

Мигаем светодиодом в AVR-бутлодере

При запуске бутлодера неплохо бы сигнализировать об этом пользователю. Хорошо когда в устройстве есть светодиод. Но ряд ограничений толкает нас на некоторые извращения.
  • Использовать прерывание таймера не можем
  • Сильно ограничены по размеру кода
  • Мигать должны на фоне основной задачи
Поступаем так: запускаем таймер-счетсик в режиме простого счета
#include "iom88.h"
//ports init
sbi LED_DDR,LED_PIN // out for led
//timer init
ldi temp,(1<<CS12) //timer setup (clk/256)
out TCCR1B,temp
В основном цикле бутлодера отслеживаем состояние определенного бита нашего счетчика, включаем светодиод синхронно с этим битом.
#include "iom88.h"
in temp,TCNT1L //ВНИМАНИЕ! Хотя мы анализируем только старший байт таймера, 
               //мы обязаны прочитать младшую его половину. 
in temp,TCNT1H
sbrc temp,4
cbi LED_PORT,LED_PIN
sbrs temp,4
sbi LED_PORT,LED_PIN

Комментариев нет:

Отправить комментарий