diff options
Diffstat (limited to 'src/arch/msp430fr5969lp')
| -rw-r--r-- | src/arch/msp430fr5969lp/Makefile.inc | 4 | ||||
| -rw-r--r-- | src/arch/msp430fr5969lp/driver/spi.cc | 61 | ||||
| -rw-r--r-- | src/arch/msp430fr5969lp/driver/spi_b.cc | 26 | 
3 files changed, 21 insertions, 70 deletions
diff --git a/src/arch/msp430fr5969lp/Makefile.inc b/src/arch/msp430fr5969lp/Makefile.inc index 8480b71..1581c2d 100644 --- a/src/arch/msp430fr5969lp/Makefile.inc +++ b/src/arch/msp430fr5969lp/Makefile.inc @@ -24,8 +24,8 @@ ifneq ($(findstring i2c,${arch_drivers}), )  	TARGETS += src/arch/msp430fr5969lp/driver/i2c.cc  endif -ifneq ($(findstring spi,${arch_drivers}), ) -	TARGETS += src/arch/msp430fr5969lp/driver/spi.cc +ifneq ($(findstring spi_a1,${arch_drivers}), ) +	TARGETS += src/arch/msp430fr5969lp/driver/spi_a1.cc  endif  ifneq ($(findstring spi_b,${arch_drivers}), ) diff --git a/src/arch/msp430fr5969lp/driver/spi.cc b/src/arch/msp430fr5969lp/driver/spi.cc deleted file mode 100644 index 981bc53..0000000 --- a/src/arch/msp430fr5969lp/driver/spi.cc +++ /dev/null @@ -1,61 +0,0 @@ -#include "driver/spi.h" -#include <msp430.h> - -signed char SPI::setup() -{ -	/* UCA1CLK Pin 2.4 */ -	P2SEL0 &= ~BIT4; -	P2SEL1 |= BIT4; -	P2DIR |= BIT4; - -	/* UCA1SIMO Pin 2.5 */ -	P2SEL0 &= ~BIT5; -	P2SEL1 |= BIT5; -	P2DIR |= BIT5; - -	/* UCA1SOMI Pin 2.6 */ -	P2SEL0 &= ~BIT6; -	P2SEL1 |= BIT6; -	P2DIR &= ~BIT6; -	//P2REN |= BIT6; - -	UCA1CTLW0 |= UCSWRST; -	UCA1MCTLW = 0; // no modulation - -	UCA1CTLW0 = UCCKPH | UCMSB | UCMST | UCSYNC | UCMODE_0 | UCSSEL__SMCLK | UCSWRST; -	UCA1BRW = 15; // /16 -> 1MHz -	UCA1CTLW0 &= ~UCSWRST; -} - -signed char SPI::xmit(unsigned char tx_len, unsigned char *tx_buf, -		unsigned char rx_len, unsigned char *rx_buf) -{ -	volatile char rxbuf_cache; -	if (tx_len < 1) { -		return -1; -	} - -	UCA1IE &= ~(UCTXIE | UCRXIE); - -	while (UCA1STATW & UCBUSY) ; - -	rxbuf_cache = UCA1RXBUF; -	UCA1TXBUF = tx_buf[0]; - -	unsigned char tx_pos = 1; -	unsigned char rx_pos = 0; - -	while (tx_pos < tx_len || rx_pos < rx_len) { -		if ((tx_pos < tx_len) && (UCA1IF & UCTXIFG)) { -			UCBA1TXBUF = tx_buf[tx_pos++]; -		} -		if (UCA1IFG & UCRXIFG) { -			if (rx_pos < rx_len) { -				rx_buf[rx_pos] = UCA1RXBUF; -			} else { -				rxbuf_cache = UCA1RXBUF; -			} -		} -		rx_pos++; -	} -} diff --git a/src/arch/msp430fr5969lp/driver/spi_b.cc b/src/arch/msp430fr5969lp/driver/spi_b.cc index eafb94e..2eb3a79 100644 --- a/src/arch/msp430fr5969lp/driver/spi_b.cc +++ b/src/arch/msp430fr5969lp/driver/spi_b.cc @@ -1,8 +1,10 @@ -#include "driver/spi.h" +#include "driver/spi_b.h"  #include <msp430.h> -signed char SPI::setup() +void SPI::setup()  { +	UCB0CTLW0 |= UCSWRST; +  	/* UCB0CLK Pin 2.2 */  	P2SEL0 &= ~BIT2;  	P2SEL1 |= BIT2; @@ -24,19 +26,25 @@ signed char SPI::setup()  	UCB0CTLW0 &= ~UCSWRST;  } +static inline unsigned char clean_rxbuf() +{ +	return UCB0RXBUF; +} +  signed char SPI::xmit(unsigned char tx_len, unsigned char *tx_buf,  		unsigned char rx_len, unsigned char *rx_buf)  { -	volatile char rxbuf_cache;  	if (tx_len < 1) {  		return -1;  	} -	UCB0IE &= ~(UCTXIE | UCRXIE); -  	while (UCB0STATW & UCBUSY) ; -	rxbuf_cache = UCB0RXBUF; +	if (!(UCB0IFG & UCTXIFG)) { +		return -1; +	} + +	UCB0IFG &= ~UCRXIFG;  	UCB0TXBUF = tx_buf[0];  	unsigned char tx_pos = 1; @@ -50,9 +58,13 @@ signed char SPI::xmit(unsigned char tx_len, unsigned char *tx_buf,  			if (rx_pos < rx_len) {  				rx_buf[rx_pos] = UCB0RXBUF;  			} else { -				rxbuf_cache = UCB0RXBUF; +				UCB0IFG &= ~UCRXIFG;  			}  			rx_pos++;  		}  	} +	while (UCB0STATW & UCBUSY) ; +	return 0;  } + +SPI spi;  | 
