SPI_Master.h 3.94 KB
Newer Older
崔立宝's avatar
崔立宝 committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106
/******************************************************************************
文 件 名:SPI_Master.c
功能描述:SPI 主机模式驱动库头文件
作    者:张暄
版    本:V1.0
日    期:2017.04.02
******************************************************************************/

#ifndef _SPI_MASTER_H_
#define _SPI_MASTER_H_

#include "stdint.h"
#include "mc9s12xhy128.h"
#include "CRG.h"

/******************************************************************************
SPI 配置
******************************************************************************/
#define   SPI_GPIO_SELECT                   SPI_PS4_PS7
#define   SPI_BAUD_RATE                     4000000         //无法自动计算,在SPI_Master_Start函数内定义

#define   SPI_DATA_BUFFER_SIZE              16

#define   SPI_CALL_DATA_BLOCK_TX_ISR        1               //使用数据块传输完成中断函数

#define   SPI_DUMMY_BYTE                    0xFF
#define   SPI_DUMMY_WORD                    0xFFFF

/******************************************************************************
SPI可用的GPIO
******************************************************************************/
#define   SPI_PS4_PS7                       0x00
#define   SPI_PH0_PH3                       0x10
#define   SPI_PHV_PV3                       0x20

/******************************************************************************
SPI工作模式
******************************************************************************/
#define   SPI_MODE_0                        0x00
#define   SPI_MODE_1                        0x04
#define   SPI_MODE_2                        0x08
#define   SPI_MODE_3                        0x0C

/******************************************************************************
SPI首位定义
******************************************************************************/
#define   SPI_MSB_FIRST                     0x00
#define   SPI_LSB_FIRST                     0x01

/******************************************************************************
SPI写状态
******************************************************************************/
#define   SPI_WRITE_COMPLETE                0x00
#define   SPI_UNWRITABLE                    0x01
#define   SPI_WRITE_NOT_COMPLETE            0x01

/******************************************************************************
SPI读取结果
******************************************************************************/
#define   SPI_READ_COMPLETE                 0x00
#define   SPI_READ_REQ_COMPLETE             0x00
#define   SPI_READ_NOT_COMPLETE             0x01

/******************************************************************************
SPI数据块状态
******************************************************************************/
#define   SPI_DATA_BLOCK_IDLE               0x00
#define   SPI_DATA_BLOCK_WRITE              0x01
#define   SPI_DATA_BLOCK_READ               0x02

/******************************************************************************
SPI数据块结构
******************************************************************************/
typedef struct
{
  uint8_t   Status;
  uint8_t   ReadComplete;
  uint8_t   Ptr;
  uint8_t   Len;
  uint8_t   Data[SPI_DATA_BUFFER_SIZE];
} SPIDataBlockStruct;

/******************************************************************************
函数声明
******************************************************************************/
void SPI_Master_Start(uint8_t Mode, uint8_t FirstBit);
void SPI_Master_Stop(void);
uint8_t SPI_Master_Get_Write_Status(void);

uint8_t SPI_Master_Byte_Write(uint8_t Data);
uint8_t SPI_Master_Byte_Read_Req(void);
uint8_t SPI_Master_Get_Read_Byte(uint8_t *pData);

uint8_t SPI_Master_Word_Write(uint16_t Data);
uint8_t SPI_Master_Word_Read_Req(void);
uint8_t SPI_Master_Get_Read_Word(uint16_t *pData);

uint8_t SPI_Master_Block_Write(uint8_t *pData, uint8_t Len);
uint8_t SPI_Master_Block_Read_Req(uint8_t Len);
uint8_t SPI_Master_Get_Read_Block(uint8_t *pData, uint8_t Len);

#if SPI_CALL_DATA_BLOCK_TX_ISR
void SPI_Master_Block_Transmit_ISR(void);
#endif

#endif