C51 COMPILER V9.52.0.0   FU6812_SPI                                                        08/21/2018 12:02:31 PAGE 1   


C51 COMPILER V9.52.0.0, COMPILATION OF MODULE FU6812_SPI
OBJECT MODULE PLACED IN .\obj\FU6812_SPI.obj
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE Library\Source\FU6812_SPI.c LARGE OMF2 WARNINGLEVEL(0) OPTIMIZE(SIZE) BROWS
                    -E NOAREGS INCDIR(.\Library\Include;.\User\Include) DEBUG PRINT(.\obj\FU6812_SPI.lst) TABS(2) OBJECT(.\obj\FU6812_SPI.obj
                    -)

line level    source

   1          //////////////////////////////////////////////////////////////////////
   2          //文件名：FU68xx_SPI.c                                              //
   3          //说明：FU68xx系列芯片的SPI底层驱动                                 //
   4          //Log                                                               //
   5          //Timer         Writer      Thing                               Ver //
   6          //2016-10-08    Any         创建文件                            V1.0//
   7          //2016-11-03    Any         SPI一些配置使用宏条件                   //
   8          //                          收发函数合并                        V1.1//
   9          //2016-12-19    Any         除去宏定义操作                      V1.2//
  10          //2016-12-22    Any         增加空闲电平初始化                  V1.3//
  11          //2016-12-23    Any         PHSEL修改                           V1.4//
  12          //2017-02-06    Any         增强PHSEL判断                       V1.5//
  13          //2017-02-13    Any         把空闲电平设置归入Line_Mode         V1.6//
  14          //2017-02-21    Any         取消Nss控制函数，改为宏定义         V1.7//
  15          //2017-02-21    Any         取消收发函数的Nss控制权             V1.8//
  16          //2017-02-21    Any         取消SPI忙检测函数，改为宏定义       V1.9//
  17          //2017-02-21    Any         建立SPI所有标志位的检测和部分清除   V2.0//
  18          //////////////////////////////////////////////////////////////////////
  19          #include <FU6812_MCU.h>
  20          #include <FU6812_SPI.h>
  21          
  22          /**
  23           * 初始化SPI
  24           *
  25           */
  26          void SPI_Config(void)
  27          {
  28   1        #if defined (SPI_SET_MASTER)
  29   1            SPI_CLK = SPI_FREC / SPI_SET_SPEED - 1;  // 设置SPI时钟(主机模式设置)
  30   1        #endif
  31   1      
  32   1        SPI_CR0 = SPI_CLK_MODE                       // 设置SPI主从机模式和SPI时钟模式
  33   1        #if defined (SPI_SET_MASTER)
  34   1             | SPIMS
  35   1        #endif
  36   1        ;
  37   1      
  38   1        SPI_CR1 = SPIEN                             // 设置SPI模式和使能SPI
  39   1        #if defined (SPI_SET_MASTER)
  40   1            | SPI_SET_MODE
  41   1        #elif (SPI_SET_MODE != SPI_MODE_L3)
                    | SPI_MODE_L4
                #endif
  44   1        ;
  45   1      
  46   1        #if (SPI_SET_MODE != SPI_MODE_L3)
  47   1            P0_PU = P04;                          // 4线模式下NSS使能上拉
  48   1        #endif
  49   1      
  50   1        #if defined (EN_IRQ_SPI)                     // 设置SPI中断
                    SPIIE   = 1;
                #endif
  53   1      
C51 COMPILER V9.52.0.0   FU6812_SPI                                                        08/21/2018 12:02:31 PAGE 2   

  54   1        SetReg(PH_SEL, SPITMOD | UARTEN | UARTCH, 0x00); // 使能SPI复用端口
  55   1      }
  56          
  57          /**
  58           * SPI单字节收发
  59           *
  60           * @param   SendDat    发送的数据
  61           * @return             接收的数据
  62           */
  63          uint8_t SendReceive_SPI(uint8_t SendDat)
  64          {
  65   1        while (!ReadBit(SPI_CR1, TXBMT));        // 等到发送缓冲为空
  66   1        SPI_DR = SendDat;
  67   1      
  68   1        while (ReadBit(SPI_CR0, SPIBSY));           // 等待SPI运行结束
  69   1      
  70   1        return SPI_DR;
  71   1      }
  72          
  73          /**
  74           * 收发一串SPI数据
  75           *
  76           * @param   SendDat    发送数据流
  77           * @param   ReceiveDat 接收数据流
  78           * @param   len        数据流长度
  79           */
  80          void SendReceives_SPI(uint8_t* SendDat, uint8_t* ReceiveDat, uint8_t len)
  81          {
  82   1        while (len--)
  83   1        {
  84   2            while (!ReadBit(SPI_CR1, TXBMT));
  85   2            SPI_DR = *SendDat;
  86   2            SendDat++;
  87   2      
  88   2            while (ReadBit(SPI_CR0, SPIBSY));
  89   2            *ReceiveDat = SPI_DR;
  90   2            ReceiveDat++;
  91   2        }
  92   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    143    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----       7
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
   EDATA SIZE       =   ----    ----
   HDATA SIZE       =   ----    ----
   XDATA CONST SIZE =   ----    ----
   FAR CONST SIZE   =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)
