[求助]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]