因为感觉MSP430G2332的ADC稳定性不好,然后就编了程序单独对ADC进行检测
每次ADC采完,用了2个16位变量去计数,其中一个等于65535时,另外一个加1
当我测到第二个变量差不多等于11000时,ADC不再动作,中断等都无法触发,差不多8亿左右的次数
按常理来时是不应该的,所以请问下,这个两次ADC采集之间的间隔有限制吗?如果有限制的话,那应该是多少?
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
因为感觉MSP430G2332的ADC稳定性不好,然后就编了程序单独对ADC进行检测
每次ADC采完,用了2个16位变量去计数,其中一个等于65535时,另外一个加1
当我测到第二个变量差不多等于11000时,ADC不再动作,中断等都无法触发,差不多8亿左右的次数
按常理来时是不应该的,所以请问下,这个两次ADC采集之间的间隔有限制吗?如果有限制的话,那应该是多少?
#include <msp430.h>
unsigned int A,AA,B;
int main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
ADC10CTL1 = INCH_3 + CONSEQ_1; // A3/A2/A1, single sequence
ADC10CTL0 = ADC10SHT_2 + MSC + ADC10ON + ADC10IE;
ADC10DTC1 = 0x03; // 3 conversions
ADC10AE0 |= 0x0E; // P1.3,2,1 ADC10 option select
P1DIR |= 0x01; // Set P1.0 output
for (;;)
{
B=1;
ADC10CTL0 &= ~ENC;
while (ADC10CTL1 & ADC10BUSY); // Wait if ADC10 core is active
ADC10SA = 0x200; // Data buffer start
P1OUT |= 0x01; // P1.0 = 1
ADC10CTL0 |= ENC + ADC10SC; // Sampling and conversion start
while(B);
A++;
if(A==65535)
{
AA++;
}
if(AA==65535)
{
__no_operation();
__no_operation();
}
}
}
// ADC10 interrupt service routine
#if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)
#pragma vector=ADC10_VECTOR
__interrupt void ADC10_ISR(void)
#elif defined(__GNUC__)
void __attribute__ ((interrupt(ADC10_VECTOR))) ADC10_ISR (void)
#else
#error Compiler not supported!
#endif
{
// __bic_SR_register_on_exit(CPUOFF); // Clear CPUOFF bit from 0(SR)
B=0;
}
编辑官方的例程,采用非睡眠模式,出现同样结果,能提点下是什么原因吗?
测试了,随眠模式也一样,所以应该是采集时间限定的问题,在相关说明书上没找到相应答案
正在测试中,有一定的概率是软件跟仿真器跟芯片之间协调不好,导致运行一段时间后数据直接丢失断开,从而导致的死机,正在测试是否这个问题导致
这个ADC稳定性不好,说的是驱动的稳定性不好,而不是结果的稳定性不好.
ADC用了好多影子寄存器,再加上省电的原因,经常驱动出问题,包括说最简单的官方例程也没敢做ADC连续序列模式+DTC连续模式,只敢中间做完然后停下,取消ENC去同步下ADC,我做就会发生结果移位的现象,至少来说ADC跟DTC没硬件同步
同样的驱动,给定时器调用跟给while(标志位)这样调用,能得到完全不一样的结果,定时就能运行,等待标志位的方式就不能运行.经常性能调用1次采集,进行不了第二次采集.等等一系列问题,所以我才要对他做测试
一模一样的语句,就因为我换了个工程而不工作,这个工程还是两个一样的工程,就是一个是我复制出来修改的,修改完成在正式里面改掉,在复制出来的就能工作,而正式版的就不能工作,你说,我能对这个芯片放心吗?也不知道是你们的CCS编译器问题还是芯片问题,反正我要疯了,这应该是我用TI的主控芯片的最后一款产品,除非再次需要极致的省电模式,否则我不会再考虑TI的主控芯片,烦躁死我了
其他功能都没这个问题,就ADC这个功能,真他妈的是乱七八糟的
其他功能都没问题,就ADC这个功能,真是乱七八糟的让人发疯
跑一段时间死的问题,经过测试应该跟编译软件Code Composer Studio 7.0.0有关,作为TI自己的官方工具,发生这种事情,真是要被鄙视到死,在更换IAR后,仿真跟实际运行结果一致,包括一模一样语句不运行问题被解决,但是ADC影子寄存器的复位问题应该是真实存在的,毕竟两个软件都一样的问题.
编译软件Code Composer Studio 7.0.0有问题,在升级成编译软件Code Composer Studio 7.2.0后这个相同语句不运行的故障消失