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.

关于SD24模块的使用

Other Parts Discussed in Thread: MSP430F6779

目前使用的是MSP430F6779模块,测试其24位AD模块,使用时发现很大问题,输入为电压为0时,结果寄存器仍然有值,100nf电容已接,代码是在官方例程上修改的,代码如下。

#include <msp430.h>
#include <string.h>
#include "stdlib.h"
#include <stdio.h>
/* Unsigned integer to store SD24_B conversion result */
 long results;
 char send[12];

void initUART()
{    UCSCTL6 &= ~(XT1OFF);                    // XT1 On
    UCSCTL6 |= XCAP_1;                       // Internal load cap
    // Loop until XT1 fault flag is cleared
    do
    {
        UCSCTL7 &= ~(XT2OFFG | XT1LFOFFG | DCOFFG);
        // Clear XT2,XT1,DCO fault flags
        SFRIFG1 &= ~OFIFG;                   // Clear fault flags
    } while (SFRIFG1 & OFIFG); 
    UCSCTL6 &= ~(XT1DRIVE_3);
      
    // Configure USCI_A0 for UART mode
    UCA0CTLW0 = UCSWRST;                    // Put eUSCI in reset

      UCA0CTLW0 |= UCSSEL__SMCLK;              // CLK = SMCLK     bode率  115200
      UCA0BRW = 8;
      UCA0MCTLW = 0xD600;                     // UCBRSx = 0x92, UCOS16 = 0
      
      
    UCA0CTLW0 &= ~UCSWRST;                    // Initialize eUSCI
 
}

void send_buf( long ptr)    //AD数据无线发送
{   
          int i =0;
          sprintf(send,"%ld",ptr);    //将AD数值转化为字符串进行无线发送
      
          while(send[i] != '\0') 
          { 
          UCA0TXBUF = send[i];
          while(!(UCA0IFG&UCTXIFG)); 
          i++;
          __delay_cycles(5000);
           }    
}

void main(void)
{
   
    
    WDTCTL = WDTPW | WDTHOLD;                       // Stop WDT
    
    initUART();
    P3SEL0 |= BIT0 + BIT1;                    // Set P3.0, P3.1 to non-IO
    P3DIR |=  BIT0 + BIT1;                     // Enable UCA0RXD, UCA0TXD
    
    P5DIR |=  BIT0;                       //指示灯
    P1DIR |=  BIT0;                       //P1 输出测试高电压
    P1OUT |= BIT0;
    
    
    SD24BCTL0 = SD24REFS | SD24SSEL_1;              // Select internal REF
                                                    // Select SMCLK as SD24_B clock source

    SD24BCCTL6 |= SD24SNGL;                         // Single conversion

    SD24BINCTL6 |= SD24INTDLY0;                     // Interrupt on 3rd sample
    SD24BIE |= SD24IE6;                             // Enable channel 2 interrupt

    __delay_cycles(0x3600);                         // Delay for 1.5V REF startup
__bis_SR_register( GIE);         // Enter LPM0 w/ interrupts
    while (1)
    {   P5OUT ^= BIT0;        //运行闪烁指示灯
        SD24BCCTL6 |= SD24SC;                       // Set bit to start conversion
     
       send_buf(results);// ad值发送
        __delay_cycles(500000);   
        UCA0TXBUF = '\r';//换行符
    }
}


#pragma vector=SD24B_VECTOR
__interrupt void SD24BISR(void)

{
    switch (SD24BIV)
    {
        case SD24BIV_SD24OVIFG:                     // SD24MEM Overflow
            break;
        case SD24BIV_SD24TRGIFG:                    // SD24 Trigger IFG
            break;
        case SD24BIV_SD24IFG0:                      // SD24MEM0 IFG
            break;
        case SD24BIV_SD24IFG1:                      // SD24MEM1 IFG
            break;
        case SD24BIV_SD24IFG6:                      // SD24MEM2 IFG
            results = SD24BMEMH6;                   // Save CH2 results (clears IFG)
            results = (results << 16) | SD24BMEML6; // Concatenate lower and upper words
            
            break;
        default:break;
    }

  
}