MSP430技术论坛
直播中

蒋思颖

7年用户 205经验值
私信 关注
[问答]

请问MSP430定时器触发ADC采集怎么实现?

我想实现定时器触发ADC采样,定时器10us触发一次adc采样,采样完成后触发中断,中断处理函数中保存采样数据到buffer,求大神给思路,有例子更好,百度搜索不到有用的例子,还有按照430手册配置,也没有配置成功,最后我也是看的云里雾里

回帖(5)

江端淳

2019-4-10 09:34:58
听你的要求,好像是用到2个中断?定时器一个,AD一个,
我之前做过类似的东西AD模块的初始化是这样的,我用的是MSP430F149[C] 纯文本查看 复制代码
P6SEL |= 0x01;                            // 使能ADC通道    ADC12CTL0 = ADC12ON+SHT0_8+MSC;           // 打开ADC,设置采样时间    ADC12CTL1 = SHP+CONSEQ_2;                 // 使用采样定时器    //ADC12IE = 0x01;                           // 使能ADC中断    ADC12CTL0 |= ENC;                         // 使能转换    ADC12CTL0 |= ADC12SC;                     // 开始转换
初始化里有采样时间 这里在研究一下 满足你的要求应该没有问题
举报

韩刚龙

2019-4-10 09:54:56
谢谢,我已经弄好了,我用的是定时器触发ad采样,定时器会一直工作,当需要采样的时候,使能adc的enc,然后会不断进入adc中断,采样数据存入buffer,我这个不用进入timer的中断,timer只是定时采样ad的时候触发信号,不过仍然谢谢你啊,分就给你了
举报

莫循虎

2019-4-10 10:03:52
楼主可否把写好的代码给参考下
1 举报

李泽坚

2019-4-10 10:23:42
#include "main.h"
void adc_init(void)
{
    ADC10CTL0 = ADC10SHT_1 + ADC10ON; // ADC10ON, interrupt enabled
    ADC10AE0 |= 0x02;                         // P7.5 ADC option select
    ADC10AE0 |= 0x04;                         // P6.0 ADC option select
    ADC10AE0 |= 0x08;                         // P6.3 ADC option select
}
//只有在采集电流数据的时候开始中断
void Adc_Irq_Enable(void)
{
    sys.ad_aindex = 0;
    sys.ad_dindex = 0;
    ADC10CTL1 = SHS_1 + INCH_2 + CONSEQ_2; //单通道连续转换
    ADC10CTL0 = ADC10SHT_1 + ADC10ON + ADC10IE;
    ADC10CTL0 |=  ENC;
    TACCR0 = 20-1;                          // PWM Period
    TACCTL1 = OUTMOD_3;                       // TACCR1 set/reset
    TACCR1 = 10;                            // TACCR1 PWM Duty Cycle
    TACTL = TASSEL_2 + MC_1 + ID_3;                  // ACLK, up mode
}
void Adc_Irq_Disable(void)
{
    ADC10CTL1 = INCH_2;
    ADC10CTL0 = ADC10SHT_1 + ADC10ON;
}
#pragma vector=ADC10_VECTOR
__interrupt void ADC10_ISR (void)
{
        ad_abuffer[adindex] = ADC10MEM;
}
举报

李朗雯

2019-4-10 10:38:30
好久没上论坛了,这个是源代码
举报

更多回帖

发帖
×
20
完善资料,
赚取积分