- 打卡等级:以坛为家II
- 打卡总天数:423
- 最近打卡:2025-05-01 07:10:25
已绑定手机
超级版主
DebugLab
- 积分
- 8343
|
发表于 2024-8-31 13:45:53
|
显示全部楼层
8H8K64U有DMA呀,用DMA
#define ADC_SPEED 15 // 0~15, ADC转换时间(CPU时钟数) = (n+1)*32 ADCCFG
#define RES_FMT (1<<5) // ADC结果格式 0: 左对齐, ADC_RES: D11 D10 D9 D8 D7 D6 D5 D4, ADC_RESL: D3 D2 D1 D0 0 0 0 0
// ADCCFG 1: 右对齐, ADC_RES: 0 0 0 0 D11 D10 D9 D8, ADC_RESL: D7 D6 D5 D4 D3 D2 D1 D0
#define ADC_CH 3 // 1~16, ADC转换通道数, 需同步修改 DMA_ADC_CHSW 转换通道
#define ADC_NUM 256 // 每个通道ADC转换次数, 需同步修改DMA_ADC_CFG2 转换次数
#define DMA_ADDR 0x800 // DMA数据存放地址
unsigned char xdata DMA_Buffer[ADC_CH][ADC_NUM*2+4] _at_ DMA_ADDR;
unsigned long ADC_Value[ADC_CH];
//初始化:
DMA_ADC_STA=0x00;
DMA_ADC_CFG=0x80; //bit7 1:Enable Interrupt
DMA_ADC_RXAH=(unsigned char)(DMA_ADDR>>8); //ADC转换数据存储地址
DMA_ADC_RXAL=(unsigned char)DMA_ADDR;
DMA_ADC_CFG2=0x0F; //每个通道ADC转换次数:256
DMA_ADC_CHSW0=0x07; //ADC通道使能寄存器 ADC7~ADC0
DMA_ADC_CHSW1=0x00; //ADC通道使能寄存器 ADC15~ADC8
DMA_ADC_CR=0xc0; //bit7 1:Enable ADC_DMA, bit6 1:Start ADC_DMA
void DMA_ADC_Isr(void) interrupt 13 //重映射中断向量
{
DMA_ADC_STA=0;
Dma_Flag=1;
}
|
|