当前位置: 首页 > news >正文

ccs adc+tim+dma

1.打开一个adc

这个选auto和manual都可以

dma中断

2.定时器控制采样周期

再回到adc中配置触发源

3.代码部分(可以看看)

tim+adc+dma+fft

#include "ti_msp_dl_config.h" #include "arm_math.h" #include "arm_const_structs.h" #include "window_func.h" #include "9959.h" #define NUM_SAMPLES 1024 uint16_t gFFTOutput[NUM_SAMPLES]; uint16_t gFFTInput[NUM_SAMPLES*2]; uint16_t gADCSamples[NUM_SAMPLES]; uint16_t gFFTmaxValue; uint16_t gFFTmaxFreqIndex; volatile bool gCheckDMA; float scale_factor = 32767.0f / 2048.0f; int32_t scaled_value; void delay_ms(uint32_t ms); void fft_process(); int main(void) { SYSCFG_DL_init(); gCheckDMA=false; // AD9959_Init(); //初始化控制AD9959需要用到的IO口,及寄存器 // AD9959_Set_Fre(CH0, 4990000); //设置通道0频率100000Hz // AD9959_Set_Fre(CH1, 100000); //设置通道1频率100000Hz // AD9959_Set_Fre(CH2, 100000); //设置通道2频率100000Hz // AD9959_Set_Fre(CH3, 100000); //设置通道3频率100000Hz // AD9959_Set_Amp(CH0, 1023); //设置通道0幅度控制值1023,范围0~1023 // AD9959_Set_Amp(CH1, 1023); //设置通道1幅度控制值1023,范围0~1023 // AD9959_Set_Amp(CH2, 1023); //设置通道2幅度控制值1023,范围0~1023 // AD9959_Set_Amp(CH3, 1023); //设置通道3幅度控制值1023,范围0~1023 // AD9959_Set_Phase(CH0, 0); //设置通道0相位控制值0(0度),范围0~16383 // AD9959_Set_Phase(CH1, 4096); //设置通道1相位控制值4096(90度),范围0~16383 // AD9959_Set_Phase(CH2, 8192); //设置通道2相位控制值8192(180度),范围0~16383 // AD9959_Set_Phase(CH3, 12288); //设置通道3相位控制值12288(270度),范围0~16383 // my_Update(); DL_DMA_setSrcAddr(DMA, DMA_CH0_CHAN_ID,(uint32_t) 0x40556280); DL_DMA_setDestAddr(DMA, DMA_CH0_CHAN_ID,(uint32_t) gADCSamples); DL_DMA_enableChannel(DMA, DMA_CH0_CHAN_ID); NVIC_EnableIRQ(ADC12_0_INST_INT_IRQN); while (1) { while(gCheckDMA==false); fft_process(); gCheckDMA=false; DL_TimerA_startCounter(TIMER_0_INST); } } /*--------------------------中断--------------------------*/ void ADC12_0_INST_IRQHandler(void) { switch (DL_ADC12_getPendingInterrupt(ADC12_0_INST)) { case DL_ADC12_IIDX_DMA_DONE: gCheckDMA=true; DL_TimerA_stopCounter(TIMER_0_INST); break; default: break; } } //--------------------------辅助函数--------------------------// /*fft处理*/ void fft_process() { q15_t window[NUM_SAMPLES]; // 窗系数缓冲区 // 1. 生成窗系数(例如汉宁窗) generate_window_q15(window, NUM_SAMPLES, WINDOW_HANNING); // 2. 将ADC数据转为Q15复数(实部+虚部) for (int i = 0; i < NUM_SAMPLES; i++) { scaled_value = (int32_t)((gADCSamples[i] - 2048) * scale_factor); scaled_value = (scaled_value > 32767) ? 32767 : (scaled_value < -32767) ? -32767 : scaled_value; gFFTInput[2*i] = (q15_t)scaled_value; // 实部 gFFTInput[2*i+1] = 0; // 虚部 } // 3. 应用窗函数 apply_window_q15((q15_t*)gFFTInput, window, NUM_SAMPLES); // 4. 执行FFT及后续步骤 arm_cfft_q15(&arm_cfft_sR_q15_len1024, (q15_t*)gFFTInput, 0, 1); arm_cmplx_mag_q15((q15_t*)gFFTInput, (q15_t*)gFFTOutput, NUM_SAMPLES); arm_max_q15((q15_t*)gFFTOutput, NUM_SAMPLES, (q15_t*)&gFFTmaxValue, (uint32_t*)&gFFTmaxFreqIndex); } void delay_ms(uint32_t ms) { while(ms--) delay_cycles(CPUCLK_FREQ/1000); }
http://www.jsqmd.com/news/1181087/

相关文章:

  • MCP3428与PIC18F97J60在工业数据采集中的高效应用
  • Xol Toolhead硬件配置指南:从BOM清单到完整组装
  • ChatGPT写公众号文章:从选题→大纲→正文→配图文案→发布话术的7步工业化流水线(含腾讯系/小红书/微信生态适配参数)
  • 【仅限内部流出】Cursor格式化配置黄金模板(已验证覆盖React/Vue/Next.js/Svelte全生态,含CI/CD校验断言)
  • 第1.11节 深度实战:Inventory主机清单——自动化运维的“通讯录”
  • 终极指南:完全免费解锁Wand专业版功能的深度解决方案
  • 终极暗黑2存档编辑器:5分钟掌握d2s文件修改技巧
  • Gotalk与JavaScript集成:构建现代化实时Web应用的最佳实践指南
  • Wand-Enhancer:解锁Wand专业版功能的完整解决方案
  • 终极指南:DeepSeek-R1-Distill-Qwen-7B_rai_1.7.1_npu_4K模型架构与量化策略全揭秘
  • 从零开始:Qwen2.5-Coder-7B-Instruct_rai_1.7.1_npu_16K在AMD Ryzen AI平台上的完整部署教程
  • 基于微信小程序的水果销售商城系统设计与实现
  • 2026 天津黄金上门回收对标上海大盘金价 首推易奢福 - 肉松卷
  • 如何免费解锁Wand专业版完整功能:终极本地增强指南
  • 企业 CRM 客户管理系统设计:客户资料、跟进节奏与公海回收一体化
  • 填坑:图片加载闪烁与错位 —— Image 组件的复用与缓存策略
  • 双链表的增操作
  • Laguna-M.1-4bit模型架构深度解析:256专家MoE系统详解
  • leetcode hot100 第一题滑动窗口题目的实现
  • 专栏总结:500篇后的思考
  • C++ 内存管理实战:从 5 个经典笔试题看 new/delete 与野指针规避
  • 亨得利中国官方售后服务中心|最新维修地址及电话权威收录(2026年7月最新) - 亨得利腕表服务中心
  • 终极指南:如何将Windows电脑变成免费AirPlay接收器
  • 新手服装店主拿货不压货的三个底层逻辑
  • 宝玑中国官方售后服务体系全攻略|官网认证网点地址及电话权威公告(2026年7月最新) - 亨得利腕表服务中心
  • 全景相机模型:从统一投影到多视角图像生成
  • 揭秘Qwen3.5-0.8B-OptiQ-4bit核心技术:敏感度感知混合精度量化如何让小模型发挥大能量
  • 如何快速实现跨平台投屏:Windows接收iOS屏幕的完整指南
  • day15:函数极限与左右极限
  • C#设计模式总览