ADC_DMA

功能实现:ADC DMA方式循环采样。

采集周期:(256-192)*16*Tsys = (256-192)*16/62.4M = 16.5us

进中断周期:16.5us*采集数据的长度 = 16.5us

int main()
{
uint8_t i;
signed short RoughCalib_Value = 0; // ADC粗调偏差值
uint32_t temp = 0;
uint8_t adcchidx = 0;
HSECFG_Capacitance(HSECap_18p);
SetSysClock(CLK_SOURCE_HSE_PLL_62_4MHz);
/* 配置串口调试 */
DebugInit();
PRINT("Start @ChipID=%02X\n", R8_CHIP_ID);
GPIOA_ResetBits(GPIO_Pin_1);
GPIOA_ModeCfg(GPIO_Pin_1, GPIO_ModeOut_PP_5mA);
/* DMA单通道采样:选择adc通道0做采样,对应 PA4引脚 */
PRINT("\n3.Single channel DMA sampling...\n");
GPIOA_ModeCfg(GPIO_Pin_4, GPIO_ModeIN_Floating);
ADC_ExtSingleChSampInit(SampleFreq_8_or_4, ADC_PGA_0);
ADC_ChannelCfg(0);
ADC_ExcutSingleConver();//时间足够时建议再次转换并丢弃首次ADC数据
ADC_AutoConverCycle(192); // 采样周期为 (256-192)*16个系统时钟
ADC_DMACfg(ENABLE, (uint32_t)&adcBuff[0], (uint32_t)&adcBuff[1], ADC_Mode_LOOP);
PFIC_EnableIRQ(ADC_IRQn);
ADC_StartAutoDMA();
while(1);
}
__INTERRUPT
__HIGH_CODE
void ADC_IRQHandler(void) //adc中断服务程序
{
GPIOA_InverseBits(GPIO_Pin_1);
if(ADC_GetDMAStatus())
{
R32_ADC_DMA_BEG = ((uint32_t)adcBuff) & 0x1ffff;
ADC_ClearDMAFlag();
}
}

 

posted @   SweetTea_lllpc  阅读(43)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
点击右上角即可分享
微信分享提示