使用RA4M2的DAC来输出锯齿波
要用到DAC外设以及定时器(在定时器中断中设置DAC输出值)
首先配置定时器
如下图进行修改
周期值为10,周期单位为us
开启上溢中断,设置优先级

配置DAC

只需要设置输出引脚,其余保持默认即可

接下来要生成锯齿波数组
这里我使用matlab来生成
生成的256个数据如下
uint16_t sawtooth_wave[256] =
{
1,
33,
65,
97,
129,
161,
193,
225,
257,
289,
321,
353,
385,
417,
449,
481,
513,
545,
577,
609,
641,
673,
705,
737,
769,
801,
833,
865,
897,
929,
961,
993,
1025,
1057,
1089,
1121,
1153,
1185,
1217,
1249,
1281,
1313,
1345,
1377,
1409,
1441,
1473,
1505,
1537,
1569,
1601,
1633,
1665,
1697,
1729,
1761,
1793,
1825,
1857,
1889,
1921,
1953,
1985,
2017,
2049,
2081,
2113,
2145,
2177,
2209,
2241,
2273,
2305,
2337,
2369,
2401,
2433,
2465,
2497,
2529,
2561,
2593,
2625,
2657,
2689,
2721,
2753,
2785,
2817,
2849,
2881,
2913,
2945,
2977,
3009,
3041,
3073,
3105,
3137,
3169,
3201,
3233,
3265,
3297,
3329,
3361,
3393,
3425,
3457,
3489,
3521,
3553,
3585,
3617,
3649,
3681,
3713,
3745,
3777,
3809,
3841,
3873,
3905,
3937,
3969,
4001,
4033,
4065,
4095,
4065,
4033,
4001,
3969,
3937,
3905,
3873,
3841,
3809,
3777,
3745,
3713,
3681,
3649,
3617,
3585,
3553,
3521,
3489,
3457,
3425,
3393,
3361,
3329,
3297,
3265,
3233,
3201,
3169,
3137,
3105,
3073,
3041,
3009,
2977,
2945,
2913,
2881,
2849,
2817,
2785,
2753,
2721,
2689,
2657,
2625,
2593,
2561,
2529,
2497,
2465,
2433,
2401,
2369,
2337,
2305,
2273,
2241,
2209,
2177,
2145,
2113,
2081,
2049,
2017,
1985,
1953,
1921,
1889,
1857,
1825,
1793,
1761,
1729,
1697,
1665,
1633,
1601,
1569,
1537,
1505,
1473,
1441,
1409,
1377,
1345,
1313,
1281,
1249,
1217,
1185,
1153,
1121,
1089,
1057,
1025,
993,
961,
929,
897,
865,
833,
801,
769,
737,
705,
673,
641,
609,
577,
545,
513,
481,
449,
417,
385,
353,
321,
289,
257,
225,
193,
161,
129,
97,
65,
33,
};
主要功能代码,只需要hal_entry中调用Sawtooth_Wave_Init函数
static uint16_t i;
void Sawtooth_Wave_Init(void)
{
fsp_err_t err = FSP_SUCCESS;
err = R_GPT_Open(&g_timer0_ctrl, &g_timer0_cfg);
assert(err == FSP_SUCCESS);
err = R_GPT_Start(&g_timer0_ctrl);
assert(err == FSP_SUCCESS);-
err = R_DAC_Open(&g_dac0_ctrl, &g_dac0_cfg);
assert(err == FSP_SUCCESS);
err = R_DAC_Start(&g_dac0_ctrl);
assert(err == FSP_SUCCESS);
}
void g_timer0_callback(timer_callback_args_t * p_args)
{
FSP_PARAMETER_NOT_USED(p_args);
R_DAC_Write(&g_dac0_ctrl,sawtooth_wave[i++]);
if(i >= 256)i = 0;
}
通过示波器来观察波形
一个256个数据,定时器每10us设置一次
计算得到周期390.625hz