Skip to content

Commit

Permalink
Added a spi send block function
Browse files Browse the repository at this point in the history
  • Loading branch information
Perry Hung committed Apr 27, 2010
1 parent 434e223 commit 28feb18
Show file tree
Hide file tree
Showing 4 changed files with 34 additions and 4 deletions.
28 changes: 26 additions & 2 deletions libmaple/spi.c
Expand Up @@ -112,7 +112,7 @@ void spi_init(uint32 spi_num,
* @param spi_num which spi to send on
* @return data shifted back from the slave
*/
void spi_tx(uint32 spi_num, uint8 data) {
uint8 spi_tx_byte(uint32 spi_num, uint8 data) {
SPI *spi;

ASSERT(spi_num == 1 || spi_num == 2);
Expand All @@ -121,8 +121,32 @@ void spi_tx(uint32 spi_num, uint8 data) {

spi->DR = data;

while (!(spi->SR & SR_TXE) || (spi->SR & SR_BSY))
while (!(spi->SR & SR_TXE) ||
(spi->SR & SR_BSY))
;

return spi->DR;
}

uint8 spi_tx(uint32 spi_num, uint8 *buf, uint32 len) {
SPI *spi;
uint32 i;

ASSERT(spi_num == 1 || spi_num == 2);
spi = (spi_num == 1) ? (SPI*)SPI1_BASE : (SPI*)SPI2_BASE;

if (!len) {
return 0;
}

while (i < len) {
spi->DR = buf[len];
while (!(spi->SR & SR_TXE) ||
(spi->SR & SR_BSY))
;
i++;
}
return spi->DR;
}

static void spi_gpio_cfg(const spi_dev *dev) {
Expand Down
3 changes: 2 additions & 1 deletion libmaple/spi.h
Expand Up @@ -96,7 +96,8 @@ void spi_init(uint32 spi_num,
uint32 prescale,
uint32 endian,
uint32 mode);
void spi_tx(uint32 spi_num, uint8 data);
uint8 spi_tx_byte(uint32 spi_num, uint8 data);
uint8 spi_tx(uint32 spi_num, uint8 *buf, uint32 len);

static inline uint8 spi_rx(uint32 spi_num) {
SPI *spi;
Expand Down
6 changes: 5 additions & 1 deletion wirish/comm/HardwareSPI.cpp
Expand Up @@ -119,7 +119,11 @@ void HardwareSPI::begin(void) {
* @param data byte to send
*/
void HardwareSPI::send(uint8 data) {
spi_tx(this->spi_num, data);
spi_tx_byte(this->spi_num, data);
}

void HardwareSPI::send(uint8 *buf, uint32 len) {
spi_tx(this->spi_num, buf, len);
}


Expand Down
1 change: 1 addition & 0 deletions wirish/comm/HardwareSPI.h
Expand Up @@ -50,6 +50,7 @@ class HardwareSPI {
void begin(void);
void begin(SPIFrequency freq, uint32 endianness, uint32 mode);
void send(uint8 data);
void send(uint8 *data, uint32 length);
uint8 recv(void);
};

Expand Down

0 comments on commit 28feb18

Please sign in to comment.