/*****************************************************************************
** 函数名称:SPI_init()
** 函数功能:初始化SPI接口,设置为主机。
** 入口参数:无
** 出口参数:无
* 作 者:sin
日期:2008/01/17
******************************************************************************/
void SPI_init (void)
{
pPMC->PMC_PCER = (1<<AT91C_ID_SPI);
pPIO->PIO_PPUER = (AT91C_PA12_MISO );
pPIO->PIO_PDR = (AT91C_PA12_MISO |
AT91C_PA13_MOSI |
AT91C_PA14_SPCK );
pPIO->PIO_ASR = (AT91C_PA12_MISO |
AT91C_PA13_MOSI |
AT91C_PA14_SPCK);
pSPI->SPI_MR = (AT91C_SPI_MSTR | //SPI为主机模式
AT91C_SPI_PS_FIXED | //固定外设器件
AT91C_SPI_MODFDIS | //模式错误检测禁止
(0xE<<16));
pSPI->SPI_CSR[0] = ((1<<24) | //连续传输间延迟
(20<<16) | //SPCK前延时
(50<<8) | //算拨特率的 SCBR 初始值
(0<<1)| //数据在SPCK的下降改变,在SPCK的开始边沿捕捉
//AT91C_SPI_NCPHA | //
AT91C_SPI_CPOL | //SPCK无效状态时,其逻辑值为1
AT91C_SPI_BITS_8 ); //8位传输
pSPI->SPI_CR = AT91C_SPI_SPIEN;
}
/********************************************************************************************************
* 函数名称:MSPI_SendData()
* 函数功能:向SPI总线发送数据。
* 入口参数:bsend
* 出口参数:返回值为读取的数据
* 作 者:sin
日期:2008/01/17
********************************************************************************************************/
unsigned char MSPI_SendData(unsigned char bsend)
{
while( !(AT91C_BASE_SPI->SPI_SR & AT91C_SPI_TDRE )){;}
// wait until all transfers are completed
AT91C_BASE_SPI->SPI_TDR = bsend;
//transmit
while( !(AT91C_BASE_SPI->SPI_SR & AT91C_SPI_RDRF )){;}
// wait for received char
return (unsigned char)( AT91C_BASE_SPI->SPI_RDR );
}