1、我用到高精度24位AD,我主要参考官方例程,发现MSP430F4270的例程中有过采样率1024的,但是只读出低十六位。我想用msp430afe253读出24位AD数应该怎么改造。
请把下面代码改造成msp430afe253的24位精度的例程。
2、下图是430指南的截图,我的问题是两次读取,重叠的部分怎么处理?
代码如下
MSP430F4270
// -----------------
// /|\| XIN|-
// | | | 32kHz
// --|RST XOUT|-
// | |
// Vin+ -->|A0+ |
// Vin- -->|A0- |
// | |
// | VREF |---+
// | | |
// | | -+- 100nF
// | | -+-
// | | |
// | AVss |---+
// | |
//
// L. Westlund / S. Karthikeyan
// Texas Instruments Inc.
// June 2005
// Built with CCE Version: 3.2.0 and IAR Embedded Workbench Version: 3.30A
//*****************************************************************************
#include <msp430.h>
unsigned int result;
int main(void)
{
volatile unsigned int i; // Use volatile to prevent removal
// by compiler optimization
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
FLL_CTL0 |= XCAP14PF; // Configure load caps
for (i = 0; i < 10000; i++); // Delay for 32 kHz crystal to
// stabilize
SD16CTL = SD16REFON+SD16SSEL0; // 1.2V ref, SMCLK
SD16CCTL0 |= SD16SNGL+SD16IE+SD16XOSR+SD16OSR0;// Single conv, enable interrupt, 1024 OSR
SD16INCTL0 |= SD16INTDLY_0; // Interrupt on 4th sample
for (i = 0; i < 0x3600; i++); // Delay for 1.2V ref startup
_EINT(); // Enable general interrupts
while (1)
{
SD16CCTL0 |= SD16SC; // SET BREAKPOINT HERE
// Set bit to start conversion
_BIS_SR(LPM0_bits); // Enter LPM0
}
}
#pragma vector=SD16_VECTOR
__interrupt void SD16ISR(void)
{
switch (SD16IV)
{
case 2: // SD16MEM Overflow
break;
case 4: // SD16MEM0 IFG
result = SD16MEM0; // Save CH0 results (clears IFG)
break;
}
_BIC_SR_IRQ(LPM0_bits); // Exit LPM0
}