jiabao mo 发表于论坛 MSP430™16 位超低功耗 MCU
谢谢,在问一下如何确定已经转化完30次
ADC10CTL1 = INCH_2 + CONSEQ_3; // A3/A2/A1, single sequence
ADC10CTL0 = ADC10SHT_2 + MSC + ADC10ON + ADC10IE;
ADC10DTC1 = 0x1E; // 3 conversions
ADC10AE0 |= 0x07; // P1.3,2,1 ADC10 option select
当使用DTC时如何确定设定的采样次数 ADC的采样结果值已全部传输到RAM,
ADC10CTL0 &= ~ENC;
while (ADC10CTL1 & BUSY); // Wait if ADC10 core is active
ADC10SA = (unsigned int) ADC10_A; // Data buffer start // P1.0 = 1
ADC10CTL0 |= ENC + ADC10SC;
是不是当使用DTC时只发生一次中断,就是当设定的转化次数完成后,发生一次中断,还是和不使用DTC时一样每次中断完成都发生中断
是不是也可以不开启中断, ADC10CTL0 |= ENC + ADC10SC; 利用延时等待转化全部完成,在对数组ADC10_A进行操作,
Ken Wang:
jiabao,
DTC内部会有一个向下计数的transfer counter 的模块,他会在DTC工作是启动,并且在完成一次传输时,它就会进行减一。当计数模块达到0时,也就意味着你设置的传输次数的DTC传输已经结束,这个时候ADC10IFG就会置位。你可以查询这个标志来确定DTC传输是否完成。
DTC传输可以设置位单次一个block或是两个block模式,还可以设置为continue模式。如果你使能了ADC的中断,则在DTC完成一次block或是两个block的时候,ADC10IFG就会被置位。你可以不开中断,采用轮询的方式来确认DTC的工作情况。
如果你需要同时采用延时的方法来等待转化的完成,这也是可以实现的。在我们的数据手册上面,很详细的列出了,ADC工作在不同的时钟模式下,DTC完成一次传输所需要的clock cycle。你可以参考这些来设计你的程序。
Ken