SPI.c 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. /**
  2. * @copyright None
  3. * @file SPI.c
  4. * @author Comment Vivre
  5. * @date 2024-08-26
  6. * @brief None
  7. */
  8. #include <Customer_Debug.h>
  9. #include <Myproject.h>
  10. /*****************************************************************************
  11. * Function : SPI_Init
  12. * Description : SPI初始化
  13. * Input : void
  14. * Output : None
  15. * Return :
  16. * Others :
  17. * Record
  18. * 1.Date : 20190402
  19. * Author : Bruce HW&RD
  20. * Modification: Created function
  21. *****************************************************************************/
  22. void SPI_Init(void)
  23. {
  24. ClrBit(SPI_CR1, SPIEN); // 0,disable SPI;1 enable
  25. /* -------------------------------------------------------------------------------------------------
  26. SPI管脚配置
  27. 1、禁止UART复用,P06配置为MISO,P05配置为MOSI
  28. 2、禁止比较器输出复用,P07配置为SCLK
  29. -------------------------------------------------------------------------------------------------*/
  30. ClrBit(PH_SEL, UART1EN); // 0,P06 as GPIO or SPI_MISO,P05 as GPIO or SPI_MOSI;1,P06 and p07 as USART
  31. /* -------------------------------------------------------------------------------------------------
  32. SPI时钟相位/极性配置
  33. CPHA = 0, CPOL = 0:上升沿接收,下降沿发送,空闲电平为低
  34. CPHA = 0, CPOL = 1:上升沿发送,下降沿接收,空闲电平为高
  35. CPHA = 1, CPOL = 0:上升沿发送,下降沿接收,空闲电平为低
  36. CPHA = 1, CPOL = 1:上升沿接收,下降沿发送,空闲电平为高
  37. -------------------------------------------------------------------------------------------------*/
  38. SetReg(SPI_CR0, CPHA | CPOL, CPOL);
  39. // 三线模式,MCU的 SCLK NSS MOSI 接SPI小板的 SCLK NSS MOSI, SPI拨码开关:SW2 = 0;SW3 = 0;
  40. // 双线模式,MCU的 SCLK MOSI 接SPI小板的 SCLK MOSI, SPI拨码开关:SW2 = 1;SW2 = 0;
  41. // 单线模式,MCU的 SCLK 接SPI小板的 MOSI, SPI拨码开关:SW2 = 1;SW3 = 1;
  42. ClrBit(SPI_CR1, NSSMOD1);
  43. SetBit(SPI_CR1, NSSMOD0);
  44. // SetBit(PH_SEL1 , SPICT0); //单线制SPI功能转移(P05-->P00,P34)
  45. SetBit(PH_SEL2, SPICT1); //单线制SPI功能转移(P05-->P34)
  46. SetBit(SPI_CR0, SPIMS); // 0:Slave, 1:Master
  47. /* -------------------------------------------------------------------------------------------------
  48. SPI中断配置
  49. SPIF:SPI字节传输完成中断标志,硬件置位,软件清零
  50. WCOL:SPI写冲突中断(发送缓冲器非空时写操作),硬件置位,软件清零
  51. MODF:SPI方式错误中断(多主方式NSS被拉低,MSTEN和SPIEN被清零)硬件置位,软件清零
  52. RXOVRN:SPI接收溢出中断(SPI接收缓冲器接收溢出),硬件置位,软件清零
  53. -------------------------------------------------------------------------------------------------*/
  54. SetReg(SPI_CR1, SPIIF | WCOL | MODF | RXOVRN, 0x00); // SPI所有中断清除
  55. SPIIE = 0; // SPI中断使能
  56. SPI_CLK = 0; // Fspi = Fcpu / (2*(SPI_CLK + 1)) = 6MHz
  57. SetBit(SPI_CR1, SPIEN); // enable SPI
  58. }