trouble 发表于 2012-11-25 22:10:48

想试一下LAUNCHPAD的4线制SPI,为什么就不行呢?大侠们看一看

#include "msp430g2553.h"

unsigned char MST_Data, SLV_Data;

void main(void)
{
volatile unsigned int i;

WDTCTL = WDTPW + WDTHOLD;               // Stop watchdog timer
P1OUT = 0x00;                           // P1 setup for LED & reset output
P1DIR |= BIT0;                     //
P1SEL = BIT1 + BIT2 + BIT4 + BIT5;
P1SEL2 = BIT1 + BIT2 + BIT4 + BIT5;
UCA0CTL0 |= UCCKPL + UCMSB + UCMST + UCSYNC + UCMODE_2;// 4-pin, 8-bit SPI master
UCA0CTL1 |= UCSSEL_2;                     // SMCLK
UCA0BR0 |= 0x02;                        // /2
UCA0BR1 = 0;                              //
UCA0MCTL = 0;                           // No modulation
UCA0CTL1 &= ~UCSWRST;                     // **Initialize USCI state machine**
IE2 |= UCA0RXIE;                        // Enable USCI0 RX interrupt

__delay_cycles(75);               // Wait for slave to initialize

MST_Data = 0x01;                        // Initialize data values
SLV_Data = 0x01;

UCA0TXBUF = MST_Data;                     // Transmit first character

__bis_SR_register(LPM0_bits + GIE);       // CPU off, enable interrupts
}

// Test for valid RX and TX character
#pragma vector=USCIAB0RX_VECTOR
__interrupt void USCIA0RX_ISR(void)
{
volatile unsigned int i;

while (!(IFG2 & UCA0TXIFG));            // USCI_A0 TX buffer ready?

if (UCA0RXBUF == SLV_Data)                // Test for correct character RX'd
    P1OUT |= BIT0;                        // If correct, light LED
else
    P1OUT &= ~BIT0;                         // If incorrect, clear LED

MST_Data++;                               // Increment master value
SLV_Data++;                               // Increment expected slave value
UCA0TXBUF = MST_Data;                     // Send next value

__delay_cycles(50);                     // Add time between transmissions to
}

trouble 发表于 2012-11-25 22:24:56

补充一下,小弟我在做430和A7102无线通信模块的数据传输,A7102是4线制的,我刚看了下网上,说4线制是在430做从机的时候才可以,没理解。请具体说一下,谢谢

zhu_zhihao 发表于 2012-11-30 09:52:37

nSEL还是要自己控的

jetlib 发表于 2012-11-30 10:13:10

trouble 发表于 2012-11-25 22:24 static/image/common/back.gif
补充一下,小弟我在做430和A7102无线通信模块的数据传输,A7102是4线制的,我刚看了下网上,说4线制是在430 ...

很多网上的技术贴真假难辨,所以自己得学会分辨。一切都以官方的手册为准。所以多看手册。430的SPI需要配好工作模式,也就是nSel、时钟和数据的前后沿位置,而且nSel一般都独立控制。另外我记得A7102是3线的SPI,SDI/SDO用的是同一根脚,不能用4线制。另外一点多余信息供你参考,几年前我做某产品之前,曾评估过多种RF方案性能,包括A7102,发现其品质一般,尤其当通信速率提高时,误码率也大幅提高。结果该RF方案被pass掉,呵。

qiuchen 发表于 2012-11-30 10:16:34

430的SEL是在做主机的时候,可以被从机强制从主机模式变为从机模式;所以在做主机的时候,并不会做从设备的自动选择。如果你要选择从设备,还需要程序处理的。
页: [1]
查看完整版本: 想试一下LAUNCHPAD的4线制SPI,为什么就不行呢?大侠们看一看