started work on implementation of missing features

spi
polymurph 3 years ago
parent 6214d67393
commit fa69bbdc87

@ -348,12 +348,12 @@ void spiSetInternalSlaveSelect(
uint8_t logic);
/*!
* @brief Transmits and receives on byte of data
* @brief Transmits and receives one byte of data in polling mode
* @param spi_hw_ch SPI hardware channel
* @param tx_data 'tx_data' The byte to be transmitted"
* @return The received data
*/
uint8_t spiTrx(
uint8_t spiTrx8BitPolling(
spiCH_t spi_hw_ch,
uint8_t tx_data);

@ -147,25 +147,24 @@ void spiSetInternalSlaveSelect(spiCH_t spi_hw_ch, uint8_t logic)
}
}
uint8_t spiTrx(spiCH_t spi_hw_ch, uint8_t tx_data)
uint8_t spiTrx8BitPolling(spiCH_t spi_hw_ch, uint8_t tx_data)
{
uint8_t data;
// example
// wait for BSY bit to Reset -> This will indicate that SPI is not busy in communication
while (((SPI1->SR)&(1<<7)));
while (((SPI_BASE->SR)&(1<<7)));
//SPI1->DR = tx_data; // send data
// from example code p.975 f
// this masking must be done. otherwise 16bits frame will be used
*(uint8_t*)&(SPI_BASE->DR) = tx_data;
// Wait for RXNE to set -> This will indicate that the Rx buffer is not empty
while (!((SPI1->SR) &(1<<0)));
data = SPI1->DR;
return data;
while (!((SPI_BASE->SR) &(SPI_SR_RXNE)));
data = SPI_BASE->DR;
return *(uint8_t*)&(SPI_BASE->DR);
// implementation 2. step
#if 0

@ -59,14 +59,16 @@ void spiInitMaster(spiCH_t spi_hw_ch,
spiSetFrameFormat(spi_hw_ch,frameFormat);
//SPI1->CR1 |= (1<<8) | (1<<9); // SSM=1, SSi=1 -> Software Slave Management
SPI_BASE->CR1 |= (1 << 8) | (1 << 9);
//SPI_BASE->CR1 |= (1 << 8) | (1 << 9);
//spiSetSoftwareSlaveManagement(spi_hw_ch,1);
//spiSetInternalSlaveSelect(spi_hw_ch,0);
//SPI1->CR1 &= ~(1<<10); // RXONLY = 0, full-duplex
SPI_BASE->CR1 &= ~(1<<10);
//spiSetComMode(spi_hw_ch, comMode);
//SPI_BASE->CR1 &= ~(1<<10);
spiSetComMode(spi_hw_ch, comMode);
//SPI1->CR1 &= ~(1<<11); // CRCL =0, 8 bit data
SPI_BASE->CR1 |= SPI_CR1_CRCL;
@ -114,10 +116,10 @@ uint8_t spiReadReg(spi_ch_t *spi_ch,
pinWrite(spi_ch->pin,0);
// send address of target register
spiTrx(spi_ch->spi, reg_address);
spiTrx8BitPolling(spi_ch->spi, reg_address);
// read from target register
buf = spiTrx(spi_ch->spi,0x00);
buf = spiTrx8BitPolling(spi_ch->spi,0x00);
// release target device
pinWrite(spi_ch->pin,1);
@ -135,11 +137,11 @@ void spiAutoReadBlock(spi_ch_t *spi_ch,
pinWrite(spi_ch->pin,0);
// send address of starting register
spiTrx(spi_ch->spi, start_address);
spiTrx8BitPolling(spi_ch->spi, start_address);
// read block from device
for(;i < buf_len;i++) {
buffer[i] = spiTrx(spi_ch->spi, 0x00);
buffer[i] = spiTrx8BitPolling(spi_ch->spi, 0x00);
}
// release target device
@ -153,10 +155,10 @@ void spiWriteReg(spi_ch_t *spi_ch,
pinWrite(spi_ch->pin,0);
// send address of target register
spiTrx(spi_ch->spi, reg_address);
spiTrx8BitPolling(spi_ch->spi, reg_address);
// write to target register
spiTrx(spi_ch->spi, data);
spiTrx8BitPolling(spi_ch->spi, data);
// release target device
pinWrite(spi_ch->pin,1);
@ -172,11 +174,11 @@ void spiWriteBlock(spi_ch_t *spi_ch,
pinWrite(spi_ch->pin,0);
// send address of starting register
spiTrx(spi_ch->spi, start_address);
spiTrx8BitPolling(spi_ch->spi, start_address);
// read block from device
for(;i < data_len;i++) {
spiTrx(spi_ch->spi, data[i]);
spiTrx8BitPolling(spi_ch->spi, data[i]);
}
// release target device
@ -187,7 +189,7 @@ void spiWrite8bit(spi_ch_t *spi_ch,
uint8_t bits)
{
pinWrite(spi_ch->pin,0);
spiTrx(spi_ch->spi,bits);
spiTrx8BitPolling(spi_ch->spi,bits);
pinWrite(spi_ch->pin,1);
}
@ -196,7 +198,7 @@ uint8_t spiReadWrite8bit(spi_ch_t *spi_ch,
{
uint8_t buf;
pinWrite(spi_ch->pin,0);
buf = spiTrx(spi_ch->spi,bits);
buf = spiTrx8BitPolling(spi_ch->spi,bits);
pinWrite(spi_ch->pin,1);
return buf;
}
@ -206,11 +208,11 @@ void spiWrite16bit(spi_ch_t *spi_ch,
{
pinWrite(spi_ch->pin,0);
if(spiGetFrameFormat(spi_ch->spi) == SPI_MSB_FIRST) {
spiTrx(spi_ch->spi,(uint8_t)(bits >> 8));
spiTrx(spi_ch->spi,(uint8_t)(bits));
spiTrx8BitPolling(spi_ch->spi,(uint8_t)(bits >> 8));
spiTrx8BitPolling(spi_ch->spi,(uint8_t)(bits));
} else {
spiTrx(spi_ch->spi,(uint8_t)(bits));
spiTrx(spi_ch->spi,(uint8_t)(bits >> 8));
spiTrx8BitPolling(spi_ch->spi,(uint8_t)(bits));
spiTrx8BitPolling(spi_ch->spi,(uint8_t)(bits >> 8));
}
pinWrite(spi_ch->pin,1);
}
@ -222,11 +224,11 @@ uint16_t spiReadWrite16bit(spi_ch_t *spi_ch,
pinWrite(spi_ch->pin,0);
if(spiGetFrameFormat(spi_ch->spi) == SPI_LSB_FIRST) {
buf = spiTrx(spi_ch->spi,(uint8_t)(bits >> 8)) << 8;
buf |= spiTrx(spi_ch->spi,(uint8_t)(bits));
buf = spiTrx8BitPolling(spi_ch->spi,(uint8_t)(bits >> 8)) << 8;
buf |= spiTrx8BitPolling(spi_ch->spi,(uint8_t)(bits));
} else {
buf = spiTrx(spi_ch->spi,(uint8_t)(bits));
buf |= spiTrx(spi_ch->spi,(uint8_t)(bits >> 8)) << 8;
buf = spiTrx8BitPolling(spi_ch->spi,(uint8_t)(bits));
buf |= spiTrx8BitPolling(spi_ch->spi,(uint8_t)(bits >> 8)) << 8;
}
pinWrite(spi_ch->pin,1);
@ -239,15 +241,15 @@ void spiWrite32bit(spi_ch_t *spi_ch,
pinWrite(spi_ch->pin,0);
if(spiGetFrameFormat(spi_ch->spi) == SPI_LSB_FIRST) {
spiTrx(spi_ch->spi,(uint8_t)(bits >> 24));
spiTrx(spi_ch->spi,(uint8_t)(bits >> 16));
spiTrx(spi_ch->spi,(uint8_t)(bits >> 8));
spiTrx(spi_ch->spi,(uint8_t)(bits));
spiTrx8BitPolling(spi_ch->spi,(uint8_t)(bits >> 24));
spiTrx8BitPolling(spi_ch->spi,(uint8_t)(bits >> 16));
spiTrx8BitPolling(spi_ch->spi,(uint8_t)(bits >> 8));
spiTrx8BitPolling(spi_ch->spi,(uint8_t)(bits));
} else {
spiTrx(spi_ch->spi,(uint8_t)(bits));
spiTrx(spi_ch->spi,(uint8_t)(bits >> 8));
spiTrx(spi_ch->spi,(uint8_t)(bits >> 16));
spiTrx(spi_ch->spi,(uint8_t)(bits >> 24));
spiTrx8BitPolling(spi_ch->spi,(uint8_t)(bits));
spiTrx8BitPolling(spi_ch->spi,(uint8_t)(bits >> 8));
spiTrx8BitPolling(spi_ch->spi,(uint8_t)(bits >> 16));
spiTrx8BitPolling(spi_ch->spi,(uint8_t)(bits >> 24));
}
pinWrite(spi_ch->pin,1);
}
@ -259,15 +261,15 @@ uint32_t spiReadWrite32bit(spi_ch_t *spi_ch,
pinWrite(spi_ch->pin,0);
if(spiGetFrameFormat(spi_ch->spi) == SPI_LSB_FIRST) {
buf = spiTrx(spi_ch->spi,(uint8_t)(bits >> 24)) << 24;
buf |= spiTrx(spi_ch->spi,(uint8_t)(bits >> 16)) << 16;
buf |= spiTrx(spi_ch->spi,(uint8_t)(bits >> 8)) << 8;
buf |= spiTrx(spi_ch->spi,(uint8_t)(bits));
buf = spiTrx8BitPolling(spi_ch->spi,(uint8_t)(bits >> 24)) << 24;
buf |= spiTrx8BitPolling(spi_ch->spi,(uint8_t)(bits >> 16)) << 16;
buf |= spiTrx8BitPolling(spi_ch->spi,(uint8_t)(bits >> 8)) << 8;
buf |= spiTrx8BitPolling(spi_ch->spi,(uint8_t)(bits));
} else {
buf = spiTrx(spi_ch->spi,(uint8_t)(bits));
buf |= spiTrx(spi_ch->spi,(uint8_t)(bits >> 8)) >> 8;
buf |= spiTrx(spi_ch->spi,(uint8_t)(bits >> 16)) >> 16;
buf |= spiTrx(spi_ch->spi,(uint8_t)(bits >> 24)) >> 24;
buf = spiTrx8BitPolling(spi_ch->spi,(uint8_t)(bits));
buf |= spiTrx8BitPolling(spi_ch->spi,(uint8_t)(bits >> 8)) >> 8;
buf |= spiTrx8BitPolling(spi_ch->spi,(uint8_t)(bits >> 16)) >> 16;
buf |= spiTrx8BitPolling(spi_ch->spi,(uint8_t)(bits >> 24)) >> 24;
}
pinWrite(spi_ch->pin,1);

Loading…
Cancel
Save