[FL-2769] SubGhz: out debug data to external pin #1665
Co-authored-by: あく <alleteam@gmail.com>
This commit is contained in:
		
							parent
							
								
									99a7d06f71
								
							
						
					
					
						commit
						1a4a6d4625
					
				| @ -17,6 +17,28 @@ | |||||||
| 
 | 
 | ||||||
| #define TAG "FuriHalSubGhz" | #define TAG "FuriHalSubGhz" | ||||||
| 
 | 
 | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Uncomment define to enable duplication of | ||||||
|  |  * IO GO0 CC1101 to an external comb. | ||||||
|  |  * Debug pin can be assigned | ||||||
|  |  *      gpio_ext_pc0 | ||||||
|  |  *      gpio_ext_pc1 | ||||||
|  |  *      gpio_ext_pc3 | ||||||
|  |  *      gpio_ext_pb2 | ||||||
|  |  *      gpio_ext_pb3 | ||||||
|  |  *      gpio_ext_pa4 | ||||||
|  |  *      gpio_ext_pa6 | ||||||
|  |  *      gpio_ext_pa7 | ||||||
|  |  * Attention this setting switches pin to output.  | ||||||
|  |  * Make sure it is not connected directly to power or ground | ||||||
|  |  */ | ||||||
|  |    | ||||||
|  | //#define SUBGHZ_DEBUG_CC1101_PIN gpio_ext_pa7
 | ||||||
|  | #ifdef SUBGHZ_DEBUG_CC1101_PIN | ||||||
|  | uint32_t subghz_debug_gpio_buff[2]; | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
| typedef struct { | typedef struct { | ||||||
|     volatile SubGhzState state; |     volatile SubGhzState state; | ||||||
|     volatile SubGhzRegulation regulation; |     volatile SubGhzRegulation regulation; | ||||||
| @ -361,6 +383,9 @@ static void furi_hal_subghz_capture_ISR() { | |||||||
|         LL_TIM_ClearFlag_CC1(TIM2); |         LL_TIM_ClearFlag_CC1(TIM2); | ||||||
|         furi_hal_subghz_capture_delta_duration = LL_TIM_IC_GetCaptureCH1(TIM2); |         furi_hal_subghz_capture_delta_duration = LL_TIM_IC_GetCaptureCH1(TIM2); | ||||||
|         if(furi_hal_subghz_capture_callback) { |         if(furi_hal_subghz_capture_callback) { | ||||||
|  | #ifdef SUBGHZ_DEBUG_CC1101_PIN | ||||||
|  |             furi_hal_gpio_write(&SUBGHZ_DEBUG_CC1101_PIN, false); | ||||||
|  | #endif | ||||||
|             furi_hal_subghz_capture_callback( |             furi_hal_subghz_capture_callback( | ||||||
|                 true, |                 true, | ||||||
|                 furi_hal_subghz_capture_delta_duration, |                 furi_hal_subghz_capture_delta_duration, | ||||||
| @ -371,6 +396,9 @@ static void furi_hal_subghz_capture_ISR() { | |||||||
|     if(LL_TIM_IsActiveFlag_CC2(TIM2)) { |     if(LL_TIM_IsActiveFlag_CC2(TIM2)) { | ||||||
|         LL_TIM_ClearFlag_CC2(TIM2); |         LL_TIM_ClearFlag_CC2(TIM2); | ||||||
|         if(furi_hal_subghz_capture_callback) { |         if(furi_hal_subghz_capture_callback) { | ||||||
|  | #ifdef SUBGHZ_DEBUG_CC1101_PIN | ||||||
|  |             furi_hal_gpio_write(&SUBGHZ_DEBUG_CC1101_PIN, true); | ||||||
|  | #endif | ||||||
|             furi_hal_subghz_capture_callback( |             furi_hal_subghz_capture_callback( | ||||||
|                 false, |                 false, | ||||||
|                 LL_TIM_IC_GetCaptureCH2(TIM2) - furi_hal_subghz_capture_delta_duration, |                 LL_TIM_IC_GetCaptureCH2(TIM2) - furi_hal_subghz_capture_delta_duration, | ||||||
| @ -432,6 +460,11 @@ void furi_hal_subghz_start_async_rx(FuriHalSubGhzCaptureCallback callback, void* | |||||||
|     LL_TIM_SetCounter(TIM2, 0); |     LL_TIM_SetCounter(TIM2, 0); | ||||||
|     LL_TIM_EnableCounter(TIM2); |     LL_TIM_EnableCounter(TIM2); | ||||||
| 
 | 
 | ||||||
|  | #ifdef SUBGHZ_DEBUG_CC1101_PIN | ||||||
|  |     furi_hal_gpio_init( | ||||||
|  |         &SUBGHZ_DEBUG_CC1101_PIN, GpioModeOutputPushPull, GpioPullNo, GpioSpeedVeryHigh); | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|     // Switch to RX
 |     // Switch to RX
 | ||||||
|     furi_hal_subghz_rx(); |     furi_hal_subghz_rx(); | ||||||
| } | } | ||||||
| @ -445,6 +478,11 @@ void furi_hal_subghz_stop_async_rx() { | |||||||
| 
 | 
 | ||||||
|     FURI_CRITICAL_ENTER(); |     FURI_CRITICAL_ENTER(); | ||||||
|     LL_TIM_DeInit(TIM2); |     LL_TIM_DeInit(TIM2); | ||||||
|  | 
 | ||||||
|  | #ifdef SUBGHZ_DEBUG_CC1101_PIN | ||||||
|  |     furi_hal_gpio_init(&SUBGHZ_DEBUG_CC1101_PIN, GpioModeAnalog, GpioPullNo, GpioSpeedLow); | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|     FURI_CRITICAL_EXIT(); |     FURI_CRITICAL_EXIT(); | ||||||
|     furi_hal_interrupt_set_isr(FuriHalInterruptIdTIM2, NULL, NULL); |     furi_hal_interrupt_set_isr(FuriHalInterruptIdTIM2, NULL, NULL); | ||||||
| 
 | 
 | ||||||
| @ -630,6 +668,32 @@ bool furi_hal_subghz_start_async_tx(FuriHalSubGhzAsyncTxCallback callback, void* | |||||||
| 
 | 
 | ||||||
|     LL_TIM_SetCounter(TIM2, 0); |     LL_TIM_SetCounter(TIM2, 0); | ||||||
|     LL_TIM_EnableCounter(TIM2); |     LL_TIM_EnableCounter(TIM2); | ||||||
|  | 
 | ||||||
|  | #ifdef SUBGHZ_DEBUG_CC1101_PIN | ||||||
|  |     furi_hal_gpio_init( | ||||||
|  |         &SUBGHZ_DEBUG_CC1101_PIN, GpioModeOutputPushPull, GpioPullNo, GpioSpeedVeryHigh); | ||||||
|  | 
 | ||||||
|  |     const GpioPin* gpio = &SUBGHZ_DEBUG_CC1101_PIN; | ||||||
|  |     subghz_debug_gpio_buff[0] = gpio->pin; | ||||||
|  |     subghz_debug_gpio_buff[1] = (uint32_t)gpio->pin << GPIO_NUMBER; | ||||||
|  | 
 | ||||||
|  |     dma_config.MemoryOrM2MDstAddress = (uint32_t)subghz_debug_gpio_buff; | ||||||
|  |     dma_config.PeriphOrM2MSrcAddress = (uint32_t) & (gpio->port->BSRR); | ||||||
|  |     dma_config.Direction = LL_DMA_DIRECTION_MEMORY_TO_PERIPH; | ||||||
|  |     dma_config.Mode = LL_DMA_MODE_CIRCULAR; | ||||||
|  |     dma_config.PeriphOrM2MSrcIncMode = LL_DMA_PERIPH_NOINCREMENT; | ||||||
|  |     dma_config.MemoryOrM2MDstIncMode = LL_DMA_MEMORY_INCREMENT; | ||||||
|  |     dma_config.PeriphOrM2MSrcDataSize = LL_DMA_PDATAALIGN_WORD; | ||||||
|  |     dma_config.MemoryOrM2MDstDataSize = LL_DMA_MDATAALIGN_WORD; | ||||||
|  |     dma_config.NbData = 2; | ||||||
|  |     dma_config.PeriphRequest = LL_DMAMUX_REQ_TIM2_UP; | ||||||
|  |     dma_config.Priority = LL_DMA_PRIORITY_VERYHIGH; | ||||||
|  |     LL_DMA_Init(DMA1, LL_DMA_CHANNEL_2, &dma_config); | ||||||
|  |     LL_DMA_SetDataLength(DMA1, LL_DMA_CHANNEL_2, 2); | ||||||
|  |     LL_DMA_EnableChannel(DMA1, LL_DMA_CHANNEL_2); | ||||||
|  | 
 | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|     return true; |     return true; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @ -661,6 +725,12 @@ void furi_hal_subghz_stop_async_tx() { | |||||||
| 
 | 
 | ||||||
|     // Deinitialize GPIO
 |     // Deinitialize GPIO
 | ||||||
|     furi_hal_gpio_init(&gpio_cc1101_g0, GpioModeAnalog, GpioPullNo, GpioSpeedLow); |     furi_hal_gpio_init(&gpio_cc1101_g0, GpioModeAnalog, GpioPullNo, GpioSpeedLow); | ||||||
|  | 
 | ||||||
|  | #ifdef SUBGHZ_DEBUG_CC1101_PIN | ||||||
|  |     LL_DMA_DisableChannel(DMA1, LL_DMA_CHANNEL_2); | ||||||
|  |     furi_hal_gpio_init(&SUBGHZ_DEBUG_CC1101_PIN, GpioModeAnalog, GpioPullNo, GpioSpeedLow); | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|     FURI_CRITICAL_EXIT(); |     FURI_CRITICAL_EXIT(); | ||||||
| 
 | 
 | ||||||
|     free(furi_hal_subghz_async_tx.buffer); |     free(furi_hal_subghz_async_tx.buffer); | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Skorpionm
						Skorpionm