现在要用到MSP4320G2211的SPI 做东西,自己软件模拟的SPI怎么也调不通,求大神分享一个例程,多谢
灰小子:
网上有很多这类例程
你可以参考wenku.baidu.com/…/b65b7d12ff00bed5b9f31d8d.html
user5885910:
回复 灰小子:
好的 多谢提供思路
gaoyang9992006:
/* --COPYRIGHT--,BSD_EX* Copyright (c) 2012, Texas Instruments Incorporated* All rights reserved.** Redistribution and use in source and binary forms, with or without* modification, are permitted provided that the following conditions* are met:** *Redistributions of source code must retain the above copyright*notice, this list of conditions and the following disclaimer.** *Redistributions in binary form must reproduce the above copyright*notice, this list of conditions and the following disclaimer in the*documentation and/or other materials provided with the distribution.** *Neither the name of Texas Instruments Incorporated nor the names of*its contributors may be used to endorse or promote products derived*from this software without specific prior written permission.** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.**********************************************************************************MSP430 CODE EXAMPLE DISCLAIMER** MSP430 code examples are self-contained low-level programs that typically* demonstrate a single peripheral function or device feature in a highly* concise manner. For this the code may rely on the device's power-on default* register values and settings such as the clock configuration and care must* be taken when combining code from several examples to avoid potential side* effects. Also see www.ti.com/grace for a GUI- and www.ti.com/msp430ware* for an API functional library-approach to peripheral configuration.** --/COPYRIGHT--*/ //****************************************************************************** //MSP430G2x21/G2x31 Demo - SPI full-Duplex 3-wire Master // //Description: SPI Master communicates full-duplex with SPI Slave using //3-wire mode. The level on P1.4 is TX'ed and RX'ed to P1.0. //Master will pulse slave reset for synch start. //ACLK = n/a, MCLK = SMCLK = Default DCO // //**** used with "msp430g2x21_usi_03.c"**** // //SlaveMaster //MSP430G2x21/G2x31MSP430G2x21/G2x31 //---------------------------------- //|XIN|-/|\|XIN|- //||| || //|XOUT|---|RSTXOUT|- //|| /|\|| //|RST/NMI|--+<----|P1.2| //LED <-|P1.0||P1.4|<- //->|P1.4||P1.0|-> LED //|SDI/P1.7|<-------|P1.6/SDO| //|SDO/P1.6|------->|P1.7/SDI| //|SCLK/P1.5|<-------|P1.5/SCLK| // //D. Dang //Texas Instruments Inc. //October 2010 //Built with CCS Version 4.2.0 and IAR Embedded Workbench Version: 5.10 //******************************************************************************#include <msp430.h>int main(void) {volatile unsigned int i;WDTCTL = WDTPW + WDTHOLD;// Stop watchdog timerP1OUT =0x10;// P1.4 set, else resetP1REN |= 0x10;// P1.4 pullupP1DIR = 0x01;// P1.0 output, else inputUSICTL0 |= USIPE7 +USIPE6 + USIPE5 + USIMST + USIOE; // Port, SPI masterUSICTL1 |= USIIE;// Counter interrupt, flag remains setUSICKCTL = USIDIV_4 + USISSEL_2;// /16 SMCLKUSICTL0 &= ~USISWRST;// USI released for operationUSISRL = P1IN;// init-load dataP1DIR |= 0x04;// Reset SlaveP1DIR &= ~0x04;for (i = 0xFFF; i > 0; i--);// Time for slave to readyUSICNT = 8;// init-load counter__bis_SR_register(LPM0_bits + GIE);// Enter LPM0 w/ interrupt }// USI interrupt service routine #if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__) #pragma vector=USI_VECTOR __interrupt void universal_serial_interface(void) #elif defined(__GNUC__) void __attribute__ ((interrupt(USI_VECTOR))) universal_serial_interface (void) #else #error Compiler not supported! #endif {if (0x10 & USISRL)P1OUT |= 0x01;elseP1OUT &= ~0x01;USISRL = P1IN;USICNT = 8;// re-load counter }
gaoyang9992006:
回复 gaoyang9992006:
/* --COPYRIGHT--,BSD_EX* Copyright (c) 2012, Texas Instruments Incorporated* All rights reserved.** Redistribution and use in source and binary forms, with or without* modification, are permitted provided that the following conditions* are met:** *Redistributions of source code must retain the above copyright*notice, this list of conditions and the following disclaimer.** *Redistributions in binary form must reproduce the above copyright*notice, this list of conditions and the following disclaimer in the*documentation and/or other materials provided with the distribution.** *Neither the name of Texas Instruments Incorporated nor the names of*its contributors may be used to endorse or promote products derived*from this software without specific prior written permission.** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.**********************************************************************************MSP430 CODE EXAMPLE DISCLAIMER** MSP430 code examples are self-contained low-level programs that typically* demonstrate a single peripheral function or device feature in a highly* concise manner. For this the code may rely on the device's power-on default* register values and settings such as the clock configuration and care must* be taken when combining code from several examples to avoid potential side* effects. Also see www.ti.com/grace for a GUI- and www.ti.com/msp430ware* for an API functional library-approach to peripheral configuration.** --/COPYRIGHT--*/ //****************************************************************************** //MSP430G2x21/G2x31 Demo - SPI full-Duplex 3-wire Slave // //Description: SPI Master communicates full-duplex with SPI Slave using //3-wire mode. The level on P1.4 is TX'ed and RX'ed to P1.0. //Master will pulse slave reset for synch start. //ACLK = n/a, MCLK = SMCLK = Default DCO // //**** used with "msp430g2x21_usi_02.c"**** // //SlaveMaster //MSP430G2x21/G2x31MSP430G2x21/G2x31 //---------------------------------- //|XIN|-/|\|XIN|- //||| || //|XOUT|---|RSTXOUT|- //|| /|\|| //|RST/NMI|--+<----|P1.2| //LED <-|P1.0||P1.4|<- //->|P1.4||P1.0|-> LED //|SDI/P1.7|<-------|P1.6/SDO| //|SDO/P1.6|------->|P1.7/SDI| //|SCLK/P1.5|<-------|P1.5/SCLK| // //D. Dang //Texas Instruments Inc. //October 2010 //Built with CCS Version 4.2.0 and IAR Embedded Workbench Version: 5.10 //******************************************************************************#include <msp430.h>int main(void) {WDTCTL = WDTPW + WDTHOLD;// Stop watchdog timerP1OUT =0x10;// P1.4 set, else resetP1REN |= 0x10;// P1.4 pullupP1DIR = 0x01;// P1.0 output, else inputUSICTL0 |= USIPE7 + USIPE6 + USIPE5 + USIOE; // Port, SPI slaveUSICTL1 |= USIIE;// Counter interrupt, flag remains setUSICTL0 &= ~USISWRST;// USI released for operationUSISRL = P1IN;// init-load dataUSICNT = 8;// init-load counter__bis_SR_register(LPM0_bits + GIE);// Enter LPM0 w/ interrupt }// USI interrupt service routine #if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__) #pragma vector=USI_VECTOR __interrupt void universal_serial_interface(void) #elif defined(__GNUC__) void __attribute__ ((interrupt(USI_VECTOR))) universal_serial_interface (void) #else #error Compiler not supported! #endif {if (0x10 & USISRL)P1OUT |= 0x01;elseP1OUT &= ~0x01;USISRL = P1IN;USICNT = 8;// re-load counter }
gaoyang9992006:
回复 gaoyang9992006:
/* --COPYRIGHT--,BSD_EX* Copyright (c) 2012, Texas Instruments Incorporated* All rights reserved.** Redistribution and use in source and binary forms, with or without* modification, are permitted provided that the following conditions* are met:** *Redistributions of source code must retain the above copyright*notice, this list of conditions and the following disclaimer.** *Redistributions in binary form must reproduce the above copyright*notice, this list of conditions and the following disclaimer in the*documentation and/or other materials provided with the distribution.** *Neither the name of Texas Instruments Incorporated nor the names of*its contributors may be used to endorse or promote products derived*from this software without specific prior written permission.** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.**********************************************************************************MSP430 CODE EXAMPLE DISCLAIMER** MSP430 code examples are self-contained low-level programs that typically* demonstrate a single peripheral function or device feature in a highly* concise manner. For this the code may rely on the device's power-on default* register values and settings such as the clock configuration and care must* be taken when combining code from several examples to avoid potential side* effects. Also see www.ti.com/grace for a GUI- and www.ti.com/msp430ware* for an API functional library-approach to peripheral configuration.** --/COPYRIGHT--*/ //****************************************************************************** //MSP430G2x21/G2x31 Demo - USI SPI Interface with HC165/164 Shift Registers // //Description: Demonstrate USI in two-way SPI mode. Data are read from //an HC165, and same data written back to the HC164. //ACLK = n/aMCLK = SMCLK = default DCO, USICLK = SMCLK/2 ////*USART0 control bits are in different SFR's from other MSP430's// // //MSP430G2x21/G2x31 //----------------- ///|\|XIN|- //| ||^HC164 //HC165--|RSTXOUT|-|------------- //----------|||-|/CLR,B|8 //8|/LD|<---|P1.1SIMO0/P1.6|------>|AQx|--\-> //-\->|A-HCLK|<---|P1.5/SCLK0 - P1.5|------>|CLK| //|-|INHQH|--->|P1.7/SOMI0||| //|-|SER||||| //- |||||| // //D. Dang //Texas Instruments Inc. //October 2010 //Built with CCS Version 4.2.0 and IAR Embedded Workbench Version: 5.10 //******************************************************************************#include <msp430.h>int main(void) {WDTCTL = WDTPW + WDTHOLD;// Stop WDTP1OUT = 0;P1OUT |= 0x02;P1DIR |= 0x02;USICTL0 |= USIPE7 + USIPE6 + USIPE5 + USIMST + USIOE; // Port, SPI MasterUSICTL1 |= USICKPH + USIIE;// Counter interrupt, flag remains setUSICKCTL = USIDIV_1 + USISSEL_2;// /2 SMCLKUSICTL0 &= ~USISWRST;// USI released for operationUSICNT = 8;// init-load counterwhile (1)// Loop{unsigned i;for (i = 0xFFFF; i > 0; i--);// Delaywhile (!(USIIFG & USICTL1));// Counter clear?P1OUT &= ~0x02;// Latch data into 'HC165P1OUT |= 0x02; //********************// Read data are ready to be writtenUSICNT = 8;// re-load counter} }
gaoyang9992006:
回复 gaoyang9992006:
/* --COPYRIGHT--,BSD_EX* Copyright (c) 2012, Texas Instruments Incorporated* All rights reserved.** Redistribution and use in source and binary forms, with or without* modification, are permitted provided that the following conditions* are met:** *Redistributions of source code must retain the above copyright*notice, this list of conditions and the following disclaimer.** *Redistributions in binary form must reproduce the above copyright*notice, this list of conditions and the following disclaimer in the*documentation and/or other materials provided with the distribution.** *Neither the name of Texas Instruments Incorporated nor the names of*its contributors may be used to endorse or promote products derived*from this software without specific prior written permission.** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.**********************************************************************************MSP430 CODE EXAMPLE DISCLAIMER** MSP430 code examples are self-contained low-level programs that typically* demonstrate a single peripheral function or device feature in a highly* concise manner. For this the code may rely on the device's power-on default* register values and settings such as the clock configuration and care must* be taken when combining code from several examples to avoid potential side* effects. Also see www.ti.com/grace for a GUI- and www.ti.com/msp430ware* for an API functional library-approach to peripheral configuration.** --/COPYRIGHT--*/ //****************************************************************************** //MSP430G2x21/G2x31 Demo - USI SPI Interface to TLC549 8-bit ADC // //Description: This program demonstrates the USI in SPI mode interface to a //TLC549 8-bit ADC. If AIN > 0.5(REF+ - REF-), P1.0 set, else reset. //ACLK = n/a, MCLK = SMCLK = default DCO, UCICLK = SMCLK/4 ////** VCC must be at least 3v for TLC549 **// // //MSP430G2x21/G2x31 //----------------- ///|\|XIN|- //TLC549| || //---------------|RSTXOUT|- //|CS|<---|P1.1| //|DATAOUT|--->|P1.7/SOMIP1.0|-->LED // ~>|AINI/O CLK|<---|P1.5/SCLK| // //D. Dang //Texas Instruments Inc. //October 2010 //Built with CCS Version 4.2.0 and IAR Embedded Workbench Version: 5.10 //******************************************************************************#include <msp430.h>int main(void) {WDTCTL = WDTPW + WDTHOLD;// Stop watchdog timerP1OUT = 0;P1DIR |= 0x03;USICTL0 |= USIPE7 + USIPE5 + USIMST + USIOE; // Port, SPI masterUSICTL1 |= USIIE;// Counter interrupt, flag remains setUSICKCTL = USIDIV_2 + USISSEL_2;// /4 SMCLKUSICTL0 &= ~USISWRST;// USI released for operationUSICNT = 8;// init-load counter__bis_SR_register(LPM0_bits + GIE);// Enter LPM0 w/ interrupt }// USI interrupt service routine #if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__) #pragma vector=USI_VECTOR __interrupt void universal_serial_interface(void) #elif defined(__GNUC__) void __attribute__ ((interrupt(USI_VECTOR))) universal_serial_interface (void) #else #error Compiler not supported! #endif {P1OUT |= 0x02;// Disable TLC549if (USISRL > 0x7F)P1OUT |= 0x01;elseP1OUT &= ~0x01;P1OUT &= ~0x02;// Enable TLC549USICNT = 8;// re-load counter }
user5885910:
回复 gaoyang9992006:
多谢了,我用IO口模拟SPI已经实现了,不过还是很感谢你的帮助,又多了一种解决方案~
Susan Yang:
回复 user5885910:
很高兴您能解决问题。模拟SPI跟芯片没关系,所以官方没有相关的例程。但是网络上有很多这样的教程。
user5885910:
回复 Susan Yang:
嗯,多谢!