多核:LPC43xx 系列:Cortex M0 时钟

Posted

技术标签:

【中文标题】多核:LPC43xx 系列:Cortex M0 时钟【英文标题】:Multicore: LPC43xx series :Clock for Cortex M0 【发布时间】:2017-12-22 23:06:03 【问题描述】:

我是多核世界的新手。我正在使用 LPC43xx 系列。我正在尝试用我的辅助核心 Cortex M0 闪烁 LED。我想知道皮质 M0 中这些参考时钟和处理器时钟之间的区别。参考时钟是指主内核CM4的时钟吗?处理器时钟是指CM4的时钟吗?我有点不清楚 CM4 中存在许多时钟而 CM0 中什么都没有?我应该为闪烁(延迟)初始化哪个时钟?我的代码如下:

#include "lpc43xx_gpio.h"
#include "lpc43xx_scu.h"
#include "lpc43xx_cgu.h"
#include "LPC43xx.h"
#include "ipc_int.h"
#include "lpc43xx_libcfg_default.h"

#define LED1_BIT            7 //LEDUSB
#define LED1_PORT           7

/************************** PRIVATE VARIABLES *************************/
static uint32_t msec;


/************************** PRIVATE FUNCTIONS *************************/
void SysTick_Handler (void) ;

void SysTick_Handler (void)     // SysTick Interrupt Handler @ 1000Hz

    if(msec)msec--;



int c_entry (void)    



    CGU_Init();

    scu_pinmux(0xE ,7 , MD_PDN, FUNC4);     // P8.1 : USB0_IND1 LED

    GPIO_SetDir(LED1_PORT,(1<<LED1_BIT), 1);

    SysTick_Config(CGU_GetPCLKFrequency(CGU_PERIPHERAL_M4CORE)/1000);

    GPIO_ClearValue(LED1_PORT,(1<<LED1_BIT));



    while (1)
                                                   // Loop forever
        msec = 1000;
        while(msec);
        GPIO_ClearValue(LED1_PORT,(1<<LED1_BIT));
        msec = 1000;
        while(msec);
        GPIO_SetValue(LED1_PORT,(1<<LED1_BIT));
    


 int main(void)




    return c_entry();


谢谢大家。

【问题讨论】:

通常,参考时钟是一个(如果不是更精确的基于晶体的外部时钟),您可以在 PLL 前使用它来创建(通常更快)时钟。以太网当然可以做到这一点,我们的多 ghz 处理器可以做到。文档中的引用似乎暗示相同。您是否有一个基于片外的外部晶体作为参考,您的处理器以什么频率和什么频率运行? 您是否能够在不中断的情况下先使 LED 闪烁? 我没有尝试中断,因为我是多核新手,我正在尝试学习如何单独处理内核,然后我将了解它们的通信。为了使用CM0,它只是为了在CM4中重置CM0而编写的,所以我正在尝试。 抱歉,事件,您有一个 systick 处理程序,因此您尝试使用“事件”或“异常”,而不是仅检查状态寄存器而不启用中断。 关于 systick :对于不需要操作系统的应用程序,SysTick 可用于计时、时间测量或作为需要定期执行的任务的中断源。由于有 RTOS,我正在尝试将 systick 用于延迟等计时目的。 【参考方案1】:

根据LPC43xx User Manual 第 170 页,Cortex-M0 内核时钟由 BASE_PERIPH_CLK 提供,而 Cortex-M4 由 BASE_M4_CLK 提供时钟。您可以将这些时钟的源设置为任何(许多、许多)允许的源,如同一章中所述。

您所指的“参考时钟”可能是以太网的参考时钟。

【讨论】:

感谢您的回复,我会试试这个并告诉您结果 您好,但是 BASE_PERIPH_CLK 用于 M0SUB 系统。皮质 - M0SUB 仅存在于 LPC437x 系列中。但我没有使用它。所以我认为这不合适。 它应该存在于 LPC43xx 系列的所有成员中,因为它是 Cortex-M0 的时钟。除非您使用其他没有 M0 内核的 LPC 部件? 第二次阅读似乎你是对的,另一个 LPC43xx 有 M0APP,它由 BASE_M4_CLK 提供时钟,因此它与 Cortex-M4 内核的时钟相同。 @Kael 参见用户手册第 212 页,Cortex M0 时钟源自 BASE_M4_CLK。

以上是关于多核:LPC43xx 系列:Cortex M0 时钟的主要内容,如果未能解决你的问题,请参考以下文章

LPC11xx Cortex-M0 FreeRTOS 硬故障

普冉PY32系列 PY32F0系列32位Cortex M0+ MCU简介

单片机行业经常提到的M0 M1 M2 M3 M4 M7指的是啥

Cotex-M3内核LPC17xx系列时钟及其配置方法

LPC5528使用记录

LPC5528使用记录