关于SPI总线的问题

shangwlscp   2004-10-13 23:37 楼主
各位大侠,我是一个刚开始进行430编程的新手,最近在编写SPI总线的程序时碰到了一些问题,总是调不通,但是同样的操作我用I/O口模拟SPI总线时结果却是对的。不知那位大侠能够帮助我,谢谢了!下面SPI操作部分的源代码。


/****************** SPI Operate ******************/
void SPI_Init()
{
ME1 = USPIE0;
UCTL0 = CHAR + SYNC + MM ; // + SWRST
UTCTL0 = STC + SSEL0 + SSEL1 + CKPH;// + CKPH + LISTEN
UBR00 = 50;
UBR10 = 0;
UMCTL0 = 0;

P3DIR = 0x0a;
P3SEL |= 0x0e;

UCTL0 = UCTL0 & (~SWRST);

SPI_DIR = ( FF_CS + FF_RST);

SPI_OUT = SPI_OUT | FF_RST;
// SPI_OUT = SPI_OUT & (~FF_RST);
// SPI_OUT = SPI_OUT | FF_RST;

SPI_OUT = SPI_OUT | FF_CS;

}

void TranSPI(Byte data)
{
// while( !(UTCTL0 & TXEPT) );
LED_OUT = LED_OUT ^ 0x20;
while( (IFG1 & UTXIFG0) == 0 );
TXBUF0 = data;
}

Byte RevSPI()
{
Byte data;

int i;
// for(i = 0; i<20; i++);

while( (IFG1 & URXIFG0) == 0 );
data = RXBUF0;
return data;
}

回复评论 (8)

能看一下你用口线模拟spi的程序么?谢谢(内空)

点赞  2004-10-14 11:29
好想430的SPI口是有点奇观,我以前也碰到过,你把四种模式都试一下,会有意外的惊喜.希望你成功
点赞  2004-10-14 13:55

刚调通1226!!

I/O口和CLK口加上拉电阻,按时序走,应该没问题!
前天我刚调通了X1226,时间读写。
送一段读写汇编程序:
I2CTX
mov.b #08h,&BITI2C
bic.b #SDA,&P6OUT
bic.b #SCL,&P6OUT
clrc
I2C_Tend
rrc.b TXI2C
jc I2C_Tend1
I2C_Tend0
bic.b #SDA,&P6OUT
jmp I2C_Tx
I2C_Tend1
bis.b #SDA,&P6OUT
I2C_Tx
call #I2CDLY
call #I2CDLY
call #I2CDLY
bis.b #SCL,&P6OUT
call #I2CDLY
call #I2CDLY
call #I2CDLY
bic.b #SCL,&P6OUT
call #I2CDLY
call #I2CDLY
dec.b BITI2C
jnz I2C_Tend
ret


I2CRX
clrc
bis.b #SDA,&P6OUT
mov.b #08h,BITI2C
call #I2CDLY
I2C_Rend
bit.b #SDA,&P6IN
jnz I2C_Rend1
I2C_Rend0
clrc
rrc.b RXI2C
jmp I2C_Rx
I2C_Rend1
setc
rrc.b RXI2C
I2C_Rx
bis.b #SCL,&P6OUT
call #I2CDLY
call #I2CDLY
bic.b #SCL,&P6OUT
call #I2CDLY
call #I2CDLY
dec.b BITI2C
jnz I2C_Rend
ret
点赞  2004-10-14 17:05
好奇怪
点赞  2004-10-14 17:09
连接的器件是什么啊???
点赞  2004-10-14 22:03
是AT45db081
点赞  2004-10-14 22:23
我找到原因了,谢谢大家
点赞  2004-10-16 11:13
什末原因?让大家分享以下,以后,不犯此类错误。
点赞  2004-10-23 08:24
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复