Multicore: серия LPC43xx: часы для Cortex M0

Я новичок в мире многоядерных процессоров. Я работаю с серией LPC43xx. Я пытаюсь мигать светодиодом на моем вторичном ядре Cortex M0. Я хотел бы знать разницу между этими эталонными часами и тактовыми частотами процессора в корте 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();

}

Спасибо всем.


person Kael    schedule 18.07.2017    source источник
comment
Обычно опорные часы - это (относительно, если не намного более точные внешние часы на кристалле), которые вы используете перед ФАПЧ для создания (обычно более быстрых) часов. Ethernet, безусловно, делает это, как и наши процессоры с тактовой частотой несколько ГГц. Ссылки в документации подразумевают то же самое. У вас есть внешний кристалл на основе чего-то вне кристалла в качестве эталона, на какой частоте и на какой частоте работает ваш процессор?   -  person old_timer    schedule 18.07.2017
comment
Удалось ли вам сначала мигать светодиодом без перерывов?   -  person old_timer    schedule 18.07.2017
comment
Я не пробовал с прерываниями, так как я новичок в многоядерности, я пытаюсь научиться обращаться с ядрами индивидуально, тогда я узнаю об их взаимодействии. Для работы с CM0 было написано просто сбросить CM0 в CM4, поэтому пробовал.   -  person Kael    schedule 19.07.2017
comment
извините, события, у вас есть обработчик systick, поэтому вы пытаетесь использовать событие или исключение, а не просто проверять регистр состояния и не разрешать прерывания.   -  person old_timer    schedule 19.07.2017
comment
о systick: для приложений, которым не требуется ОС, SysTick можно использовать для хронометража, измерения времени или в качестве источника прерывания для задач, которые необходимо выполнять регулярно. Поскольку есть RTOS, я пытаюсь использовать синтаксис для определения времени, например задержки.   -  person Kael    schedule 19.07.2017
comment
Просто пытаюсь помочь тебе ходить, прежде чем ты бежишь и заставляешь мигать светодиодный индикатор, ты ходил до того, как побежал, - вот в чем вопрос? теперь вы говорите, что находитесь в режиме реального времени.   -  person old_timer    schedule 19.07.2017
comment
ой, извините, я хотел сказать, что в серии LPC43xx нет ОС - baremetal или RTOS!   -  person Kael    schedule 19.07.2017


Ответы (1)


Согласно странице 170 LPC43xx User Manual, Cortex -M0 частота ядра обеспечивается BASE_PERIPH_CLK, в то время как Cortex-M4 синхронизируется BASE_M4_CLK. Вы можете установить источник этих часов на любой из (многих, многих) допустимых источников, как описано в той же главе.

«Эталонные часы», о которых вы говорите, могут быть эталонными часами для Ethernet.

person Tony K    schedule 18.07.2017
comment
Спасибо за ответ, я попробую и дам вам знать результаты - person Kael; 19.07.2017
comment
Здравствуйте, но BASE_PERIPH_CLK используется для системы M0SUB. Кора головного мозга - M0SUB присутствует только в серии LPC437x. Но я этим не пользуюсь. Так что я думаю, что это не подойдет. - person Kael; 19.07.2017
comment
Он должен присутствовать во всех членах семейства LPC43xx, поскольку это часы для Cortex-M0. Если вы не используете какую-то другую деталь LPC без ядра M0? - person Tony K; 19.07.2017
comment
При втором чтении кажется, что вы правы, у другого LPC43xx вместо этого есть M0APP, который синхронизируется BASE_M4_CLK, так что это те же часы, что и ядро ​​Cortex-M4. - person Tony K; 19.07.2017
comment
@Kael см. Стр. 212 руководства пользователя, часы Cortex M0 являются производными от BASE_M4_CLK. - person Tony K; 19.07.2017