mirror of
https://github.com/RIOT-OS/RIOT.git
synced 2024-12-29 04:50:03 +01:00
stm32f1: SPI: implement speed setting properly
This commit is contained in:
parent
6b43b3f587
commit
0e79a01cd2
@ -16,6 +16,7 @@ export OBJCOPY = $(PREFIX)objcopy
|
||||
export TERMPROG = $(RIOTBASE)/dist/tools/pyterm/pyterm -p
|
||||
export FLASHER = $(RIOTBOARD)/$(BOARD)/dist/flash.sh
|
||||
export DEBUGGER = $(RIOTBOARD)/$(BOARD)/dist/debug.sh
|
||||
export RESET = $(RIOTBOARD)/$(BOARD)/dist/reset.sh
|
||||
|
||||
# define build specific options
|
||||
export CPU_USAGE = -mcpu=cortex-m3
|
||||
|
@ -55,32 +55,32 @@ uint8_t at86rf231_get_status(void)
|
||||
|
||||
void at86rf231_spi_select(void)
|
||||
{
|
||||
SPI_0_CS_PORT->BRR = (1 << SPI_0_CS_PIN);
|
||||
gpio_clear(SPI_0_CS_GPIO);
|
||||
}
|
||||
|
||||
void at86rf231_spi_unselect(void)
|
||||
{
|
||||
SPI_0_CS_PORT->BSRR = (1 << SPI_0_CS_PIN);
|
||||
gpio_set(SPI_0_CS_GPIO);
|
||||
}
|
||||
|
||||
void at86rf231_slp_set(void)
|
||||
{
|
||||
SPI_0_SLEEP_PORT->BSRR = (1 << SPI_0_SLEEP_PIN);
|
||||
gpio_set(SPI_0_SLEEP_GPIO);
|
||||
}
|
||||
|
||||
void at86rf231_slp_clear(void)
|
||||
{
|
||||
SPI_0_SLEEP_PORT->BRR = (1 << SPI_0_SLEEP_PIN);
|
||||
gpio_clear(SPI_0_SLEEP_GPIO);
|
||||
}
|
||||
|
||||
void at86rf231_rst_set(void)
|
||||
{
|
||||
SPI_0_RESET_PORT->BRR = (1 << SPI_0_RESET_PIN);
|
||||
gpio_clear(SPI_0_RESET_GPIO);
|
||||
}
|
||||
|
||||
void at86rf231_rst_clear(void)
|
||||
{
|
||||
SPI_0_RESET_PORT->BSRR = (1 << SPI_0_RESET_PIN);
|
||||
gpio_set(SPI_0_RESET_GPIO);
|
||||
}
|
||||
|
||||
void at86rf231_enable_interrupts(void)
|
||||
|
@ -275,7 +275,11 @@
|
||||
#define SPI_CPOL_LOW (0x0000)
|
||||
#define SPI_CPHA_1_EDGE (0x0000)
|
||||
#define SPI_NSS_SOFT (0x0200)
|
||||
#define SPI_BR_PRESCALER_8 (0x0010)
|
||||
#define SPI_BR_PRESCALER_16 (0x0018)
|
||||
#define SPI_BR_PRESCALER_64 (0x0028)
|
||||
#define SPI_BR_PRESCALER_128 (0x0030)
|
||||
#define SPI_BR_PRESCALER_256 (0x0038)
|
||||
#define SPI_1ST_BIT_MSB (0x0000)
|
||||
|
||||
#endif /* __PERIPH_CONF_H */
|
||||
|
@ -822,87 +822,85 @@ void gpio_set(gpio_t dev)
|
||||
switch (dev) {
|
||||
#ifdef GPIO_0_EN
|
||||
case GPIO_0:
|
||||
GPIO_0_PORT->ODR |= (1 << GPIO_0_PIN);
|
||||
GPIO_0_PORT->BSRR = (1 << GPIO_0_PIN);
|
||||
break;
|
||||
#endif
|
||||
#ifdef GPIO_1_EN
|
||||
case GPIO_1:
|
||||
GPIO_1_PORT->ODR |= (1 << GPIO_1_PIN);
|
||||
GPIO_1_PORT->BSRR = (1 << GPIO_1_PIN);
|
||||
break;
|
||||
#endif
|
||||
#ifdef GPIO_2_EN
|
||||
case GPIO_2:
|
||||
GPIO_2_PORT->ODR |= (1 << GPIO_2_PIN);
|
||||
GPIO_2_PORT->BSRR = (1 << GPIO_2_PIN);
|
||||
break;
|
||||
#endif
|
||||
#ifdef GPIO_3_EN
|
||||
case GPIO_3:
|
||||
GPIO_3_PORT->ODR |= (1 << GPIO_3_PIN);
|
||||
GPIO_3_PORT->BSRR = (1 << GPIO_3_PIN);
|
||||
break;
|
||||
#endif
|
||||
#ifdef GPIO_4_EN
|
||||
case GPIO_4:
|
||||
GPIO_4_PORT->ODR |= (1 << GPIO_4_PIN);
|
||||
GPIO_4_PORT->BSRR = (1 << GPIO_4_PIN);
|
||||
break;
|
||||
#endif
|
||||
#ifdef GPIO_5_EN
|
||||
case GPIO_5:
|
||||
GPIO_5_PORT->ODR |= (1 << GPIO_5_PIN);
|
||||
GPIO_5_PORT->BSRR = (1 << GPIO_5_PIN);
|
||||
break;
|
||||
#endif
|
||||
#ifdef GPIO_6_EN
|
||||
case GPIO_6:
|
||||
GPIO_6_PORT->ODR |= (1 << GPIO_6_PIN);
|
||||
GPIO_6_PORT->BSRR = (1 << GPIO_6_PIN);
|
||||
break;
|
||||
#endif
|
||||
#ifdef GPIO_7_EN
|
||||
case GPIO_7:
|
||||
GPIO_7_PORT->ODR |= (1 << GPIO_7_PIN);
|
||||
GPIO_7_PORT->BSRR = (1 << GPIO_7_PIN);
|
||||
break;
|
||||
#endif
|
||||
#ifdef GPIO_8_EN
|
||||
case GPIO_8:
|
||||
GPIO_8_PORT->ODR |= (1 << GPIO_8_PIN);
|
||||
GPIO_8_PORT->BSRR = (1 << GPIO_8_PIN);
|
||||
break;
|
||||
#endif
|
||||
#ifdef GPIO_9_EN
|
||||
case GPIO_9:
|
||||
GPIO_9_PORT->ODR |= (1 << GPIO_9_PIN);
|
||||
GPIO_9_PORT->BSRR = (1 << GPIO_9_PIN);
|
||||
break;
|
||||
#endif
|
||||
#ifdef GPIO_10_EN
|
||||
case GPIO_10:
|
||||
GPIO_10_PORT->ODR |= (1 << GPIO_10_PIN);
|
||||
GPIO_10_PORT->BSRR = (1 << GPIO_10_PIN);
|
||||
break;
|
||||
#endif
|
||||
#ifdef GPIO_11_EN
|
||||
case GPIO_11:
|
||||
GPIO_11_PORT->ODR |= (1 << GPIO_11_PIN);
|
||||
GPIO_11_PORT->BSRR = (1 << GPIO_11_PIN);
|
||||
break;
|
||||
#endif
|
||||
#ifdef GPIO_12_EN
|
||||
case GPIO_12:
|
||||
GPIO_12_PORT->ODR |= (1 << GPIO_12_PIN);
|
||||
GPIO_12_PORT->BSRR = (1 << GPIO_12_PIN);
|
||||
break;
|
||||
#endif
|
||||
#ifdef GPIO_13_EN
|
||||
case GPIO_13:
|
||||
GPIO_13_PORT->ODR |= (1 << GPIO_13_PIN);
|
||||
GPIO_13_PORT->BSRR = (1 << GPIO_13_PIN);
|
||||
break;
|
||||
#endif
|
||||
#ifdef GPIO_14_EN
|
||||
case GPIO_14:
|
||||
GPIO_14_PORT->ODR |= (1 << GPIO_14_PIN);
|
||||
GPIO_14_PORT->BSRR = (1 << GPIO_14_PIN);
|
||||
break;
|
||||
#endif
|
||||
#ifdef GPIO_15_EN
|
||||
case GPIO_15:
|
||||
GPIO_15_PORT->ODR |= (1 << GPIO_15_PIN);
|
||||
GPIO_15_PORT->BSRR = (1 << GPIO_15_PIN);
|
||||
break;
|
||||
#endif
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
void gpio_clear(gpio_t dev)
|
||||
@ -910,87 +908,85 @@ void gpio_clear(gpio_t dev)
|
||||
switch (dev) {
|
||||
#ifdef GPIO_0_EN
|
||||
case GPIO_0:
|
||||
GPIO_0_PORT->ODR &= ~(1 << GPIO_0_PIN);
|
||||
GPIO_0_PORT->BRR = (1 << GPIO_0_PIN);
|
||||
break;
|
||||
#endif
|
||||
#ifdef GPIO_1_EN
|
||||
case GPIO_1:
|
||||
GPIO_1_PORT->ODR &= ~(1 << GPIO_1_PIN);
|
||||
GPIO_1_PORT->BRR = (1 << GPIO_1_PIN);
|
||||
break;
|
||||
#endif
|
||||
#ifdef GPIO_2_EN
|
||||
case GPIO_2:
|
||||
GPIO_2_PORT->ODR &= ~(1 << GPIO_2_PIN);
|
||||
GPIO_2_PORT->BRR = (1 << GPIO_2_PIN);
|
||||
break;
|
||||
#endif
|
||||
#ifdef GPIO_3_EN
|
||||
case GPIO_3:
|
||||
GPIO_3_PORT->ODR &= ~(1 << GPIO_3_PIN);
|
||||
GPIO_3_PORT->BRR = (1 << GPIO_3_PIN);
|
||||
break;
|
||||
#endif
|
||||
#ifdef GPIO_4_EN
|
||||
case GPIO_4:
|
||||
GPIO_4_PORT->ODR &= ~(1 << GPIO_4_PIN);
|
||||
GPIO_4_PORT->BRR = (1 << GPIO_4_PIN);
|
||||
break;
|
||||
#endif
|
||||
#ifdef GPIO_5_EN
|
||||
case GPIO_5:
|
||||
GPIO_5_PORT->ODR &= ~(1 << GPIO_5_PIN);
|
||||
GPIO_5_PORT->BRR = (1 << GPIO_5_PIN);
|
||||
break;
|
||||
#endif
|
||||
#ifdef GPIO_6_EN
|
||||
case GPIO_6:
|
||||
GPIO_6_PORT->ODR &= ~(1 << GPIO_6_PIN);
|
||||
GPIO_6_PORT->BRR = (1 << GPIO_6_PIN);
|
||||
break;
|
||||
#endif
|
||||
#ifdef GPIO_7_EN
|
||||
case GPIO_7:
|
||||
GPIO_7_PORT->ODR &= ~(1 << GPIO_7_PIN);
|
||||
GPIO_7_PORT->BRR = (1 << GPIO_7_PIN);
|
||||
break;
|
||||
#endif
|
||||
#ifdef GPIO_8_EN
|
||||
case GPIO_8:
|
||||
GPIO_8_PORT->ODR &= ~(1 << GPIO_8_PIN);
|
||||
GPIO_8_PORT->BRR = (1 << GPIO_8_PIN);
|
||||
break;
|
||||
#endif
|
||||
#ifdef GPIO_9_EN
|
||||
case GPIO_9:
|
||||
GPIO_9_PORT->ODR &= ~(1 << GPIO_9_PIN);
|
||||
GPIO_9_PORT->BRR = (1 << GPIO_9_PIN);
|
||||
break;
|
||||
#endif
|
||||
#ifdef GPIO_10_EN
|
||||
case GPIO_10:
|
||||
GPIO_10_PORT->ODR &= ~(1 << GPIO_10_PIN);
|
||||
GPIO_10_PORT->BRR = (1 << GPIO_10_PIN);
|
||||
break;
|
||||
#endif
|
||||
#ifdef GPIO_11_EN
|
||||
case GPIO_11:
|
||||
GPIO_11_PORT->ODR &= ~(1 << GPIO_11_PIN);
|
||||
GPIO_11_PORT->BRR = (1 << GPIO_11_PIN);
|
||||
break;
|
||||
#endif
|
||||
#ifdef GPIO_12_EN
|
||||
case GPIO_12:
|
||||
GPIO_12_PORT->ODR &= ~(1 << GPIO_12_PIN);
|
||||
GPIO_12_PORT->BRR = (1 << GPIO_12_PIN);
|
||||
break;
|
||||
#endif
|
||||
#ifdef GPIO_13_EN
|
||||
case GPIO_13:
|
||||
GPIO_13_PORT->ODR &= ~(1 << GPIO_13_PIN);
|
||||
GPIO_13_PORT->BRR = (1 << GPIO_13_PIN);
|
||||
break;
|
||||
#endif
|
||||
#ifdef GPIO_14_EN
|
||||
case GPIO_14:
|
||||
GPIO_14_PORT->ODR &= ~(1 << GPIO_14_PIN);
|
||||
GPIO_14_PORT->BRR = (1 << GPIO_14_PIN);
|
||||
break;
|
||||
#endif
|
||||
#ifdef GPIO_15_EN
|
||||
case GPIO_15:
|
||||
GPIO_15_PORT->ODR &= ~(1 << GPIO_15_PIN);
|
||||
GPIO_15_PORT->BRR = (1 << GPIO_15_PIN);
|
||||
break;
|
||||
#endif
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
|
@ -27,10 +27,10 @@
|
||||
#define ENABLE_DEBUG (0)
|
||||
#include "debug.h"
|
||||
|
||||
/* TODO: parse and use conf and speed parameter */
|
||||
int spi_init_master(spi_t dev, spi_conf_t conf, spi_speed_t speed)
|
||||
{
|
||||
SPI_TypeDef *SPIx;
|
||||
uint16_t br_div = 0;
|
||||
|
||||
switch(dev) {
|
||||
#ifdef SPI_0_EN
|
||||
@ -43,20 +43,32 @@ int spi_init_master(spi_t dev, spi_conf_t conf, spi_speed_t speed)
|
||||
return -1;
|
||||
}
|
||||
|
||||
switch(speed) {
|
||||
case SPI_SPEED_10MHZ:
|
||||
br_div = SPI_BR_PRESCALER_8; /* actual speed: 9MHz */
|
||||
break;
|
||||
case SPI_SPEED_5MHZ:
|
||||
br_div = SPI_BR_PRESCALER_16; /* actual speed: 4.5MHz */
|
||||
break;
|
||||
case SPI_SPEED_1MHZ:
|
||||
br_div = SPI_BR_PRESCALER_64; /* actual speed: 1.1MHz */
|
||||
break;
|
||||
case SPI_SPEED_400KHZ:
|
||||
br_div = SPI_BR_PRESCALER_128; /* actual speed: 500kHz */
|
||||
break;
|
||||
case SPI_SPEED_100KHZ:
|
||||
br_div = SPI_BR_PRESCALER_256; /* actual speed: 200kHz */
|
||||
}
|
||||
|
||||
/* set up SPI */
|
||||
uint16_t tmp = SPIx->CR1;
|
||||
tmp &= 0x3040; /* reset value */
|
||||
SPIx->CR1 = SPI_2_LINES_FULL_DUPLEX \
|
||||
| SPI_MASTER_MODE \
|
||||
| SPI_DATA_SIZE_8B \
|
||||
| (conf & 0x3) \
|
||||
| SPI_NSS_SOFT \
|
||||
| br_div \
|
||||
| SPI_1ST_BIT_MSB;
|
||||
|
||||
tmp |= SPI_2_LINES_FULL_DUPLEX;
|
||||
tmp |= SPI_MASTER_MODE;
|
||||
tmp |= SPI_DATA_SIZE_8B;
|
||||
tmp |= SPI_CPOL_LOW;
|
||||
tmp |= SPI_CPHA_1_EDGE;
|
||||
tmp |= SPI_NSS_SOFT;
|
||||
tmp |= SPI_BR_PRESCALER_16;
|
||||
tmp |= SPI_1ST_BIT_MSB;
|
||||
|
||||
SPIx->CR1 = tmp;
|
||||
SPIx->I2SCFGR &= 0xF7FF; /* select SPI mode */
|
||||
|
||||
SPIx->CRCPR = 0x7; /* reset CRC polynomial */
|
||||
|
@ -29,8 +29,7 @@ QUIET ?= 1
|
||||
|
||||
BOARD_INSUFFICIENT_RAM := chronos msb-430h telosb wsn430-v1_3b wsn430-v1_4 z1 redbee-econotag
|
||||
BOARD_BLACKLIST := arduino-due mbed_lpc1768 msb-430 pttu udoo qemu-i386 \
|
||||
stm32f0discovery stm32f3discovery stm32f4discovery pca10000 pca10005 \
|
||||
iot-lab_M3
|
||||
stm32f0discovery stm32f3discovery stm32f4discovery pca10000 pca10005
|
||||
# mbed_lpc1768: see https://github.com/RIOT-OS/RIOT/issues/675
|
||||
# msb-430: see https://github.com/RIOT-OS/RIOT/issues/658
|
||||
# pttu: see https://github.com/RIOT-OS/RIOT/issues/659
|
||||
@ -40,7 +39,6 @@ BOARD_BLACKLIST := arduino-due mbed_lpc1768 msb-430 pttu udoo qemu-i386 \
|
||||
# stm32f4discovery: no transceiver, yet
|
||||
# pca10000: no transceiver, yet
|
||||
# pca10005: no transceiver, yet
|
||||
# iot-lab_M3: no RTC implementation, yet
|
||||
|
||||
# Modules to include:
|
||||
|
||||
|
@ -30,7 +30,7 @@ QUIET ?= 1
|
||||
BOARD_INSUFFICIENT_RAM := chronos msb-430h telosb wsn430-v1_3b wsn430-v1_4 z1 redbee-econotag
|
||||
BOARD_BLACKLIST := arduino-due mbed_lpc1768 msb-430 pttu udoo qemu-i386 \
|
||||
stm32f0discovery stm32f3discovery stm32f4discovery \
|
||||
pca10000 pca10005 iot-lab_M3
|
||||
pca10000 pca10005
|
||||
# mbed_lpc1768: see https://github.com/RIOT-OS/RIOT/issues/675
|
||||
# msb-430: see https://github.com/RIOT-OS/RIOT/issues/658
|
||||
# pttu: see https://github.com/RIOT-OS/RIOT/issues/659
|
||||
@ -39,7 +39,6 @@ BOARD_BLACKLIST := arduino-due mbed_lpc1768 msb-430 pttu udoo qemu-i386 \
|
||||
# stm32f3discovery: no transceiver, yet
|
||||
# stm32f4discovery: no transceiver, yet
|
||||
# pca10000/5: no transceiver, yet
|
||||
# iot-lab_M3: no RTC implementation, yet
|
||||
# Modules to include:
|
||||
|
||||
USEMODULE += posix
|
||||
|
Loading…
Reference in New Issue
Block a user