enable etm trace support for h743 eval
This commit is contained in:
		| @@ -166,6 +166,11 @@ function(family_configure_common TARGET) | |||||||
|     endif () |     endif () | ||||||
|   endif () |   endif () | ||||||
|  |  | ||||||
|  |   # ETM Trace | ||||||
|  |   if (TRACE_ETM STREQUAL "1") | ||||||
|  |     target_compile_definitions(${TARGET} PUBLIC TRACE_ETM) | ||||||
|  |   endif () | ||||||
|  |  | ||||||
| endfunction() | endfunction() | ||||||
|  |  | ||||||
|  |  | ||||||
|   | |||||||
| @@ -85,41 +85,60 @@ static inline void board_stm32h7_clock_init(void) | |||||||
|   RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; |   RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; | ||||||
|   RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; |   RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; | ||||||
|  |  | ||||||
|   /* PLL1 for System Clock */ |   // PLL1 for System Clock | ||||||
|  | #ifdef TRACE_ETM | ||||||
|  |   // From H743 eval board manual | ||||||
|  |   // - ETM can only work at 50 MHz clock by default because ETM signals are shared with other peripherals. If better | ||||||
|  |   //   performance of ETM is required (84 MHz/98 MHz), R217, R230, R231, R234, R236, SB2, SB5, SB8, SB11, | ||||||
|  |   //   SB42, SB57 must be removed to reduce the stub on ETM signals. In this configuration SAI and PDM are not | ||||||
|  |   //   functional and NOR Flash and the address of SRAM are limited on A18. | ||||||
|  |   // - ETM trace function would be abnormal as SAI_SDB share the same pins with TRACE_D0, and TRACE_D0 | ||||||
|  |   //   would be forced high by SAI_SDB. When using ETM trace it is necessary to set ADCDAT1 pin (SAI_SDB signal | ||||||
|  |   //   of the STM32) of audio codec WM8994ECS/R (U22) by software to be tri-state. | ||||||
|  |  | ||||||
|  |   // Since Trace CLK = PLL1 / 3 --> max PLL1 clock is 150Mhz | ||||||
|  |   RCC_OscInitStruct.PLL.PLLM = 2; | ||||||
|  |   RCC_OscInitStruct.PLL.PLLN = 24; | ||||||
|  |   RCC_OscInitStruct.PLL.PLLP = 2; | ||||||
|  |   RCC_OscInitStruct.PLL.PLLQ = 4; | ||||||
|  |   RCC_OscInitStruct.PLL.PLLR = 2; | ||||||
|  |   RCC_OscInitStruct.PLL.PLLFRACN = 0; | ||||||
|  | #else | ||||||
|  |   // Set PLL1 to 400Mhz | ||||||
|   RCC_OscInitStruct.PLL.PLLM = 5; |   RCC_OscInitStruct.PLL.PLLM = 5; | ||||||
|   RCC_OscInitStruct.PLL.PLLN = 160; |   RCC_OscInitStruct.PLL.PLLN = 160; | ||||||
|   RCC_OscInitStruct.PLL.PLLFRACN = 0; |  | ||||||
|   RCC_OscInitStruct.PLL.PLLP = 2; |   RCC_OscInitStruct.PLL.PLLP = 2; | ||||||
|   RCC_OscInitStruct.PLL.PLLR = 2; |   RCC_OscInitStruct.PLL.PLLR = 2; | ||||||
|   RCC_OscInitStruct.PLL.PLLQ = 4; |   RCC_OscInitStruct.PLL.PLLQ = 4; | ||||||
|  | #endif | ||||||
|   RCC_OscInitStruct.PLL.PLLVCOSEL = RCC_PLL1VCOMEDIUM; |   RCC_OscInitStruct.PLL.PLLVCOSEL = RCC_PLL1VCOMEDIUM; | ||||||
|   RCC_OscInitStruct.PLL.PLLRGE = RCC_PLL1VCIRANGE_2; |   RCC_OscInitStruct.PLL.PLLRGE = RCC_PLL1VCIRANGE_2; | ||||||
|   HAL_RCC_OscConfig(&RCC_OscInitStruct); |   HAL_RCC_OscConfig(&RCC_OscInitStruct); | ||||||
|  |  | ||||||
|   /* PLL3 for USB Clock */ |  | ||||||
|   PeriphClkInitStruct.PLL3.PLL3M = 25; |  | ||||||
|   PeriphClkInitStruct.PLL3.PLL3N = 336; |  | ||||||
|   PeriphClkInitStruct.PLL3.PLL3FRACN = 0; |  | ||||||
|   PeriphClkInitStruct.PLL3.PLL3P = 2; |  | ||||||
|   PeriphClkInitStruct.PLL3.PLL3R = 2; |  | ||||||
|   PeriphClkInitStruct.PLL3.PLL3Q = 7; |  | ||||||
|  |  | ||||||
|   PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_USB; |   /* Select PLL as system clock source and configure bus clocks dividers */ | ||||||
|   PeriphClkInitStruct.UsbClockSelection = RCC_USBCLKSOURCE_PLL3; |   RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_PCLK1 | | ||||||
|   HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct); |       RCC_CLOCKTYPE_PCLK2 | RCC_CLOCKTYPE_D1PCLK1 | RCC_CLOCKTYPE_D3PCLK1; | ||||||
|  |  | ||||||
|   /* Select PLL as system clock source and configure  bus clocks dividers */ |  | ||||||
|   RCC_ClkInitStruct.ClockType = (RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_D1PCLK1 | RCC_CLOCKTYPE_PCLK1 | \ |  | ||||||
|   RCC_CLOCKTYPE_PCLK2  | RCC_CLOCKTYPE_D3PCLK1); |  | ||||||
|  |  | ||||||
|   RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; |   RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; | ||||||
|   RCC_ClkInitStruct.SYSCLKDivider = RCC_SYSCLK_DIV1; |   RCC_ClkInitStruct.SYSCLKDivider = RCC_SYSCLK_DIV1; | ||||||
|   RCC_ClkInitStruct.AHBCLKDivider = RCC_HCLK_DIV2; |   RCC_ClkInitStruct.AHBCLKDivider = RCC_HCLK_DIV2; | ||||||
|   RCC_ClkInitStruct.APB1CLKDivider = RCC_APB1_DIV2; |   RCC_ClkInitStruct.APB1CLKDivider = RCC_APB1_DIV2; | ||||||
|   RCC_ClkInitStruct.APB2CLKDivider = RCC_APB2_DIV2; |   RCC_ClkInitStruct.APB2CLKDivider = RCC_APB2_DIV2; | ||||||
|   RCC_ClkInitStruct.APB3CLKDivider = RCC_APB3_DIV1; |   RCC_ClkInitStruct.APB3CLKDivider = RCC_APB3_DIV2; | ||||||
|   HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_4); |   HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2); | ||||||
|  |  | ||||||
|  |   /* PLL3 for USB Clock */ | ||||||
|  |   PeriphClkInitStruct.PLL3.PLL3M = 25; | ||||||
|  |   PeriphClkInitStruct.PLL3.PLL3N = 336; | ||||||
|  |   PeriphClkInitStruct.PLL3.PLL3FRACN = 0; | ||||||
|  |   PeriphClkInitStruct.PLL3.PLL3P = 2; | ||||||
|  |   PeriphClkInitStruct.PLL3.PLL3Q = 7; | ||||||
|  |   PeriphClkInitStruct.PLL3.PLL3R = 2; | ||||||
|  |  | ||||||
|  |   PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_USB; | ||||||
|  |   PeriphClkInitStruct.UsbClockSelection = RCC_USBCLKSOURCE_PLL3; | ||||||
|  |   HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct); | ||||||
|  |  | ||||||
|   /*activate CSI clock mondatory for I/O Compensation Cell*/ |   /*activate CSI clock mondatory for I/O Compensation Cell*/ | ||||||
|   __HAL_RCC_CSI_ENABLE() ; |   __HAL_RCC_CSI_ENABLE() ; | ||||||
|   | |||||||
							
								
								
									
										1125
									
								
								hw/bsp/stm32h7/boards/stm32h743eval/cubemx/stm32h743eval.ioc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1125
									
								
								hw/bsp/stm32h7/boards/stm32h743eval/cubemx/stm32h743eval.ioc
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										249
									
								
								hw/bsp/stm32h7/boards/stm32h743eval/ozone/h743eval.jdebug
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										249
									
								
								hw/bsp/stm32h7/boards/stm32h743eval/ozone/h743eval.jdebug
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,249 @@ | |||||||
|  |  | ||||||
|  | /********************************************************************* | ||||||
|  | * | ||||||
|  | *       OnProjectLoad | ||||||
|  | * | ||||||
|  | * Function description | ||||||
|  | *   Project load routine. Required. | ||||||
|  | * | ||||||
|  | ********************************************************************** | ||||||
|  | */ | ||||||
|  | void OnProjectLoad (void) { | ||||||
|  |   // | ||||||
|  |   // Dialog-generated settings | ||||||
|  |   // | ||||||
|  |   Project.AddSvdFile ("$(InstallDir)/Config/CPU/Cortex-M7F.svd"); | ||||||
|  |   Project.AddSvdFile ("$(InstallDir)/Config/Peripherals/ARMv7M.svd"); | ||||||
|  |   Project.AddSvdFile ("./STM32H743.svd"); | ||||||
|  |  | ||||||
|  |   Project.SetDevice ("STM32H743XI"); | ||||||
|  |   Project.SetHostIF ("USB", ""); | ||||||
|  |   Project.SetTargetIF ("SWD"); | ||||||
|  |   Project.SetTIFSpeed ("50 MHz"); | ||||||
|  |  | ||||||
|  |   // | ||||||
|  |   // User settings | ||||||
|  |   // | ||||||
|  |   Project.SetTraceSource ("Trace Pins"); | ||||||
|  |   Project.SetTraceTiming (100, 100, 100, 100); | ||||||
|  |   Edit.SysVar (VAR_TRACE_CORE_CLOCK, 150000000); | ||||||
|  |   File.Open ("/home/hathach/code/tinyusb/examples/device/cdc_msc/cmake-build-h743eval/cdc_msc.elf"); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /********************************************************************* | ||||||
|  | * | ||||||
|  | *      TargetReset | ||||||
|  | * | ||||||
|  | * Function description | ||||||
|  | *   Replaces the default target device reset routine. Optional. | ||||||
|  | * | ||||||
|  | * Notes | ||||||
|  | *   This example demonstrates the usage when | ||||||
|  | *   debugging a RAM program on a Cortex-M target device | ||||||
|  | * | ||||||
|  | ********************************************************************** | ||||||
|  | */ | ||||||
|  | //void TargetReset (void) { | ||||||
|  | // | ||||||
|  | //  unsigned int SP; | ||||||
|  | //  unsigned int PC; | ||||||
|  | //  unsigned int VectorTableAddr; | ||||||
|  | // | ||||||
|  | //  Exec.Reset(); | ||||||
|  | // | ||||||
|  | //  VectorTableAddr = Elf.GetBaseAddr(); | ||||||
|  | // | ||||||
|  | //  if (VectorTableAddr != 0xFFFFFFFF) { | ||||||
|  | // | ||||||
|  | //    Util.Log("Resetting Program."); | ||||||
|  | // | ||||||
|  | //    SP = Target.ReadU32(VectorTableAddr); | ||||||
|  | //    Target.SetReg("SP", SP); | ||||||
|  | // | ||||||
|  | //    PC = Target.ReadU32(VectorTableAddr + 4); | ||||||
|  | //    Target.SetReg("PC", PC); | ||||||
|  | //  } | ||||||
|  | //} | ||||||
|  |  | ||||||
|  | /********************************************************************* | ||||||
|  | * | ||||||
|  | *       BeforeTargetReset | ||||||
|  | * | ||||||
|  | * Function description | ||||||
|  | *   Event handler routine. Optional. | ||||||
|  | * | ||||||
|  | ********************************************************************** | ||||||
|  | */ | ||||||
|  | //void BeforeTargetReset (void) { | ||||||
|  | //} | ||||||
|  |  | ||||||
|  | /********************************************************************* | ||||||
|  | * | ||||||
|  | *       AfterTargetReset | ||||||
|  | * | ||||||
|  | * Function description | ||||||
|  | *   Event handler routine. | ||||||
|  | *    - Sets the PC register to program reset value. | ||||||
|  | *    - Sets the SP register to program reset value on Cortex-M. | ||||||
|  | * | ||||||
|  | ********************************************************************** | ||||||
|  | */ | ||||||
|  | void AfterTargetReset (void) { | ||||||
|  |   unsigned int SP; | ||||||
|  |   unsigned int PC; | ||||||
|  |   unsigned int VectorTableAddr; | ||||||
|  |  | ||||||
|  |   VectorTableAddr = Elf.GetBaseAddr(); | ||||||
|  |  | ||||||
|  |   if (VectorTableAddr == 0xFFFFFFFF) { | ||||||
|  |     Util.Log("Project file error: failed to get program base"); | ||||||
|  |   } else { | ||||||
|  |     SP = Target.ReadU32(VectorTableAddr); | ||||||
|  |     Target.SetReg("SP", SP); | ||||||
|  |  | ||||||
|  |     PC = Target.ReadU32(VectorTableAddr + 4); | ||||||
|  |     Target.SetReg("PC", PC); | ||||||
|  |   } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /********************************************************************* | ||||||
|  | * | ||||||
|  | *       DebugStart | ||||||
|  | * | ||||||
|  | * Function description | ||||||
|  | *   Replaces the default debug session startup routine. Optional. | ||||||
|  | * | ||||||
|  | ********************************************************************** | ||||||
|  | */ | ||||||
|  | //void DebugStart (void) { | ||||||
|  | //} | ||||||
|  |  | ||||||
|  | /********************************************************************* | ||||||
|  | * | ||||||
|  | *       TargetConnect | ||||||
|  | * | ||||||
|  | * Function description | ||||||
|  | *   Replaces the default target IF connection routine. Optional. | ||||||
|  | * | ||||||
|  | ********************************************************************** | ||||||
|  | */ | ||||||
|  | //void TargetConnect (void) { | ||||||
|  | //} | ||||||
|  |  | ||||||
|  | /********************************************************************* | ||||||
|  | * | ||||||
|  | *       BeforeTargetConnect | ||||||
|  | * | ||||||
|  | * Function description | ||||||
|  | *   Event handler routine. Optional. | ||||||
|  | * | ||||||
|  | ********************************************************************** | ||||||
|  | */ | ||||||
|  |  | ||||||
|  | void BeforeTargetConnect (void) { | ||||||
|  |   // | ||||||
|  |   // Trace pin init is done by J-Link script file as J-Link script files are IDE independent | ||||||
|  |   // | ||||||
|  |   //Project.SetJLinkScript("./ST_STM32H743_Traceconfig.pex"); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /********************************************************************* | ||||||
|  | * | ||||||
|  | *       AfterTargetConnect | ||||||
|  | * | ||||||
|  | * Function description | ||||||
|  | *   Event handler routine. Optional. | ||||||
|  | * | ||||||
|  | ********************************************************************** | ||||||
|  | */ | ||||||
|  | //void AfterTargetConnect (void) { | ||||||
|  | //} | ||||||
|  |  | ||||||
|  | /********************************************************************* | ||||||
|  | * | ||||||
|  | *       TargetDownload | ||||||
|  | * | ||||||
|  | * Function description | ||||||
|  | *   Replaces the default program download routine. Optional. | ||||||
|  | * | ||||||
|  | ********************************************************************** | ||||||
|  | */ | ||||||
|  | //void TargetDownload (void) { | ||||||
|  | //} | ||||||
|  |  | ||||||
|  | /********************************************************************* | ||||||
|  | * | ||||||
|  | *       BeforeTargetDownload | ||||||
|  | * | ||||||
|  | * Function description | ||||||
|  | *   Event handler routine. Optional. | ||||||
|  | * | ||||||
|  | ********************************************************************** | ||||||
|  | */ | ||||||
|  | //void BeforeTargetDownload (void) { | ||||||
|  | //} | ||||||
|  |  | ||||||
|  | /********************************************************************* | ||||||
|  | * | ||||||
|  | *      AfterTargetDownload | ||||||
|  | * | ||||||
|  | * Function description | ||||||
|  | *   Event handler routine. | ||||||
|  | *    - Sets the PC register to program reset value. | ||||||
|  | *    - Sets the SP register to program reset value on Cortex-M. | ||||||
|  | * | ||||||
|  | ********************************************************************** | ||||||
|  | */ | ||||||
|  | void AfterTargetDownload (void) { | ||||||
|  |   unsigned int SP; | ||||||
|  |   unsigned int PC; | ||||||
|  |   unsigned int VectorTableAddr; | ||||||
|  |  | ||||||
|  |   VectorTableAddr = Elf.GetBaseAddr(); | ||||||
|  |   Util.Log("___"); | ||||||
|  |   if (VectorTableAddr == 0xFFFFFFFF) { | ||||||
|  |     Util.Log("Project file error: failed to get program base"); | ||||||
|  |   } else { | ||||||
|  |     SP = Target.ReadU32(VectorTableAddr); | ||||||
|  |     Target.SetReg("SP", SP); | ||||||
|  |  | ||||||
|  |     PC = Target.ReadU32(VectorTableAddr + 4); | ||||||
|  |     Target.SetReg("PC", PC); | ||||||
|  |   } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /********************************************************************* | ||||||
|  | * | ||||||
|  | *       BeforeTargetDisconnect | ||||||
|  | * | ||||||
|  | * Function description | ||||||
|  | *   Event handler routine. Optional. | ||||||
|  | * | ||||||
|  | ********************************************************************** | ||||||
|  | */ | ||||||
|  | //void BeforeTargetDisconnect (void) { | ||||||
|  | //} | ||||||
|  |  | ||||||
|  | /********************************************************************* | ||||||
|  | * | ||||||
|  | *       AfterTargetDisconnect | ||||||
|  | * | ||||||
|  | * Function description | ||||||
|  | *   Event handler routine. Optional. | ||||||
|  | * | ||||||
|  | ********************************************************************** | ||||||
|  | */ | ||||||
|  | //void AfterTargetDisconnect (void) { | ||||||
|  | //} | ||||||
|  |  | ||||||
|  | /********************************************************************* | ||||||
|  | * | ||||||
|  | *       AfterTargetHalt | ||||||
|  | * | ||||||
|  | * Function description | ||||||
|  | *   Event handler routine. Optional. | ||||||
|  | * | ||||||
|  | ********************************************************************** | ||||||
|  | */ | ||||||
|  | //void AfterTargetHalt (void) { | ||||||
|  | //} | ||||||
| @@ -56,6 +56,30 @@ void OTG_HS_IRQHandler(void) | |||||||
|  |  | ||||||
| UART_HandleTypeDef UartHandle; | UART_HandleTypeDef UartHandle; | ||||||
|  |  | ||||||
|  | //--------------------------------------------------------------------+ | ||||||
|  | // | ||||||
|  | //--------------------------------------------------------------------+ | ||||||
|  |  | ||||||
|  | #ifdef TRACE_ETM | ||||||
|  | void trace_etm_init(void) { | ||||||
|  |   // H7 trace pin is PE2 to PE6 | ||||||
|  |   // __HAL_RCC_GPIOE_CLK_ENABLE(); | ||||||
|  |  | ||||||
|  |   GPIO_InitTypeDef  gpio_init; | ||||||
|  |   gpio_init.Pin       = GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6; | ||||||
|  |   gpio_init.Mode      = GPIO_MODE_AF_PP; | ||||||
|  |   gpio_init.Pull      = GPIO_PULLUP; | ||||||
|  |   gpio_init.Speed     = GPIO_SPEED_FREQ_VERY_HIGH; | ||||||
|  |   gpio_init.Alternate = GPIO_AF0_TRACE; | ||||||
|  |   HAL_GPIO_Init(GPIOE, &gpio_init); | ||||||
|  |  | ||||||
|  |   // Enable trace clk, also in D1 and D3 domain | ||||||
|  |   DBGMCU->CR |= DBGMCU_CR_DBG_TRACECKEN | DBGMCU_CR_DBG_CKD1EN | DBGMCU_CR_DBG_CKD3EN; | ||||||
|  | } | ||||||
|  | #else | ||||||
|  |   #define etm_trace_init() | ||||||
|  | #endif | ||||||
|  |  | ||||||
| void board_init(void) | void board_init(void) | ||||||
| { | { | ||||||
|   board_stm32h7_clock_init(); |   board_stm32h7_clock_init(); | ||||||
| @@ -74,6 +98,8 @@ void board_init(void) | |||||||
| #endif | #endif | ||||||
|   __HAL_RCC_GPIOJ_CLK_ENABLE(); |   __HAL_RCC_GPIOJ_CLK_ENABLE(); | ||||||
|  |  | ||||||
|  |   trace_etm_init(); | ||||||
|  |  | ||||||
|   // Enable UART Clock |   // Enable UART Clock | ||||||
|   UART_CLK_EN(); |   UART_CLK_EN(); | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 hathach
					hathach