⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 spi.c

📁 Bitek 公司 bit1611b模拟屏驱动芯片外接MCU驱动DEMO源码
💻 C
字号:
/* **********************************************************************

         Copyright (c) 2002-2006 Beyond Innovation Technology Co., Ltd

        All rights are reserved. Reproduction in whole or in parts is
    prohibited without the prior written consent of the copyright owner.
   ----------------------------------------------------------------------

    Module: SPI.C

    Purpose: Implementation of SPI module.

    Version: 0.01                                   02:23PM  2005/08/22

    Compiler: Keil 8051 C Compiler v8.01

    Reference:

   ----------------------------------------------------------------------
    Modification:

    R0.01 02:23PM  2005/08/22 Jeffrey Chang
    Reason:
        1. Original.
    Solution:

   ********************************************************************** */

#define _SPI_C_


/* ------------------------------------
    Header Files
   ------------------------------------ */
#include <intrins.h>

#include "common.h"
#include "spi.h"

/* ------------------------------------
    Macro Definitions
   ------------------------------------ */

#define NOP_24  { _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();}
#define NOP_20  { _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); }
#define NOP_18  { _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); }
#define NOP_15  { _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();  }
#define NOP_12  { _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();   }
#define NOP_10  { _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();                     }
#define NOP_3   { _nop_(); _nop_(); _nop_(); }
#define NOP_2   { _nop_(); _nop_(); }
#define NOP_1   { _nop_(); }
#define NOP_0   {  }

/*
    1) 12-clock mode
        12 / 14.318MHz = 838 ns !

    2) 6-clock mode
        6 / 14.318MHz = 419 ns !
*/

#define SPI_T_S0    NOP_1           /* Min. 150 ns                          */
#define SPI_T_H0    NOP_1           /* Min. 150 ns                          */
#define SPI_T_S1    NOP_1           /* Min. 150 ns                          */
#define SPI_T_H1    NOP_1           /* Min. 150 ns                          */
#define SPI_T_W1L   NOP_1           /* Min. 210 ns                          */
#define SPI_T_W1H   NOP_1           /* Min. 210 ns                          */
#define SPI_T_W2    NOP_1           /* Min. 1   us                          */

#define SPI_REG_MASK        0x20
#define SPI_DATA_MASK       0x80


#define     SPI_SET_SDA(HiLo)       {   SPI_MOSI = (HiLo) ? HIGH : LOW;     }
#define     SPI_SET_SCL(HiLo)       {   SPI_SPICLK = (HiLo) ? HIGH : LOW;   }
#define     SPI_SET_CS(HiLo)        {   SPI_SS = (HiLo) ? HIGH : LOW;       }


/* ------------------------------------
    Type Definitions
   ------------------------------------ */


/* ------------------------------------
    Variables Definitions
   ------------------------------------ */
sbit SPI_MOSI       = P1 ^ 4;       /* Master Out Slave In  (SDA)       */
sbit SPI_SPICLK     = P1 ^ 3;       /* SPI clock            (SCL)       */
sbit SPI_SS         = P1 ^ 2;       /* Slave Select         (CS)        */


/* ------------------------------------
    Function Prototypes
   ------------------------------------ */


/* -------------------------------------------------------------------
    Name: SPI_Init -
    Purpose: .
    Passed: None.
    Returns: None.
    Notes:
  ------------------------------------------------------------------- */
void SPI_Init (void)
{
    SPI_SET_CS(HIGH);
    SPI_SET_SDA(LOW);
    SPI_SET_SCL(LOW);

    #ifdef NOT_JUNK
    SPI_TxByte(0x00, 0x03);
    SPI_TxByte(0x01, 0x18);

    SPI_TxByte(0x03, 0x40);
    SPI_TxByte(0x04, 0x0B);
    SPI_TxByte(0x05, 0x76);
    SPI_TxByte(0x06, 0x15);
    SPI_TxByte(0x07, 0x1E);
    SPI_TxByte(0x08, 0x00);

    SPI_TxByte(0x0C, 0x26);
    SPI_TxByte(0x0D, 0x40);
    SPI_TxByte(0x0E, 0x40);
    SPI_TxByte(0x0F, 0x40);
    SPI_TxByte(0x10, 0x40);
    SPI_TxByte(0x11, 0x40);
    SPI_TxByte(0x12, 0x88);
    SPI_TxByte(0x13, 0x88);
    #endif
} /* SPI_Init */


/* -------------------------------------------------------------------
    Name: SPI_PowerOff -
    Purpose: .
    Passed: None.
    Returns: None.
    Notes:
  ------------------------------------------------------------------- */
void SPI_PowerOff (void)
{
    SPI_TxByte(0x05, 0x5E);
} /* SPI_PowerOff */


/* -------------------------------------------------------------------
    Name: SPI_PowerOn -
    Purpose: .
    Passed: None.
    Returns: None.
    Notes:
  ------------------------------------------------------------------- */
void SPI_PowerOn (void)
{
    SPI_TxByte(0x02, 0x42);
} /* SPI_PowerOn */


/* -------------------------------------------------------------------
    Name: SPI_TxByte -
    Purpose: To transmit a 16-bit command to SPI slave device.
    Passed:
    Returns: None.
    Notes:
   ------------------------------------------------------------------- */
void SPI_TxByte (
UB8  bReg,
UB8  bData
)
{
    UB8 bMask;


    SPI_SET_CS(LOW);

    for (bMask = SPI_REG_MASK; bMask; bMask >>= 1)
    {
        SPI_SET_SDA(bReg & bMask);

        // SDA is loaded one bit a time at the rising edge of SCL
        SPI_SET_SCL(HIGH);
        SPI_T_H1;
        SPI_SET_SCL(LOW);
    }

    SPI_SET_SDA(LOW);
    
    SPI_SET_SCL(HIGH);
    SPI_T_H1;
    SPI_SET_SCL(LOW);
    SPI_T_H1;

    SPI_SET_SDA(HIGH);
    
    SPI_SET_SCL(HIGH);
    SPI_T_H1;
    SPI_SET_SCL(LOW);
    SPI_T_H1;

    for (bMask = SPI_DATA_MASK; bMask; bMask >>= 1)
    {
        SPI_SET_SDA(bData & bMask);

        // SDA is loaded one bit a time at the rising edge of SCL
        SPI_SET_SCL(HIGH);
        SPI_T_H1;
        SPI_SET_SCL(LOW);
    }

    SPI_T_H0;
    SPI_SET_CS(HIGH);
    SPI_SET_SDA(LOW);
        
} /* SPI_TxByte */



/* -------------------------------------------------------------------
    Name:  -
    Purpose: .
    Passed: None.
    Returns: None.
    Notes:
   ------------------------------------------------------------------- */


/* **********************************************************************

    Description:


   ********************************************************************** */

/* %% End Of File %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -