⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 master.c

📁 msp430F149的SPI主机接口例程
💻 C
字号:
//----------------------------------------------------------------------//  
    //                MSP430F149
    //              -----------------
    //          /|\|              XIN|-  
    //           | |                 |
    //           --|RST          XOUT|- 
    //             |                 |
    //       LED <-|P1.0         P3.1|-> Data Out (SIMO0)
    //             |                 |
    //     Scope <-|P3.4         P3.2|<- Data In (SOMI0)
    //             |                 |
    // Slave RST <-|P3.5         P3.3|-> Serial Clock Out (UCLK)
//---------------------------------------------------------------------//
//#define MAINSWITCH_MAIN1 1
    #include "msp430x14x.h"
    typedef unsigned int uint16;
    typedef unsigned char uchar;
    typedef unsigned char uint8;
    uint8 TXNUM=0;
    uint8 RXNUM=0XFF;
    uint8 RXVAL=0;
    uint8 k=30;
    inline void delay(n)
    {
        uint16 i,j;
        for(i=0;i<30;i++)
          for(j=0;j<n;j++)
            ;
    }
#ifdef  MAINSWITCH_MAIN1
//-----------------------------------------main 1------------------------------//
    void main(void)
    {
        unsigned int i;
        WDTCTL = WDTPW + WDTHOLD;             // Stop WDT        
        BCSCTL1 &= ~XT2OFF;                   // XT2 = HF XTAL      
        do 
        {
             IFG1 &= ~OFIFG;                        // Clear OSCFault flag
             for (i = 0xFF; i > 0; i--);            // Time for flag to set
        }
        while ((IFG1 & OFIFG) != 0);           // OSCFault flag still set? 
        BCSCTL2 = 0x88;                        // MCLK = XT2 (safe)
        //-----------MASTER CONFIGURATION--------------------//
        P1OUT|=BIT1;   
        P1DIR|=BIT0;  
        P3SEL|=(BIT1+BIT2+BIT3);  //BIT1:SIMO0    BIT2:SOMI0  BIT3:UCLK0 
        P3OUT = 0x20;                        // Setup P3.4 for Scope trigger and
        P3DIR |= 0x32;                       // P3.5 for slave initialization
        UTCTL0|=(SSEL1+CKPL+STC);//SSEL1 SSEL0 选择主时钟  CKPL 数据下降沿输出,输入上升沿锁存 STC三线通信                     
        UCTL0|=(CHAR+SYNC+MM);     //CHAR 数据为8位  SYNC 同步(SPI)  MM 主机模式           
        UBR01=0X00;  UBR00=0X06;  UMCTL0=0X6F; //baud rate=4800
        UCTL0 &= ~SWRST;                         //初始化USART状态机
        ME1 |= USPIE0;                           //允许SPI0 发送和接收使能
        IE1 |= URXIE0;                           //允许USART0 RX中断   
        _EINT();
        _NOP();      
        P3OUT &= ~0x20;                  // Toggle P3.5: slave reset
        P3OUT |= 0x20;
        delay(3000);
        while(1)
        {   
            TXBUF0=0XAA;
            delay(300);
            TXBUF0=0XBB;
            delay(300);
        }	 
    }
        //--------RX INTERRUPT----------//
    #pragma vector=USART0RX_VECTOR
    __interrupt void SPIM0_RX (void)
    {
       RXVAL=RXBUF0;
       RXNUM--;
       if(k--<=2)
       {
         P1OUT^=BIT0;
         k=10;
       }
    }

#else 
    //-------------------------------main 2 --------------------------------------//
    //******************************************************************************
    //   MSP-FET430P140 Demo - USART0 SPI 3-Wire SPI Master
    //
    //   Description: SPI master talks to SPI slave using 3-wire mode. Incrementing
    //   data is sent by the master starting at 0x00. Received data is expected to
    //   decrement starting at 0xFF. USART0 RX ISR is used to handle communication
    //   with the CPU normally in LPM0. The slave is initialized by the master
    //   followed by a slave setup delay time in order to assure proper SPI
    //   synchronization. P1.0 indicates proper data reception.
    //   ACLK = n/a, MCLK = SMCLK = DCO ~ 800kHz
    //
    //                MSP430F149
    //              -----------------
    //          /|\|              XIN|-  
    //           | |                 |
    //           --|RST          XOUT|- 
    //             |                 |
    //       LED <-|P1.0         P3.1|-> Data Out (SIMO0)
    //             |                 |
    //     Scope <-|P3.4         P3.2|<- Data In (SOMI0)
    //             |                 |
    // Slave RST <-|P3.5         P3.3|-> Serial Clock Out (UCLK)
    //
    //  Z.Albus
    //  Texas Instruments, Inc
    //  October 2003
    //  Built with IAR Embedded Workbench Version: 1.26B
    //  December 2003
    //  Updated for IAR Embedded Workbench Version: 2.21B
    //******************************************************************************
    #include <msp430x14x.h>
    void main(void)
    { 
      unsigned int i;
      WDTCTL = WDTPW + WDTHOLD;             // Stop WDT    
      /*
      BCSCTL1 &= ~XT2OFF;                   // XT2 = HF XTAL     
      do 
      {
              IFG1 &= ~OFIFG;                        // Clear OSCFault flag
              for (i = 0xFF; i > 0; i--);            // Time for flag to set
      }
      while ((IFG1 & OFIFG) != 0);           // OSCFault flag still set? 
      BCSCTL2 = 0x88;                        // MCLK = XT2 (safe)
      */      
      WDTCTL = WDTPW + WDTHOLD;             // Stop WDT
      P1OUT = 0x000;                        // Setup P1.0 for LED output
      P1DIR |= 0x001;
      P3SEL = 0x00E;                        // Setup P3 for SPI mode
      P3OUT = 0x020;                        // Setup P3.4 for Scope trigger and
      P3DIR |= 0x030;                       // P3.5 for slave initialization
      U0CTL = CHAR + SYNC + MM + SWRST;     // 8-bit, SPI, Master
      U0TCTL = CKPL + SSEL1 + STC;          // Polarity, SMCLK, 3-wire
      U0BR0 = 0x002;                        // SPICLK = SMCLK/2
      U0BR1 = 0x000;
      U0MCTL = 0x000;
      ME1 = USPIE0;                         // Module enable
      U0CTL &= ~SWRST;                      // SPI enable
      IE1 |= URXIE0;                        // Recieve interrupt enable
      _EINT();                              // Enable interrupts
      
      P3OUT &= ~0x020;                      // Toggle P3.5: slave reset
      P3OUT |= 0x020;
      i = 50000;                            // Delay
      do (i--);
      while (i != 0);  
      
      while (1)
      { 
        TXBUF0=0XAA;
        delay(300);
        TXBUF0=0XBB;
        delay(300);
      }
    } // End Main
    
    #pragma vector=USART0RX_VECTOR
    __interrupt void SPI0_rx (void)
    {   
      P3OUT ^= 0x010;                       // XOR P3.4 for scope trigger
      RXVAL=RXBUF0;
    }
#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -