使用例

AD 変換完了でデータ転送を開始する

4端子のAD 変換結果を、アドレスを移動させて各4データを格納し、平均値を求める)

 

[GUI設定例]

DMAコントローラ

使用する

DMA0

使用する

DMA動作設定

使用する

転送方向設定

SFR → 内蔵RAM

転送データ・サイズ設定

8ビット

SFRアドレス

ADCR -  0x000fff1e

RAMアドレス

0xffe00

転送回数

4

トリガ信号

INTAD(INTADを設定してください)

DMA0送信終了割り込み(INTDMA0)

使用する

優先順位

 

A/Dコンバータ

使用する

ADC

使用する

A/Dコンバータ動作設定

使用する

コンパレータ動作設定

許可

分解能設定

8ビット

VREF(+)設定

VDD

VREF(-)設定

VSS

トリガ・モード設定

ソフトウエア・トリガ・モード

動作モード設定

連続スキャン・モード

ANI0 - ANI7アナログ入力端子設定

ANI0 - ANI3

変換開始チャネル設定

ANI0 - ANI3

変換時間モード

標準1

変換時間

34 (1088/fCLK)(μs)

変換結果上限/下限値設定

ADLLADCRHADULで割り込み要求信号(INTAD)を発生

上限値(ADUL)

255

下限値(ADLL)

0

A/Dの割り込み許可(INTAD)

使用しない

 

 

[API設定例]

r_main.c

void main(void)

{

       R_MAIN_UserInit();

       /* Start user code. Do not edit comment generated here */

       /* Enable DMA0 transfer */

       R_DMAC0_Start();

 

       /* Start the AD converter */

       R_ADC_Start();

 

       while (1U)

       {

              NOP();

       }

       /* End user code. Do not edit comment generated here */

}

 

r_cg_dmac_user.c

/* Start user code for include. Do not edit comment generated here */

#include "r_cg_adc.h"

/* End user code. Do not edit comment generated here */

 

/* Start user code for pragma. Do not edit comment generated here */

#pragma address (g_adc_buf = 0x0ffe00)

/* End user code. Do not edit comment generated here */

 

/* Start user code for global. Do not edit comment generated here */

volatile uint8_t g_adc_buf[5][4];

volatile uint8_t g_adc_buf_cnt = 0U;

/* End user code. Do not edit comment generated here */

 

static void __near r_dmac0_interrupt(void)

{

       /* Start user code. Do not edit comment generated here */

       uint8_t i;

       uint8_t j;

       uint16_t temp;

 

       /* Stop the AD converter */

       R_ADC_Stop();

 

       /* Disable DMA0 transfer */

       R_DMAC0_Stop();

 

       /* Change DMA0_RAM address */

       if ((++g_adc_buf_cnt) < 4U)

       {

              DRA0 += 4U;

       }

       else

       {

              DRA0 = _FE00_DMA0_RAM_ADDRESS;

              g_adc_buf_cnt = 0U;

 

              /* Calculate the average */

              for (i = 0; i < 4U; i++)

              {

                     temp = 0U;

                     for (j = 0; j < 4U; j++)

                     {

                            temp += g_adc_buf[j][i];

                     }

                     g_adc_buf[4][i] = temp / 4U;

              }

       }

 

       /* Enable DMA0 transfer */

       R_DMAC0_Start();

 

       /* Start the AD converter */

       R_ADC_Start();

       /* End user code. Do not edit comment generated here */

}