使用例
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) | |||
変換結果上限/下限値設定 |
ADLL≦ADCRH≦ADULで割り込み要求信号(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 */
}