enable etm trace support for h743 eval
This commit is contained in:
		| @@ -166,6 +166,11 @@ function(family_configure_common TARGET) | ||||
|     endif () | ||||
|   endif () | ||||
|  | ||||
|   # ETM Trace | ||||
|   if (TRACE_ETM STREQUAL "1") | ||||
|     target_compile_definitions(${TARGET} PUBLIC TRACE_ETM) | ||||
|   endif () | ||||
|  | ||||
| endfunction() | ||||
|  | ||||
|  | ||||
|   | ||||
| @@ -85,41 +85,60 @@ static inline void board_stm32h7_clock_init(void) | ||||
|   RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; | ||||
|   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.PLLN = 160; | ||||
|   RCC_OscInitStruct.PLL.PLLFRACN = 0; | ||||
|   RCC_OscInitStruct.PLL.PLLP = 2; | ||||
|   RCC_OscInitStruct.PLL.PLLR = 2; | ||||
|   RCC_OscInitStruct.PLL.PLLQ = 4; | ||||
|  | ||||
| #endif | ||||
|   RCC_OscInitStruct.PLL.PLLVCOSEL = RCC_PLL1VCOMEDIUM; | ||||
|   RCC_OscInitStruct.PLL.PLLRGE = RCC_PLL1VCIRANGE_2; | ||||
|   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; | ||||
|   PeriphClkInitStruct.UsbClockSelection = RCC_USBCLKSOURCE_PLL3; | ||||
|   HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct); | ||||
|  | ||||
|   /* 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); | ||||
|   /* Select PLL as system clock source and configure bus clocks dividers */ | ||||
|   RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_PCLK1 | | ||||
|       RCC_CLOCKTYPE_PCLK2 | RCC_CLOCKTYPE_D1PCLK1 | RCC_CLOCKTYPE_D3PCLK1; | ||||
|  | ||||
|   RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; | ||||
|   RCC_ClkInitStruct.SYSCLKDivider = RCC_SYSCLK_DIV1; | ||||
|   RCC_ClkInitStruct.AHBCLKDivider = RCC_HCLK_DIV2; | ||||
|   RCC_ClkInitStruct.APB1CLKDivider = RCC_APB1_DIV2; | ||||
|   RCC_ClkInitStruct.APB2CLKDivider = RCC_APB2_DIV2; | ||||
|   RCC_ClkInitStruct.APB3CLKDivider = RCC_APB3_DIV1; | ||||
|   HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_4); | ||||
|   RCC_ClkInitStruct.APB3CLKDivider = RCC_APB3_DIV2; | ||||
|   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*/ | ||||
|   __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; | ||||
|  | ||||
| //--------------------------------------------------------------------+ | ||||
| // | ||||
| //--------------------------------------------------------------------+ | ||||
|  | ||||
| #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) | ||||
| { | ||||
|   board_stm32h7_clock_init(); | ||||
| @@ -74,6 +98,8 @@ void board_init(void) | ||||
| #endif | ||||
|   __HAL_RCC_GPIOJ_CLK_ENABLE(); | ||||
|  | ||||
|   trace_etm_init(); | ||||
|  | ||||
|   // Enable UART Clock | ||||
|   UART_CLK_EN(); | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 hathach
					hathach