瑞萨单片机(R5F100LE)多通道AD转换

    今天,在网上找了半天瑞萨单片机(R5F100LE)多通道AD转换的配置和使用方法,可一直没能找到,最后在用户手册的帮助下终于找到了,正确的方法。

    其实使用瑞萨的多通道AD,挺方便的,不麻烦,下面的图是CubeSuite + 代码生成器的配置方法。最关键的地方是Operation mode setting的配置要选择Continuous select mode这个模式。这样当一个通道转换完成之后产生一个中断,你在中断中读出ADC的转换值,然后配置寄存器ADS( 模拟输入通道选择寄存器),为下一个通道就行了,下一次AD转换就是你指定通道了,转换完成再次进入中断,然后你读出AD转换值,修改ADS.........,下面有代码和CubeSuite +工程链接,挺容易理解,不行就下工程来看看,记得看一下用户手册的ADS寄存器。


瑞萨单片机(R5F100LE)多通道AD转换_第1张图片

瑞萨单片机(R5F100LE)多通道AD转换_第2张图片

瑞萨单片机(R5F100LE)多通道AD转换_第3张图片瑞萨单片机(R5F100LE)多通道AD转换_第4张图片

主函数:

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转换


你可能感兴趣的:(ad,ADC,瑞萨单片机,R5F100LE,多通道转换)