请问如何使用SPI1来发送数据呢?我的设置如下:
rGPGCON=(rGPGCON&0xffff033f)|(3<<6)|(3<<10)|(3<<12)|(3<<14); // MISO1, MOSI1, CLK1, Master
rGPGDAT|=0x8;
rGPGUP=(rGPGUP&~(7<<5))|(1<<7);
// int i;
char *txStr,*rxStr;
SPI_Port_Init(1); //主机模式
Uart_Printf("[SPI Polling Tx/Rx Test]\n");
Uart_Printf("Connect SPIMOSI1 into SPIMISO1.\n");
endSpiTx=0;
spiTxStr="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 - SPI1"; //待发送的字符串
spiRxStr=(char *) SPI_BUFFER;
txStr=(char *)spiTxStr;
rxStr=(char *)spiRxStr;
rSPPRE1=0x0; //if PCLK=50Mhz,SPICLK=25Mhz SPI时钟设置25MHz
//(0<<5)-》查询模式 (1<<4)-》时钟产生 (1<<3)-》主机 (1<<2)-》低电平激活 (0<<1)-》A格式 (0<<0)-》正常模式
rSPCON1=(0<<5)|(1<<4)|(1<<3)|(1<<2)|(0<<1)|(0<<0);//Polling,en-SCK,master,low,A,normal
rSPPIN1=(0<<2)|(1<<1)|(0<<0);//dis-ENMUL,SBO,release
//等待发送结束标志
while(endSpiTx==0)
{
if(rSPSTA1&0x1) //Check Tx ready state 检测是否允许发送
{
if(*spiTxStr!='\0') //不是结束符
rSPTDAT1=*spiTxStr++; //送入到寄存器中
else
endSpiTx=1; //发送结束
while(!(rSPSTA1&0x1)); //Check Rx ready state 等待是否接受完
*spiRxStr++=rSPRDAT1; //记录接受的数据
}
}
//~(1<<4)-》禁止时钟产生
rSPCON1&=~(1<<4);//dis-SCK
*(spiRxStr-1)='\0';//remove last dummy data & attach End of String(Null) 最后一个数据无效
Uart_Printf("Tx Strings:%s\n",txStr);
Uart_Printf("Rx Strings:%s :",rxStr);
if(strcmp(rxStr,txStr)==0)
Uart_Printf("O.K.\n");
else
Uart_Printf("ERROR!!!\n");
按照以上的设置,测试了GPG口的SPICLK没有波形,请问谁能指点一下,谢谢!
[ 此帖被libailiang在2010-11-23 17:29重新编辑 ]