这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 活动中心 » 板卡试用 » 【换取逻辑分析仪】RA8使用RA smart 工具配置运行Freertos

共2条 1/1 1 跳转至

【换取逻辑分析仪】RA8使用RA smart 工具配置运行Freertos

助工
2024-10-12 18:15:12     打赏

简介:

        瑞萨的RA Smart Configurator 的工具跟ST的STM32CubeMX 工具类似都是可以使用图形化的配置工具生成配置代码,RA Smart Configurator 工具也可以自动的添加freertos 等,相对来说该工具做的还是比较完善的,我们创建工程的时候选择适配freertos 的工程配置,公车个很难过创建好后我们配置时钟源为外部XTAL,并配置CPU 运行在48M,因为要使用串口SCI模块在此开启SCI clock。

image.png

该配置对应生成的clock 初始化配置代码如下:

/* generated configuration header file - do not edit */
#ifndef BSP_CLOCK_CFG_H_
#define BSP_CLOCK_CFG_H_
#define BSP_CFG_CLOCKS_SECURE (0)
#define BSP_CFG_CLOCKS_OVERRIDE (0)
#define BSP_CFG_XTAL_HZ (20000000) /* XTAL 20000000Hz */
#define BSP_CFG_HOCO_FREQUENCY (7) /* HOCO 48MHz */
#define BSP_CFG_PLL_SOURCE (BSP_CLOCKS_SOURCE_CLOCK_MAIN_OSC) /* PLL Src: XTAL */
#define BSP_CFG_PLL_DIV (BSP_CLOCKS_PLL_DIV_2) /* PLL Div /2 */
#define BSP_CFG_PLL_MUL BSP_CLOCKS_PLL_MUL(96,0) /* PLL Mul x80-99|Mul x96|PLL Mul x96.00 */
#define BSP_CFG_PLL_FREQUENCY_HZ (960000000) /* PLL 960000000Hz */
#define BSP_CFG_PLODIVP (BSP_CLOCKS_PLL_DIV_2) /* PLL1P Div /2 */
#define BSP_CFG_PLL1P_FREQUENCY_HZ (480000000) /* PLL1P 480000000Hz */
#define BSP_CFG_PLODIVQ (BSP_CLOCKS_PLL_DIV_2) /* PLL1Q Div /2 */
#define BSP_CFG_PLL1Q_FREQUENCY_HZ (480000000) /* PLL1Q 480000000Hz */
#define BSP_CFG_PLODIVR (BSP_CLOCKS_PLL_DIV_2) /* PLL1R Div /2 */
#define BSP_CFG_PLL1R_FREQUENCY_HZ (480000000) /* PLL1R 480000000Hz */
#define BSP_CFG_PLL2_SOURCE (BSP_CLOCKS_CLOCK_DISABLED) /* PLL2 Disabled */
#define BSP_CFG_PLL2_DIV (BSP_CLOCKS_PLL_DIV_2) /* PLL2 Div /2 */
#define BSP_CFG_PLL2_MUL BSP_CLOCKS_PLL_MUL(96,0) /* PLL2 Mul x80-99|Mul x96|PLL2 Mul x96.00 */
#define BSP_CFG_PLL2_FREQUENCY_HZ (0) /* PLL2 0Hz */
#define BSP_CFG_PL2ODIVP (BSP_CLOCKS_PLL_DIV_2) /* PLL2P Div /2 */
#define BSP_CFG_PLL2P_FREQUENCY_HZ (0) /* PLL2P 0Hz */
#define BSP_CFG_PL2ODIVQ (BSP_CLOCKS_PLL_DIV_2) /* PLL2Q Div /2 */
#define BSP_CFG_PLL2Q_FREQUENCY_HZ (0) /* PLL2Q 0Hz */
#define BSP_CFG_PL2ODIVR (BSP_CLOCKS_PLL_DIV_2) /* PLL2R Div /2 */
#define BSP_CFG_PLL2R_FREQUENCY_HZ (0) /* PLL2R 0Hz */
#define BSP_CFG_CLOCK_SOURCE (BSP_CLOCKS_SOURCE_CLOCK_PLL1P) /* Clock Src: PLL1P */
#define BSP_CFG_CLKOUT_SOURCE (BSP_CLOCKS_CLOCK_DISABLED) /* CLKOUT Disabled */
#define BSP_CFG_SCICLK_SOURCE (BSP_CLOCKS_SOURCE_CLOCK_PLL1Q) /* SCICLK Src: PLL1Q */
#define BSP_CFG_SPICLK_SOURCE (BSP_CLOCKS_CLOCK_DISABLED) /* SPICLK Disabled */
#define BSP_CFG_CANFDCLK_SOURCE (BSP_CLOCKS_CLOCK_DISABLED) /* CANFDCLK Disabled */
#define BSP_CFG_LCDCLK_SOURCE (BSP_CLOCKS_CLOCK_DISABLED) /* LCDCLK Disabled */
#define BSP_CFG_I3CCLK_SOURCE (BSP_CLOCKS_CLOCK_DISABLED) /* I3CCLK Disabled */
#define BSP_CFG_UCK_SOURCE (BSP_CLOCKS_CLOCK_DISABLED) /* UCK Disabled */
#define BSP_CFG_U60CK_SOURCE (BSP_CLOCKS_CLOCK_DISABLED) /* U60CK Disabled */
#define BSP_CFG_OCTA_SOURCE (BSP_CLOCKS_CLOCK_DISABLED) /* OCTASPICLK Disabled */
#define BSP_CFG_CPUCLK_DIV (BSP_CLOCKS_SYS_CLOCK_DIV_1) /* CPUCLK Div /1 */
#define BSP_CFG_ICLK_DIV (BSP_CLOCKS_SYS_CLOCK_DIV_2) /* ICLK Div /2 */
#define BSP_CFG_PCLKA_DIV (BSP_CLOCKS_SYS_CLOCK_DIV_4) /* PCLKA Div /4 */
#define BSP_CFG_PCLKB_DIV (BSP_CLOCKS_SYS_CLOCK_DIV_8) /* PCLKB Div /8 */
#define BSP_CFG_PCLKC_DIV (BSP_CLOCKS_SYS_CLOCK_DIV_8) /* PCLKC Div /8 */
#define BSP_CFG_PCLKD_DIV (BSP_CLOCKS_SYS_CLOCK_DIV_4) /* PCLKD Div /4 */
#define BSP_CFG_PCLKE_DIV (BSP_CLOCKS_SYS_CLOCK_DIV_2) /* PCLKE Div /2 */
#define BSP_CFG_SDCLK_OUTPUT (1) /* SDCLK Enabled */
#define BSP_CFG_BCLK_DIV (BSP_CLOCKS_SYS_CLOCK_DIV_4) /* BCLK Div /4 */
#define BSP_CFG_BCLK_OUTPUT (2) /* EBCLK Div /2 */
#define BSP_CFG_FCLK_DIV (BSP_CLOCKS_SYS_CLOCK_DIV_8) /* FCLK Div /8 */
#define BSP_CFG_CLKOUT_DIV (BSP_CLOCKS_SYS_CLOCK_DIV_1) /* CLKOUT Div /1 */
#define BSP_CFG_SCICLK_DIV (BSP_CLOCKS_SCI_CLOCK_DIV_8) /* SCICLK Div /8 */
#define BSP_CFG_SPICLK_DIV (BSP_CLOCKS_SPI_CLOCK_DIV_4) /* SPICLK Div /4 */
#define BSP_CFG_CANFDCLK_DIV (BSP_CLOCKS_CANFD_CLOCK_DIV_8) /* CANFDCLK Div /8 */
#define BSP_CFG_LCDCLK_DIV (BSP_CLOCKS_LCD_CLOCK_DIV_2) /* LCDCLK Div /2 */
#define BSP_CFG_I3CCLK_DIV (BSP_CLOCKS_I3C_CLOCK_DIV_3) /* I3CCLK Div /3 */
#define BSP_CFG_UCK_DIV (BSP_CLOCKS_USB_CLOCK_DIV_5) /* UCK Div /5 */
#define BSP_CFG_U60CK_DIV (BSP_CLOCKS_USB60_CLOCK_DIV_5) /* U60CK Div /5 */
#define BSP_CFG_OCTA_DIV (BSP_CLOCKS_OCTA_CLOCK_DIV_4) /* OCTASPICLK Div /4 */
#endif /* BSP_CLOCK_CFG_H_ */


在BSP 窗口下可以配置芯片的运行参数,为了提高芯片的执行速率在该窗口下开启Dcache。

image.png

Pin 窗口下根据板子的配置修改调试接口为SWD

image.png

配置要输出串口log 的Pin 引脚。

image.png

Componnets 下选择freertos 的heap 分配算法及Freertos.

image.png

配置freertos 参数配置该参数会生成freertos 的配置文件。

image.png

配置SCI9 uart 的输出参数

image.png

之后点击此按钮生成工程及SDK 时钟、uart、bsp 等初始化配置代码。

image.png

添加如下代码将printf 输出对接至uart9.

size_t __write(int hand, const unsigned char * buff, size_t size)
{
    int i_loop;
    sci_b_uart_instance_ctrl_t *p_ctrl = (sci_b_uart_instance_ctrl_t *)g_uart9.p_ctrl;

    for(i_loop = 0;i_loop < size;i_loop++)
    {
        while ((p_ctrl->p_reg->CSR_b.TEND) == 0);
        p_ctrl->p_reg->TDR = buff[i_loop];
    }
    return size;
}

将上述的生成的配置文件加入工程编译,并创建以下任务切换测试代码。

void start_task(void *pvParameters)
{
    while(1)
    {
        printf("task1 \r\n");
        R_IOPORT_PinWrite(&g_ioport_ctrl,BSP_IO_PORT_01_PIN_02,BSP_IO_LEVEL_HIGH);
        vTaskDelay(1000);
        R_IOPORT_PinWrite(&g_ioport_ctrl,BSP_IO_PORT_01_PIN_02,BSP_IO_LEVEL_LOW);
        vTaskDelay(1000);
    }
}


void task2(void *pvParameters)
{
    while(1)
    {
        printf("task2 \r\n");
        R_IOPORT_PinWrite(&g_ioport_ctrl,BSP_IO_PORT_01_PIN_06,BSP_IO_LEVEL_HIGH);
        vTaskDelay(1000);
        R_IOPORT_PinWrite(&g_ioport_ctrl,BSP_IO_PORT_01_PIN_06,BSP_IO_LEVEL_LOW);
        vTaskDelay(1000);
    }
}

int main(void)
{
    R_SCI_B_UART_Open(g_uart9.p_ctrl,g_uart9.p_cfg);

    xTaskCreate((TaskFunction_t )start_task,
                (const char*    )"task1",
                (uint16_t       )START_STK_SIZE,
                (void*          )NULL,
                (UBaseType_t    )START_TASK_PRIO,
                (TaskHandle_t*  )&StartTask_Handler);

    xTaskCreate((TaskFunction_t )task2,
                (const char*    )"task2",
                (uint16_t       )LVGL_STK_SIZE,
                (void*          )NULL,
                (UBaseType_t    )LVGL_TASK_PRIO,
                (TaskHandle_t*  )&LvglTask_Handler);

    vTaskStartScheduler();
}

下载到板子中运行发现task1 和 task2 会轮流打印,说明freertos 已经正常调度运行。

image.png



专家
2024-10-19 16:15:11     打赏
2楼

不错不错,下次我也试试RA Smart Configurator 工具,看起来挺方便的样子。


共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]