各位大侠,我是一个刚开始进行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;
}
好想430的SPI口是有点奇观,我以前也碰到过,你把四种模式都试一下,会有意外的惊喜.希望你成功
刚调通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