SPI.c 3.9 KB

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