diff options
| author | Keith Packard <keithp@keithp.com> | 2013-08-28 22:52:58 -0600 | 
|---|---|---|
| committer | Keith Packard <keithp@keithp.com> | 2013-08-28 22:52:58 -0600 | 
| commit | dcc51bb18985c24fa35bce0dd42ea3d847b960bf (patch) | |
| tree | 652c06c900b01b3c43f674e0f121109cc54b1120 /src/cc1111/ao_arch_funcs.h | |
| parent | 7c82acc1c1c5b7b4da7c7ecb3b2fd90140e4c703 (diff) | |
| parent | a73b02518fcbc9fc0807ed8e141d3a06e8ad8214 (diff) | |
Merge remote-tracking branch 'origin/telemini'
Signed-off-by: Keith Packard <keithp@keithp.com>
Conflicts:
	src/core/ao_telemetry.c
	src/core/ao_telemetry.h
Added both Mini and Metrum telemetry defines
Diffstat (limited to 'src/cc1111/ao_arch_funcs.h')
| -rw-r--r-- | src/cc1111/ao_arch_funcs.h | 83 | 
1 files changed, 62 insertions, 21 deletions
| diff --git a/src/cc1111/ao_arch_funcs.h b/src/cc1111/ao_arch_funcs.h index 8f1cc094..ea340dfd 100644 --- a/src/cc1111/ao_arch_funcs.h +++ b/src/cc1111/ao_arch_funcs.h @@ -19,46 +19,74 @@   * ao_spi.c   */ -extern __xdata uint8_t	ao_spi_mutex; +#if !HAS_SPI_0 && !HAS_SPI_1 +#define HAS_SPI_0	1 +#define SPI_0_ALT_2	1 +#endif + +#if HAS_SPI_0 && HAS_SPI_1 +#define MULTI_SPI	1 +#define N_SPI		2 +#else +#define MULTI_SPI	0 +#define N_SPI		1 +#endif + +extern __xdata uint8_t	ao_spi_mutex[N_SPI]; + +#if MULTI_SPI +#define ao_spi_get(bus)	ao_mutex_get(&ao_spi_mutex[bus]) +#define ao_spi_put(bus)	ao_mutex_put(&ao_spi_mutex[bus]) +#else +#define ao_spi_get(bus)	ao_mutex_get(&ao_spi_mutex[0]) +#define ao_spi_put(bus)	ao_mutex_put(&ao_spi_mutex[0]) +#endif  #define AO_SPI_SPEED_FAST	17  #define AO_SPI_SPEED_200kHz	13 -#define ao_spi_set_speed(speed) (U0GCR = (UxGCR_CPOL_NEGATIVE |		\ -					  UxGCR_CPHA_FIRST_EDGE |	\ -					  UxGCR_ORDER_MSB |		\ -					  ((speed) << UxGCR_BAUD_E_SHIFT))) +#if MULTI_SPI +#define ao_spi_set_speed(bus,speed) (*(bus ? &U1GCR : &U0GCR) =(UxGCR_CPOL_NEGATIVE | \ +								UxGCR_CPHA_FIRST_EDGE |	\ +								UxGCR_ORDER_MSB | \ +								((speed) << UxGCR_BAUD_E_SHIFT))) +#else +#define ao_spi_set_speed(bus,speed) (U0GCR = (UxGCR_CPOL_NEGATIVE |	\ +					      UxGCR_CPHA_FIRST_EDGE |	\ +					      UxGCR_ORDER_MSB |		\ +					      ((speed) << UxGCR_BAUD_E_SHIFT))) +#endif  #define ao_spi_get_slave(bus) do {			\ -		ao_mutex_get(&ao_spi_mutex);		\ -		ao_spi_set_speed(AO_SPI_SPEED_FAST);	\ +		ao_spi_get(bus);			\ +		ao_spi_set_speed(bus,AO_SPI_SPEED_FAST);	\  	} while (0)  #define ao_spi_put_slave(bus) do {		\ -		ao_mutex_put(&ao_spi_mutex);	\ +		ao_spi_put(bus);		\  	} while (0)  #define ao_spi_get_mask(reg,mask,bus,speed) do {	\ -		ao_mutex_get(&ao_spi_mutex);		\ -		ao_spi_set_speed(speed);		\ +		ao_spi_get(bus);			\ +		ao_spi_set_speed(bus,speed);		\  		(reg) &= ~(mask);			\  	} while (0)  #define ao_spi_put_mask(reg,mask,bus) do {		\  	(reg) |= (mask); \ -	ao_mutex_put(&ao_spi_mutex); \ +	ao_spi_put(bus); \  	} while (0)  #define ao_spi_get_bit(reg,bit,pin,bus,speed) do {	\ -		ao_mutex_get(&ao_spi_mutex);	\ -		ao_spi_set_speed(speed);	\ -		pin = 0;			\ +		ao_spi_get(bus);			\ +		ao_spi_set_speed(bus,speed);		\ +		pin = 0;				\  	} while (0)  #define ao_spi_put_bit(reg,bit,pin,bus) do {	\  		pin = 1;			\ -		ao_mutex_put(&ao_spi_mutex);	\ +		ao_spi_put(bus);		\  	} while (0) @@ -68,6 +96,13 @@ extern __xdata uint8_t	ao_spi_mutex;   * from chip select low to chip select high   */ +#if MULTI_SPI +void +ao_spi_send(void __xdata *block, uint16_t len, uint8_t bus) __reentrant; + +void +ao_spi_recv(void __xdata *block, uint16_t len, uint8_t bus) __reentrant; +#else  void  ao_spi_send_bus(void __xdata *block, uint16_t len) __reentrant; @@ -76,6 +111,7 @@ ao_spi_recv_bus(void __xdata *block, uint16_t len) __reentrant;  #define ao_spi_send(block, len, bus) ao_spi_send_bus(block, len)  #define ao_spi_recv(block, len, bus) ao_spi_recv_bus(block, len) +#endif  #if AO_SPI_SLAVE  void @@ -88,10 +124,15 @@ ao_spi_recv_wait(void);  void  ao_spi_init(void); -#define ao_spi_init_cs(port, mask) do {		\ -		SPI_CS_PORT |= mask;		\ -		SPI_CS_DIR |= mask;		\ -		SPI_CS_SEL &= ~mask;		\ +#define token_paster(x,y)	x ## y +#define token_paster3(x,y,z)	x ## y ## z +#define token_evaluator(x,y)	token_paster(x,y) +#define token_evaluator3(x,y,z)	token_paster3(x,y,z) + +#define ao_spi_init_cs(port, mask) do {			\ +		port |= mask;				\ +		token_evaluator(port,DIR) |= mask;	\ +		token_evaluator(port,SEL) &= ~mask;	\  	} while (0)  #define cc1111_enable_output(port,dir,sel,pin,bit,v) do {	\ @@ -102,7 +143,7 @@ ao_spi_init(void);  #define disable_unreachable	_Pragma("disable_warning 126") -#define token_paster(x,y)	x ## y -#define token_evaluator(x,y)	token_paster(x,y)  #define ao_enable_output(port,bit,pin,v) cc1111_enable_output(port,token_evaluator(port,DIR), token_evaluator(port,SEL), pin, bit, v)  #define ao_gpio_set(port, bit, pin, v) ((pin) = (v)) +#define ao_gpio_get(port, bit, pin) (pin) + | 
