static __INLINE uint32_t frame_get()
{
    uint32_t err_code;

    m_current_rx_packet_length = compute_current_packet_length(m_rx_packet_length,
                                                               m_accumulated_rx_packet_length);

    if (mp_rx_buffer)
    {
        err_code = spi_master_send_recv(SER_PHY_SPI_MASTER,
                                        NULL,
                                        0,
                                        &(mp_rx_buffer[m_accumulated_rx_packet_length]),
                                        m_current_rx_packet_length);
    }
    else
    {
        err_code = spi_master_send_recv(SER_PHY_SPI_MASTER,
                                        NULL,
                                        0,
                                        m_frame_buffer,
                                        m_current_rx_packet_length);
    }
    return err_code;
}
Ejemplo n.º 2
0
/**@brief Functions prepares buffers and starts data transfer.
 *
 * @param[in] p_tx_data     A pointer to a buffer TX.
 * @param[in] p_rx_data     A pointer to a buffer RX.
 * @param[in] len           A length of the data buffers.
 */
static void spi_send_recv(uint8_t * const p_tx_data,
                          uint8_t * const p_rx_data,
                          const uint16_t  len)
{
    // Initalize buffers.
    init_buffers(p_tx_data, p_rx_data, len);

    // Start transfer.
    uint32_t err_code = spi_master_send_recv(SPI_MASTER_HW, p_tx_data, len, p_rx_data, len);
    APP_ERROR_CHECK(err_code);
    nrf_delay_ms(DELAY_MS);
}
Ejemplo n.º 3
0
/**@brief Function for sending and receiving data.
 *
 * @param[in]   spi_master_hw_instance  SPI master instance.
 * @param[in]   p_tx_data               A pointer to a buffer TX.
 * @param[out]  p_rx_data               A pointer to a buffer RX.
 * @param[in]   len                     A length of the data buffers.
 */
static void spi_send_recv(const spi_master_hw_instance_t spi_master_hw_instance,
                          uint8_t * const                p_tx_data,
                          uint8_t * const                p_rx_data,
                          const uint16_t                 len)
{
    // Initalize buffers.
    init_buf(p_tx_data, p_rx_data, len);

    // Start transfer.
    uint32_t err_code =
        spi_master_send_recv(spi_master_hw_instance, p_tx_data, len, p_rx_data, len);
    APP_ERROR_CHECK(err_code);
}
static __INLINE uint32_t frame_send()
{
    uint32_t err_code;

    m_current_tx_packet_length = compute_current_packet_length(m_tx_packet_length,
                                                               m_accumulated_tx_packet_length);
    err_code                   =
        spi_master_send_recv(SER_PHY_SPI_MASTER,
                             &mp_tx_buffer[m_accumulated_tx_packet_length],
                             m_current_tx_packet_length,
                             NULL,
                             0);
    m_accumulated_tx_packet_length += m_current_tx_packet_length;
    return err_code;
}
Ejemplo n.º 5
0
static __INLINE uint32_t frame_get()
{
    uint32_t err_code;

    m_current_rx_packet_length = compute_current_packet_length(m_rx_packet_length,
                                                               m_accumulated_rx_packet_length);

    if (m_current_rx_packet_length < SER_PHY_SPI_5W_MTU_SIZE)
    {
        m_current_rx_packet_length++; //take into account guard byte when receiving
    }
    err_code = spi_master_send_recv(SER_PHY_SPI_MASTER,
                                    NULL,
                                    0,
                                    m_recv_buffer,
                                    m_current_rx_packet_length);
    return err_code;
}
static void send_single_packet()
{
    uint16_t crc;
    uint32_t data_offset;
    
    // Include the length
    spim_com_tx_transaction.fields.len_lsb  = (uint8_t)m_spim_com_tx_packet_length;
    spim_com_tx_transaction.fields.len_msb  = (uint8_t)(m_spim_com_tx_packet_length >> 8);
    
    data_offset = (uint32_t)m_spim_com_tx_packet_fragment_num * SPI_COM_PCK_DATA_SIZE;
    
    if((m_spim_com_tx_packet_length - data_offset) > SPI_COM_PCK_DATA_SIZE)
    {
        memcpy(spim_com_tx_transaction.fields.data, m_spim_com_tx_packet + data_offset, SPI_COM_PCK_DATA_SIZE);
    }
    else
    {
        memcpy(spim_com_tx_transaction.fields.data, m_spim_com_tx_packet + data_offset, m_spim_com_tx_packet_length - data_offset);
        memset(spim_com_tx_transaction.fields.data + (m_spim_com_tx_packet_length - data_offset), 0, SPI_COM_PCK_DATA_SIZE - (m_spim_com_tx_packet_length - data_offset));
    }
    
    // Calculate and include the CRC
    spim_com_tx_transaction.fields.crc_lsb  = 0;
    spim_com_tx_transaction.fields.crc_msb  = 0;
    crc = crc16_compute(spim_com_tx_transaction.data, SPI_COM_MAX_TRANSACTION_SIZE, 0);
    spim_com_tx_transaction.fields.crc_lsb  = (uint8_t)crc;
    spim_com_tx_transaction.fields.crc_msb  = (uint8_t)(crc >> 8);
       
    // Assert the RDY signal
    nrf_gpio_pin_clear(m_spim_com_pin_reqn);
    
    // Wait for the REQ line to be asserted by the slave
    while(nrf_gpio_pin_read(m_spim_com_pin_rdyn) != 0);
    
    // De-assert the RDY signal
    nrf_gpio_pin_set(m_spim_com_pin_reqn);

    m_spim_com_tx_packet_fragment_num++; 
    
    spi_master_send_recv(SPI_MASTER_0, spim_com_tx_transaction.data, SPI_COM_MAX_TRANSACTION_SIZE, spim_com_rx_transaction.data, SPI_COM_MAX_TRANSACTION_SIZE);  
}
static __INLINE uint32_t header_get()
{
    return spi_master_send_recv(SER_PHY_SPI_MASTER, NULL, 0, m_header_buffer, SER_PHY_HEADER_SIZE);
}
static __INLINE uint32_t header_send(const uint16_t length)
{
    uint8_t buf_len_size = uint16_encode(length, m_header_buffer);

    return spi_master_send_recv(SER_PHY_SPI_MASTER, m_header_buffer, buf_len_size, NULL, 0);
}
Ejemplo n.º 9
0
static __INLINE uint32_t header_get()
{
    return spi_master_send_recv(SER_PHY_SPI_MASTER, NULL, 0, m_len_buffer, SER_PHY_HEADER_SIZE + 1); //add 0 byte guard when receiving
}