📄 rd_usevirtualport.h
字号:
#ifndef _USE_VIRTUAL_PORT_H_
#define _USE_VIRTUAL_PORT_H_
/***********************************************************
* 函数说明:硬件SPI虚拟端口底层驱动函数库 *
* 版本: v1.00 *
* 作者: 王卓然 *
* 创建日期:2006年7月30日 *
* -------------------------------------------------------- *
* [支持库] *
* 支持库名称:RD_MacroAndConst.h *
* 需要版本: v0.04 &abv *
* 函数库说明:系统常用宏定义库 *
* -------------------------------------------------------- *
* [版本更新] *
* -------------------------------------------------------- *
* [版本历史] *
* v1.00 支持595和165成队及联,支持硬件SPI传输模式, *
* 支持通过宏定义设定虚拟端口数量;虚拟端口同 *
* 时支持读取和写两种模式,并且兼容AVR普通端 *
* 口的操作方式,支持虚拟端口位操作。 *
* -------------------------------------------------------- *
* [使用说明] *
* 1、调用该头文件之前,可以通过宏VP_PORT_COUNT *
* 来设定虚拟端口的数目,这里的数目8个引脚算 *
* 一个端口。 *
* 2、通过宏VP_SS来设定SS脚,这里需要位操作支持。 *
* 3、将宏VIRTUALPORT_INSERT_SPI_STC_ISR_CODE插 *
* 入到SPI通讯完成中断处理程序中。 *
* 4、虚拟端口从PORTH和PINH开始,每次需要刷新端 *
* 口时只需要调用宏REFRESH_VIRTUAL_PORT,特别 *
* 说明,在中断处理程序里面调用该宏时要打开全 *
* 局中断SEI(); *
***********************************************************/
# include <RD_MacroAndConst.h>
/********************
* 系 统 宏 定 义 *
********************/
/*------------------*
* 常 数 宏 定 义 *
*------------------*/
#ifndef VP_PORT_COUNT
#define VP_PORT_COUNT 2
#endif
#if VP_PORT_COUNT-1 >= 0
# define PORTH (*((volatile unsigned char *)&VP_PORTx[0]))
# define PINH (*((volatile unsigned char *)&VP_PINx[0]))
#endif
#if VP_PORT_COUNT-2 >= 0
# define PORTI (*((volatile unsigned char *)&VP_PORTx[1]))
# define PINI (*((volatile unsigned char *)&VP_PINx[1]))
#endif
#if VP_PORT_COUNT-3 >= 0
# define PORTJ (*((volatile unsigned char *)&VP_PORTx[2]))
# define PINJ (*((volatile unsigned char *)&VP_PINx[2]))
#endif
#if VP_PORT_COUNT-4 >= 0
# define PORTK (*((volatile unsigned char *)&VP_PORTx[3]))
# define PINK (*((volatile unsigned char *)&VP_PINx[3]))
#endif
#if VP_PORT_COUNT-5 >= 0
# define PORTL (*((volatile unsigned char *)&VP_PORTx[4]))
# define PINL (*((volatile unsigned char *)&VP_PINx[4]))
#endif
#if VP_PORT_COUNT-6 >= 0
# define PORTM (*((volatile unsigned char *)&VP_PORTx[5]))
# define PINM (*((volatile unsigned char *)&VP_PINx[5]))
#endif
#if VP_PORT_COUNT-7 >= 0
# define PORTN (*((volatile unsigned char *)&VP_PORTx[6]))
# define PINN (*((volatile unsigned char *)&VP_PINx[6]))
#endif
#if VP_PORT_COUNT-8 >= 0
# define PORTO (*((volatile unsigned char *)&VP_PORTx[7]))
# define PINO (*((volatile unsigned char *)&VP_PINx[7]))
#endif
#if VP_PORT_COUNT-9 >= 0
# define PORTP (*((volatile unsigned char *)&VP_PORTx[8]))
# define PINP (*((volatile unsigned char *)&VP_PINx[8]))
#endif
#if VP_PORT_COUNT-10 >= 0
# define PORTQ (*((volatile unsigned char *)&VP_PORTx[9]))
# define PINQ (*((volatile unsigned char *)&VP_PINx[9]))
#endif
#if VP_PORT_COUNT-11 >= 0
# define PORTR (*((volatile unsigned char *)&VP_PORTx[10]))
# define PINR (*((volatile unsigned char *)&VP_PINx[10]))
#endif
#if VP_PORT_COUNT-12 >= 0
# define PORTS (*((volatile unsigned char *)&VP_PORTx[11]))
# define PINS (*((volatile unsigned char *)&VP_PINx[11]))
#endif
#if VP_PORT_COUNT-13 >= 0
# define PORTT (*((volatile unsigned char *)&VP_PORTx[12]))
# define PINT (*((volatile unsigned char *)&VP_PINx[12]))
#endif
#if VP_PORT_COUNT-14 >= 0
# define PORTU (*((volatile unsigned char *)&VP_PORTx[13]))
# define PINU (*((volatile unsigned char *)&VP_PINx[13]))
#endif
#if VP_PORT_COUNT-15 >= 0
# define PORTV (*((volatile unsigned char *)&VP_PORTx[14]))
# define PINV (*((volatile unsigned char *)&VP_PINx[14]))
#endif
#if VP_PORT_COUNT-16 >= 0
# define PORTW (*((volatile unsigned char *)&VP_PORTx[15]))
# define PINW (*((volatile unsigned char *)&VP_PINx[15]))
#endif
#if VP_PORT_COUNT-17 >= 0
# define PORTX (*((volatile unsigned char *)&VP_PORTx[16]))
# define PINX (*((volatile unsigned char *)&VP_PINx[16]))
#endif
#if VP_PORT_COUNT-18 >= 0
# define PORTY (*((volatile unsigned char *)&VP_PORTx[17]))
# define PINY (*((volatile unsigned char *)&VP_PINx[17]))
#endif
#if VP_PORT_COUNT-19 >= 0
# define PORTZ (*((volatile unsigned char *)&VP_PORTx[18]))
# define PINZ (*((volatile unsigned char *)&VP_PINx[18]))
#endif
#ifdef PORTH
# define PORTH_BIT SET_BIT8_FORMAT(PORTH)
#endif
#ifdef PORTI
# define PORTI_BIT SET_BIT8_FORMAT(PORTI)
#endif
#ifdef PORTJ
# define PORTJ_BIT SET_BIT8_FORMAT(PORTJ)
#endif
#ifdef PORTK
# define PORTK_BIT SET_BIT8_FORMAT(PORTK)
#endif
#ifdef PORTL
# define PORTL_BIT SET_BIT8_FORMAT(PORTL)
#endif
#ifdef PORTM
# define PORTM_BIT SET_BIT8_FORMAT(PORTM)
#endif
#ifdef PORTN
# define PORTN_BIT SET_BIT8_FORMAT(PORTN)
#endif
#ifdef PORTO
# define PORTO_BIT SET_BIT8_FORMAT(PORTO)
#endif
#ifdef PORTP
# define PORTP_BIT SET_BIT8_FORMAT(PORTP)
#endif
#ifdef PORTQ
# define PORTQ_BIT SET_BIT8_FORMAT(PORTQ)
#endif
#ifdef PORTR
# define PORTR_BIT SET_BIT8_FORMAT(PORTR)
#endif
#ifdef PORTS
# define PORTS_BIT SET_BIT8_FORMAT(PORTS)
#endif
#ifdef PORTT
# define PORTT_BIT SET_BIT8_FORMAT(PORTT)
#endif
#ifdef PORTU
# define PORTU_BIT SET_BIT8_FORMAT(PORTU)
#endif
#ifdef PORTV
# define PORTV_BIT SET_BIT8_FORMAT(PORTV)
#endif
#ifdef PORTW
# define PORTW_BIT SET_BIT8_FORMAT(PORTW)
#endif
#ifdef PORTX
# define PORTX_BIT SET_BIT8_FORMAT(PORTX)
#endif
#ifdef PORTY
# define PORTY_BIT SET_BIT8_FORMAT(PORTY)
#endif
#ifdef PORTZ
# define PORTZ_BIT SET_BIT8_FORMAT(PORTZ)
#endif
#ifdef PINH
# define PINH_BIT SET_BIT8_FORMAT(PINH)
#endif
#ifdef PINI
# define PINI_BIT SET_BIT8_FORMAT(PINI)
#endif
#ifdef PINJ
# define PINJ_BIT SET_BIT8_FORMAT(PINJ)
#endif
#ifdef PINK
# define PINK_BIT SET_BIT8_FORMAT(PINK)
#endif
#ifdef PINL
# define PINL_BIT SET_BIT8_FORMAT(PINL)
#endif
#ifdef PINM
# define PINM_BIT SET_BIT8_FORMAT(PINM)
#endif
#ifdef PINN
# define PINN_BIT SET_BIT8_FORMAT(PINN)
#endif
#ifdef PINO
# define PINO_BIT SET_BIT8_FORMAT(PINO)
#endif
#ifdef PINP
# define PINP_BIT SET_BIT8_FORMAT(PINP)
#endif
#ifdef PINQ
# define PINQ_BIT SET_BIT8_FORMAT(PINQ)
#endif
#ifdef PINR
# define PINR_BIT SET_BIT8_FORMAT(PINR)
#endif
#ifdef PINS
# define PINS_BIT SET_BIT8_FORMAT(PINS)
#endif
#ifdef PINT
# define PINT_BIT SET_BIT8_FORMAT(PINT)
#endif
#ifdef PINU
# define PINU_BIT SET_BIT8_FORMAT(PINU)
#endif
#ifdef PINV
# define PINV_BIT SET_BIT8_FORMAT(PINV)
#endif
#ifdef PINW
# define PINW_BIT SET_BIT8_FORMAT(PINW)
#endif
#ifdef PINX
# define PINX_BIT SET_BIT8_FORMAT(PINX)
#endif
#ifdef PINY
# define PINY_BIT SET_BIT8_FORMAT(PINY)
#endif
#ifdef PINZ
# define PINZ_BIT SET_BIT8_FORMAT(PINZ)
#endif
#ifdef PORTH
# define _PH0 PORTH_BIT.BIT0
# define _PH1 PORTH_BIT.BIT1
# define _PH2 PORTH_BIT.BIT2
# define _PH3 PORTH_BIT.BIT3
# define _PH4 PORTH_BIT.BIT4
# define _PH5 PORTH_BIT.BIT5
# define _PH6 PORTH_BIT.BIT6
# define _PH7 PORTH_BIT.BIT7
#endif
#ifdef PORTI
# define _PI0 PORTI_BIT.BIT0
# define _PI1 PORTI_BIT.BIT1
# define _PI2 PORTI_BIT.BIT2
# define _PI3 PORTI_BIT.BIT3
# define _PI4 PORTI_BIT.BIT4
# define _PI5 PORTI_BIT.BIT5
# define _PI6 PORTI_BIT.BIT6
# define _PI7 PORTI_BIT.BIT7
#endif
#ifdef PORTJ
# define _PJ0 PORTJ_BIT.BIT0
# define _PJ1 PORTJ_BIT.BIT1
# define _PJ2 PORTJ_BIT.BIT2
# define _PJ3 PORTJ_BIT.BIT3
# define _PJ4 PORTJ_BIT.BIT4
# define _PJ5 PORTJ_BIT.BIT5
# define _PJ6 PORTJ_BIT.BIT6
# define _PJ7 PORTJ_BIT.BIT7
#endif
#ifdef PORTK
# define _PK0 PORTK_BIT.BIT0
# define _PK1 PORTK_BIT.BIT1
# define _PK2 PORTK_BIT.BIT2
# define _PK3 PORTK_BIT.BIT3
# define _PK4 PORTK_BIT.BIT4
# define _PK5 PORTK_BIT.BIT5
# define _PK6 PORTK_BIT.BIT6
# define _PK7 PORTK_BIT.BIT7
#endif
#ifdef PORTL
# define _PL0 PORTL_BIT.BIT0
# define _PL1 PORTL_BIT.BIT1
# define _PL2 PORTL_BIT.BIT2
# define _PL3 PORTL_BIT.BIT3
# define _PL4 PORTL_BIT.BIT4
# define _PL5 PORTL_BIT.BIT5
# define _PL6 PORTL_BIT.BIT6
# define _PL7 PORTL_BIT.BIT7
#endif
#ifdef PORTM
# define _PM0 PORTM_BIT.BIT0
# define _PM1 PORTM_BIT.BIT1
# define _PM2 PORTM_BIT.BIT2
# define _PM3 PORTM_BIT.BIT3
# define _PM4 PORTM_BIT.BIT4
# define _PM5 PORTM_BIT.BIT5
# define _PM6 PORTM_BIT.BIT6
# define _PM7 PORTM_BIT.BIT7
#endif
#ifdef PORTN
# define _PN0 PORTN_BIT.BIT0
# define _PN1 PORTN_BIT.BIT1
# define _PN2 PORTN_BIT.BIT2
# define _PN3 PORTN_BIT.BIT3
# define _PN4 PORTN_BIT.BIT4
# define _PN5 PORTN_BIT.BIT5
# define _PN6 PORTN_BIT.BIT6
# define _PN7 PORTN_BIT.BIT7
#endif
#ifdef PORTO
# define _PO0 PORTO_BIT.BIT0
# define _PO1 PORTO_BIT.BIT1
# define _PO2 PORTO_BIT.BIT2
# define _PO3 PORTO_BIT.BIT3
# define _PO4 PORTO_BIT.BIT4
# define _PO5 PORTO_BIT.BIT5
# define _PO6 PORTO_BIT.BIT6
# define _PO7 PORTO_BIT.BIT7
#endif
#ifdef PORTP
# define _PP0 PORTP_BIT.BIT0
# define _PP1 PORTP_BIT.BIT1
# define _PP2 PORTP_BIT.BIT2
# define _PP3 PORTP_BIT.BIT3
# define _PP4 PORTP_BIT.BIT4
# define _PP5 PORTP_BIT.BIT5
# define _PP6 PORTP_BIT.BIT6
# define _PP7 PORTP_BIT.BIT7
#endif
#ifdef PORTQ
# define _PQ0 PORTQ_BIT.BIT0
# define _PQ1 PORTQ_BIT.BIT1
# define _PQ2 PORTQ_BIT.BIT2
# define _PQ3 PORTQ_BIT.BIT3
# define _PQ4 PORTQ_BIT.BIT4
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -