Проблема в следующем, я посылаю команду flash-у, шлю три байта адреса, а потом - тишина, прерывание не генерится, вопрос так и должно?
flash - serial - AT26DF atmel
//// на всякий случай - прога
void SPI_ISR (void) __irq // обработчик прерываний SPI (для внешней flash)
{
syst_fl.Irq();
S0SPINT = SPINT_reset; //Signal end of interrupt
VICVectAddr = NULL_REG; //Dummy write to signal end of interrupt
}
void CApuLibDataFlash::Irq() // реакция на прерывание по SPI
{
switch(status)
{
case (SPI_STAT1):
S0SPDR = AT26_write;
status = SPI_STAT2; //set next state
break;
case (SPI_STAT2): //Send Write Address
if( --SPI_byte_adr_count)
{
status = SPI_STAT2; //Set Next state
}
else
{
status = SPI_STAT3; //End condition
}
S0SPDR = adr_bufer[SPI_byte_adr_count]; //Send Address
break;
case (SPI_STAT3): //write data
S0SPDR = *SPI_buffer++;
if( --SPI_bytecount)
{
status = SPI_STAT3; //Set Next state
}
else
{
status = SPI_STAT4; //End condition
}
break;
case (SPI_STAT4): //End condition
S0SPDR = Dummy; //Need this dummy write for simulation
IOSET1 = IOCLR1_pull_low; //Pull Chipselect high
status = SPI_STAT7; //jump to null case
break;
case (SPI_STAT5):
if(( --SPI_byte_adr_count)-1)
{
status = SPI_STAT6; //Set Next state
}
else
{
status = SPI_STAT5; //End condition
}
S0SPDR = adr_bufer[SPI_byte_adr_count]; //Send Address
status = SPI_STAT6; //set next state
break;
case (SPI_STAT6):
*SPI_buffer = S0SPDR; //read data
S0SPDR = 0xFF; //Send Address //temp
SPI_buffer++;
if( --SPI_bytecount)
{
status = SPI_STAT6; //Set Next state
}
else
{
status = SPI_STAT7; //End condition
}
break;
case (SPI_STAT7) : //Null Case
lock = 0;
break;
case (SPI_STAT8): // передача адреса
if( ( --SPI_byte_adr_count)-1)
{
status = SPI_STAT8; //Set Next state
}
else
{
status = SPI_STAT7; //End condition
}
S0SPDR = adr_bufer[SPI_byte_adr_count]; //Send Address
break;
default :
break;
}
};