?? spi.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 + -