SPI.c 3.3 KB

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