[求助] MSP430g2331,谁有SPI收发代码吗?

z31com   2011-12-16 17:02 楼主
求:MSP430g2331,谁有SPI收发代码吗?做同时收发的时候,经常出问题!

回复评论 (8)

2推荐 z31com 

谢谢,下面是我的代码,我想同时收发!但好像老是出错。
//==============================================
//函数名:SPI_init()
//功能:初始化SPI接口
//
//==============================================
void SPI_init()
{
     USICTL0 |= USIPE7 + USIPE6 + USIPE5 + USIMST + USIOE; // Port, SPI master
     //USICTL1 |= USICKPH + USIIE ;                          // Counter interrupt, flag remains set
     USICTL1 = 0;
     USICKCTL = USIDIV_0 + USISSEL_2;                     // /4 SMCLK
     USICTL0 &= ~USISWRST;                                // USI released for operation
     //USICNT = 0x40;                                          // init-load counter
     USICNT = 8;   
}

unsigned char SPI_RW(unsigned char wdata)
{
    unsigned char rx_spi_data;
    SPI_CE_L();
    rx_spi_data = USISRL;
    USISRL = wdata;
    while (!(USIIFG & USICTL1));            // Counter clear?
    //USICNT = 0X1f;
    USICNT = 8;                             // re-load counter
    while (!(USIIFG & USICTL1));            // Counter clear?
    //USICNT = 8;
    SPI_CE_H();
    return (rx_spi_data);
}
点赞  2011-12-28 14:36
//******************************************************************************
//  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/a  MCLK = SMCLK = default DCO, USICLK = SMCLK/2
//  //*USART0 control bits are in different SFR's from other MSP430's//
//
//                       MSP430G2x21/G2x31
//                       -----------------
//                   /|\|              XIN|-
//                    | |                 |     ^      HC164
//          HC165     --|RST          XOUT|-    |  -------------
//        ----------    |                 |     |-|/CLR,B       |  8
//    8  |      /LD|<---|P1.1   SIMO0/P1.6|------>|A          Qx|--\->
//   -\->|A-H   CLK|<---|P1.5/SCLK0 - P1.5|------>|CLK          |
//     |-|INH    QH|--->|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 <msp430g2221.h>

void main(void)
{
  WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT

  P1OUT = 0;
  P1OUT |= 0x02;
  P1DIR |= 0x02;
  USICTL0 |= USIPE7 + USIPE6 + USIPE5 + USIMST + USIOE; // Port, SPI Master
  USICTL1 |= USICKPH + USIIE;               // Counter interrupt, flag remains set
  USICKCTL = USIDIV_1 + USISSEL_2;          // /2 SMCLK
  USICTL0 &= ~USISWRST;                     // USI released for operation
  USICNT = 8;                               // init-load counter

  while (1)                                 // Loop
  {
    unsigned i;
    for (i = 0xFFFF; i > 0; i--);           // Delay
    while (!(USIIFG & USICTL1));            // Counter clear?
    P1OUT &= ~0x02;                         // Latch data into 'HC165
    P1OUT |= 0x02;
//  ********************                    // Read data are ready to be written
    USICNT = 8;                             // re-load counter
  }
}

SPI程序,仅供参考
点赞  2011-12-16 17:56
G2331的示例代码可以在TI的网站上下载的。
点赞  2011-12-16 21:05

TI官网有例程,呵呵

点赞  2011-12-18 17:13
要看是什么具体问题好针对的帮助你啊~!

是发送数据的问题还是接收数据的?

或者是主机的问题还是从机的?
点赞  2011-12-20 21:30
此SPI接口可不可以同时,收发?
点赞  2011-12-26 08:57
引用: 原帖由 z31com 于 2011-12-26 08:57 发表
此SPI接口可不可以同时,收发?

关于SPI的全双工模式,到目前我还没有遇到过,一般是单收或者单发,所以这种模式最起码是不常用的。
但是在motarola当年的SPI介绍文档中确实有一个双向模式,我上传上来你可以参考下

    SPI.pdf (2011-12-26 09:40 上传)

    198.81 KB, 下载次数: 66

点赞  2011-12-26 09:40
帖子已经是老帖子了,就像问问有没有人用过这个功能,搞定的请说一声。
点赞  2016-11-3 09:18
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复