ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Воскресенье
19 мая
49199
Морковка (24.01.2006 08:34, просмотров: 2541)
ATmega, SPI, Трудности перевода. :-) Дело вот в чём: МЕГА по SPI включена рабом по отношению к внешней железке, и только на передачу. Передача идёт одним байтиком раз в сотню микросекунд. Байтики сложены в пакетики, пустое место между пакетиками заполняется единичками ($FF). Данные на передачу запихивается из прерывания. Алгоритм передачи пакета следующий: Пакет подготавливается (оформляется флагами и контрольной суммой), указатель устанавливается на начало пакета, и разрешается прерывания SPI. В прерывании берётся очередной байтик, пишется в SPDR, указатель увеличивается. Если записанный байтик не равен $FF, то производится выход из прерывания. Если равен $FF - разрешение прерывания SPI снимается (конец передачи), далее выход из прерывания. Всё бы и ничего, но: в "исходном" состоянии (то есть, когда в SPDR ничего не пишется, а внешняя железка тем не менее за SS дёргает, и SCK молотит непрерывно) SPI передаёт "нули". А мне нужнy ЕДИНИЦЫ. Поэтому приходится при окончании передачи не только снимать разрешение прерывания SPI, но и SPI enable тоже. Что в общем-то мне не шибко нравиЦЦа, и выглядит не кошерно. Идеи по про продолжение прерываний, с записью в SPDR единиц просьба не предлагать - процесс real-time, и лишние задержки на пустых прерываниях мне не надо. Реализация с наружи - это и так понятно. Суть не в этом, а вот в чём: добавить в управляющие регистры SPI (например SPIF) ещё один битик, который и будет определять, какое значение (0 или 1) будет "задвигаться" в сдвиговый регистр передатчика SPI. Был бы я силён в ихней мове, а бы такую маляву в ATMEL сам написал, но увы - кроме как "фейсом об тэйбл" в школе ничему не научили. Короче "полный Герасим". :-)) Не взялся бы ли кто из прилично владеющих "ридной мовой" написать такое послание конторе, дабы они по-возможности впендюрили сию фичу в свои дальнейшие модификации AVR? С меня пЫво. ;-))