想试一下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
}
补充一下,小弟我在做430和A7102无线通信模块的数据传输,A7102是4线制的,我刚看了下网上,说4线制是在430做从机的时候才可以,没理解。请具体说一下,谢谢 nSEL还是要自己控的 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掉,呵。 430的SEL是在做主机的时候,可以被从机强制从主机模式变为从机模式;所以在做主机的时候,并不会做从设备的自动选择。如果你要选择从设备,还需要程序处理的。
页:
[1]