From c18d3b7e618f6854baddce1fbc410949838ead1f Mon Sep 17 00:00:00 2001 From: root Date: Tue, 23 Apr 2024 18:58:13 +0800 Subject: [PATCH] update sdk --- docs/ChangeLog.md | 16 + example/peripheral/dma/gdma/README.md | 8 +- .../dma/gdma/figs/memcpy_result.png | Bin 55541 -> 21460 bytes example/peripheral/dma/gdma/inc/gdma_memcpy.h | 15 +- example/peripheral/dma/gdma/main.c | 57 +- example/peripheral/dma/gdma/src/cmd_gdma.c | 32 +- example/peripheral/dma/gdma/src/gdma_memcpy.c | 490 ++++++------------ example/peripheral/pwm/README.md | 99 ++-- example/peripheral/pwm/figs/create.png | Bin 31971 -> 0 bytes example/peripheral/pwm/figs/delete.png | Bin 13527 -> 0 bytes example/peripheral/pwm/figs/phytiumpi_pwm.png | Bin 109874 -> 0 bytes example/peripheral/pwm/figs/pwm_dead_band.png | Bin 0 -> 13974 bytes .../pwm/figs/pwm_dead_band_waveform.png | Bin 0 -> 7738 bytes .../peripheral/pwm/figs/pwm_dual_channel.png | Bin 0 -> 6049 bytes .../pwm/figs/pwm_dual_channel_waveform.png | Bin 0 -> 14527 bytes example/peripheral/pwm/figs/pwm_out.png | Bin 14287 -> 0 bytes .../pwm/figs/pwm_single_channel_waveform.png | Bin 0 -> 9453 bytes .../peripheral/pwm/figs/single_channel.png | Bin 0 -> 7129 bytes example/peripheral/pwm/inc/pwm_example.h | 14 +- example/peripheral/pwm/main.c | 40 +- example/peripheral/pwm/makefile | 12 +- example/peripheral/pwm/src/cmd_pwm.c | 86 +++ ...{pwm_example.c => pwm_dead_band_example.c} | 235 ++++----- .../pwm/src/pwm_dual_channel_example.c | 237 +++++++++ .../pwm/src/pwm_single_channel_example.c | 207 ++++++++ example/peripheral/spi/src/sfud_read_write.c | 4 +- 26 files changed, 993 insertions(+), 559 deletions(-) delete mode 100644 example/peripheral/pwm/figs/create.png delete mode 100644 example/peripheral/pwm/figs/delete.png delete mode 100644 example/peripheral/pwm/figs/phytiumpi_pwm.png create mode 100644 example/peripheral/pwm/figs/pwm_dead_band.png create mode 100644 example/peripheral/pwm/figs/pwm_dead_band_waveform.png create mode 100644 example/peripheral/pwm/figs/pwm_dual_channel.png create mode 100644 example/peripheral/pwm/figs/pwm_dual_channel_waveform.png delete mode 100644 example/peripheral/pwm/figs/pwm_out.png create mode 100644 example/peripheral/pwm/figs/pwm_single_channel_waveform.png create mode 100644 example/peripheral/pwm/figs/single_channel.png create mode 100644 example/peripheral/pwm/src/cmd_pwm.c rename example/peripheral/pwm/src/{pwm_example.c => pwm_dead_band_example.c} (43%) create mode 100644 example/peripheral/pwm/src/pwm_dual_channel_example.c create mode 100644 example/peripheral/pwm/src/pwm_single_channel_example.c diff --git a/docs/ChangeLog.md b/docs/ChangeLog.md index 0334c420..dd8f7837 100644 --- a/docs/ChangeLog.md +++ b/docs/ChangeLog.md @@ -1,3 +1,19 @@ +# Phytium FreeRTOS SDK 2024-04-23 ChangeLog + +Change Log since 2024-04-13 + +## example + +- modify pwm example, add no letter shell mode, adapt to auto-test system + +# Phytium FreeRTOS SDK 2024-04-22 ChangeLog + +Change Log since 2024-04-19 + +## example + +- modify gdma example, add no letter shell mode, adapt to auto-test system + # Phytium FreeRTOS SDK 2024-04-19 ChangeLog Change Log since 2024-04-19 diff --git a/example/peripheral/dma/gdma/README.md b/example/peripheral/dma/gdma/README.md index 8774ef63..ad0b2b9e 100644 --- a/example/peripheral/dma/gdma/README.md +++ b/example/peripheral/dma/gdma/README.md @@ -95,7 +95,7 @@ bootelf -p 0xa0100000 ### 2.4 输出与实验现象 -- 系统进入后,创建任务 GDMA,将启动任务A和任务B,分别搬运数据 +- 系统进入后,创建任务 GDMA MEMCPY 任务,随后自动完成搬运 ``` gdma memcpy @@ -107,8 +107,4 @@ gdma memcpy ## 3. 如何解决问题 -## 4. 修改历史记录 - - - - +## 4. 修改历史记录 \ No newline at end of file diff --git a/example/peripheral/dma/gdma/figs/memcpy_result.png b/example/peripheral/dma/gdma/figs/memcpy_result.png index 0b7acb7842d131e2b7ab91c728266f257f6144b5..f1c4580d446c72ca2377aea53269540af059f62b 100644 GIT binary patch literal 21460 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

udn0oyTu{N$-i|@HK-q&;+D}5 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�VG7O7g(pSRNHin=I&J6Yl>V*R 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 literal 55541 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�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 V&9Hi|_BY^9O<7B+K;g-Y{|5||5^Vqg diff --git a/example/peripheral/dma/gdma/inc/gdma_memcpy.h b/example/peripheral/dma/gdma/inc/gdma_memcpy.h index 90ffb99e..904700ff 100644 --- a/example/peripheral/dma/gdma/inc/gdma_memcpy.h +++ b/example/peripheral/dma/gdma/inc/gdma_memcpy.h @@ -17,18 +17,21 @@ * Description:  This file is for task create function define * * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 zhugengyu 2022/08/26 first commit + * Ver    Who         Date         Changes + * -----  ------      --------     -------------------------------------- + * 1.0 zhugengyu 2022/7/27 init commit + * 3.0 liqiaozhong 2024/4/22 add no letter shell mode, adapt to auto-test system */ -#ifndef GDMA_MEMCPY_H -#define GDMA_MEMCPY_H + +#ifndef GDMA_MEMCPY_H +#define GDMA_MEMCPY_H + +#include "FreeRTOS.h" #ifdef __cplusplus extern "C" { #endif - /***************************** Include Files *********************************/ /************************** Constant Definitions *****************************/ diff --git a/example/peripheral/dma/gdma/main.c b/example/peripheral/dma/gdma/main.c index add4a08b..97ae6397 100644 --- a/example/peripheral/dma/gdma/main.c +++ b/example/peripheral/dma/gdma/main.c @@ -16,31 +16,64 @@ * LastEditTime: 2022-06-17 08:17:59 * Description: This file is for gdma example that running shell task and open scheduler * - * Modify History: - * Ver Who Date Changes - * ----- ------ -------- -------------------------------------- + * Modify History: + * Ver    Who         Date         Changes + * -----  ------      --------     -------------------------------------- + * 1.0 zhugengyu 2022/7/27 init commit + * 2.0 liqiaozhong 2023/11/10 synchronous update with standalone sdk + * 3.0 liqiaozhong 2024/4/22 add no letter shell mode, adapt to auto-test system */ +#include + +#include "FreeRTOS.h" + +#include "sdkconfig.h" + +#ifdef CONFIG_USE_LETTER_SHELL #include "shell.h" #include "shell_port.h" -#include +#else +#include "task.h" +#include "gdma_memcpy.h" -int main(void) +#define GDMA_EXAMPLE_TASK_PRIORITY 2 + +void GdmaExampleTaskEntry() { - BaseType_t ret; + /* example functions */ + FFreeRTOSRunGdmaMemcpy(); - ret = LSUserShellTask() ; + /* end flag */ + printf("[test_end]\r\n"); + vTaskDelete(NULL); +} +#endif + +int main(void) +{ + BaseType_t ret = pdPASS; /* 定义一个创建信息返回值,默认为 pdPASS */ +#ifdef CONFIG_USE_LETTER_SHELL + ret = LSUserShellTask(); +#else + /* used in no-letter-shell mode */ + ret = xTaskCreate((TaskFunction_t)GdmaExampleTaskEntry, /* 任务入口函数 */ + (const char *)"GdmaExampleTaskEntry", /* 任务名字 */ + (uint16_t)4096, /* 任务栈大小 */ + NULL, /* 任务入口函数参数 */ + (UBaseType_t)GDMA_EXAMPLE_TASK_PRIORITY, /* 任务优先级 */ + NULL); /* 任务句柄 */ +#endif if (ret != pdPASS) { goto FAIL_EXIT; } - /* ret = FFreeRTOSRunGdmaMemcpy(); */ - - vTaskStartScheduler(); /* 启动任务,开启调度 */ + /* 启动任务,开启调度 */ + vTaskStartScheduler(); while (1); /* 正常不会执行到这里 */ FAIL_EXIT: - printf("failed 0x%x \r\n", ret); + printf("GDMA example failed in main.c, the ret value is 0x%x. \r\n", ret); return 0; -} +} \ No newline at end of file diff --git a/example/peripheral/dma/gdma/src/cmd_gdma.c b/example/peripheral/dma/gdma/src/cmd_gdma.c index 0883c621..c13dc78a 100644 --- a/example/peripheral/dma/gdma/src/cmd_gdma.c +++ b/example/peripheral/dma/gdma/src/cmd_gdma.c @@ -17,20 +17,18 @@ * Description:  This files is for gdma command interface * * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 zhugengyu 2022/08/26 first commit + * Ver    Who         Date         Changes + * -----  ------      --------     -------------------------------------- + * 1.0 zhugengyu 2022/7/27 init commit + * 2.0 liqiaozhong 2024/4/22 add no letter shell mode, adapt to auto-test system */ + /***************************** Include Files *********************************/ -#include #include +#include #include "strto.h" -#include "sdkconfig.h" -#include "FreeRTOS.h" - -#include "../src/shell.h" -#include "gdma_memcpy.h" +#include "sdkconfig.h" /************************** Constant Definitions *****************************/ /************************** Variable Definitions *****************************/ @@ -40,16 +38,28 @@ /************************** Function Prototypes ******************************/ /*****************************************************************************/ +#ifdef CONFIG_USE_LETTER_SHELL +#include "../src/shell.h" + +#include "gdma_memcpy.h" + +static void SfudCmdUsage() +{ + printf("Usage:\r\n"); + printf("gdma memcpy\r\n"); + printf("-- Run GDMA memcpy example\r\n"); +} + static int GdmaCmdEntry(int argc, char *argv[]) { int ret = 0; if (!strcmp(argv[1], "memcpy")) { - ret = FFreeRTOSRunGdmaMemcpy(); } return ret; } -SHELL_EXPORT_CMD(SHELL_CMD_TYPE(SHELL_TYPE_CMD_MAIN), gdma, GdmaCmdEntry, test freertos gdma driver); \ No newline at end of file +SHELL_EXPORT_CMD(SHELL_CMD_TYPE(SHELL_TYPE_CMD_MAIN), gdma, GdmaCmdEntry, test freertos gdma driver); +#endif \ No newline at end of file diff --git a/example/peripheral/dma/gdma/src/gdma_memcpy.c b/example/peripheral/dma/gdma/src/gdma_memcpy.c index 487e65d3..fa14e616 100644 --- a/example/peripheral/dma/gdma/src/gdma_memcpy.c +++ b/example/peripheral/dma/gdma/src/gdma_memcpy.c @@ -21,7 +21,9 @@ * -----  ------      --------     -------------------------------------- * 1.0 zhugengyu 2022/7/27 init commit * 2.0 liqiaozhong 2023/11/10 synchronous update with standalone sdk + * 3.0 liqiaozhong 2024/4/22 add no letter shell mode, adapt to auto-test system */ + /***************************** Include Files *********************************/ #include #include @@ -32,409 +34,209 @@ #include "queue.h" #include "fkernel.h" -#include "fcache.h" #include "fassert.h" #include "fdebug.h" -#include "fio_mux.h" #include "fgdma_os.h" /************************** Constant Definitions *****************************/ -#define FGDMA_CONTROLLER_ID FGDMA0_ID -#define GDMA_CHAN_TRANS_END(chan) (0x1U << (chan)) -#define GDMA_TASKA_CHANNEL_ID 0U -#define GDMA_TASKB_CHANNEL_ID 1U -#define GDMA_TASKA_TRANS_LEN 256U -#define GDMA_TASKB_TRANS_LEN 1024U -#define GDMA_WORK_TASK_NUM 2U -#define GDMA_TRANS_TIMES 3U -/**************************** Type Definitions *******************************/ - -/************************** Variable Definitions *****************************/ -static FFreeRTOSGdma *gdma_instance_p = NULL; -static FFreeRTOSGdmaChanCfg os_channel_config_taska; -static FFreeRTOSGdmaChanCfg os_channel_config_taskb; -static TaskHandle_t task_a = NULL; -static TaskHandle_t task_b = NULL; -static TimerHandle_t exit_timer = NULL; -static EventGroupHandle_t chan_evt = NULL; -static xSemaphoreHandle gdma_task_counter = NULL; -static uint8_t src_a[GDMA_TASKA_TRANS_LEN] __attribute__((aligned(16))) = {0U}; /* should be aligned with both read and write burst size, defalut: 16-byte */ -static uint8_t dst_a[GDMA_TASKA_TRANS_LEN] __attribute__((aligned(16))) = {0U}; -static uint8_t src_b[GDMA_TASKB_TRANS_LEN] __attribute__((aligned(16))) = {0U}; -static uint8_t dst_b[GDMA_TASKB_TRANS_LEN] __attribute__((aligned(16))) = {0U}; -static uint32_t chan_evt_bits = 0U; /* bits that indicate GDMA_CHAN_TRANS_END */ -static bool is_running = FALSE; -/***************** Macros (Inline Functions) Definitions *********************/ #define FGDMA_DEBUG_TAG "GDMA-MEM" #define FGDMA_ERROR(format, ...) FT_DEBUG_PRINT_E(FGDMA_DEBUG_TAG, format, ##__VA_ARGS__) #define FGDMA_WARN(format, ...) FT_DEBUG_PRINT_W(FGDMA_DEBUG_TAG, format, ##__VA_ARGS__) #define FGDMA_INFO(format, ...) FT_DEBUG_PRINT_I(FGDMA_DEBUG_TAG, format, ##__VA_ARGS__) #define FGDMA_DEBUG(format, ...) FT_DEBUG_PRINT_D(FGDMA_DEBUG_TAG, format, ##__VA_ARGS__) -/************************** Function Prototypes ******************************/ -/*****************************************************************************/ -static void GdmaMemcpyExitCallback(TimerHandle_t timer) +/* user-define */ +#define FGDMA_CONTROLLER_ID FGDMA0_ID +#define GDMA_CHANNEL_ID 0U +#define GDMA_TRANS_LEN 1024U +#define GDMA_ADDR_ALIGNMENT 16U +#define GDMA_MEMCPY_TASK_PRIORITY 3 +#define TIMER_OUT (pdMS_TO_TICKS(4000UL)) +/**************************** Type Definitions *******************************/ +enum { - printf("exiting...\r\n"); + GDMA_MEMCPY_SUCCESS = 1, + GDMA_INIT_FAILURE = 2, + GDMA_MEMCPY_FAILURE = 3, +}; +/************************** Variable Definitions *****************************/ +static FFreeRTOSGdma *gdma_instance_p = NULL; +static FFreeRTOSGdmaChanCfg os_channel_config; +static TaskHandle_t gdma_trans_task = NULL; +const UBaseType_t gdma_trans_task_index = 0; /* the index must set to 0 */ +static QueueHandle_t xQueue = NULL; +static uint8_t src_data[GDMA_TRANS_LEN] __attribute__((aligned(GDMA_ADDR_ALIGNMENT))) = {0U}; /* should be aligned with both read and write burst size, defalut: 16-byte */ +static uint8_t dst_data[GDMA_TRANS_LEN] __attribute__((aligned(GDMA_ADDR_ALIGNMENT))) = {0U}; +/***************** Macros (Inline Functions) Definitions *********************/ - if (task_a) /* stop and delete send task */ - { - vTaskDelete(task_a); - task_a = NULL; - } +/**************************** Function Prototypes ****************************/ - if (task_b) /* stop and delete recv task */ - { - vTaskDelete(task_b); - task_a = NULL; - } +/*************************** Function Definitions ****************************/ +static void GdmaMemcpyAckChanXEnd(uint32_t channel_id, void *args) +{ + FASSERT(channel_id < FFREERTOS_GDMA_NUM_OF_CHAN); - if (chan_evt) - { - vEventGroupDelete(chan_evt); - chan_evt = NULL; - chan_evt_bits = 0U; - } + BaseType_t xhigher_priority_task_woken = pdFALSE; + BaseType_t x_result = pdFALSE; - if (gdma_task_counter) - { - vSemaphoreDelete(gdma_task_counter); - gdma_task_counter = NULL; - } + FGDMA_INFO("FreeRTOS ack: GDMA channel-%d transfer end.", channel_id); - if (gdma_instance_p) - { - if (FFREERTOS_GDMA_OK != FFreeRTOSGdmaDeInit(gdma_instance_p)) - { - FGDMA_ERROR("Deinit GDMA instance failed."); - } - gdma_instance_p = NULL; - } + vTaskNotifyGiveIndexedFromISR(gdma_trans_task, gdma_trans_task_index, &xhigher_priority_task_woken); + gdma_trans_task = NULL; /* 将目标任务句柄清空,防止产生不必要的通知 */ + portYIELD_FROM_ISR(xhigher_priority_task_woken); /* 如果中断触发了更高优先级的任务,确保更高优先级的任务尽快执行 */ - if (exit_timer) - { - if (pdPASS != xTimerDelete(exit_timer, 0)) - { - FGDMA_ERROR("Delete exit timer failed."); - } - exit_timer = NULL; - } + return; +} + +static int GdmaInit(void) +{ + int task_res = GDMA_MEMCPY_SUCCESS; - is_running = FALSE; + gdma_instance_p = FFreeRTOSGdmaInit(FGDMA_CONTROLLER_ID); + + return task_res; } -static void GdmaMemcpyAckChanXEnd(uint32_t channel_id, void *args) +static int GdmaMemcpy(void) { - FASSERT(channel_id < FFREERTOS_GDMA_NUM_OF_CHAN); + int task_res = GDMA_MEMCPY_SUCCESS; + uint32_t notify_result; + FError err = FFREERTOS_GDMA_OK; + const TickType_t max_block_time = pdMS_TO_TICKS(3000UL); - BaseType_t xhigher_priority_task_woken = pdFALSE; - BaseType_t x_result = pdFALSE; + /* os channel config set */ + os_channel_config.trans_mode = FFREERTOS_GDMA_OPER_DIRECT; + os_channel_config.src_addr = (uintptr_t)src_data; + os_channel_config.dst_addr = (uintptr_t)dst_data; + os_channel_config.trans_length = GDMA_TRANS_LEN; - FGDMA_INFO("FreeRTOS ack: GDMA chan-%d transfer end.", channel_id); - x_result = xEventGroupSetBitsFromISR(chan_evt, GDMA_CHAN_TRANS_END(channel_id), &xhigher_priority_task_woken); - - if (x_result == pdFALSE) + err = FFreeRTOSGdmaChanConfigure(gdma_instance_p, GDMA_CHANNEL_ID, &os_channel_config); + if (FFREERTOS_GDMA_OK != err) { - FGDMA_ERROR("xEventGroupSetBitsFromISR() fail."); + FGDMA_ERROR("FFreeRTOSGdmaChanConfigure() failed."); + goto memcpy_exit; } - portYIELD_FROM_ISR(xhigher_priority_task_woken); - - return; -} + FFreeRTOSGdmaChanRegisterEvtHandler(gdma_instance_p, + GDMA_CHANNEL_ID, + FFREERTOS_GDMA_CHAN_EVT_TRANS_END, + GdmaMemcpyAckChanXEnd, + NULL); -static unsigned long GdmaMemcpyWaitChanXEnd(uint32_t channel_id) -{ - FASSERT(channel_id < FFREERTOS_GDMA_NUM_OF_CHAN); + memset((void *)src_data, 'A', GDMA_TRANS_LEN); + memset((void *)dst_data, 0, GDMA_TRANS_LEN); - EventBits_t evt_result; + gdma_trans_task = xTaskGetCurrentTaskHandle(); /* store the handle of the calling task. */ - /* block task to wait memcpy finish signal */ - evt_result = xEventGroupWaitBits(chan_evt, GDMA_CHAN_TRANS_END(channel_id), - pdTRUE, pdTRUE, pdMS_TO_TICKS(5000UL)); /* wait for channel end event bit(5s) */ - if ((evt_result & GDMA_CHAN_TRANS_END(channel_id))) /* wait until channel finished memcpy */ + FFreeRTOSGdmaChanStart(gdma_instance_p, GDMA_CHANNEL_ID); + + notify_result = ulTaskNotifyTakeIndexed(gdma_trans_task_index, pdTRUE, max_block_time); /* wait to be notified that the transmission is complete */ + if (notify_result != 1) { - FGDMA_INFO("GDMA memcpy finished. Channel bits: 0x%x.", chan_evt_bits); - return TRUE; + err = FFREERTOS_GDMA_MEMCPY_FAIL; + FGDMA_ERROR("Wait GDMA finish timeout."); + goto memcpy_exit; + } + + /* compare if memcpy success */ + if (0 == memcmp(src_data, dst_data, GDMA_TRANS_LEN)) + { + taskENTER_CRITICAL(); + printf("src buf...\r\n"); + FtDumpHexByte((const uint8_t *)src_data, min((size_t)GDMA_TRANS_LEN, (size_t)64U)); + printf("dst buf...\r\n"); + FtDumpHexByte((const uint8_t *)dst_data, min((size_t)GDMA_TRANS_LEN, (size_t)64U)); + taskEXIT_CRITICAL(); } else { - FGDMA_ERROR("Wait GDMA memcpy timeout. Channel bits: 0x%x, correct value: 0x%x.", evt_result, chan_evt_bits); - return FALSE; + FGDMA_ERROR("src != dst, GDMA memcpy failed."); + goto memcpy_exit; } - return TRUE; -} - -static void GdmaInitTask(void *args) -{ - gdma_instance_p = FFreeRTOSGdmaInit(FGDMA_CONTROLLER_ID); - FASSERT_MSG(gdma_instance_p, "Init gdma controller failed."); - - FASSERT_MSG(gdma_task_counter, "GDMA task counter does not exist."); - for (size_t loop = 0; loop < GDMA_WORK_TASK_NUM; loop++) +memcpy_exit: + if (FFREERTOS_GDMA_OK != FFreeRTOSGdmaChanStop(gdma_instance_p, GDMA_CHANNEL_ID)) { - xSemaphoreGive(gdma_task_counter); + FGDMA_ERROR("FFreeRTOSGdmaChanStop() failed."); } - vTaskDelete(NULL); -} - -static void GdmaMemcpyTaskA(void *args) -{ - FASSERT_MSG(gdma_task_counter, "GDMA task counter does not exist."); - - xSemaphoreTake(gdma_task_counter, portMAX_DELAY); - - char ch = 'A'; - uint8_t times = 0U; - FError err = FFREERTOS_GDMA_OK; - - for (;;) + if (FFREERTOS_GDMA_OK != FFreeRTOSGdmaChanDeconfigure(gdma_instance_p, GDMA_CHANNEL_ID)) { - /* os channel config set */ - os_channel_config_taska.trans_mode = FFREERTOS_GDMA_OPER_DIRECT; - os_channel_config_taska.src_addr = (uintptr_t)src_a; - os_channel_config_taska.dst_addr = (uintptr_t)dst_a; - os_channel_config_taska.trans_length = GDMA_TASKA_TRANS_LEN; - - err = FFreeRTOSGdmaChanConfigure(gdma_instance_p, GDMA_TASKA_CHANNEL_ID, &os_channel_config_taska); - if (FFREERTOS_GDMA_OK != err) - { - FGDMA_ERROR("FFreeRTOSGdmaChanConfigure in channel-%d failed.", GDMA_TASKA_CHANNEL_ID); - goto task_err; - } - - FFreeRTOSGdmaChanRegisterEvtHandler(gdma_instance_p, - GDMA_TASKA_CHANNEL_ID, - FFREERTOS_GDMA_CHAN_EVT_TRANS_END, - GdmaMemcpyAckChanXEnd, - NULL); - - ch = (char)('A' + (times) % 10); /* send different content each time */ - - memset((void *)src_a, ch, GDMA_TASKA_TRANS_LEN); - memset((void *)dst_a, 0, GDMA_TASKA_TRANS_LEN); - - /* Memory barrier operation */ - FCacheDCacheInvalidateRange((uintptr_t)src_a, GDMA_TASKA_TRANS_LEN); - FCacheDCacheInvalidateRange((uintptr_t)dst_a, GDMA_TASKA_TRANS_LEN); - - FGDMA_INFO("[Task-A]start GDMA memcpy data ..."); - FFreeRTOSGdmaChanStart(gdma_instance_p, GDMA_TASKA_CHANNEL_ID); - - /* recv task has high priority, send task will not run before recv task blocked */ - if (!GdmaMemcpyWaitChanXEnd(GDMA_TASKA_CHANNEL_ID)) - { - goto task_err; - } - - FCacheDCacheInvalidateRange((uintptr)src_a, GDMA_TASKA_TRANS_LEN); - FCacheDCacheInvalidateRange((uintptr)dst_a, GDMA_TASKA_TRANS_LEN); - - /* compare if memcpy success */ - if (0 == memcmp(src_a, dst_a, GDMA_TASKA_TRANS_LEN)) - { - taskENTER_CRITICAL(); - printf("\r\n[Task-A]GDMA memcpy success.\r\n"); - printf("[Task-A]src buf...\r\n"); - FtDumpHexByte((const uint8_t *)src_a, min((size_t)GDMA_TASKA_TRANS_LEN, (size_t)64U)); - printf("[Task-A]dst buf...\r\n"); - FtDumpHexByte((const uint8_t *)dst_a, min((size_t)GDMA_TASKA_TRANS_LEN, (size_t)64U)); - taskEXIT_CRITICAL(); - } - else - { - FGDMA_ERROR("[Task-A]src != dst, GDMA memcpy failed."); - goto task_err; - } - - err = FFreeRTOSGdmaChanStop(gdma_instance_p, GDMA_TASKA_CHANNEL_ID); - if (FFREERTOS_GDMA_OK != err) - { - FGDMA_ERROR("FFreeRTOSGdmaChanStop in channel-%d failed.", GDMA_TASKA_CHANNEL_ID); - goto task_err; - } - - err = FFreeRTOSGdmaChanDeconfigure(gdma_instance_p, GDMA_TASKA_CHANNEL_ID); - if (FFREERTOS_GDMA_OK != err) - { - FGDMA_ERROR("FFreeRTOSGdmaChanDeconfigure in channel-%d failed.", GDMA_TASKA_CHANNEL_ID); - goto task_err; - } - - if (times++ > GDMA_TRANS_TIMES) - { - break; - } - - vTaskDelay(pdMS_TO_TICKS(2000U)); /* wait for 2 seconds */ + FGDMA_ERROR("FFreeRTOSGdmaChanDeconfigure() failed."); } -task_err: - (void)FFreeRTOSGdmaChanDeconfigure(gdma_instance_p, GDMA_TASKA_CHANNEL_ID); - printf("[Task-A]exit from GDMA memcpy task.\r\n"); - vTaskSuspend(NULL); /* failed, not able to run, suspend task itself */ + return task_res; } -static void GdmaMemcpyTaskB(void *args) +static void GdmaMemcpyTask() { - FASSERT_MSG(gdma_task_counter, "GDMA task counter does not exist."); - - xSemaphoreTake(gdma_task_counter, portMAX_DELAY); + int task_res = GDMA_MEMCPY_SUCCESS; - char ch = '0'; - uint8_t times = 0U; - FError err = FFREERTOS_GDMA_OK; + task_res = GdmaInit(); + if (task_res != GDMA_MEMCPY_SUCCESS) + { + FGDMA_ERROR("GdmaInit() failed."); + goto task_exit; + } - for (;;) + task_res = GdmaMemcpy(); + if (task_res != GDMA_MEMCPY_SUCCESS) { - /* os channel config set */ - os_channel_config_taskb.trans_mode = FFREERTOS_GDMA_OPER_BDL; - os_channel_config_taskb.src_addr = (uintptr_t)src_b; - os_channel_config_taskb.dst_addr = (uintptr_t)dst_b; - os_channel_config_taskb.trans_length = GDMA_TASKB_TRANS_LEN; - - err = FFreeRTOSGdmaChanConfigure(gdma_instance_p, GDMA_TASKB_CHANNEL_ID, &os_channel_config_taskb); - if (FFREERTOS_GDMA_OK != err) - { - FGDMA_ERROR("FFreeRTOSGdmaChanConfigure in channel-%d failed.", GDMA_TASKB_CHANNEL_ID); - goto task_err; - } - - FFreeRTOSGdmaChanRegisterEvtHandler(gdma_instance_p, - GDMA_TASKB_CHANNEL_ID, - FFREERTOS_GDMA_CHAN_EVT_TRANS_END, - GdmaMemcpyAckChanXEnd, - NULL); - - ch = (char)('0' + (times) % 10); /* send different content each time */ - - memset((void *)src_b, ch, GDMA_TASKB_TRANS_LEN); - memset((void *)dst_b, 0, GDMA_TASKB_TRANS_LEN); - - /* Memory barrier operation */ - FCacheDCacheInvalidateRange((uintptr_t)src_b, GDMA_TASKB_TRANS_LEN); - FCacheDCacheInvalidateRange((uintptr_t)dst_b, GDMA_TASKB_TRANS_LEN); - - FGDMA_INFO("[Task-B]start GDMA memcpy data ..."); - FFreeRTOSGdmaChanStart(gdma_instance_p, GDMA_TASKB_CHANNEL_ID); - - /* recv task has high priority, send task will not run before recv task blocked */ - if (!GdmaMemcpyWaitChanXEnd(GDMA_TASKB_CHANNEL_ID)) - { - goto task_err; - } - - FCacheDCacheInvalidateRange((uintptr)src_b, GDMA_TASKB_TRANS_LEN); - FCacheDCacheInvalidateRange((uintptr)dst_b, GDMA_TASKB_TRANS_LEN); - - /* compare if memcpy success */ - if (0 == memcmp(src_a, dst_a, GDMA_TASKB_TRANS_LEN)) - { - taskENTER_CRITICAL(); - printf("\r\n[Task-B]GDMA memcpy success.\r\n"); - printf("[Task-B]src buf...\r\n"); - FtDumpHexByte((const uint8_t *)src_b, min((size_t)GDMA_TASKB_TRANS_LEN, (size_t)64U)); - printf("[Task-B]dst buf...\r\n"); - FtDumpHexByte((const uint8_t *)dst_b, min((size_t)GDMA_TASKB_TRANS_LEN, (size_t)64U)); - taskEXIT_CRITICAL(); - } - else - { - FGDMA_ERROR("[TaskB]src != dst, GDMA memcpy failed."); - goto task_err; - } - - err = FFreeRTOSGdmaChanStop(gdma_instance_p, GDMA_TASKB_CHANNEL_ID); - if (FFREERTOS_GDMA_OK != err) - { - FGDMA_ERROR("FFreeRTOSGdmaChanStop in channel-%d failed.", GDMA_TASKB_CHANNEL_ID); - goto task_err; - } - - err = FFreeRTOSGdmaChanDeconfigure(gdma_instance_p, GDMA_TASKB_CHANNEL_ID); - if (FFREERTOS_GDMA_OK != err) - { - FGDMA_ERROR("FFreeRTOSGdmaChanDeconfigure in channel-%d failed.", GDMA_TASKB_CHANNEL_ID); - goto task_err; - } - - if (times++ > GDMA_TRANS_TIMES) - { - break; - } - - vTaskDelay(pdMS_TO_TICKS(2000U)); /* wait for 2 seconds */ + FGDMA_ERROR("GdmaMemcpy() failed."); + goto task_exit; } -task_err: - (void)FFreeRTOSGdmaChanDeconfigure(gdma_instance_p, GDMA_TASKB_CHANNEL_ID); - printf("[Task-B]exit from GDMA memcpy task.\r\n"); - vTaskSuspend(NULL); /* failed, not able to run, suspend task itself */ +task_exit: + xQueueSend(xQueue, &task_res, 0); + + vTaskDelete(NULL); } BaseType_t FFreeRTOSRunGdmaMemcpy(void) { - BaseType_t ret = pdPASS; - const TickType_t total_run_time = pdMS_TO_TICKS(30000UL); /* loopback run for 30 secs deadline */ + BaseType_t xReturn = pdPASS; /* 定义一个创建信息返回值,默认为 pdPASS */ + int task_res = 0; - if (is_running) + xQueue = xQueueCreate(1, sizeof(int)); /* 创建消息队列 */ + if (xQueue == NULL) { - FGDMA_ERROR("task is running, please wait for the program to complete."); - return pdPASS; + FGDMA_ERROR("xQueue create failed."); + goto exit; } - is_running = TRUE; - - FASSERT_MSG(NULL == chan_evt, "Event group has been created aready."); - FASSERT_MSG((chan_evt = xEventGroupCreate()) != NULL, "Create event group failed."); - - FASSERT_MSG(NULL == gdma_task_counter, "GDMA task counter has been created aready."); - FASSERT_MSG((gdma_task_counter = xSemaphoreCreateCounting(GDMA_WORK_TASK_NUM, 0U)) != NULL, "create event group failed !!!"); - - taskENTER_CRITICAL(); /* no schedule when create task */ - - ret = xTaskCreate((TaskFunction_t)GdmaInitTask, /* task entry */ - (const char *)"GdmaInitTask",/* task name */ - (uint16_t)1024, /* task stack size in words */ - NULL, /* task params */ - (UBaseType_t)configMAX_PRIORITIES - 1, /* task priority */ - NULL); /* task handler */ - - FASSERT_MSG(pdPASS == ret, "create task failed"); - - ret = xTaskCreate((TaskFunction_t)GdmaMemcpyTaskA, /* task entry */ - (const char *)"GdmaMemcpyTaskA",/* task name */ - (uint16_t)4096, /* task stack size in words */ - NULL, /* task params */ - (UBaseType_t)configMAX_PRIORITIES - 1, /* task priority */ - (TaskHandle_t *)&task_a); /* task handler */ - - FASSERT_MSG(pdPASS == ret, "create task failed"); - - ret = xTaskCreate((TaskFunction_t)GdmaMemcpyTaskB, /* task entry */ - (const char *)"GdmaMemcpyTaskB",/* task name */ - (uint16_t)4096, /* task stack size in words */ - NULL, /* task params */ - (UBaseType_t)configMAX_PRIORITIES - 2, /* task priority */ - (TaskHandle_t *)&task_b); /* task handler */ - - FASSERT_MSG(pdPASS == ret, "create task failed"); - - exit_timer = xTimerCreate("Exit-Timer", /* Text name for the software timer - not used by FreeRTOS. */ - total_run_time, /* The software timer's period in ticks. */ - pdFALSE, /* Setting uxAutoRealod to pdFALSE creates a one-shot software timer. */ - NULL, /* use timer id to pass task data for reference. */ - GdmaMemcpyExitCallback); /* The callback function to be used by the software timer being created. */ - - FASSERT_MSG(NULL != exit_timer, "create exit timer failed"); - - taskEXIT_CRITICAL(); /* allow schedule since task created */ + xReturn = xTaskCreate((TaskFunction_t)GdmaMemcpyTask, /* 任务入口函数 */ + (const char *)"GdmaMemcpyTask", /* 任务名字 */ + (uint16_t)4096, /* 任务栈大小 */ + NULL, /* 任务入口函数参数 */ + (UBaseType_t)GDMA_MEMCPY_TASK_PRIORITY, /* 任务优先级 */ + NULL); /* 任务句柄 */ + if (xReturn == pdFAIL) + { + FGDMA_ERROR("xTaskCreate GdmaMemcpyTask failed."); + goto exit; + } - ret = xTimerStart(exit_timer, 0); /* start */ + xReturn = xQueueReceive(xQueue, &task_res, TIMER_OUT); + if (xReturn == pdFAIL) + { + FGDMA_ERROR("xQueue receive timeout."); + goto exit; + } - FASSERT_MSG(pdPASS == ret, "start exit timer failed"); + exit: + if (xQueue != NULL) + { + vQueueDelete(xQueue); + } - return ret; + if (task_res != GDMA_MEMCPY_SUCCESS) + { + printf("%s@%d: GDMA memcpy example [failure], task_res = %d\r\n", __func__, __LINE__, task_res); + return pdFAIL; + } + else + { + printf("%s@%d: GDMA memcpy example [success].\r\n", __func__, __LINE__); + return pdTRUE; + } } \ No newline at end of file diff --git a/example/peripheral/pwm/README.md b/example/peripheral/pwm/README.md index 91f14ad1..7924b0bf 100644 --- a/example/peripheral/pwm/README.md +++ b/example/peripheral/pwm/README.md @@ -2,31 +2,44 @@ ## 1. 例程介绍 -本例程示范了freertos环境下的pwm的使用,包括pwm的初始化、pwm占空比周期变化操作; -程序启动后,创建pwm初始化任务,设置pwm时钟分频、周期和占空比等; -创建pwm占空比变化任务FFreeRTOSPwmChangeTask,用于定时变化pwm占空比; -创建单次模式的软件定时器,回调函数为删除FFreeRTOSPwmChangeTask,去初始化pwm,删除软件定时器; 注:E2000共有8个PWM控制器(PWM0~PWM7),每个PWM控制器对应两路CHANNEL -## 2. 如何使用例程 +PWM单通道测试例程 (pwm_single_channel_example.c) -本例程需要用到 -- Phytium开发板(E2000D/E2000Q/PhytiumPi) -- [Phytium freeRTOS SDK](https://gitee.com/phytium_embedded/phytium-free-rtos-sdk) -- [Phytium standalone SDK](https://gitee.com/phytium_embedded/phytium-standalone-sdk) -### 2.1 硬件配置方法 +- 初始化PWM基本配置 +- 对CHANNEL0进行配置,设置为500分频,设置周期寄存器的值为10000(100ms),设置初始脉冲为2000,即初始占空比为20% +- 打开CHANNEL0 COUNTER_OVERFLOW中断和FIFO_EMPTY中断 +- 使能CHANNEL0,脉冲值每隔500ms增加1000,共进行5次变化,每次占空比增加10%,观察输出波形的变化 +- 关闭CHANNEL0,去初始化PWM -本例程支持的硬件平台包括 +PWM死区测试例程 (pwm_dead_band_example.c) -- E2000D -- E2000Q -- PhytiumPi +- 初始化PWM基本配置 +- 对死区进行配置,上升沿和下降沿均打开延迟,延迟配置为800,极性不进行翻转,死区输入源默认选择为pwm0(CHANNEL0),pwm1(CHANNEL1)根据输入源和死区属性的配置输出相应波形 +- 对CHANNEL0进行配置,设置为500分频,设置周期寄存器的值为10000(100ms),设置初始脉冲为2000,即初始占空比为20% +- 使能CHANNEL0,脉冲值每隔500ms增加1000,共进行5次变化,每次占空比增加10%,观察输出波形的变化 +- CHANNEL1作为死区输出,观察死区输出波形的变化 +- 关闭CHANNEL0,去初始化PWM -对应的配置项是, +PWM双通道测试例程 (pwm_dual_channel_example.c) + +- 初始化PWM基本配置 +- 对CHANNEL0进行配置,设置为500分频,设置周期寄存器的值为10000(100ms),设置初始脉冲为2000,即初始占空比为20% +- 对CHANNEL1进行配置,设置为1000分频,设置周期寄存器的值为20000(400ms),设置初始脉冲为2000,即初始占空比为10% +- 打开CHANNEL0和CHANNEL1 COUNTER_OVERFLOW中断和FIFO_EMPTY中断 +- 使能CHANNEL0,脉冲值每隔500ms增加1000,共进行5次变化,每次占空比增加10%,观察输出波形的变化 +- 使能CHANNEL1,脉冲值每隔500ms增加1000,共进行5次变化,每次占空比增加5%,观察输出波形的变化 +- 关闭CHANNEL0和CHANNEL1,去初始化PWM + +## 2. 如何使用例程 + +本例程需要以下硬件, -- CONFIG_TARGET_E2000D -- CONFIG_TARGET_E2000Q -- CONFIG_TARGET_PHYTIUMPI +- E2000D/Q demo板,PhytiumPi +- 串口线和串口上位机 +- 逻辑分析仪/示波器 +- 杜邦线 +### 2.1 硬件配置方法 ### 2.1.1 E2000 - E2000 demo板需外接逻辑分析仪或示波器测试,方法如下 @@ -40,10 +53,6 @@ ### 2.1.2 PhytiumPi - PhytiumPi需外接逻辑分析仪或示波器测试,方法如下 -- PhytiumPI:飞腾派引出多个引脚可供PWM使用 - -![phytiumpi_pwm](./figs/phytiumpi_pwm.png) - PhytiumPI:飞腾派引出多个引脚可供PWM使用 | **引脚** | **控制器与通道** | @@ -107,23 +116,51 @@ bootelf -p 0x90100000 ### 2.4 输出与实验现象 -- 系统进入后,创建pwm初始化任务,创建占空比变化任务,并创建单次模式软件定时器 +>描述输入输出情况,列出存在哪些输出,对应的输出是什么(建议附录相关现象图片)`
` -![create](./figs/create.png) +#### 2.4.1 PWM单通道测试例程 -- 定时器时间到,触发单次模式软件定时器的回调函数,去初始化pwm,删除占空比变化任务,删除软件定时器 +``` +$ pwm single_channel +``` -![delete](./figs/delete.png) +![single_channel](./figs/single_channel.png) -- 输出波形如下所示 +pwm单通道测试对应波形 -![pwm_out](./figs/pwm_out.png) -## 3. 如何解决问题 +![pwm_single_channel_waveform](./figs/pwm_single_channel_waveform.png) + +#### 2.4.2 PWM死区测试例程 -- 如默认用例无法使用或无波形输出,请根据不同的开发板,修改`pwm_example.h`文件中`PWM_TEST_ID`和`PWM_TEST_CHANNEL`两个宏定义,确保`FIOPadSetPwmMux`引脚复用设置正确 +``` +$ pwm dead_band +``` + +![pwm_dead_band](./figs/pwm_dead_band.png) + +pwm死区测试对应波形,参考时钟 FPWM_CLK_FREQ_HZ = 50MHz,上升沿延迟寄存器配置为800,延迟时间为 (1/50MHz)*800 = 16μs + +![pwm_dead_band_waveform](./figs/pwm_dead_band_waveform.png) + +#### 2.4.3 PWM双通道测试例程 + +``` +$ pwm dual_channel +``` + +![pwm_dual_channel](./figs/pwm_dual_channel.png) + +pwm双通道测试对应波形 + +![pwm_dual_channel_waveform](./figs/pwm_dual_channel_waveform.png) + +## 3. 如何解决问题 -- `PWM_TEST_CHANNEL`决定死区输入源,另一个CHANNEL作为输出源。若不想使能死区输出,可将FFreeRTOSPwmDbSet的部分去除,只需调用FFreeRTOSPwmSet即 可。 +- 如默认用例无法使用或无波形输出,请根据不同的开发板,修改`pwm_common.h`文件中`PWM_TEST_ID`和`PWM_TEST_CHANNEL`两个宏定义,确保`FIOPadSetPwmMux`引脚复用设置正确 +- PWM双通道测试例程,默认使用两个通道观测。 +- PWM死区测试例程中,`PWM_TEST_CHANNEL`决定死区输入源,另一个CHANNEL作为输出源。 +- E2000 DEMO V0.8板无法使用PWM4至PWM7,故无法进行本用例 ## 4. 修改历史记录 diff --git a/example/peripheral/pwm/figs/create.png b/example/peripheral/pwm/figs/create.png deleted file mode 100644 index 1ae309e04858bb6e76aa77c1856cad7e8ed2c7c8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31971 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 S?7S_ANK;i;rBccI#s2_*EQ&4w diff --git a/example/peripheral/pwm/figs/delete.png b/example/peripheral/pwm/figs/delete.png deleted file mode 100644 index 98aa8e9d2c5265621755adcb8ba7027c6ca6b4de..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13527 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 diff --git a/example/peripheral/pwm/figs/phytiumpi_pwm.png b/example/peripheral/pwm/figs/phytiumpi_pwm.png deleted file mode 100644 index c31475e90c23c77707c53f4c6c3875b433a61a57..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 109874 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

xc$4=nL_YhDI{& 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

9_1^0*>NgMFtB3d9 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%0D})5G|v+%KpA_Ng#*E=Gv{Q-F%7 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 literal 0 HcmV?d00001 diff --git a/example/peripheral/pwm/figs/pwm_dead_band_waveform.png b/example/peripheral/pwm/figs/pwm_dead_band_waveform.png new file mode 100644 index 0000000000000000000000000000000000000000..8fba9f85ffb5251093277013c4cc58fc26c607d1 GIT binary patch literal 7738 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 literal 0 HcmV?d00001 diff --git a/example/peripheral/pwm/figs/pwm_dual_channel.png b/example/peripheral/pwm/figs/pwm_dual_channel.png new file mode 100644 index 0000000000000000000000000000000000000000..594f931d8eb262c2e696b42660927a98a16360e9 GIT binary patch literal 6049 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 literal 0 HcmV?d00001 diff --git a/example/peripheral/pwm/figs/pwm_dual_channel_waveform.png b/example/peripheral/pwm/figs/pwm_dual_channel_waveform.png new file mode 100644 index 0000000000000000000000000000000000000000..7e2fb7c3d7a47c4e6f47ed7da85d0548a90fc728 GIT binary patch literal 14527 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 literal 0 HcmV?d00001 diff --git a/example/peripheral/pwm/figs/single_channel.png b/example/peripheral/pwm/figs/single_channel.png new file mode 100644 index 0000000000000000000000000000000000000000..5c15afbe57450d642d37b1632d2eb4ea3ecd3288 GIT binary patch literal 7129 zcmbuEdpy(s`~O$(diO3hhlt*$p(KgrkYiawl2a&$$Q)wj*erzEI(ZwzDumD~gpxUq z5Y?uYIaESUEo0<-YV5r4*8B7QeZIfn=li|gKEL1ZkL|hVUawuR>v=uzug7)0uBDuD zvfZ)m&ustzV29l)YgYhZW3u@3)jxh0zptm~qQt`nq^s=-KxH>*T0GeVw{)}w0IKm) zeE-ej`PM6^ypR9@kSuv^phlKm1OSvH?5r)%Uh|zVG>@7v`+QQ=m4O&I>|{HlaNx;jd8?0-$Ub;$LchRXQuv!~SWUc1BJw(pE+eE^2JAY7-5 z#Fqg8d}Jh!0q$6WHj0Piza##TO!HJ2OH)h^9Rqua@gm*gu*O%27))DBt1?M?a=slq zE?}+9GvRq_c_t+S49u4xj6v@NkG6qL(6NZwwGDvlL?GkJ?^c_HoGB_Zzv%{sHx=tI zk}nt)ey+rljf^jY0RZ;Q$SIJ;#~nk}503nNGEHU9d&s4?K``H-k4=s$Q~bdcH2`1) zUT}|kUNo&us z&_twjs{k$=;Y`f&01wA1z!NhanO}t3X

B@4z&p;(=DR{ceq?yj&-*3d~GkFXudk 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

4e@ndfivgCD-gHzq z9lqqg##s~h)vg;Hrl>jWH9%o^i5JMWRt3iHHAr5$G%9Ju0FLheRo?>M|D&CA>+dpm l`>!SsK>y!3h~-bMh-6CiD-z(bI%10eI~ynK$`gJ!{{!0@2SES; literal 0 HcmV?d00001 diff --git a/example/peripheral/pwm/inc/pwm_example.h b/example/peripheral/pwm/inc/pwm_example.h index fd7b5c49..215320c8 100644 --- a/example/peripheral/pwm/inc/pwm_example.h +++ b/example/peripheral/pwm/inc/pwm_example.h @@ -25,21 +25,25 @@ #ifndef PWM_EXAMPLE_H #define PWM_EXAMPLE_H +#include "FreeRTOS.h" #ifdef __cplusplus extern "C" { #endif -#if defined(CONFIG_TARGET_E2000D)||defined(CONFIG_TARGET_E2000Q) +/************************** Constant Definitions *****************************/ +#if defined(CONFIG_E2000Q_DEMO_BOARD)||defined(CONFIG_E2000D_DEMO_BOARD) #define PWM_TEST_ID FPWM6_ID #define PWM_TEST_CHANNEL FPWM_CHANNEL_0 -#elif defined(CONFIG_TARGET_PHYTIUMPI) -#define PWM_TEST_ID FPWM2_ID -#define PWM_TEST_CHANNEL FPWM_CHANNEL_1 +#elif defined(CONFIG_FIREFLY_DEMO_BOARD) +#define PWM_TEST_ID FPWM4_ID +#define PWM_TEST_CHANNEL FPWM_CHANNEL_0 #endif /* pwm test */ -BaseType_t FFreeRTOSPwmCreate(u32 id); +BaseType_t FFreeRTOSPwmDeadBandTaskCreate(); +BaseType_t FFreeRTOSPwmSingleChannelTaskCreate(); +BaseType_t FFreeRTOSPwmDualChannelTaskCreate(); #ifdef __cplusplus } diff --git a/example/peripheral/pwm/main.c b/example/peripheral/pwm/main.c index bfc5c512..6d288e41 100644 --- a/example/peripheral/pwm/main.c +++ b/example/peripheral/pwm/main.c @@ -22,22 +22,44 @@ * 1.0 wangxiaodong 2022/8/24 first release */ +#include +#include "FreeRTOS.h" +#ifdef CONFIG_USE_LETTER_SHELL #include "shell.h" #include "shell_port.h" -#include +#else +#include "task.h" #include "pwm_example.h" +void PwmExampleTaskEntry() +{ + /* example functions */ + FFreeRTOSPwmSingleChannelTaskCreate(); +#ifdef CONFIG_FIREFLY_DEMO_BOARD + FFreeRTOSPwmDeadBandTaskCreate(); + + FFreeRTOSPwmDualChannelTaskCreate(); +#endif + /* end flag */ + printf("[test_end]\r\n"); + vTaskDelete(NULL); +} +#endif + int main(void) { BaseType_t ret; - /* test pwm*/ - ret = FFreeRTOSPwmCreate(PWM_TEST_ID); - if (ret != pdPASS) - { - goto FAIL_EXIT; - } - - ret = LSUserShellTask() ; +#ifdef CONFIG_USE_LETTER_SHELL + ret = LSUserShellTask(); +#else + /* used in no-letter-shell mode */ + ret = xTaskCreate((TaskFunction_t)PwmExampleTaskEntry, /* 任务入口函数 */ + (const char *)"PwmExampleTaskEntry", /* 任务名字 */ + (uint16_t)4096, /* 任务栈大小 */ + NULL, /* 任务入口函数参数 */ + (UBaseType_t)5, /* 任务优先级 */ + NULL); /* 任务句柄 */ +#endif if (ret != pdPASS) { goto FAIL_EXIT; diff --git a/example/peripheral/pwm/makefile b/example/peripheral/pwm/makefile index 13c14898..dde32d4b 100644 --- a/example/peripheral/pwm/makefile +++ b/example/peripheral/pwm/makefile @@ -2,13 +2,19 @@ PROJECT_DIR = $(CURDIR) FREERTOS_SDK_DIR = $(CURDIR)/../../.. - +include $(PROJECT_DIR)/sdkconfig # # 设置启动镜像名 BOOT_IMG_NAME ?= freertos USER_CSRC := main.c -USER_CSRC += $(wildcard src/*.c) -USER_CSRC += $(wildcard ../common/*.c) +USER_CSRC += src/cmd_pwm.c + +USER_CSRC += src/pwm_single_channel_example.c + +ifdef CONFIG_FIREFLY_DEMO_BOARD +USER_CSRC += src/pwm_dead_band_example.c +USER_CSRC += src/pwm_dual_channel_example.c +endif USER_ASRC := USER_CXXSRC := diff --git a/example/peripheral/pwm/src/cmd_pwm.c b/example/peripheral/pwm/src/cmd_pwm.c new file mode 100644 index 00000000..e596a6c8 --- /dev/null +++ b/example/peripheral/pwm/src/cmd_pwm.c @@ -0,0 +1,86 @@ +/* + * Copyright : (C) 2022 Phytium Information Technology, Inc. + * All Rights Reserved. + * + * This program is OPEN SOURCE software: you can redistribute it and/or modify it + * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, + * either version 1.0 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the Phytium Public License for more details. + * + * + * FilePath: cmd_pwm.c + * Date: 2022-07-14 14:06:43 + * LastEditTime: 2022-07-14 14:06:43 + * Description:  This files is for gdma command interface + * + * Modify History: + * Ver    Who         Date         Changes + * -----  ------      --------     -------------------------------------- + * 1.0 zhangyan 2024/4/23 init commit + */ + +/***************************** Include Files *********************************/ +#include +#include +#include "strto.h" + +#include "sdkconfig.h" +#include "pwm_example.h" +/************************** Constant Definitions *****************************/ + +/************************** Variable Definitions *****************************/ + +/***************** Macros (Inline Functions) Definitions *********************/ + +/************************** Function Prototypes ******************************/ + +/*****************************************************************************/ +#ifdef CONFIG_USE_LETTER_SHELL +#include "../src/shell.h" + +static void PwmCmdUsage(void) +{ + printf("Usage:\r\n"); + printf("pwm single_channel\r\n"); + printf("-- run pwm single channel at controller \r\n"); +#ifdef CONFIG_FIREFLY_DEMO_BOARD + printf("pwm dead_band\r\n"); + printf("-- run pwm dead band example at controller \r\n"); + printf("pwm dual_channel\r\n"); + printf("-- run pwm dual channel at controller \r\n"); +#endif +} + +static int PwmCmdEntry(int argc, char *argv[]) +{ + int ret = 0; + + if (argc < 2) + { + PwmCmdUsage(); + return -1; + } + /* parser example input args and run example */ + if (!strcmp(argv[1], "single_channel")) + { + ret = FFreeRTOSPwmSingleChannelTaskCreate(); + } +#ifdef CONFIG_FIREFLY_DEMO_BOARD + if (!strcmp(argv[1], "dead_band")) + { + ret = FFreeRTOSPwmDeadBandTaskCreate(); + } + + if (!strcmp(argv[1], "dual_channel")) + { + ret = FFreeRTOSPwmDualChannelTaskCreate(); + } +#endif + + return ret; +} +SHELL_EXPORT_CMD(SHELL_CMD_TYPE(SHELL_TYPE_CMD_MAIN), pwm, PwmCmdEntry, test freertos pwm driver); +#endif \ No newline at end of file diff --git a/example/peripheral/pwm/src/pwm_example.c b/example/peripheral/pwm/src/pwm_dead_band_example.c similarity index 43% rename from example/peripheral/pwm/src/pwm_example.c rename to example/peripheral/pwm/src/pwm_dead_band_example.c index 17f264fd..59c2d72e 100644 --- a/example/peripheral/pwm/src/pwm_example.c +++ b/example/peripheral/pwm/src/pwm_dead_band_example.c @@ -11,7 +11,7 @@ * See the Phytium Public License for more details. * * - * FilePath: pwm_example.c + * FilePath: pwm_dead_band_example.c * Date: 2022-07-11 11:32:48 * LastEditTime: 2022-07-11 11:32:48 * Description: This file is for pwm test example functions. @@ -20,23 +20,26 @@ * Ver   Who         Date          Changes * ----- ------      --------     -------------------------------------- * 1.0 wangxiaodong 2022/8/24 first release + * 1.1 zhangyan 2024/4/23 refactoring */ #include #include "FreeRTOSConfig.h" #include "FreeRTOS.h" #include "task.h" -#include "timers.h" -#include "fpwm.h" #include "fpwm_os.h" -#include "fcpu_info.h" #include "fio_mux.h" #include "pwm_example.h" +#include "fparameters.h" -/* The periods assigned to the one-shot timers. */ -#define ONE_SHOT_TIMER_PERIOD ( pdMS_TO_TICKS( 300000UL ) ) +#define FPWM_DEBUG_TAG "PWM_DEAD_BAND_TEST" +#define FPWM_ERROR(format, ...) FT_DEBUG_PRINT_E(FPWM_DEBUG_TAG, format, ##__VA_ARGS__) +#define FPWM_WARN(format, ...) FT_DEBUG_PRINT_W(FPWM_DEBUG_TAG, format, ##__VA_ARGS__) +#define FPWM_INFO(format, ...) FT_DEBUG_PRINT_I(FPWM_DEBUG_TAG, format, ##__VA_ARGS__) +#define FPWM_DEBUG(format, ...) FT_DEBUG_PRINT_D(FPWM_DEBUG_TAG, format, ##__VA_ARGS__) /* pwm pulse change period */ -#define PWM_CHANGE_PERIOD ( pdMS_TO_TICKS( 2000UL )) +#define PWM_CHANGE_PERIOD (pdMS_TO_TICKS(500UL)) +#define TIMER_OUT (pdMS_TO_TICKS(4000UL)) /* pwm pulse amplitude of periodic variation */ #define PWM_PULSE_CHANGE 1000 @@ -45,54 +48,56 @@ #define PWM_PERIOD 10000 #define PWM_PULSE 2000 -/* test task number */ -#define TEST_TASK_NUM 1 -static xSemaphoreHandle xCountingSemaphore; - -static xTaskHandle change_handle; -static TimerHandle_t xOneShotTimer; +enum +{ + PWM_TEST_SUCCESS = 0, + PWM_TEST_UNKNOWN = 1, + PWM_INIT_FAILED = 2, + PWM_CHANGE_FAILED = 3, +}; +static QueueHandle_t xQueue = NULL; static FFreeRTOSPwm *os_pwm_ctrl_p; -static void FFreeRTOSPwmDelete(FFreeRTOSPwm *os_pwm_p); - -static void FFreeRTOSPwmInitTask(void *pvParameters) +static void PwmDelete(FFreeRTOSPwm *os_pwm_p) { - /* The pwm_id to use is passed in via the parameter. - Cast this to a pwm_id pointer. */ - u32 pwm_id = (u32)(uintptr)pvParameters; + FFreeRTOSPwmEnable(os_pwm_p, PWM_TEST_CHANNEL, FALSE); + FFreeRTOSPwmDeinit(os_pwm_p); + FIOMuxDeInit(); +} +static FError PwmInit(u32 pwm_id) +{ FError ret = FPWM_SUCCESS; + /* init iomux */ FIOMuxInit(); - /* set channel 0 and 1 iopad*/ -#if defined(CONFIG_TARGET_E2000) || defined(CONFIG_TARGET_PHYTIUMPI) - FIOPadSetPwmMux(pwm_id, 0); - FIOPadSetPwmMux(pwm_id, 1); -#endif + FIOPadSetPwmMux(pwm_id, FPWM_CHANNEL_0); + FIOPadSetPwmMux(pwm_id, FPWM_CHANNEL_1); /* init pwm controller */ os_pwm_ctrl_p = FFreeRTOSPwmInit(pwm_id); if (os_pwm_ctrl_p == NULL) { - printf("FFreeRTOSPwmInit failed.\n"); - goto pwm_init_exit; + FPWM_ERROR("FFreeRTOSPwmInit failed.\n"); + ret = FPWM_ERR_INVAL_PARM; + return ret; } /* set pwm db config */ FPwmDbVariableConfig db_cfg; memset(&db_cfg, 0, sizeof(db_cfg)); - db_cfg.db_rise_cycle = 500; - db_cfg.db_fall_cycle = 500; - db_cfg.db_polarity_sel = FPWM_DB_AHC; + db_cfg.db_rise_cycle = 800; + db_cfg.db_fall_cycle = 800; + db_cfg.db_polarity_sel = FPWM_DB_AH; /*将死区输入源设置为当前测试使用的CHANNEL*/ db_cfg.db_in_mode = PWM_TEST_CHANNEL == FPWM_CHANNEL_0 ? FPWM_DB_IN_MODE_PWM0 : FPWM_DB_IN_MODE_PWM1; db_cfg.db_out_mode = FPWM_DB_OUT_MODE_ENABLE_RISE_FALL; ret = FFreeRTOSPwmDbSet(os_pwm_ctrl_p, &db_cfg); if (FPWM_SUCCESS != ret) { - printf("FFreeRTOSPwmDbSet failed.\n"); - goto pwm_init_exit; + FPWM_ERROR("FFreeRTOSPwmDbSet failed.\n"); + return ret; } /* start pwm config */ FPwmVariableConfig pwm_cfg; @@ -107,8 +112,8 @@ static void FFreeRTOSPwmInitTask(void *pvParameters) ret = FFreeRTOSPwmSet(os_pwm_ctrl_p, PWM_TEST_CHANNEL, &pwm_cfg); if (FPWM_SUCCESS != ret) { - printf("FFreeRTOSPwmSet failed.\n"); - goto pwm_init_exit; + FPWM_ERROR("FFreeRTOSPwmSet failed.\n"); + return ret; } memset(&db_cfg, 0, sizeof(db_cfg)); @@ -132,137 +137,107 @@ static void FFreeRTOSPwmInitTask(void *pvParameters) printf("pwm_cfg.pwm_polarity = %d\n", pwm_cfg.pwm_polarity); printf("pwm_cfg.pwm_duty_source_mode = %d\n", pwm_cfg.pwm_duty_source_mode); - FFreeRTOSPwmEnable(os_pwm_ctrl_p, PWM_TEST_CHANNEL, TRUE); - - printf("FFreeRTOSPwmInitTask execute successfully.\r\n"); - - for (int i = 0; i < TEST_TASK_NUM; i++) + ret = FFreeRTOSPwmEnable(os_pwm_ctrl_p, PWM_TEST_CHANNEL, TRUE); + if (FPWM_SUCCESS != ret) { - xSemaphoreGive(xCountingSemaphore); + FPWM_ERROR("FFreeRTOSPwmEnable failed.\n"); + return ret; } -pwm_init_exit: - vTaskDelete(NULL); - + return ret; } -static void FFreeRTOSPwmChangeTask(void *pvParameters) +static FError PwmChange() { - xSemaphoreTake(xCountingSemaphore, portMAX_DELAY); + FError ret = FPWM_SUCCESS; u32 pwm_pulse = PWM_PULSE; /* As per most tasks, this task is implemented in an infinite loop. */ - for (;;) + for (int i = 0; i < 2; i++) { - FFreeRTOSPwmPulseSet(os_pwm_ctrl_p, PWM_TEST_CHANNEL, pwm_pulse); - - printf("FFreeRTOSPwmChangeTask run, pwm_pulse: %d\r\n", pwm_pulse); + ret = FFreeRTOSPwmPulseSet(os_pwm_ctrl_p, PWM_TEST_CHANNEL, pwm_pulse); + if (FPWM_SUCCESS != ret) + { + FPWM_ERROR("FFreeRTOSPwmPulseSet failed."); + return ret; + } + printf("pwm_pulse: %d\r\n", pwm_pulse); pwm_pulse = (pwm_pulse + PWM_PULSE_CHANGE) % PWM_PERIOD; vTaskDelay(PWM_CHANGE_PERIOD); } -} -static void prvOneShotTimerCallback(TimerHandle_t xTimer) -{ - /* Output a string to show the time at which the callback was executed. */ - printf("One-shot timer callback executing, which will delete FFreeRTOSPwmChangeTask.\r\n"); - /* deinit iomux */ - FIOMuxDeInit(); - - FFreeRTOSPwmDelete(os_pwm_ctrl_p); + return ret; } -/* create pwm test, id is pwm module number */ -BaseType_t FFreeRTOSPwmCreate(u32 id) +static void FFreeRTOSPwmDeadBandTask() { - FASSERT(id < FPWM_NUM); - BaseType_t xReturn = pdPASS;/* 定义一个创建信息返回值,默认为 pdPASS */ - BaseType_t xTimerStarted = pdPASS; + FError ret = FPWM_SUCCESS; + int task_res = PWM_TEST_SUCCESS; - xCountingSemaphore = xSemaphoreCreateCounting(TEST_TASK_NUM, 0); - if (xCountingSemaphore == NULL) + ret = PwmInit(PWM_TEST_ID); + if (ret != FPWM_SUCCESS) { - printf("FFreeRTOSPwmCreate xCountingSemaphore create failed.\r\n"); - return pdFAIL; + FPWM_ERROR("PwmInit failed."); + task_res = PWM_INIT_FAILED; + goto task_exit; } - taskENTER_CRITICAL(); //进入临界区 - /* pwm init task */ - xReturn = xTaskCreate((TaskFunction_t)FFreeRTOSPwmInitTask, /* 任务入口函数 */ - (const char *)"FFreeRTOSPwmInitTask",/* 任务名字 */ - (uint16_t)1024, /* 任务栈大小 */ - (void *)(uintptr)id,/* 任务入口函数参数 */ - (UBaseType_t)configMAX_PRIORITIES - 1, /* 任务的优先级 */ - NULL); /* 任务控制 */ - - /* pwm占空比变化任务 */ - xReturn = xTaskCreate((TaskFunction_t)FFreeRTOSPwmChangeTask, /* 任务入口函数 */ - (const char *)"FFreeRTOSPwmChangeTask",/* 任务名字 */ - (uint16_t)1024, /* 任务栈大小 */ - NULL,/* 任务入口函数参数 */ - (UBaseType_t)configMAX_PRIORITIES - 1, /* 任务的优先级 */ - (TaskHandle_t *)&change_handle); /* 任务控制 */ - - /* Create the one shot software timer, storing the handle to the created - software timer in xOneShotTimer. */ - xOneShotTimer = xTimerCreate("OneShot Software Timer", /* Text name for the software timer - not used by FreeRTOS. */ - ONE_SHOT_TIMER_PERIOD, /* The software timer's period in ticks. */ - pdFALSE, /* Setting uxAutoRealod to pdFALSE creates a one-shot software timer. */ - 0, /* This example use the timer id. */ - prvOneShotTimerCallback); /* The callback function to be used by the software timer being created. */ - - /* Check the timers were created. */ - if (xOneShotTimer != NULL) - { - /* Start the software timers, using a block time of 0 (no block time). - The scheduler has not been started yet so any block time specified here - would be ignored anyway. */ - xTimerStarted = xTimerStart(xOneShotTimer, 0); - - /* The implementation of xTimerStart() uses the timer command queue, and - xTimerStart() will fail if the timer command queue gets full. The timer - service task does not get created until the scheduler is started, so all - commands sent to the command queue will stay in the queue until after - the scheduler has been started. Check both calls to xTimerStart() - passed. */ - if (xTimerStarted != pdPASS) - { - vPrintf("CreateSoftwareTimerTasks xTimerStart failed.\r\n"); - } - } - else + ret = PwmChange(); + if (ret != FPWM_SUCCESS) { - vPrintf("CreateSoftwareTimerTasks xTimerCreate failed.\r\n"); + FPWM_ERROR("PwmChange failed."); + task_res = PWM_CHANGE_FAILED; + goto task_exit; } - taskEXIT_CRITICAL(); //退出临界区 +task_exit: + xQueueSend(xQueue, &task_res, 0); - return xReturn; + vTaskDelete(NULL); } -static void FFreeRTOSPwmDelete(FFreeRTOSPwm *os_pwm_p) +/* create pwm test, id is pwm module number */ +BaseType_t FFreeRTOSPwmDeadBandTaskCreate() { - BaseType_t xReturn = pdPASS; - FFreeRTOSPwmEnable(os_pwm_p, PWM_TEST_CHANNEL, FALSE); - FFreeRTOSPwmDeinit(os_pwm_p); + BaseType_t xReturn = pdPASS;/* 定义一个创建信息返回值,默认为 pdPASS */ + int task_res = PWM_TEST_UNKNOWN; - if (change_handle) + xQueue = xQueueCreate(1, sizeof(int)); /* 创建消息队列 */ + if (xQueue == NULL) { - vTaskDelete(change_handle); - vPrintf("Delete FFreeRTOSPwmChangeTask successfully.\r\n"); + FPWM_ERROR("xQueue create failed."); + goto exit; } - /* delete count sem */ - vSemaphoreDelete(xCountingSemaphore); + xReturn = xTaskCreate((TaskFunction_t)FFreeRTOSPwmDeadBandTask, /* 任务入口函数 */ + (const char *)"FFreeRTOSPwmDeadBandTask", /* 任务名字 */ + (uint16_t)4096, /* 任务栈大小 */ + NULL, /* 任务入口函数参数 */ + (UBaseType_t)2, /* 任务优先级 */ + NULL); /* 任务句柄 */ + if (xReturn == pdFAIL) + { + FPWM_ERROR("xTaskCreate GdmaMemcpyTask failed."); + goto exit; + } - /* delete timer */ - xReturn = xTimerDelete(xOneShotTimer, 0); - if (xReturn != pdPASS) + xReturn = xQueueReceive(xQueue, &task_res, TIMER_OUT); + if (xReturn == pdFAIL) { - vPrintf("Delete OneShot Software Timer failed.\r\n"); + FPWM_ERROR("xQueue receive timeout."); + goto exit; + } + +exit: + PwmDelete(os_pwm_ctrl_p); + vQueueDelete(xQueue); + if (task_res != PWM_TEST_SUCCESS) + { + printf("%s@%d: pwm dead band example [failure], task_res = %d\r\n", __func__, __LINE__, task_res); + return pdFAIL; } else { - vPrintf("Delete OneShot Software Timer successfully.\r\n"); + printf("%s@%d: pwm dead band example [success].\r\n", __func__, __LINE__); + return pdTRUE; } - -} \ No newline at end of file +} diff --git a/example/peripheral/pwm/src/pwm_dual_channel_example.c b/example/peripheral/pwm/src/pwm_dual_channel_example.c new file mode 100644 index 00000000..c0c41c1c --- /dev/null +++ b/example/peripheral/pwm/src/pwm_dual_channel_example.c @@ -0,0 +1,237 @@ +/* + * Copyright : (C) 2022 Phytium Information Technology, Inc. + * All Rights Reserved. + * + * This program is OPEN SOURCE software: you can redistribute it and/or modify it + * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, + * either version 1.0 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the Phytium Public License for more details. + * + * + * FilePath: pwm_dual_channel_example.c + * Date: 2022-07-11 11:32:48 + * LastEditTime: 2022-07-11 11:32:48 + * Description: This file is for pwm test example functions. + * + * Modify History: + * Ver   Who         Date          Changes + * ----- ------      --------     -------------------------------------- + * 1.0 wangxiaodong 2022/8/24 first release + * 1.1 zhangyan 2024/4/23 refactoring + */ +#include +#include "FreeRTOSConfig.h" +#include "FreeRTOS.h" +#include "task.h" +#include "fpwm_os.h" +#include "fio_mux.h" +#include "pwm_example.h" +#include "fparameters.h" + +#define FPWM_DEBUG_TAG "PWM_DUAL_CHANNEL_TEST" +#define FPWM_ERROR(format, ...) FT_DEBUG_PRINT_E(FPWM_DEBUG_TAG, format, ##__VA_ARGS__) +#define FPWM_WARN(format, ...) FT_DEBUG_PRINT_W(FPWM_DEBUG_TAG, format, ##__VA_ARGS__) +#define FPWM_INFO(format, ...) FT_DEBUG_PRINT_I(FPWM_DEBUG_TAG, format, ##__VA_ARGS__) +#define FPWM_DEBUG(format, ...) FT_DEBUG_PRINT_D(FPWM_DEBUG_TAG, format, ##__VA_ARGS__) + +/* pwm pulse change period */ +#define PWM_CHANGE_PERIOD (pdMS_TO_TICKS(500UL)) +#define TIMER_OUT (pdMS_TO_TICKS(10000UL)) +/* pwm pulse amplitude of periodic variation */ +#define PWM_PULSE_CHANGE 1000 + +/* pwm primary config */ +#define PWM_PERIOD 10000 +#define PWM_PULSE 2000 + +enum +{ + PWM_TEST_SUCCESS = 0, + PWM_TEST_UNKNOWN = 1, + PWM_INIT_FAILED = 2, + PWM_CHANGE_FAILED = 3, +}; + +static QueueHandle_t xQueue = NULL; +static FFreeRTOSPwm *os_pwm_ctrl_p; + +static void PwmDelete(FFreeRTOSPwm *os_pwm_p) +{ + FFreeRTOSPwmEnable(os_pwm_p, FPWM_CHANNEL_0, FALSE); + FFreeRTOSPwmEnable(os_pwm_p, FPWM_CHANNEL_1, FALSE); + FFreeRTOSPwmDeinit(os_pwm_p); + FIOMuxDeInit(); +} + +static FError PwmInit(u32 pwm_id) +{ + FError ret = FPWM_SUCCESS; + + /* init iomux */ + FIOMuxInit(); + FIOPadSetPwmMux(pwm_id, FPWM_CHANNEL_0); + FIOPadSetPwmMux(pwm_id, FPWM_CHANNEL_1); + + /* init pwm controller */ + os_pwm_ctrl_p = FFreeRTOSPwmInit(pwm_id); + if (os_pwm_ctrl_p == NULL) + { + FPWM_ERROR("FFreeRTOSPwmInit failed.\n"); + ret = FPWM_ERR_INVAL_PARM; + return ret; + } + + /* start pwm config */ + FPwmVariableConfig pwm_cfg; + memset(&pwm_cfg, 0, sizeof(pwm_cfg)); + pwm_cfg.tim_ctrl_mode = FPWM_MODULO; + pwm_cfg.tim_ctrl_div = 500 - 1; + pwm_cfg.pwm_period = 10000; + pwm_cfg.pwm_pulse = PWM_PULSE; + pwm_cfg.pwm_mode = FPWM_OUTPUT_COMPARE; + pwm_cfg.pwm_polarity = FPWM_POLARITY_NORMAL; + pwm_cfg.pwm_duty_source_mode = FPWM_DUTY_CCR; + ret = FFreeRTOSPwmSet(os_pwm_ctrl_p, FPWM_CHANNEL_0, &pwm_cfg); + if (FPWM_SUCCESS != ret) + { + FPWM_ERROR("FFreeRTOSPwmSet failed.\n"); + return ret; + } + + memset(&pwm_cfg, 0, sizeof(pwm_cfg)); + pwm_cfg.tim_ctrl_mode = FPWM_MODULO; + pwm_cfg.tim_ctrl_div = 1000 - 1; + pwm_cfg.pwm_period = 20000; + pwm_cfg.pwm_pulse = PWM_PULSE; + pwm_cfg.pwm_mode = FPWM_OUTPUT_COMPARE; + pwm_cfg.pwm_polarity = FPWM_POLARITY_NORMAL; + pwm_cfg.pwm_duty_source_mode = FPWM_DUTY_CCR; + ret = FFreeRTOSPwmSet(os_pwm_ctrl_p, FPWM_CHANNEL_1, &pwm_cfg); + if (FPWM_SUCCESS != ret) + { + FPWM_ERROR("FFreeRTOSPwmSet failed.\n"); + return ret; + } + + ret = FFreeRTOSPwmEnable(os_pwm_ctrl_p, FPWM_CHANNEL_0, TRUE); + if (FPWM_SUCCESS != ret) + { + FPWM_ERROR("FFreeRTOSPwmEnable failed.\n"); + return ret; + } + + ret = FFreeRTOSPwmEnable(os_pwm_ctrl_p, FPWM_CHANNEL_1, TRUE); + if (FPWM_SUCCESS != ret) + { + FPWM_ERROR("FFreeRTOSPwmEnable failed.\n"); + return ret; + } + + return ret; +} + +static FError PwmChange() +{ + FError ret = FPWM_SUCCESS; + u32 pwm_pulse = PWM_PULSE; + /* As per most tasks, this task is implemented in an infinite loop. */ + for (int i = 0; i < 5; i++) + { + ret = FFreeRTOSPwmPulseSet(os_pwm_ctrl_p, FPWM_CHANNEL_0, pwm_pulse); + if (FPWM_SUCCESS != ret) + { + FPWM_ERROR("FFreeRTOSPwmPulseSet failed."); + return ret; + } + + ret = FFreeRTOSPwmPulseSet(os_pwm_ctrl_p, FPWM_CHANNEL_1, pwm_pulse); + if (FPWM_SUCCESS != ret) + { + FPWM_ERROR("FFreeRTOSPwmPulseSet failed."); + return ret; + } + + printf("pwm_pulse: %d\r\n", pwm_pulse); + pwm_pulse = (pwm_pulse + PWM_PULSE_CHANGE) % PWM_PERIOD; + vTaskDelay(PWM_CHANGE_PERIOD); + } + + return ret; +} + +static void FFreeRTOSPwmDualChannelTask() +{ + FError ret = FPWM_SUCCESS; + int task_res = PWM_TEST_SUCCESS; + + ret = PwmInit(PWM_TEST_ID); + if (ret != FPWM_SUCCESS) + { + FPWM_ERROR("PwmInit failed."); + task_res = PWM_INIT_FAILED; + goto task_exit; + } + + ret = PwmChange(); + if (ret != FPWM_SUCCESS) + { + FPWM_ERROR("PwmChange failed."); + task_res = PWM_CHANGE_FAILED; + goto task_exit; + } + +task_exit: + xQueueSend(xQueue, &task_res, 0); + + vTaskDelete(NULL); +} + +/* create pwm test, id is pwm module number */ +BaseType_t FFreeRTOSPwmDualChannelTaskCreate() +{ + BaseType_t xReturn = pdPASS;/* 定义一个创建信息返回值,默认为 pdPASS */ + int task_res = PWM_TEST_UNKNOWN; + + xQueue = xQueueCreate(1, sizeof(int)); /* 创建消息队列 */ + if (xQueue == NULL) + { + FPWM_ERROR("xQueue create failed."); + goto exit; + } + + xReturn = xTaskCreate((TaskFunction_t)FFreeRTOSPwmDualChannelTask, /* 任务入口函数 */ + (const char *)"FFreeRTOSPwmDualChannelTask", /* 任务名字 */ + (uint16_t)4096, /* 任务栈大小 */ + NULL, /* 任务入口函数参数 */ + (UBaseType_t)2, /* 任务优先级 */ + NULL); /* 任务句柄 */ + if (xReturn == pdFAIL) + { + FPWM_ERROR("xTaskCreate GdmaMemcpyTask failed."); + goto exit; + } + + xReturn = xQueueReceive(xQueue, &task_res, TIMER_OUT); + if (xReturn == pdFAIL) + { + FPWM_ERROR("xQueue receive timeout."); + goto exit; + } + +exit: + PwmDelete(os_pwm_ctrl_p); + vQueueDelete(xQueue); + if (task_res != PWM_TEST_SUCCESS) + { + printf("%s@%d: pwm dual channel example [failure], task_res = %d\r\n", __func__, __LINE__, task_res); + return pdFAIL; + } + else + { + printf("%s@%d: pwm dual channel example [success].\r\n", __func__, __LINE__); + return pdTRUE; + } +} diff --git a/example/peripheral/pwm/src/pwm_single_channel_example.c b/example/peripheral/pwm/src/pwm_single_channel_example.c new file mode 100644 index 00000000..104d6526 --- /dev/null +++ b/example/peripheral/pwm/src/pwm_single_channel_example.c @@ -0,0 +1,207 @@ +/* + * Copyright : (C) 2022 Phytium Information Technology, Inc. + * All Rights Reserved. + * + * This program is OPEN SOURCE software: you can redistribute it and/or modify it + * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, + * either version 1.0 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the Phytium Public License for more details. + * + * + * FilePath: pwm_single_channel_example.c + * Date: 2022-07-11 11:32:48 + * LastEditTime: 2022-07-11 11:32:48 + * Description: This file is for pwm test example functions. + * + * Modify History: + * Ver   Who         Date          Changes + * ----- ------      --------     -------------------------------------- + * 1.0 wangxiaodong 2022/8/24 first release + * 1.1 zhangyan 2024/4/23 refactoring + */ +#include +#include "FreeRTOSConfig.h" +#include "FreeRTOS.h" +#include "task.h" +#include "fpwm_os.h" +#include "fio_mux.h" +#include "pwm_example.h" +#include "fparameters.h" + +#define FPWM_DEBUG_TAG "PWM_SINGLE_CHANNEL_TEST" +#define FPWM_ERROR(format, ...) FT_DEBUG_PRINT_E(FPWM_DEBUG_TAG, format, ##__VA_ARGS__) +#define FPWM_WARN(format, ...) FT_DEBUG_PRINT_W(FPWM_DEBUG_TAG, format, ##__VA_ARGS__) +#define FPWM_INFO(format, ...) FT_DEBUG_PRINT_I(FPWM_DEBUG_TAG, format, ##__VA_ARGS__) +#define FPWM_DEBUG(format, ...) FT_DEBUG_PRINT_D(FPWM_DEBUG_TAG, format, ##__VA_ARGS__) + +/* pwm pulse change period */ +#define PWM_CHANGE_PERIOD (pdMS_TO_TICKS(500UL)) +#define TIMER_OUT (pdMS_TO_TICKS(10000UL)) +/* pwm pulse amplitude of periodic variation */ +#define PWM_PULSE_CHANGE 1000 + +/* pwm primary config */ +#define PWM_DIV 500 +#define PWM_PERIOD 10000 +#define PWM_PULSE 2000 + +enum +{ + PWM_TEST_SUCCESS = 0, + PWM_TEST_UNKNOWN = 1, + PWM_INIT_FAILED = 2, + PWM_CHANGE_FAILED = 3, +}; + +static QueueHandle_t xQueue = NULL; +static FFreeRTOSPwm *os_pwm_ctrl_p; + +static void PwmDelete(FFreeRTOSPwm *os_pwm_p) +{ + FFreeRTOSPwmEnable(os_pwm_p, PWM_TEST_CHANNEL, FALSE); + FFreeRTOSPwmDeinit(os_pwm_p); + FIOMuxDeInit(); +} + +static FError PwmInit(u32 pwm_id) +{ + FError ret = FPWM_SUCCESS; + + /* init iomux */ + FIOMuxInit(); + FIOPadSetPwmMux(pwm_id, PWM_TEST_CHANNEL); + + /* init pwm controller */ + os_pwm_ctrl_p = FFreeRTOSPwmInit(pwm_id); + if (os_pwm_ctrl_p == NULL) + { + FPWM_ERROR("FFreeRTOSPwmInit failed.\n"); + ret = FPWM_ERR_INVAL_PARM; + return ret; + } + + /* start pwm config */ + FPwmVariableConfig pwm_cfg; + memset(&pwm_cfg, 0, sizeof(pwm_cfg)); + pwm_cfg.tim_ctrl_mode = FPWM_MODULO; + pwm_cfg.tim_ctrl_div = PWM_DIV - 1; + pwm_cfg.pwm_period = PWM_PERIOD; + pwm_cfg.pwm_pulse = PWM_PULSE; + pwm_cfg.pwm_mode = FPWM_OUTPUT_COMPARE; + pwm_cfg.pwm_polarity = FPWM_POLARITY_NORMAL; + pwm_cfg.pwm_duty_source_mode = FPWM_DUTY_CCR; + ret = FFreeRTOSPwmSet(os_pwm_ctrl_p, PWM_TEST_CHANNEL, &pwm_cfg); + if (FPWM_SUCCESS != ret) + { + FPWM_ERROR("FFreeRTOSPwmSet failed.\n"); + return ret; + } + + ret = FFreeRTOSPwmEnable(os_pwm_ctrl_p, PWM_TEST_CHANNEL, TRUE); + if (FPWM_SUCCESS != ret) + { + FPWM_ERROR("FFreeRTOSPwmEnable failed.\n"); + return ret; + } + + return ret; +} + +static FError PwmChange() +{ + FError ret = FPWM_SUCCESS; + u32 pwm_pulse = PWM_PULSE; + /* As per most tasks, this task is implemented in an infinite loop. */ + for (int i = 0; i < 5; i++) + { + ret = FFreeRTOSPwmPulseSet(os_pwm_ctrl_p, PWM_TEST_CHANNEL, pwm_pulse); + if (FPWM_SUCCESS != ret) + { + FPWM_ERROR("FFreeRTOSPwmPulseSet failed."); + return ret; + } + + printf("pwm_pulse: %d\r\n", pwm_pulse); + pwm_pulse = (pwm_pulse + PWM_PULSE_CHANGE) % PWM_PERIOD; + vTaskDelay(PWM_CHANGE_PERIOD); + } + + return ret; +} + +static void FFreeRTOSSingleChannelTask() +{ + FError ret = FPWM_SUCCESS; + int task_res = PWM_TEST_SUCCESS; + + ret = PwmInit(PWM_TEST_ID); + if (ret != FPWM_SUCCESS) + { + FPWM_ERROR("PwmInit failed."); + task_res = PWM_INIT_FAILED; + goto task_exit; + } + + ret = PwmChange(); + if (ret != FPWM_SUCCESS) + { + FPWM_ERROR("PwmChange failed."); + task_res = PWM_CHANGE_FAILED; + goto task_exit; + } + +task_exit: + xQueueSend(xQueue, &task_res, 0); + + vTaskDelete(NULL); +} + +/* create pwm test, id is pwm module number */ +BaseType_t FFreeRTOSPwmSingleChannelTaskCreate() +{ + BaseType_t xReturn = pdPASS;/* 定义一个创建信息返回值,默认为 pdPASS */ + int task_res = PWM_TEST_UNKNOWN; + + xQueue = xQueueCreate(1, sizeof(int)); /* 创建消息队列 */ + if (xQueue == NULL) + { + FPWM_ERROR("xQueue create failed."); + goto exit; + } + + xReturn = xTaskCreate((TaskFunction_t)FFreeRTOSSingleChannelTask, /* 任务入口函数 */ + (const char *)"FFreeRTOSSingleChannelTask", /* 任务名字 */ + (uint16_t)4096, /* 任务栈大小 */ + NULL, /* 任务入口函数参数 */ + (UBaseType_t)2, /* 任务优先级 */ + NULL); /* 任务句柄 */ + if (xReturn == pdFAIL) + { + FPWM_ERROR("xTaskCreate GdmaMemcpyTask failed."); + goto exit; + } + + xReturn = xQueueReceive(xQueue, &task_res, TIMER_OUT); + if (xReturn == pdFAIL) + { + FPWM_ERROR("xQueue receive timeout."); + goto exit; + } + +exit: + PwmDelete(os_pwm_ctrl_p); + vQueueDelete(xQueue); + if (task_res != PWM_TEST_SUCCESS) + { + printf("%s@%d: pwm single channel example [failure], task_res = %d\r\n", __func__, __LINE__, task_res); + return pdFAIL; + } + else + { + printf("%s@%d: pwm single channel example [success].\r\n", __func__, __LINE__); + return pdTRUE; + } +} diff --git a/example/peripheral/spi/src/sfud_read_write.c b/example/peripheral/spi/src/sfud_read_write.c index 0e6bf718..26244e57 100644 --- a/example/peripheral/spi/src/sfud_read_write.c +++ b/example/peripheral/spi/src/sfud_read_write.c @@ -175,7 +175,7 @@ write_exit: if (SFUD_SUCCESS != sfud_ret) { task_res = SPI_SFUD_WRITE_FAILURE; - xQueueSend(xQueue, &task_res, 0);; + xQueueSend(xQueue, &task_res, 0); } return sfud_ret; @@ -238,7 +238,7 @@ read_exit: if (SFUD_SUCCESS != sfud_ret) { task_res = SPI_SFUD_READ_FAILURE; - xQueueSend(xQueue, &task_res, 0);; + xQueueSend(xQueue, &task_res, 0); } return sfud_ret; -- Gitee