在线时间269 小时
UID2056636
注册时间2013-11-13
NXP金币0
TA的每日心情 | 慵懒 2016-11-24 10:19 |
---|
签到天数: 1 天 连续签到: 1 天 [LV.1]初来乍到
金牌会员
 
- 积分
- 2870
- 最后登录
- 1970-1-1
|
本帖最后由 cxtarm 于 2015-4-29 15:05 编辑
最近好忙。。。试用计划中断了一段时间。
今天解决了个工作中的问题,好兴奋,再来一个   
注:SPI工作在主模式
/** \brief SPI0 initialization
* \param None
* \return None
*/
void SPI0_Init(void)
{
if(Spi0Info.BaseInfo.Init)
return;
SIM->SCGC4 |= SIM_SCGC4_SPI0_MASK;
SPI0_PinInit();
SPI_Cmd(SPI0,enable);
SPI_ModeSelect(SPI0,SPI_ModeMaster);
SPI_BaseSet(SPI0,SPI_CPOL_ActiveLow,SPI_CPHA_1stEdgeSample,SPI_FirstMSB);
//SPI_ITCmd(SPI0,SPI_IT_TxBufferEmpty | SPI_IT_RxBufferFullOrModeFault,enable);
//SPI_DataModeSet(SPI0,SPI_DataMode_8bits);
//SPI_NSSFuncSelect(SPI0,SPI_NSS_MasterDisable);
//SPI_DMACmd(SPI0,SPI_DMAReq_Rx | SPI_DMAReq_Tx,disable);
//SPI_BidirectionalCmd(SPI0,disable);
//SPI_StopInWaitModeCmd(SPI0,enable);
SPI_BaudDivSet(SPI0,SPI_BaudPreDiv_1,SPI_BaudDiv_2);
//SPI_MatchRegSet8bits(SPI0,0x55);
//SPI_Cmd(SPI0,disable);
Spi0Info.BaseInfo.Init = 1;
Spi0Info.BaseInfo.Open = 1;
Spi0Info.BaseInfo.Busy = 0;
}
/** \brief SPI0 deinitialization
* \param None
* \return return true when operate successful,else return false.
*/
bool SPI0_DeInit(void)
{
if(Spi0Info.BaseInfo.Busy)
return false;
//while(Spi0Info.BaseInfo.Busy);
SIM->SCGC4 &= ~(uint32_t)SIM_SCGC4_SPI0_MASK;
SPI0_PinDeInit();
Spi0Info.BaseInfo.Init = 0;
Spi0Info.BaseInfo.Open = 0;
return true;
}
/** \brief open SPI0
* \param None
* \return return true when operate successful,else return false.
*/
bool SPI0_Open(void)
{
if(Spi0Info.BaseInfo.Init == 0)
return false;
if(Spi0Info.BaseInfo.Open == 0)
{
SPI_Cmd(SPI0,enable);
Spi0Info.BaseInfo.Open = 1;
Spi0Info.BaseInfo.Busy = 0;
}
return true;
}
/** \brief close SPI0
* \param None
* \return return true when operate successful,else return false.
*/
bool SPI0_Close(void)
{
if(Spi0Info.BaseInfo.Busy)
return false;
SPI_Cmd(SPI0,disable);
Spi0Info.BaseInfo.Open = 0;
return true;
}
bool SPI0_BaudSet(uint32_t baud)
{
if(Spi0Info.BaseInfo.Init == 0)
return false;
while(Spi0Info.BaseInfo.Busy);
SPI_BaudDivSet(SPI0,SPI_BaudPreDiv_1,SPI_BaudDiv_2);
return true;
}
uint8_t SPI0_WriteByte(uint8_t u8Data)
{
uint8_t u8Temp;
while(SPI_FlagGet(SPI0,SPI_FLAG_TxBufferEmpty) == reset);
SPI0->DL = u8Data;
while(SPI_FlagGet(SPI0,SPI_FLAG_RxBufferFull) == reset);
u8Temp = SPI0->DL;
return u8Temp;
}
uint8_t SPI0_ReadByte(void)
{
uint8_t u8Temp;
while(SPI_FlagGet(SPI0,SPI_FLAG_TxBufferEmpty) == reset);
SPI0->DL = 0xFF;
while(SPI_FlagGet(SPI0,SPI_FLAG_RxBufferFull) == reset);
u8Temp = SPI0->DL;
return u8Temp;
}
void SPI0_WriteData(const uint8_t *pData,uint16_t dlen)
{
while(dlen--)
{
while(SPI_FlagGet(SPI0,SPI_FLAG_TxBufferEmpty) == reset);
SPI0->DL = *pData++;
while(SPI_FlagGet(SPI0,SPI_FLAG_RxBufferFull) == reset);
SPI0->DL;
}
}
void SPI0_ReadData(uint8_t *pBuf,uint16_t dlen)
{
while(dlen--)
{
while(SPI_FlagGet(SPI0,SPI_FLAG_TxBufferEmpty) == reset);
SPI0->DL = 0xFF;
while(SPI_FlagGet(SPI0,SPI_FLAG_RxBufferFull) == reset);
*pBuf++ = SPI0->DL;
}
}
程序代码文件如下:
lib.rar
(4.87 KB, 下载次数: 10)
|
|