CH32X035_FreeRTOS/src/main.c
Yilin Sun 5e568857b2
Initial RTOS support with LED driver.
Signed-off-by: Yilin Sun <imi415@imi.moe>
2023-10-17 09:40:07 +08:00

89 lines
1.9 KiB
C

#include <string.h>
/* Core */
#include "ch32x035.h"
/* FreeRTOS */
#include "FreeRTOS.h"
#include "task.h"
/* App */
#include "app_led1w.h"
#define APP_GRAD_STEP 4
static void hello_task(void *parameters);
int main(void) {
USART_Printf_Init(115200);
xTaskCreate(hello_task, "HELLO", 512, NULL, 4, NULL);
vTaskStartScheduler();
for (;;) {
__WFI();
}
}
static void hello_task(void *parameters) {
uint8_t data_payload[64 * 3];
app_led1w_init();
uint8_t color_r = 0xFF;
uint8_t color_g = 0x00;
uint8_t color_b = 0x00;
uint8_t dir_set = 0x01; /* 3'b001 */
memset(data_payload, 0x00, sizeof(data_payload));
for (;;) {
for (uint8_t i = 63; i > 0; i--) {
data_payload[3 * i] = data_payload[3 * (i - 1)];
data_payload[3 * i + 1] = data_payload[3 * (i - 1) + 1];
data_payload[3 * i + 2] = data_payload[3 * (i - 1) + 2];
}
data_payload[0] = color_g;
data_payload[1] = color_r;
data_payload[2] = color_b;
switch (dir_set) {
case 1: {
color_r -= APP_GRAD_STEP;
color_g += APP_GRAD_STEP;
if (color_r < APP_GRAD_STEP) {
dir_set = 2;
}
break;
}
case 2: {
color_g -= APP_GRAD_STEP;
color_b += APP_GRAD_STEP;
if (color_g < APP_GRAD_STEP) {
dir_set = 4;
}
break;
}
case 4: {
color_b -= APP_GRAD_STEP;
color_r += APP_GRAD_STEP;
if (color_b < APP_GRAD_STEP) {
dir_set = 1;
}
break;
}
default:
break;
}
app_led1w_write(data_payload, 64);
vTaskDelay(pdMS_TO_TICKS(16));
}
}