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

📄 spi.h

📁 zilog z80f91单片机的SPI接口函数
💻 H
字号:
/*
 * File       :     config.h
 *
 * Description:  This file contains the Telnet Client side API definitions.
 *
 * Copyright 2004 ZiLOG Inc.  ALL RIGHTS RESERVED.
 *
 * This file contains unpublished confidential and proprietary information
 * of ZiLOG, Inc.
 * NO PART OF THIS WORK MAY BE DUPLICATED, STORED, PUBLISHED OR DISCLOSED 
 * IN ANY FORM WITHOUT THE PRIOR WRITTEN CONSENT OF ZiLOG, INC.
 * This is not a license and no use of any kind of this work is authorized
 * in the absence of a written license granted by ZiLOG, Inc. in ZiLOG's 
 * sole discretion 
 */

#ifndef _ZSPI
#define _ZSPI  

#include "ZTypes.h"
#include "ZSysgen.h"
#include "ZDevice.h"

typedef volatile UINT8 __INTIO *PBINTIO;

#define IO8_WRITE(io_reg, b_val) io_reg=b_val

/* SPI baud rate, control and data registers */
#define spi_brg_l	(*(PBINTIO)(0xB8))
#define spi_brg_h	(*(PBINTIO)(0xB9))

#define spi_ctl		(*(PBINTIO)(0xBA))
#define spi_sr		(*(PBINTIO)(0xBB))
#define spi_tsr		(*(PBINTIO)(0xBC))
#define spi_rbr		(*(PBINTIO)(0xBC))

#define IRQ_EN				 0x80
#define SPI_EN				 0x20
#define MASTER_EN			 0x10
#define CPOL				 0x08
#define CPHA				 0x04

#define SPIF				 0x80
#define WCOL				 0x40
#define MODF				 0x10

#define SPI_BUSY			0x01
/* Port registers */

#ifdef _EZ80F91

#define padr		(*(PBINTIO)(0x96))
#define paddr		(*(PBINTIO)(0x97))
#define paalt1		(*(PBINTIO)(0x98))
#define paalt2		(*(PBINTIO)(0x99))

#endif

#define pbdr		(*(PBINTIO)(0x9A))
#define pbddr		(*(PBINTIO)(0x9B))
#define pbalt1		(*(PBINTIO)(0x9C))
#define pbalt2		(*(PBINTIO)(0x9D))

#define pcdr		(*(PBINTIO)(0x9E))
#define pcddr		(*(PBINTIO)(0x9F))
#define pcalt1		(*(PBINTIO)(0xA0))
#define pcalt2		(*(PBINTIO)(0xA1))

#define pddr		(*(PBINTIO)(0xA2))
#define pdddr		(*(PBINTIO)(0xA3))
#define pdalt1		(*(PBINTIO)(0xA4))
#define pdalt2		(*(PBINTIO)(0xA5))

#ifdef _EZ80F91
	#define SPI_IRQ_NUM	0x7C
	#define PB2_IRQ_NUM	0xA8
#else
	#define SPI_IRQ_NUM	0x1E
	#define PB2_IRQ_NUM	0x34
#endif
/****************************************************************/
// Target related system clock frequencies

#define SET_BAUD		(RZK_DEV_BYTES_t)0x01
#define LOAD_CONTROL	(RZK_DEV_BYTES_t)0x02
#define SLAVE_SELECT	(RZK_DEV_BYTES_t)0x04
#define SLAVE_DESELECT	(RZK_DEV_BYTES_t)0x08
#define READ_STATUS		(RZK_DEV_BYTES_t)0x10

#define BAUD_9600			9600	            	//!< Baud rate 9600.
#define BAUD_19200			19200	            	//!< Baud rate 19200.
#define BAUD_38400			38400	            	//!< Baud rate 38400.
#define BAUD_57600			57600	            	//!< Baud rate 57600.
#define BAUD_115200			115200	    	        //!< Baud rate 115200.

/* SPI status values */
typedef enum {
	SPIDEV_ERR_SUCCESS = 0,
	SPIDEV_ERR_WCOL = -5,
	SPIDEV_ERR_MULTIMASTER,
	SPIDEV_ERR_INVALID_OPERATION,
	SPIDEV_ERR_KERNEL_ERROR,
	SPIDEV_ERR_BUSY
} SPIDEV_ERR_NUMS ;

typedef struct {
	RZK_THREADHANDLE_t	spiIntThreadHdl;
	RZK_THREADHANDLE_t	hSPIThread;
	UINT8 				cBaudRate;
	RZK_DEV_BYTES_t nBytesTransfered;
	RZK_DEV_BYTES_t nBytes;
	RZK_DEV_BUFFER_t *buf;
	UINT8 cError;
	UINT8 cReadOp;
}DEV_SPI_CB_t;

void spiisr(void);

DDF_STATUS_t AddSpi(void);
DDF_STATUS_t SPI_Open(RZK_DEVICE_CB_t *pDCB,RZK_DEV_NAME_t *devName,RZK_DEV_MODE_t *devMode);
DDF_STATUS_t SPI_Read(RZK_DEVICE_CB_t *pDCB,RZK_DEV_BUFFER_t *buf,RZK_DEV_BYTES_t nBytes);
DDF_STATUS_t SPI_Write(RZK_DEVICE_CB_t *pDCB,RZK_DEV_BUFFER_t *buf,RZK_DEV_BYTES_t nBytes);
DDF_STATUS_t SPI_Ioctl(RZK_DEVICE_CB_t *pDCB,RZK_DEV_BYTES_t uOperation,INT8 *addr1,INT8 *addr2);
DDF_STATUS_t SPI_Close(RZK_DEVICE_CB_t *pDCB);

#endif

⌨️ 快捷键说明

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