Вот такая незадача: 1. Мега32 2. SPI, работающий по прерыванию в Slave режиме и только на прием 3. на порту В (там же где и SPI) висит ЖКИ, т.е. порт В перенастраивается на вывод. 4. Данные по SPI идут пакетами с интервалом в 40 мс. Алгоритм работы таков: Принимаем пакет, как только пакет принят, ждем паузу. Если пауза достигла 1 мс, выводис принятую информацию на ЖКИ. 1 мс пауза означает, что началась пауза между посылками не менее 40 мс. Процедура вывода на ЖКИ занимает 15 мс. Начинается функция записи данных в ЖКИ так: char DDRBx = DDRB; char PORTBx = PORTB; Далее идет переопределение направления портов, вывод данных, всякая муть... Заканчивается PORTB = PORTBx; DDRB = DDRBx;
После первого же вывода на ЖКИ SPI перестает работать - т.е. прерывания по приему не генерятся. В АВР СТУДИО отлаживаю при помощи JTAG ICE. После приема первого пакета, после вывода на дисплей, когда SPI затыкается, останавливаю программу, и вижу, что настройки SPI (регистры) в порядке, Порт В - DDRB - все как и должно быть - (РВ7 - SCK- прием, РВ6 - MISO - передача, РВ5 - MOSI - прием, РВ4 - SS - прием), а вот PINB4 (он же SS) видится, как "1". Т.е. как будто кто то SS перевел в "1". Но, тестер на ноге микросхемы видит "0"!!! Сто это может означать? Бред Студио? Что то засело в PINB регистре, хотя на физическом контакте ничего нет? Но при этом связь не идет! Поделитесь своими соображениями ПЛЗ!
|