DSP 的主核频率更改方法

本文介绍了C6678芯片时钟初始化的方法,包括使用GEL文件和multicoreboot函数。主频配置涉及PLLM和PLLD的调整,如PllD=0, pllM=9对应500MHz主频。观察到时钟上电波形不一致问题,发现原因为PLL配置循环导致,减少循环次数至一次可解决此问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关于6678芯片时钟初始化可以利用gel文件来加载,也可以利用多核加载函数multicoreboot来进行初始化。

主频的配置与PLLM和PLLD有关。通过查阅手册,PLL控制器是用户软件可编程的。其中主要的概念有:分频(PLLD)、倍频(PLLM)和无效(DISABLE)。

  • 分频:就是将PLLOUT的频率分别除以(1到256可编程)得到频率
  • 倍频:与分频相反,是乘以可编程系数。
  • 无效:就是停止时钟输出。

在C6678手册2.5.3 PLL Boot Configuration Settings一节中,Table2-13给出了部分参考PLLM、PLLD取值,如下图所示。

  • GEL文件中配置主频的位置:

  • DSP利用multicoreboot自己配置主频的位置:

MulticoreBoot-> platform_init->CorePllcHwSetup

该函数中要用到的preDiv和pllM是在platform_init中配置的。

PllD=0,pllM=19时,对应1GHz主频;PllD=0,pllM=15时,对应800MHz主频;由此可以类推出PllD=0,pllM=9时,对应500MHz主频;

从而,如果想将DSP的主频降到500MHz,则应该将PllD设为0,pllM设为9。

问题二:

通过示波器对DSP输出时钟进行测量,可以发现经配置后的时钟每次上电的波形有时不同。通过看程序,里面的PLL被进行了一个十次循环配置。

尝试将loop_count循环改为loop_count<1,即做一次循环,发现每次开电后PLL配置稳定。

### STM32时钟主频配置 STM32的系统时钟SYSCLK为整个芯片提供必要的时序信号[^1]。该时钟源可以来自内部高速振荡器(HSI),外部高速振荡器(HSE)或者锁相环(PLL)。具体的选择可以通过重置和时钟控制寄存器(RCC_CFGR)中的SW[1:0]位来完成。 对于希望调整STM32工作频率的应用开发者来说,理解并正确配置这些选项至关重要。由于不同的应用场景可能对性能有不同的需求,因此允许用户根据实际需要灵活设定最合适的时钟源及其倍频因子。这不仅影响到CPU本身的运算速率,也间接决定了其他依赖于系统时钟同步工作的模块的工作效率。 值得注意的是,出于节能考虑,默认情况下并非所有外设都会被激活;相反,只有当应用程序明确指定了某项特定服务的需求之后才会启动相应的资源供给——即通过使能对应的APB/APB2总线上的相应位来打开目标设备所需的电源供应以及关联的时钟信号路径[^2]。 下面是一个简单的例子展示如何利用HAL库函数改变STM32F4系列微控制器的系统频率至最大值(假设使用HSE作为输入源并通过PLL放大): ```c void SystemClock_Config(void){ RCC_OscInitTypeDef RCC_OscInitStruct = {0}; RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; /** Configure the main internal regulator output voltage */ __HAL_RCC_PWR_CLK_ENABLE(); __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1); /** Initializes the CPU, AHB and APB busses clocks */ RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; RCC_OscInitStruct.HSEState = RCC_HSE_ON; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; RCC_OscInitStruct.PLL.PLLM = 8; // HSE/PLL_M=1 MHz input to PLL RCC_OscInitStruct.PLL.PLLN = 336;// VCO Output Clock = (HSE_VALUE / PLL_M) * PLL_N = 336MHz RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2; RCC_OscInitStruct.PLL.PLLQ = 7; if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK){ Error_Handler(); } /** Activate the Over-Drive mode */ if (HAL_PWREx_EnableOverDrive() != HAL_OK){ Error_Handler(); } /** Initializes the CPU, AHB and APB busses clocks */ RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4; RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2; if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5) != HAL_OK){ Error_Handler(); } } ``` 此代码片段展示了如何初始化并配置STM32F4系列MCU的时钟系统以达到最佳性能模式下的最高频率操作状态。需要注意的是,在实际应用中应当依据具体的硬件平台及软件环境适当调整参数设置
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值