From 763f9062444b08c06974cb4de2665303f09be2e9 Mon Sep 17 00:00:00 2001 From: bsongis Date: Sun, 22 Mar 2015 18:50:08 +0100 Subject: [PATCH] [Taranis X9E] Bluetooth driver --- radio/src/main_arm.cpp | 4 ++ .../src/targets/taranis/bluetooth_driver.cpp | 63 +++++++++++++++---- radio/src/targets/taranis/board_taranis.h | 1 + 3 files changed, 55 insertions(+), 13 deletions(-) diff --git a/radio/src/main_arm.cpp b/radio/src/main_arm.cpp index 09c7b209f..747160ab3 100644 --- a/radio/src/main_arm.cpp +++ b/radio/src/main_arm.cpp @@ -203,4 +203,8 @@ void perMain() topLcdRefreshEnd(); #endif +#if defined(REV9E) && !defined(SIMU) + bt_wakeup(); +#endif + } diff --git a/radio/src/targets/taranis/bluetooth_driver.cpp b/radio/src/targets/taranis/bluetooth_driver.cpp index 55f106fec..819c1c153 100755 --- a/radio/src/targets/taranis/bluetooth_driver.cpp +++ b/radio/src/targets/taranis/bluetooth_driver.cpp @@ -16,9 +16,16 @@ #define BT_UART_AF GPIO_AF_USART6 #define BT_UART_IRQn USART6_IRQn -#define BT_UART_GPIO_PORT GPIOG +#define BT_UART_GPIO_CLK_TXRX RCC_AHB1Periph_GPIOG +#define BT_UART_GPIO_PORT_TXRX GPIOG #define BT_UART_GPIO_PIN_TX GPIO_Pin_14 #define BT_UART_GPIO_PIN_RX GPIO_Pin_9 +#define BT_UART_GPIO_CLK_EN RCC_AHB1Periph_GPIOD +#define BT_UART_GPIO_PORT_EN GPIOD +#define BT_UART_GPIO_PIN_EN GPIO_Pin_11 +#define BT_UART_GPIO_CLK_BRTS RCC_AHB1Periph_GPIOB +#define BT_UART_GPIO_PORT_BRTS GPIOB +#define BT_UART_GPIO_PIN_BRTS GPIO_Pin_10 #define BT_UART_GPIO_TX_PinSource GPIO_PinSource14 #define BT_UART_GPIO_RX_PinSource GPIO_PinSource9 @@ -30,25 +37,34 @@ int bt_open() GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; - RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOG, ENABLE); + RCC_AHB1PeriphClockCmd(BT_UART_GPIO_CLK_TXRX, ENABLE); + RCC_AHB1PeriphClockCmd(BT_UART_GPIO_CLK_EN, ENABLE); + RCC_AHB1PeriphClockCmd(BT_UART_GPIO_CLK_BRTS, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART6, ENABLE); - GPIO_PinAFConfig(BT_UART_GPIO_PORT, BT_UART_GPIO_TX_PinSource, BT_UART_AF); - GPIO_PinAFConfig(BT_UART_GPIO_PORT, BT_UART_GPIO_RX_PinSource, BT_UART_AF); - - GPIO_InitStructure.GPIO_Pin = BT_UART_GPIO_PIN_TX; - GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; + GPIO_InitStructure.GPIO_Pin = BT_UART_GPIO_PIN_EN; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; - GPIO_Init(BT_UART_GPIO_PORT, &GPIO_InitStructure); - - GPIO_InitStructure.GPIO_Pin = BT_UART_GPIO_PIN_RX; - GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; + GPIO_Init(BT_UART_GPIO_PORT_EN, &GPIO_InitStructure); + + GPIO_InitStructure.GPIO_Pin = BT_UART_GPIO_PIN_BRTS; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; - GPIO_Init(BT_UART_GPIO_PORT, &GPIO_InitStructure); + GPIO_Init(BT_UART_GPIO_PORT_BRTS, &GPIO_InitStructure); + + GPIO_InitStructure.GPIO_Pin = BT_UART_GPIO_PIN_TX|BT_UART_GPIO_PIN_RX; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; + GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; + GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; + GPIO_Init(BT_UART_GPIO_PORT_TXRX, &GPIO_InitStructure); + + GPIO_PinAFConfig(BT_UART_GPIO_PORT_TXRX, BT_UART_GPIO_TX_PinSource, BT_UART_AF); + GPIO_PinAFConfig(BT_UART_GPIO_PORT_TXRX, BT_UART_GPIO_RX_PinSource, BT_UART_AF); USART_InitStructure.USART_BaudRate = 115200; USART_InitStructure.USART_Parity = USART_Parity_No; @@ -68,9 +84,14 @@ int bt_open() NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); + GPIO_SetBits(BT_UART_GPIO_PORT_BRTS, BT_UART_GPIO_PIN_BRTS); + GPIO_ResetBits(BT_UART_GPIO_PORT_EN, BT_UART_GPIO_PIN_EN); // open bluetooth + return 0; } +uint8_t bt_state = 0; + extern "C" void USART6_IRQHandler(void) { #if 1 @@ -90,6 +111,8 @@ extern "C" void USART6_IRQHandler(void) } else { USART_ITConfig(BT_UART, USART_IT_TXE, DISABLE); + GPIO_SetBits(BT_UART_GPIO_PORT_BRTS, BT_UART_GPIO_PIN_BRTS); + bt_state = 0; } } #endif @@ -101,10 +124,23 @@ int bt_write(const void *buffer, int len) for (int i=0; i