CodeMonkey 发表于 2013-1-23 10:31:22

[求助]MSP430 SPI主机哪里有错误呢,有注释

本帖最后由 CodeMonkey 于 2013-1-23 11:28 编辑

我现在的错误是,MISO悬空,也会有信号.

#include <msp430.h>

void SPIInit(){
P1OUT = 0x00;                           // P1重置
P1DIR |= BIT0 + BIT3;                     // 状态灯和从机选择位
P1SEL = BIT1 + BIT2 + BIT4;
P1SEL2 = BIT1 + BIT2 + BIT4;             //SOMI SIMO SPI_CLK
UCA0CTL0 |= UCMSB + UCMST + UCSYNC;
/*
   * EN28J60 时序
   * CS Low 片选
   * SCK Low 不活跃
   * 上升沿输入,下降沿输出.
   * MSB 优先
   * MSP430 主机模式
   * UCSYNC 同步模式
   */
UCA0CTL1 |= UCSSEL_1;
UCA0BR0 |= 0x02;
UCA0BR1 = 0x00;//发送波特率
UCA0MCTL = 0x00;                           //不调制
UCA0CTL1 &= ~UCSWRST;                     // USCI 设置完成
IE2 |= UCA0RXIE;                        // 开启接收中断
}

void SysInit(){
DCOCTL = 0x00;
BCSCTL1 = XT2OFF + DIVA_3;
BCSCTL2 = DIVM_3+DIVS_3;
BCSCTL3 = 0x00;
WDTCTL = WDTPW + WDTHOLD;               // 关闭看门狗
}

void SendData(unsigned char d){
P1DIR |= BIT5;                           // 片选
P1OUT |= BIT5;
P1OUT &= ~BIT5;
UCA0TXBUF = d;
P1OUT |= BIT5;
}
int main(void)
{
SysInit();
SPIInit();
SendData(0xff);
__bis_SR_register(GIE);       // 开启中断,CPU不休眠.
}

#pragma vector=USCIAB0RX_VECTOR
__interrupt void USCIA0RX_ISR(void)
{
volatile unsigned int i;

while (!(IFG2 & UCA0TXIFG));            // 即使需要接收数据,也要等待发送完成

if (UCA0RXBUF == 0x05)                // 比较数据,如果返回0xaa,就是发送成功.
    P1OUT |= BIT0;                        // 正确,亮灯'
else
    P1OUT &= ~BIT0;                         // 错误,不亮灯
}

页: [1]
查看完整版本: [求助]MSP430 SPI主机哪里有错误呢,有注释