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
48
static
void
time0_callback
(
xf_tim_num_t
tim_num, uint32_t ticks,
void
*user_data);
49
static
void
prepare_data
(
int
pnt_num);
50
51
/* ==================== [Static Variables] ================================== */
52
53
static
int
raw_val
[
POINT_ARR_LEN
];
54
55
/* ==================== [Macros] ============================================ */
56
57
/* ==================== [Global Functions] ================================== */
58
59
void
xf_main
(
void
)
60
{
61
xf_hal_tim_init
(
TIM0_NUM
,
TIM0_FREQ
,
XF_HAL_TIM_COUNT_DIR_UP
,
TIM0_AUTO_RELOAD
);
62
xf_hal_tim_set_isr
(
TIM0_NUM
,
time0_callback
, NULL);
63
64
xf_hal_dac_init
(
DAC_NUM
);
65
66
prepare_data
(
OUTPUT_POINT_NUM
);
67
68
xf_hal_dac_enable
(
DAC_NUM
);
69
xf_hal_tim_start
(
TIM0_NUM
,
TIM0_TARGET_TICKS
);
70
}
71
72
/* ==================== [Static Functions] ================================== */
73
74
static
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
96
static
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;
103
xf_hal_dac_write
(
DAC_NUM
,
raw_val
[index]);
104
105
index++;
106
if
(index >=
OUTPUT_POINT_NUM
) {
107
index = 0;
108
}
109
}
xf_main
void xf_main(void)
Definition
xf_main.c:28
xf_hal_dac_write
xf_err_t xf_hal_dac_write(xf_dac_num_t dac_num, uint32_t value)
dac 输出电压
Definition
xf_hal_dac.c:177
xf_hal_dac_init
xf_err_t xf_hal_dac_init(xf_dac_num_t dac_num)
dac 初始化。
Definition
xf_hal_dac.c:50
xf_hal_dac_enable
xf_err_t xf_hal_dac_enable(xf_dac_num_t dac_num)
dac 启用函数。
Definition
xf_hal_dac.c:73
xf_hal_tim_start
xf_err_t xf_hal_tim_start(xf_tim_num_t tim_num, uint32_t target_ticks)
定时器开始执行。
Definition
xf_hal_tim.c:148
xf_hal_tim_init
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_hal_tim_set_isr
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
xf_tim_num_t
uint32_t xf_tim_num_t
tim 序号。
Definition
xf_hal_tim.h:41
XF_HAL_TIM_COUNT_DIR_UP
@ XF_HAL_TIM_COUNT_DIR_UP
Definition
xf_hal_tim.h:79
TAG
#define TAG
Definition
xf_main.c:24
DAC_NUM
#define DAC_NUM
Definition
xf_main.c:23
TIM0_TARGET_TICKS
#define TIM0_TARGET_TICKS
Definition
xf_main.c:29
OUTPUT_POINT_NUM
#define OUTPUT_POINT_NUM
Definition
xf_main.c:32
TIM0_FREQ
#define TIM0_FREQ
Definition
xf_main.c:27
time0_callback
static void time0_callback(xf_tim_num_t tim_num, uint32_t ticks, void *user_data)
Definition
xf_main.c:96
TIM0_AUTO_RELOAD
#define TIM0_AUTO_RELOAD
Definition
xf_main.c:28
POINT_ARR_LEN
#define POINT_ARR_LEN
Definition
xf_main.c:33
WAVE_CHOOSE
#define WAVE_CHOOSE
Definition
xf_main.c:39
AMP_DAC
#define AMP_DAC
Definition
xf_main.c:40
raw_val
static int raw_val[POINT_ARR_LEN]
Definition
xf_main.c:53
TIM0_NUM
#define TIM0_NUM
Definition
xf_main.c:26
CONST_PERIOD_2_PI
#define CONST_PERIOD_2_PI
Definition
xf_main.c:37
prepare_data
static void prepare_data(int pnt_num)
Definition
xf_main.c:74
xf_hal_dev.h
xf_hal 设备抽象。
XF_LOGI
#define XF_LOGI(tag, format,...)
Definition
xf_log_uitls.h:44
UNUSED
#define UNUSED(_x)
Definition
xf_template_source_detail.c:333
examples
peripherals
dac
wave_gen
main
xf_main.c
生成于 2025年 一月 21日 星期二 17:25:09 , 为 XFusion API使用
1.9.8