LTagKirov писал(а):
Pingvin писал(а):
Надо бы научиться использовать аппаратный SPI. Это освободит немного ресурсов контроллера.
Использовал подобный сдвиговый регистр в часах, программные затраты времени минимальные, регистр тактируется на любой из доступных частот контроллера и паузы ему тоже некритичны.
SPI полезнее использовать для работы с MMC SD Flash.
Смотрел ваш код - неоптимальный выбор режимов и использования таймеров. Особенно для ИК передатчика, зачем самому обрабатывать каждый перепад с частотой ИК*2 когда есть встроенный аппартный вариант ШИМа. Переключать выход ИК на любую ногу процессора тоже не часто приходится, можно и привязатся к определёнонй ноге.
PS. На предмет чтонибудь "вырезать", исходники конечно "грусные"
Не хватает таймеров - если несущую ИК формировать аппаратно, нечем будет звук воспроизводить.
Для считывания сеймплов нужно ещё 8 КГц прерывания.
таймер0 - аппаратный ШИМ формирует звук.
таймер2 - прерывания с частотой 8 КГц для скармливания сеймплов звука тимеру0.
таймер1 - фомирование несущей ИК и он же инкрименирует счетчики длительности низкого и высокого уровня сигнала на входе INT0 (подсчет времени между прерываниями INT0).
Пока работает так.
Но то, что код не оптимален - спорить не буду, это очевидно.
Платки вышлю (немного осталось допаять, но на работе коллега приболел - за двоих отдуваюсь, все не получается доделать) - может у Вас лучше получиться, буду только рад.
Ну и опять же возвращаемся к проблеме некоего "оптимального" алгаритма работы прошивки...