void SPI_Init(LPSPI_Type *instance,SpiSpeedType Speed)
{
instance->IER = 0x00000000; /* 未使用中断 */
instance->DER = 0x00000000; /* 未使用 DMA */
instance->CFGR0 = 0x00000000; /* 默认值:*/
/* RDM0=0:正常将数据记录到 FIFO */
/* CIRFIFO=0; Circular FIFO is disabled */
/* HRSEL, HRPOL, HREN=0: Host request disabled */
instance->CFGR1 = LPSPI_CFGR1_MASTER(1); /* Configura
tions: master mode */
/* PCSCFG=0: PCS[3:2] 使能 */
/* OUTCFG=0: 当 CS 取反时输出数据保留最后一个值 */
/* PINCFG=0: SIN 输入, SOUT 输出 */
/* MATCFG=0:匹配禁用 */
/* PCSPOL=0:PCS 低电平有效 */
/* NOSTALL=0:如果 Tx FIFO 为空或 Rx FIFO 已满则停止 */ /
* AUTOPCS=0:不适用于主机模式 */
/* SAMPLE=0:输入数据在 SCK 边沿采样 */
/* MASTER=1 : 主模式 */
实例->TCR |= LPSPI_TCR_PRESCALE(SpiSpeed.prescale)| /* PRESCALE=2:功能时钟除以 40M/2 = 20M */
LPSPI_TCR_PCS(2) |
LPSPI_TCR_FRAMESZ(7); /* FRAMESZ=7: # 帧中的比特 = 7+1=8 */
实例->CCR |= LPSPI_CCR_SCKDIV(SpiSpeed.sckdiv) | /* 20/(8+2) = 2M */
LPSPI_CCR_DBT(8) |
LPSPI_CCR_SCKPCS(4) |
LPSPI_CCR_PCSSCK(4);
实例->FCR = LPSPI_FCR_TXWATER(3); /* RXWATER=0:当 Rx FIFO >0 时设置 Rx 标志 */
/* TXWATER=3:当 Tx FIFO <= 3 时设置 Tx 标志 */
instance->CR = LPSPI_CR_MEN_MASK
|LPSPI_CR_DBGEN_MASK; /* 启用模块运行 */
/* DBGEN=1:模块在调试模式下启用 */
/* DOZEN=0:模块在打盹模式下启用 */
/* RST=0:主逻辑未复位 */ /
* MEN= 1:模块已启用 */
}
uint8_t LPSPI_ReadWriteByte(LPSPI_Type *instance,uint8_t byte)
{
uint8_t recieve = 0;
while((实例->SR & LPSPI_SR_TDF_MASK)>>LPSPI_SR_TDF_SHIFT==0);
/* 等待 Tx FIFO 可用 */
instance->TDR = byte; /* 传输数据 */
instance->SR |= LPSPI_SR_TDF_MASK; /* 清除 TDF 标志 */
while((实例->SR & LPSPI_SR_RDF_MASK)>>LPSPI_SR_RDF_SHIFT==0);
/* 等待至少一个 RxFIFO 条目 */
recieve= instance->RDR; /* 读取接收到的数据 */
instance->SR |= LPSPI_SR_RDF_MASK; /* 清除 RDF 标志 */
返回接收;/* 返回接收到的数据 */
}
0