我的要求:收集交流50Hz 信号、每周64点波、采样率 FS=50*32=1600;MCLK=SCLK=12MHz
计时器时钟频率=MCLK;采样计时器计时长度=12000000/1600=7500;
在计时器中断程序中、启动 ADC 转换、并反转 P1.3引脚状态以监控计时器长度、使频率输出= 800Hz、从而指示计时器设置正确
void timer_a_init (void) { U16 t; //CCR0 = 7500; t=12000000/(50*32); CCR0 = t; TACTL = tassel_2 + TACL+ MC_1; CCTL0 = CCIE; } #pragma vector=TIMERRA0_vector __interrupt Timer_A (void ) SD24CCTL0 |= SD24SC; P1OUT ^= BIT3; 单次转换模式 void sd24_A_init (void){U16 I;SD24CTL = SD24SSEL_1+SD24DIV_2+SD24XDIV_1+SD24REFON;// 1.2V ref、SMCLK Fadc=12000000/(4+3=100SD24DIV_1SD24REF_0双极性模式补码输出、SD24INTRL = SD24INSD24INTS+SD24INTS+SD24TRD;// SD24INSD24INSD24INSD24INSD24INTS+SD24INTS+SD240_INTS_INTRD = SD24INSD240_SD24INSD24INTS_INSD24INTS_INSD24INTRD 过采样256中断使能= SD24INSD240_SD24INSD24INTS 对于(I = 0;I < 0x4000;I++); // 1.2V 参考启动 索引延迟=0; } #pragma vector=SD24_vector __interrupt void SD24AISR (void) { U8 I; IF (SD24IV=SD24IV_SD24MEM0) { ad_buf[索引]= SD24MEM0; 如果(++index =samplebuftime) { for (i=0;<samplebuftime;i++) ad[i]=ad_buf[i]; ) 索引=0; } P1OUT ^= BIT4; }
如上所述、使 P1.4引脚输出频率=800正确。 采样率为1600
但我读取 AD 采样是错误的
帮助我分析问题所在、非常感谢