diff --git a/radio/src/targets/taranis/bluetooth_driver.cpp b/radio/src/targets/taranis/bluetooth_driver.cpp index 819c1c153..60eb35c6d 100755 --- a/radio/src/targets/taranis/bluetooth_driver.cpp +++ b/radio/src/targets/taranis/bluetooth_driver.cpp @@ -12,23 +12,6 @@ #include "string.h" #include "../../fifo.h" -#define BT_UART USART6 -#define BT_UART_AF GPIO_AF_USART6 -#define BT_UART_IRQn USART6_IRQn - -#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 - Fifo<200> btTxFifo; Fifo<200> btRxFifo; @@ -37,34 +20,26 @@ int bt_open() GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; - 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_AHB1PeriphClockCmd(BT_RCC_AHB1Periph, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART6, ENABLE); - GPIO_InitStructure.GPIO_Pin = BT_UART_GPIO_PIN_EN; + GPIO_InitStructure.GPIO_Pin = BT_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_EN, &GPIO_InitStructure); + GPIO_Init(BT_GPIO_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_BRTS, &GPIO_InitStructure); + GPIO_InitStructure.GPIO_Pin = BT_GPIO_PIN_BRTS; + GPIO_Init(BT_GPIO_BRTS, &GPIO_InitStructure); - GPIO_InitStructure.GPIO_Pin = BT_UART_GPIO_PIN_TX|BT_UART_GPIO_PIN_RX; + GPIO_InitStructure.GPIO_Pin = BT_GPIO_PIN_TX|BT_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_Init(BT_GPIO_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); + GPIO_PinAFConfig(BT_GPIO_TXRX, BT_GPIO_PinSource_TX, BT_GPIO_AF); + GPIO_PinAFConfig(BT_GPIO_TXRX, BT_GPIO_PinSource_RX, BT_GPIO_AF); USART_InitStructure.USART_BaudRate = 115200; USART_InitStructure.USART_Parity = USART_Parity_No; @@ -72,20 +47,20 @@ int bt_open() USART_InitStructure.USART_WordLength = USART_WordLength_8b; USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; - USART_Init(BT_UART, &USART_InitStructure); + USART_Init(BT_USART, &USART_InitStructure); - USART_Cmd(BT_UART, ENABLE); - USART_ITConfig(BT_UART, USART_IT_RXNE, ENABLE); + USART_Cmd(BT_USART, ENABLE); + USART_ITConfig(BT_USART, USART_IT_RXNE, ENABLE); NVIC_InitTypeDef NVIC_InitStructure; - NVIC_InitStructure.NVIC_IRQChannel = BT_UART_IRQn; + NVIC_InitStructure.NVIC_IRQChannel = BT_USART_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 8; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; 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 + GPIO_SetBits(BT_GPIO_BRTS, BT_GPIO_PIN_BRTS); + GPIO_ResetBits(BT_GPIO_EN, BT_GPIO_PIN_EN); // open bluetooth return 0; } @@ -95,23 +70,23 @@ uint8_t bt_state = 0; extern "C" void USART6_IRQHandler(void) { #if 1 - if (USART_GetITStatus(BT_UART, USART_IT_RXNE) != RESET) { - USART_ClearITPendingBit(BT_UART, USART_IT_RXNE); - uint8_t byte = USART_ReceiveData(BT_UART); + if (USART_GetITStatus(BT_USART, USART_IT_RXNE) != RESET) { + USART_ClearITPendingBit(BT_USART, USART_IT_RXNE); + uint8_t byte = USART_ReceiveData(BT_USART); btRxFifo.push(byte); } #endif #if 1 - if (USART_GetITStatus(BT_UART, USART_IT_TXE) != RESET) { + if (USART_GetITStatus(BT_USART, USART_IT_TXE) != RESET) { uint8_t byte; bool result = btTxFifo.pop(byte); if (result) { - USART_SendData(BT_UART, byte); + USART_SendData(BT_USART, byte); } else { - USART_ITConfig(BT_UART, USART_IT_TXE, DISABLE); - GPIO_SetBits(BT_UART_GPIO_PORT_BRTS, BT_UART_GPIO_PIN_BRTS); + USART_ITConfig(BT_USART, USART_IT_TXE, DISABLE); + GPIO_SetBits(BT_GPIO_BRTS, BT_GPIO_PIN_BRTS); bt_state = 0; } } @@ -131,11 +106,11 @@ void bt_wakeup(void) { if (bt_state < 2 && !btTxFifo.empty()) { if (bt_state == 0) { - GPIO_ResetBits(BT_UART_GPIO_PORT_BRTS, BT_UART_GPIO_PIN_BRTS); + GPIO_ResetBits(BT_GPIO_BRTS, BT_GPIO_PIN_BRTS); bt_state = 1; } else { - USART_ITConfig(BT_UART, USART_IT_TXE, ENABLE); + USART_ITConfig(BT_USART, USART_IT_TXE, ENABLE); bt_state = 2; } } @@ -157,6 +132,6 @@ int bt_read(void *buffer, int len) int bt_close() { - GPIO_SetBits(BT_UART_GPIO_PORT_EN, BT_UART_GPIO_PIN_EN); // close bluetooth + GPIO_SetBits(BT_GPIO_EN, BT_GPIO_PIN_EN); // close bluetooth return 0; } diff --git a/radio/src/targets/taranis/hal.h b/radio/src/targets/taranis/hal.h index cb71133b8..07f1af07f 100644 --- a/radio/src/targets/taranis/hal.h +++ b/radio/src/targets/taranis/hal.h @@ -538,6 +538,23 @@ #define TOPLCD_GPIO_PIN_BL GPIO_Pin_2 #endif +// Bluetooth on X9E +#if defined(REV9E) + #define BT_USART USART6 + #define BT_GPIO_AF GPIO_AF_USART6 + #define BT_USART_IRQn USART6_IRQn + #define BT_RCC_AHB1Periph (RCC_AHB1Periph_GPIOG | RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_GPIOB) + #define BT_GPIO_TXRX GPIOG + #define BT_GPIO_PIN_TX GPIO_Pin_14 // PG.14 + #define BT_GPIO_PIN_RX GPIO_Pin_9 // PG.09 + #define BT_GPIO_EN GPIOD + #define BT_GPIO_PIN_EN GPIO_Pin_11 // PD.11 + #define BT_GPIO_BRTS GPIOB + #define BT_GPIO_PIN_BRTS GPIO_Pin_10 + #define BT_GPIO_PinSource_TX GPIO_PinSource14 + #define BT_GPIO_PinSource_RX GPIO_PinSource9 +#endif + // 5ms Interrupt #define INTERRUPT_5MS_APB1Periph RCC_APB1Periph_TIM14 #define INTERRUPT_5MS_TIMER TIM14