Код настройки: static uint8_t df_GetStatus() { uint8_t status;
SELECT(); status = DF_SPI_RW(StatusReg); status = DF_SPI_RW(0x00); DESELECT();
return status; } .... SPCR = 0; // Отключаем SPI чтобы сконфигурировать направление ножек DESELECT(); DDRB &= ~(DF_MISO_PB + DF_READY); DDRB |= DF_MOSI_PB + DF_SCK_PB + DF_SS_PB; // + DF_RESET_PB /* MOSI, SS, RESET, SCK - выходы */ SPCR = (1<<SPE) | (1<<MSTR) | (1<<CPHA) | (1<<CPOL); // Enable SPI in Master mode, mode 3 SPSR = (1<<SPI2X); Определяю тип памяти: chip_id = df_GetStatus() & 0x3C; Это нормально отрабатывает, а вот дальше через некоторое время вызов df_GetStatus(), виснет на строке while(!(SPSR & 0x80));, причем у меня несколько устройств, практически одинаковых, на некоторых работает, на некоторых нет. Сижу вторые сутки нет ни каких идей. Хотя бы в принципе, отчего может не устанавливаться SPSR? Либо в каких ситуациях он сбрасывается кроме записи в SPDR?
|