[an error occurred while processing this directive]
|
1) Для работы с SPI я пользуюсь 2-мя процедурами, с которыми до сих пор не было проблем:
// spiInit: divisor=4, ClockFace, ClockPolarity, Master,
// selects MSB first data transmission, enable SPI,
// disable Interrupt SPIvoid spiInit ( void )
{
adDESEL(); // DESELECT ADC
MOSI = 1;
MISO = 1;
SCK = 1;
SPCR = // Default divisor (/4)
bit2 | // Clock Phase.
bit3 | // Clock Polarity.
bit4 | // Master Select.
bit6; // SPI Enable.
}// spiRW(): SPI read/write function
//
// Usage:
// read:
// X = spiRW(0);
//
// write:
// spiRW(X);
//
// write + read:
// X = spiRW(Y);
//
uchar spiRW (uchar Byte)
{
MOSI = 1;
MISO = 1;
SCK = 1;
SPDR = Byte;
while ( (SPSR & SPIF_ ) == 0 );return( SPDR );
}
В k=100; .... k-- для "предотвращения зависания" нужды нет, если только уверен, что программа выполняется в правильном процессоре :)
2) Почему нельзя мониторить PIN готовности (MISO)
в промежутках между обменами по SPI не перепрограммируя SPCR ?
3) Честно говоря, сам я никогда не пробовал "в полете"
включать/выключать SPI, но сильно сомневаюсь,
что с этим есть какие-то проблемы.
Что значит фраза "на выходах SPI ничего не появляется" ?
Там 1-цы или нули ?
4) Исходные тексты в конференцию желательно "оформлять" внутри
HTML-тэгов:
[pre]
исходники на C
[/pre]
Фигурные скобки замени на угловые.
E-mail: info@telesys.ru