/******************************************************************************** **** Copyright (C), 2020, Fortior Technology Co., Ltd. **** ******************************************************************************** * File Name : SPI.c * Author : Bruce HW&RD * Date : 2020-10-15 * Description : .C file function description * Version : 1.0 * Function List : * * Record : * 1.Date : 2020-10-15 * Author : Bruce HW&RD * Modification: Created file ********************************************************************************/ #include "SPI.h" #include "FU68xx_5_MCU.h" /***************************************************************************** * Function : SPI_Init * Description : SPI初始化 * Input : void * Output : None * Return : * Others : * Record * 1.Date : 20190402 * Author : Bruce HW&RD * Modification: Created function *****************************************************************************/ void SPI_Init(void) { ClrBit(SPI_CR1 , SPIEN);// 0,disable SPI;1 enable /*------------------------------------------------------------------------------------------------- SPI管脚配置 1、禁止UART复用,P06配置为MISO,P05配置为MOSI 2、禁止比较器输出复用,P07配置为SCLK -------------------------------------------------------------------------------------------------*/ ClrBit(PH_SEL , UART1EN);// 0,P06 as GPIO or SPI_MISO,P05 as GPIO or SPI_MOSI;1,P06 and p07 as USART ClrBit(PH_SEL1 , SPICT); // 0:P05/P06 1:P00/P01 /*------------------------------------------------------------------------------------------------- SPI时钟相位/极性配置 CPHA = 0, CPOL = 0:上升沿接收,下降沿发送,空闲电平为低 CPHA = 0, CPOL = 1:上升沿发送,下降沿接收,空闲电平为高 CPHA = 1, CPOL = 0:上升沿发送,下降沿接收,空闲电平为低 CPHA = 1, CPOL = 1:上升沿接收,下降沿发送,空闲电平为高 -------------------------------------------------------------------------------------------------*/ SetReg(SPI_CR0 , CPHA | CPOL , CPOL); /*------------------------------------------------------------------------------------------------- SPI从方式选择配置 00:3线从方式或3线主方式,NSS信号不连到端口管脚 01:4线从方式或4线多主方式,NSS配置为输入 1x:4线单主方式,NSS配置为输出,NSS信号输出x电平 -------------------------------------------------------------------------------------------------*/ // SetReg(SPI_CR1 , NSSMOD0 | NSSMOD1 , NSSMOD0 | NSSMOD1); //三线DBG模式 SetReg(SPI_CR1 , NSSMOD0 | NSSMOD1 , NSSMOD0|NSSMOD1); // 11:三线制 01:单线制(P05) SetBit(SPI_CR0 , SPIMS); // 0:Slave, 1:Master /*------------------------------------------------------------------------------------------------- SPI中断配置 SPIF:SPI字节传输完成中断标志,硬件置位,软件清零 WCOL:SPI写冲突中断(发送缓冲器非空时写操作),硬件置位,软件清零 MODF:SPI方式错误中断(多主方式NSS被拉低,MSTEN和SPIEN被清零)硬件置位,软件清零 RXOVRN:SPI接收溢出中断(SPI接收缓冲器接收溢出),硬件置位,软件清零 -------------------------------------------------------------------------------------------------*/ SetReg(SPI_CR1 , SPIIF|WCOL|MODF|RXOVRN , 0x00);// SPI所有中断清除 SPIIE = 0; // SPI中断使能 SPI_CLK = 0; // Fspi = Fcpu / (2*(SPI_CLK + 1)) = 6MHz SetBit(SPI_CR1 , SPIEN); // Enable SPI }