瑞萨微控制器 (R5F100LE) 多通道 AD 转换器
最编程
2024-07-11 11:54:46
...
【直播预告】程序员逆袭 CEO 分几步?
今天,在网上找了半天瑞萨单片机(R5F100LE)多通道AD转换的配置和使用方法,可一直没能找到,最后在用户手册的帮助下终于找到了,正确的方法。
其实使用瑞萨的多通道AD,挺方便的,不麻烦,下面的图是CubeSuite + 代码生成器的配置方法。最关键的地方是Operation mode setting的配置要选择Continuous select mode这个模式。这样当一个通道转换完成之后产生一个中断,你在中断中读出ADC的转换值,然后配置寄存器ADS( 模拟输入通道选择寄存器),为下一个通道就行了,下一次AD转换就是你指定通道了,转换完成再次进入中断,然后你读出AD转换值,修改ADS.........,下面有代码和CubeSuite +工程链接,挺容易理解,不行就下工程来看看,记得看一下用户手册的ADS寄存器。
主函数:
void main(void)
{
/* Start user code. Do not edit comment generated here */
R_MAIN_UserInit();
R_TAU0_Channel0_Start();
R_ADC_Set_OperationOn();
R_ADC_Start();
while (1U)
{
NOP();
}
/* End user code. Do not edit comment generated here */
}
中断函数:功能读取AD通道AIN0,AIN1,AIN2的值放到数组ADValue中。
/* Start user code for global. Do not edit comment generated here */
uint16_t ADValue[3]={0};
/* End user code. Do not edit comment generated here */
/***********************************************************************************************************************
* Function Name: r_adc_interrupt
* Description : This function is INTAD interrupt service routine.
* Arguments : None
* Return Value : None
***********************************************************************************************************************/
__interrupt static void r_adc_interrupt(void)
{
/* Start user code. Do not edit comment generated here */
static uint8_t channel=0, ads=0;
ads = ADS;
R_ADC_Get_Result(&ADValue[ads]);
if(++ads==3)
ads = 0;
ADS = ads;
/* End user code. Do not edit comment generated here */
}
瑞萨单片机(R5F100LE)多通道AD转换