【Follow me第二季第3期】扩展任务:控制DAC输出
[复制链接]
本项目由于没有示波器,故不能进行演示,而且在默认的样例中给了DAC的工程,这里就详细进行解释。
一、DAC工程目的
该项目使用 ADC 初始化并演示了瑞萨 RA MCU 上的 DAC 模块。用户可以输入允许范围内的 DAC 值(0-4095),转换后的输出将作为 ADC 通道 0 的输入。ADC 输出值打印在 RTT JlinkViewer 上。
硬件连接:将 P014(DAC 输出)连接到 P000(ADC 通道 0)。
二、代码解释
主函数实现流程,先设置参考电压电路控制寄存器,即ADC引脚的寄存器,之后校准 RA2A1 板的 ADC,通过adc_start_calibration函数确定ADC返回状态,加入一个判断,对返回的状态进行判断,如果不是错误代码,就进行ADC和DAC初始化,如果没有错误,就可以进行DA的初始值输入,即输入0-4095之间的值,而后在DAC连接的通道会进行数值的波形显示,同时在RTT的终端进行数值显示。
#if (defined BOARD_RA2A1_EK) || (defined BOARD_RA6T2_MCK)
/* Set Reference Voltage Circuit Control register */
R_ADC0->VREFAMPCNT |= ((VREFADCG_VALUE) | (VREFADCG_ENABLE));
/* Calibrate the ADC for RA2A1 board */
err = adc_start_calibration ();
/* handle error */
if (FSP_SUCCESS != err)
{
adc_deinit();
dac_deinit();
/* ADC Failure message */
APP_ERR_PRINT("** ADC Calibrate API failed ** \r\n");
APP_ERR_TRAP(err);
}
#endif
这里分别是ADC和DAC的初始化函数声明,分别调用其API,并对返回状态进行判断。
static void adc_deinit(void)
{
fsp_err_t err = FSP_SUCCESS;
/* Close ADC module */
#if defined (BOARD_RA6T2_MCK)
err = R_ADC_B_Close(&g_adc_ctrl);
#else
err = R_ADC_Close(&g_adc_ctrl);
#endif
/* Handle error */
if (FSP_SUCCESS != err)
{
/* ADC Close failure message */
APP_ERR_PRINT("** ADC Close API failed ** \r\n");
}
}
static void dac_deinit(void)
{
fsp_err_t err = FSP_SUCCESS;
/* Close DAC module */
err = R_DAC_Close(&g_dac_ctrl);
/* Handle error */
if (FSP_SUCCESS != err)
{
/* DAC Close failure message */
APP_ERR_PRINT("** DAC Close API failed ** \r\n");
}
}
APP_PRINT是其默认的打印函数,当调用没问题之后,就可以直接用其打印输出的值。
这个过程就是全DAC项目的实现流程,由于没有示波器,故不能进行演示。
|