89 lines
1.9 KiB
C
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));
|
|
}
|
|
} |