Sergio66 Задача - подключиться к данному контроллеру ATMEGой 32 на частоое 16 МГц и перехватывать данные для индикации и выводить их на ЖКИ. Вопрос: возможно ли для данной цели применить SPI модуль в SLAVE режиме. Понятно, что SS в данном случае придется принудительно занулить. Но возможна ли правильная работа модуля SPI без управляемого мастером SS. В доке сказано, что мастер высоким уровнем SS указывает на окончание посылки. В данном случае SS будет постоянно в 0.
Ответ: возможно. После принятия восьми бит возникнет флаг приема SPIF, ну и соответствующее прерывание.
Если примените нижеприведенный код для обработки прерываний от ведомого SPI, то в буфере у вас все время будут последние 4 байта, принятые от вашего устройства, основной программе останется только читать их. Синхронизация будет автоматическая, если ваше устройство будет включаться позже, чем атмега16. Расходы по времени на прием одного байта ничтожные - порядка 16 тактов.
Код
.dseg ;
buffer: .org 0x0100 ;
.cseg ;
spispy: in r10,SREG ;
in r16,SPDR ;
st x+,r16 ;
andi xl,0x03 ;
out SREG,r10 ;
reti ;
Сообщение отредактировал =GM= - Oct 20 2006, 11:00