This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

SPI status register unresponsive

Can anyone tell me why even setting SPIEN in MR, SPIENS bit is not set in STATUS register. I have enabled local loopback for testing in master mode only. I have used the at91lib library from atmel.
the code is as shown:-
here is the code in which i have enabled local loopback mode. I just want to test if data arrives in RDR or not.

void SPI_Enable(AT91S_SPI *spi)
{
    spi->SPI_CR = AT91C_SPI_SPIEN;
}

void SPI_Configure(AT91S_SPI *spi,
                          unsigned int id,
                          unsigned int configuration)
{
    AT91C_BASE_PMC->PMC_PCER = 1 << id;
    spi->SPI_CR = AT91C_SPI_SPIDIS;
    spi->SPI_CR = AT91C_SPI_SWRST;
    spi->SPI_MR = configuration;
}

void SPI_ConfigureNPCS(AT91S_SPI *spi,
                              unsigned int npcs)
{
    spi->SPI_CSR[npcs] = 0x2201AA0A;
}

void SPI_Write(AT91S_SPI *spi, unsigned short data)
{
        while ((spi->SPI_SR & AT91C_SPI_TXEMPTY) == 0);
        spi->SPI_TDR = data | 0xE << 16;
        while ((spi->SPI_SR & AT91C_SPI_TDRE) == 0);
}

unsigned short SPI_Read(AT91S_SPI *spi)
{
    while ((spi->SPI_SR & AT91C_SPI_RDRF) == 0);
    return spi->SPI_RDR & 0xFFFF;
}

int main()
{
unsigned short RxData;

volatile AT91PS_PIO pIOA = AT91C_BASE_PIOA;
volatile AT91PS_PMC pPMC = AT91C_BASE_PMC;
volatile AT91PS_SPI pSPI = AT91C_BASE_SPI;


//PMC
pPMC->PMC_MOR = 0x00000001;
pPMC->PMC_MCKR = 0x00000001;
pPMC->PMC_PCER = 1 << AT91C_ID_PIOA;   //0X00007800;AT91C_PIO_PA11 | AT91C_PIO_PA12 | AT91C_PIO_PA13 | AT91C_PIO_PA14;
pPMC->PMC_PCER = 1 << AT91C_ID_SPI;

pIOA->PIO_PDR = 0X00007800;//AT91C_PIO_PA11 | AT91C_PIO_PA12 | AT91C_PIO_PA13 | AT91C_PIO_PA14;
pIOA->PIO_OER = 0X00006800;//AT91C_PIO_PA11 | AT91C_PIO_PA13 | AT91C_PIO_PA14;
pIOA->PIO_ODR = 0X00001000;//AT91C_PIO_PA12;
pIOA->PIO_ASR = 0X00007800;//AT91C_PIO_PA11 | AT91C_PIO_PA12 | AT91C_PIO_PA13 | AT91C_PIO_PA14;
pIOA->PIO_BSR = 0;
pIOA->PIO_PPUER = AT91C_PA12_MISO|AT91C_PA13_MOSI|AT91C_PA14_SPCK;

SPI_Configure(pSPI,5,129);
SPI_ConfigureNPCS(pSPI,0);
SPI_Enable(pSPI);
SPI_Write(pSPI,2);
RxData=SPI_Read(pSPI);
return 1;
}

0