Quantcast
Channel: EngineerZone: Message List
Viewing all articles
Browse latest Browse all 22625

SPI SLAVE mode, communication problem

$
0
0

Hi, all!

 

We have problem with SPI2 slave mode on ADSP BF-707.

 

spi_slave.png

 

SPI is configured as CPOL = 0, CPHA = 0 in slave mode.

 

PROBLEM: On picture we can see, that the first byte was sent correctly (in the second transaction) but subsequent bytes are wrong (bits 7 and 6 are 0).

 

We have tried all possible modes, but had no luck.

Below is source code of SPI application.  It processes data from SPI Master that sends to BF-707 SPI FLASH command Fast Read (0xB) and Slave (BF-707) answers 0xFF. 

We have checked that everything is configured according to manual. Please, help us or brains will explode

The code of application listed below:

 

voidSPIStatusHandler(uint32_t iid, int32_t index, void* cb_param)

{

    uint32_t ilat = *pREG_SPI2_ILAT;

 

    *pREG_SPI2_ILAT_CLR = ilat;


   return iid;

}

 

 

uint32_tSPIRxHandler(uint32_t iid, int32_t index, void* cb_param)

{

 

    uint8_t RxData;

 

    RxData = (uint8_t)ADI_ANOM_16000030_READ32(pREG_SPI2_RFIFO);

 

    *pREG_SPI2_TFIFO = 0xFF;

 

    return iid;

}

 

voidSPI2_Init(void)

{

    /* init SPI2 pinmux */

        /* clear appropriate bits */

    *pREG_PORTB_MUX &=  ~(SPI2_CLK_PORTB_MSK_MUX | SPI2_MISO_PORTB_MSK_MUX | SPI2_MOSI_PORTB_MSK_MUX | SPI2_SS_PORTB_MSK_MUX);

    /* PORTx_MUX registers */

    *pREG_PORTB_MUX |= SPI2_CLK_PORTB_MUX | SPI2_MISO_PORTB_MUX | SPI2_MOSI_PORTB_MUX | SPI2_SS_PORTB_MUX;

 

    /* PORTx_FER registers */

    *pREG_PORTB_FER_SET = SPI2_CLK_PORTB_FER | SPI2_MISO_PORTB_FER | SPI2_MOSI_PORTB_FER | SPI2_SS_PORTB_FER;

 

    /* SPI2 initialization */

    *pREG_SPI2_CTL = ENUM_SPI_CTL_EN;

    *pREG_SPI2_CTL = ENUM_SPI_CTL_DIS; //reset RXFIFO, TXFIFO

    *pREG_SPI2_STAT = 0xFFFFFFFF;

 

    *pREG_SPI2_CTL = ENUM_SPI_CTL_MISO_EN | ENUM_SPI_CTL_HW_SSEL | ENUM_SPI_CTL_SLAVE;

 

    *pREG_SPI2_IMSK_SET = ENUM_SPI_STAT_TC_HI | ENUM_SPI_STAT_ROR_HI;

 

    *pREG_SPI2_RXCTL = ENUM_SPI_RXCTL_RDR_NE | ENUM_SPI_RXCTL_RX_EN;

 

    *pREG_SPI2_TXCTL = ENUM_SPI_TXCTL_ZERO | ENUM_SPI_TXCTL_TX_EN;

 

    int32_t index = adi_rtl_register_dispatched_handler (ADI_RTL_SEC_IID(45),

SPIStatusHandler, NULL);

 

    adi_sec_EnableSource(45, true);

    adi_sec_EnableInterrupt(45, true);

    adi_osal_ActivateHandler(ADI_RTL_SEC_IID(45));

 

    index = adi_rtl_register_dispatched_handler (ADI_RTL_SEC_IID(46),

SPITxHandler, NULL);

 

    adi_sec_EnableSource(46);

    adi_sec_EnableInterrupt(46, true);

    adi_osal_ActivateHandler(ADI_RTL_SEC_IID(46));

 

    index = adi_rtl_register_dispatched_handler (ADI_RTL_SEC_IID(47),

  SPIRxHandler, NULL);

 

    adi_sec_EnableSource(47, true);

    adi_sec_EnableInterrupt(47, true);

    adi_osal_ActivateHandler(ADI_RTL_SEC_IID(47));

 

  *pREG_SPI2_CTL |= ENUM_SPI_CTL_EN;

}


Viewing all articles
Browse latest Browse all 22625

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>