|
问题如下:
我用IO口模拟SPI时序能控制了,但是用2407的硬件SPI,却不受控 void spi_init(void) { *MCRA=0XFF; *PBDATDIR = *PBDATDIR | 0X0800; //IOPB5--输出方式 *SPICCR=0X0007; //8 CHAR BIT, SPICLK DROP OUT DATA,SPICLK RISE IN DATA *SPICTL=0X0006; //MASTER,DISABLE INT *SPIBRR=0X007f; *MCRB=(*MCRB|0X001C)&0XFFDF; *PCDATDIR=(*PCDATDIR|0X2000)|0x0020; *SPICCR=*SPICCR|0X0080; }
void outbyte( unsigned char byte) //输出一个数据到25045,此数据可能为地址,先导字,写入的数据等 { cs_l(); //*SPITXBUF=byte*256; *SPITXBUF=byte; while(1) { if((*SPISTS & 0X40)==0X40) break; } *SPIRXBUF=*SPIRXBUF; cs_h(); }
unsigned char inbyte(void) /*得到一个数据,此数据可能为状态寄存器数据,读出的单元数据等*/ { unsigned char back; cs_l(); *SPITXBUF=0; while(1) { if((*SPISTS & 0X40)==0X40) break; } back=*SPIRXBUF; cs_h(); return(back); }
我现在的疑问是:2407的SPI只发送8位的数据的时候,是否需要将发送的数据左移8位?另我的程序有地方有问题的吗? 谢谢
解答如下:
void spi_init(void) { *MCRA=0XFF; *PBDATDIR = *PBDATDIR | 0X0800; //IOPB5--输出方式 *MCRB=(*MCRB|0X001C)&0XFFDF; *PCDATDIR=(*PCDATDIR|0X2000)|0x0020; *SPICCR=0X0007; //8 CHAR BIT, SPICLK DROP OUT DATA,SPICLK RISE IN DATA *SPICTL=0X000e; //MASTER,DISABLE INT *SPIBRR=0X007f; *SPICCR=*SPICCR|0X0080; } void outbyte( unsigned char byte) //输出一个数据到25045,此数据可能为地址,先导字,写入的数据等 { *SPITXBUF=byte*256; while(1) { if((*SPISTS & 0X40)==0X40) break; } *SPIRXBUF=*SPIRXBUF; }
unsigned char inbyte(void) /*得到一个数据,此数据可能为状态寄存器数据,读出的单元数据等*/ { unsigned char back; *SPITXBUF=0; while(1) { if((*SPISTS & 0X40)==0X40) break; } back=(*SPIRXBUF)&0x00ff; return(back); }
|