SPI.c 3.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. /********************************************************************************
  2. **** Copyright (C), 2020, Fortior Technology Co., Ltd. ****
  3. ********************************************************************************
  4. * File Name : SPI.c
  5. * Author : Bruce HW&RD
  6. * Date : 2020-10-15
  7. * Description : .C file function description
  8. * Version : 1.0
  9. * Function List :
  10. *
  11. * Record :
  12. * 1.Date : 2020-10-15
  13. * Author : Bruce HW&RD
  14. * Modification: Created file
  15. ********************************************************************************/
  16. #include "SPI.h"
  17. #include "FU68xx_5_MCU.h"
  18. /*****************************************************************************
  19. * Function : SPI_Init
  20. * Description : SPI初始化
  21. * Input : void
  22. * Output : None
  23. * Return :
  24. * Others :
  25. * Record
  26. * 1.Date : 20190402
  27. * Author : Bruce HW&RD
  28. * Modification: Created function
  29. *****************************************************************************/
  30. void SPI_Init(void)
  31. {
  32. ClrBit(SPI_CR1 , SPIEN);// 0,disable SPI;1 enable
  33. /*-------------------------------------------------------------------------------------------------
  34. SPI管脚配置
  35. 1、禁止UART复用,P06配置为MISO,P05配置为MOSI
  36. 2、禁止比较器输出复用,P07配置为SCLK
  37. -------------------------------------------------------------------------------------------------*/
  38. ClrBit(PH_SEL , UART1EN);// 0,P06 as GPIO or SPI_MISO,P05 as GPIO or SPI_MOSI;1,P06 and p07 as USART
  39. ClrBit(PH_SEL1 , SPICT); // 0:P05/P06 1:P00/P01
  40. /*-------------------------------------------------------------------------------------------------
  41. SPI时钟相位/极性配置
  42. CPHA = 0, CPOL = 0:上升沿接收,下降沿发送,空闲电平为低
  43. CPHA = 0, CPOL = 1:上升沿发送,下降沿接收,空闲电平为高
  44. CPHA = 1, CPOL = 0:上升沿发送,下降沿接收,空闲电平为低
  45. CPHA = 1, CPOL = 1:上升沿接收,下降沿发送,空闲电平为高
  46. -------------------------------------------------------------------------------------------------*/
  47. SetReg(SPI_CR0 , CPHA | CPOL , CPOL);
  48. /*-------------------------------------------------------------------------------------------------
  49. SPI从方式选择配置
  50. 00:3线从方式或3线主方式,NSS信号不连到端口管脚
  51. 01:4线从方式或4线多主方式,NSS配置为输入
  52. 1x:4线单主方式,NSS配置为输出,NSS信号输出x电平
  53. -------------------------------------------------------------------------------------------------*/
  54. // SetReg(SPI_CR1 , NSSMOD0 | NSSMOD1 , NSSMOD0 | NSSMOD1); //三线DBG模式
  55. SetReg(SPI_CR1 , NSSMOD0 | NSSMOD1 , NSSMOD0|NSSMOD1); // 11:三线制 01:单线制(P05)
  56. SetBit(SPI_CR0 , SPIMS); // 0:Slave, 1:Master
  57. /*-------------------------------------------------------------------------------------------------
  58. SPI中断配置
  59. SPIF:SPI字节传输完成中断标志,硬件置位,软件清零
  60. WCOL:SPI写冲突中断(发送缓冲器非空时写操作),硬件置位,软件清零
  61. MODF:SPI方式错误中断(多主方式NSS被拉低,MSTEN和SPIEN被清零)硬件置位,软件清零
  62. RXOVRN:SPI接收溢出中断(SPI接收缓冲器接收溢出),硬件置位,软件清零
  63. -------------------------------------------------------------------------------------------------*/
  64. SetReg(SPI_CR1 , SPIIF|WCOL|MODF|RXOVRN , 0x00);// SPI所有中断清除
  65. SPIIE = 0; // SPI中断使能
  66. SPI_CLK = 0; // Fspi = Fcpu / (2*(SPI_CLK + 1)) = 6MHz
  67. SetBit(SPI_CR1 , SPIEN); // Enable SPI
  68. }