No.34277 作者:channel96 邮件:lhjbox2000@yahoo.com.cn ID:13010 登陆:2次 文章数:1篇 最后登陆IP:218.85.18.2 最后登陆:2003/6/17 17:23:28 注册:2003/6/13 13:58:40 财富:56 发帖时间:2003/6/13 13:59:12 发贴者IP:218.85.8.7 标题:channel96:msp430f149 ADC12做波形采样,现已陷入僵局 摘要:No.34277msp430f149 ADC12做波形采样,现已陷入僵局 我用msp430f149 ADC12做波形采样,现已陷入僵局 #####==> 的地方是我的问题 是电压变化信号范围在0~2。5V,采样频率应大于10K,XT2的晶振为8M 我的系统时种设置如下(######==> 1.时钟设置正确否?######==> 2.MCLK是不是最大了?): DCOCTL=0Xe0; //F149基础时钟设置 BCSCTL1=0x07; //开启XT2振荡器 BCSCTL2=SELM_2; //定义MCLK为XT2;MCLK分频为1;SMCLK时钟源为DCOCLK,SMCLK分频为1 (######==> 3.f149芯片的ADC12最大采样频率可达200K?)我的ADC采样编码设想如下: 设置ADC12采样频率尽可能高,ADC12中断服务子程序尽可能小,(######==> 4.中断服务子程序时间应当不超过ADC12的采样周期,否则ADC12的采样周期会被拉长?)利用缓冲处理的形式,设置一个缓冲数组ADCbuf[2][122];在中断服务程序中对ADCbuf[0],ADCbuf[1]进行轮流缓冲,每当一个缓冲生成后,置一个缓冲完成标志bufok=1,主程序中根据bufok=1轮流对缓冲数组ADCbuf[0],ADCbuf[1]进行处理(是要对缓冲中的每个采样值进行处理),每处理完一个缓冲清bufok=0;(######==> 5.对每一个缓冲的处理时间应小于每一个缓冲的生成时间,要么对缓冲的处理会一直被中断?) 我程序这样的: void ADC12Init(void) { ADC12CTL0&=~ENC; //关闭adc12转换允许位 ADC12CTL0 =MSC+ADC12ON+SHT0_3; //开adc12内核,采样自动转换 ADC12CTL1=SHS_0+SHP+ADC12DIV_0+ADC12SSEL_2+CONSEQ_2; //单通道重复 ADC12MCTL0 = EOS+INCH_11; ADC12IE = 0x0001; // Enable ADC12IFG.0 } #pragma vector=ADC_VECTOR __interrupt void ADCINT (void)// ADC中断服务程序 { ... if (buf_y==0) //如果是新的缓冲开始,则一维下标应变化 { ADcount+=1; //记录ADC缓冲发生次数,全局变量 buf_x^=0x01; } ADCbuf[buf_x][buf_y]=ADC12MEM0; buf_y+=1; ... } void main(void) { ... F149Init(); ADC12Init(); _EINT(); //开总中断 ... ADC12CTL0 |= ENC; // 使能ADC12转换允许位 ADC12CTL0 |= ADC12SC; ......
>>返回讨论的主题
|