Program Listing for File spic-mtb.cpp

Return to documentation for file (src/framework/mtb/pal/spic-mtb.cpp)

#include "spic-mtb.hpp"

#if (TLE5012_FRAMEWORK == TLE5012_FRMWK_MTB)
#include "mtb_rtos.h"
#include <mtb.h>
#include <platform.h>

using namespace tle5012;

SPICMtb::SPICMtb() : csPin(MTB_GPIO_NONE), port(MTB_SPI_0)
{
    this->spi.port = port;
    this->spi.chip_select = csPin;
    this->spi.speed = 1000000;
    this->spi.mode = (SPI_CLOCK_RISING_EDGE | SPI_CLOCK_IDLE_LOW | SPI_NO_DMA | SPI_LSB_FIRST | SPI_CS_ACTIVE_LOW);
    this->spi.bits = 8;
}

SPICMtb::SPICMtb(mtb_spi_t port, mtb_gpio_t csPin)
{
    this->spi.port = port;
    this->spi.chip_select = csPin;
    this->spi.speed = 1000000;
    this->spi.mode = (SPI_CLOCK_RISING_EDGE | SPI_CLOCK_IDLE_LOW | SPI_NO_DMA | SPI_LSB_FIRST | SPI_CS_ACTIVE_LOW);
    this->spi.bits = 8;
}

SPICMtb::SPICMtb(mtb_spi_t port, mtb_gpio_t csPin, uint8_t speed, uint8_t mode, uint8_t bits)
{
    this->spi.port = port;
    this->spi.chip_select = csPin;
    this->spi.speed = speed;
    this->spi.mode = mode;
    this->spi.bits = bits;
}

SPICMtb::~SPICMtb()
{
    deinit();
}
SPICMtb::Error_t SPICMtb::init()
{
    this->segment.tx_buffer = sendBuffer;
    this->segment.rx_buffer = receiveBuffer;
    this->segment.length = 1;

    mtb_spi_init( &this->spi );
    return OK;
}

SPICMtb::Error_t SPICMtb::deinit()
{
    mtb_spi_deinit( &this->spi );
    return OK;
}

SPICMtb::Error_t SPICMtb::transfer(uint8_t send, uint8_t &received)
{
    sendBuffer[0] = send;
    receiveBuffer[0] = received;
    mtb_spi_transfer( &this->spi, &this->segment, 1);
    return OK;
}

SPICMtb::Error_t SPICMtb::transfer16(uint16_t send, uint16_t &received)
{
    sendBuffer[0] = (uint8_t)((send >> 8) & 0xFF);
    sendBuffer[1] = (uint8_t)(send & 0xFF);

    mtb_spi_transfer( &this->spi, &this->segment, 2);
    received = (uint16_t)(((uint16_t)receiveBuffer[0] << 8) | (receiveBuffer[1]));

    return OK;
}

#endif