OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5400|回复: 5

MSP430 定时器触发ADC采集

[复制链接]

5

主题

103

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
235
金钱
235
注册时间
2014-11-26
在线时间
25 小时
发表于 2016-8-23 14:05:00 | 显示全部楼层 |阅读模式
3金钱
我想实现定时器触发ADC采样,定时器10us触发一次adc采样,采样完成后触发中断,中断处理函数中保存采样数据到buffer,求大神给思路,有例子更好,百度搜索不到有用的例子,还有按照430手册配置,也没有配置成功,最后我也是看的云里雾里

最佳答案

查看完整内容[请看2#楼]

听你的要求,好像是用到2个中断?定时器一个,AD一个, 我之前做过类似的东西AD模块的初始化是这样的,我用的是MSP430F149[mw_shl_code=c,true] P6SEL |= 0x01; // 使能ADC通道 ADC12CTL0 = ADC12ON+SHT0_8+MSC; // 打开ADC,设置采样时间 ADC12CTL1 = SHP+CONSEQ_2; // 使用采样定时器 //ADC12IE = 0x01; // 使能ADC中断 ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

21

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
345
金钱
345
注册时间
2016-8-16
在线时间
32 小时
发表于 2016-8-23 14:05:01 | 显示全部楼层
本帖最后由 PPlucky 于 2016-8-23 15:28 编辑

听你的要求,好像是用到2个中断?定时器一个,AD一个,
我之前做过类似的东西AD模块的初始化是这样的,我用的是MSP430F149[mw_shl_code=c,true]
P6SEL |= 0x01;                            // 使能ADC通道
    ADC12CTL0 = ADC12ON+SHT0_8+MSC;           // 打开ADC,设置采样时间
    ADC12CTL1 = SHP+CONSEQ_2;                 // 使用采样定时器
    //ADC12IE = 0x01;                           // 使能ADC中断
    ADC12CTL0 |= ENC;                         // 使能转换
    ADC12CTL0 |= ADC12SC;                     // 开始转换
[/mw_shl_code]

初始化里有采样时间 这里在研究一下 满足你的要求应该没有问题
回复

使用道具 举报

5

主题

103

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
235
金钱
235
注册时间
2014-11-26
在线时间
25 小时
 楼主| 发表于 2016-8-25 10:42:08 | 显示全部楼层
PPlucky 发表于 2016-8-23 15:26
听你的要求,好像是用到2个中断?定时器一个,AD一个,
我之前做过类似的东西AD模块的初始化是这样的,我 ...

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

使用道具 举报

17

主题

109

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
348
金钱
348
注册时间
2016-6-13
在线时间
65 小时
发表于 2017-5-4 10:57:19 | 显示全部楼层
楼主可否把写好的代码给参考下
回复

使用道具 举报

5

主题

103

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
235
金钱
235
注册时间
2014-11-26
在线时间
25 小时
 楼主| 发表于 2017-10-12 17:07:48 | 显示全部楼层
#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;

}


回复

使用道具 举报

5

主题

103

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
235
金钱
235
注册时间
2014-11-26
在线时间
25 小时
 楼主| 发表于 2017-10-12 17:08:21 | 显示全部楼层
发条橙子玩电子 发表于 2017-5-4 10:57
楼主可否把写好的代码给参考下

好久没上论坛了,这个是源代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-22 16:08

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表