SPI.c 3.9 KB

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