Spi features

This commit is contained in:
lilian 2016-11-26 12:19:53 +01:00
parent 4d00566421
commit 71bce674a0
4 changed files with 233 additions and 0 deletions

View file

@ -27,6 +27,7 @@
#define _SPI1_FUNC IOMUX_FUNC(2)
#define _SPI_BUF_SIZE 64
#define __min(a,b) ((a > b) ? (b):(a))
static bool _minimal_pins[2] = {false, false};
@ -244,3 +245,36 @@ size_t spi_transfer(uint8_t bus, const void *out_data, void *in_data, size_t len
return len;
}
static void _repeat_send(uint8_t bus, uint32_t* dword,int32_t* repeats,spi_word_size_t size)
{
uint8_t i = 0 ;
while(*repeats > 0)
{
uint16_t bytes_to_transfer = __min(*repeats * size , _SPI_BUF_SIZE);
_wait(bus);
_set_size(bus,bytes_to_transfer);
for(i = 0; i < (bytes_to_transfer + 3) / 4;i++)
SPI(bus).W[i] = *dword; //need test with memcpy !
_start(bus);
*repeats -= (bytes_to_transfer / size ) ;
}
_wait(bus);
}
void spi_repeat_send_8(uint8_t bus, uint8_t data,int32_t repeats)
{
uint32_t dword = data << 24 | data << 16 | data << 8 | data;
_repeat_send(bus,&dword,&repeats, SPI_8BIT);
}
void spi_repeat_send_16(uint8_t bus, uint16_t data,int32_t repeats)
{
uint32_t dword = data << 16 | data;
_repeat_send(bus,&dword,&repeats, SPI_16BIT);
}
void spi_repeat_send_32(uint8_t bus, uint32_t data,int32_t repeats)
{
_repeat_send(bus,&data,&repeats, SPI_32BIT);
}