XFusion API v1.3.0
载入中...
搜索中...
未找到
xf_main.c
浏览该文件的文档.
1
17/* ==================== [Includes] ========================================== */
18
19#include "xf_hal.h"
20#include "kernel/xf_hal_dev.h"
21#include "xf_task.h"
22#include <math.h>
23
24/* ==================== [Defines] =========================================== */
25
26#define TIM0_NUM 0
27#define TIM0_FREQ 1000*1000
28#define TIM0_AUTO_RELOAD true
29#define TIM0_TARGET_TICKS 14
30
31#define FREQ 1000
32#define OUTPUT_POINT_NUM (int)(1000000 / (TIM0_TARGET_TICKS * FREQ) + 0.5)
33#define POINT_ARR_LEN 200
34
35#define DAC_NUM 0
36
37#define CONST_PERIOD_2_PI 6.2832
38
39#define WAVE_CHOOSE 0
40#define AMP_DAC 255
41
42#define TAG "wave_gen"
43
44/* ==================== [Typedefs] ========================================== */
45
46/* ==================== [Static Prototypes] ================================= */
47
48static void time0_callback(xf_tim_num_t tim_num, uint32_t ticks, void *user_data);
49static void prepare_data(int pnt_num);
50
51/* ==================== [Static Variables] ================================== */
52
54
55/* ==================== [Macros] ============================================ */
56
57/* ==================== [Global Functions] ================================== */
58
71
72/* ==================== [Static Functions] ================================== */
73
74static void prepare_data(int pnt_num)
75{
76 for (int i = 0; i < pnt_num; i ++) {
77 if (WAVE_CHOOSE == 0) {
78 raw_val[i] = (int)((sin(i * CONST_PERIOD_2_PI / pnt_num) + 1) * (double)(
79 AMP_DAC) / 2 + 0.5);
80 XF_LOGI(TAG, "Generating a sine wave");
81 } else if (WAVE_CHOOSE == 1) {
82 raw_val[i] = (i > (pnt_num / 2)) ? (2 * AMP_DAC *
83 (pnt_num - i) / pnt_num) :
84 (2 * AMP_DAC * i / pnt_num);
85 XF_LOGI(TAG, "Generating a triangle wave");
86 } else if (WAVE_CHOOSE == 2) {
87 raw_val[i] = (i == pnt_num) ? 0 : (i * AMP_DAC / pnt_num);
88 XF_LOGI(TAG, "Generating a sawtooth wave");
89 } else if (WAVE_CHOOSE == 3) {
90 raw_val[i] = (i < (pnt_num / 2)) ? AMP_DAC : 0;
91 XF_LOGI(TAG, "Generating a square wave");
92 }
93 }
94}
95
96static void time0_callback(xf_tim_num_t tim_num, uint32_t ticks,
97 void *user_data)
98{
99 UNUSED(tim_num);
100 UNUSED(ticks);
101 UNUSED(user_data);
102 static uint8_t index = 0;
104
105 index++;
106 if (index >= OUTPUT_POINT_NUM) {
107 index = 0;
108 }
109}
void xf_main(void)
Definition xf_main.c:28
xf_err_t xf_hal_dac_write(xf_dac_num_t dac_num, uint32_t value)
dac 输出电压
Definition xf_hal_dac.c:177
xf_err_t xf_hal_dac_init(xf_dac_num_t dac_num)
dac 初始化。
Definition xf_hal_dac.c:50
xf_err_t xf_hal_dac_enable(xf_dac_num_t dac_num)
dac 启用函数。
Definition xf_hal_dac.c:73
xf_err_t xf_hal_tim_start(xf_tim_num_t tim_num, uint32_t target_ticks)
定时器开始执行。
Definition xf_hal_tim.c:148
xf_err_t xf_hal_tim_init(xf_tim_num_t tim_num, uint32_t tick_freq_hz, xf_hal_tim_count_dir_t count_dir, bool auto_reload)
定时器初始化函数。
Definition xf_hal_tim.c:51
xf_err_t xf_hal_tim_set_isr(xf_tim_num_t tim_num, xf_hal_tim_cb_t callback, void *user_data)
定时器设置中断服务函数。
Definition xf_hal_tim.c:122
uint32_t xf_tim_num_t
tim 序号。
Definition xf_hal_tim.h:41
@ XF_HAL_TIM_COUNT_DIR_UP
Definition xf_hal_tim.h:79
#define TAG
Definition xf_main.c:24
#define DAC_NUM
Definition xf_main.c:23
#define TIM0_TARGET_TICKS
Definition xf_main.c:29
#define OUTPUT_POINT_NUM
Definition xf_main.c:32
#define TIM0_FREQ
Definition xf_main.c:27
static void time0_callback(xf_tim_num_t tim_num, uint32_t ticks, void *user_data)
Definition xf_main.c:96
#define TIM0_AUTO_RELOAD
Definition xf_main.c:28
#define POINT_ARR_LEN
Definition xf_main.c:33
#define WAVE_CHOOSE
Definition xf_main.c:39
#define AMP_DAC
Definition xf_main.c:40
static int raw_val[POINT_ARR_LEN]
Definition xf_main.c:53
#define TIM0_NUM
Definition xf_main.c:26
#define CONST_PERIOD_2_PI
Definition xf_main.c:37
static void prepare_data(int pnt_num)
Definition xf_main.c:74
xf_hal 设备抽象。
#define XF_LOGI(tag, format,...)
#define UNUSED(_x)