

#ifndef __RC522REG_H__
#define __RC522REG_H__

//============== MF RC522寄存器定义 ===============================================================
// 页零；命令和状态寄存器
#define     REG_RFU00           0x00		// 保留
#define     REG_COMMAND         0x01		// 命令寄存器
#define     REG_COMMIEN         0x02		// 中断使能寄存器 IRQ、TX、RX、IDLE、HI、LO、ERR、TIMER
#define     REG_DIVIEN          0x03		// 中断使能寄存器 IRQ、SIGIN、CRC
#define     REG_COMMIRQ         0x04		// 中断标志
#define     REG_DIVIRQ          0x05		// 中断标志
#define     REG_ERROR           0x06        // 错误状态寄存器
#define     REG_STATUS1         0x07		// 状态寄存器1
#define     REG_STATUS2         0x08		// 状态寄存器2
#define     REG_FIFODATA        0x09		// FIFO
#define     REG_FIFOLEVEL       0x0A		// FIFO存储字节数寄存器
#define     REG_WATERLEVEL      0x0B		// FIFO上溢、下溢报警深度
#define     REG_CONTROL         0x0C		// 控制寄存器（定时器控制，接收的位）
#define     REG_BITFRAMING      0x0D		// Bit帧控制寄存器
#define     REG_COLL            0x0E		// 冲突位寄存器
#define     REG_RFU0F           0x0F        // 保留
// 页一；通信寄存器
#define     REG_RFU10           0x10		// 保留
#define     REG_MODE            0x11		// 通信模式寄存器
#define     REG_TXMODE          0x12		// 发送控制寄存器（CRC和速率控制）
#define     REG_RXMODE          0x13 		// 接收控制寄存器（CRC和速率控制）
#define     REG_TXCONTROL       0x14		// TX输出控制寄存器
#define     REG_TXASK           0x15		// 发送器ASK调制系数控制寄存器
#define     REG_TXSEL           0x16		// 发送控制寄存器（信号输入/输出选择）
#define     REG_RXSEL           0x17		// 接收控制寄存器（信号输入选择）
#define     REG_RXTHRESHOLD     0x18		// 接收控制寄存器（译码器阈值设置）
#define     REG_DEMOD           0x19  		// 接收控制寄存器（解调器设置）
#define     REG_RFU1A           0x1A		// 保留
#define     REG_RFU1B           0x1B		// 保留
#define     REG_MFTX            0x1C		// 控制MIFARE协议的发送器参数寄存器
#define     REG_MFRX            0x1D		// 控制MIFARE协议的接收器参数寄存器
#define     REG_TYPEB           0x1E		// 配置ISO/IEC 14443 B协议寄存器
#define     REG_SERIALSPEED     0x1F		// 串行UART速率控制寄存器
// 页二；配置寄存器
#define     REG_RFU20           0x20 		// 保留
#define     REG_CRCRESULT1      0x21		// CRC计算结果寄存器（MSB）
#define     REG_CRCRESULT2      0x22		// CRC计算结果寄存器（LSB）
#define     REG_GSNOFF          0x23		// 保留
#define     REG_MODWIDTH        0x24		// 调制宽度控制寄存器
#define     REG_TXBITPHASE      0x25		// 保留
#define     REG_RFCFG           0x26		// 接收器增益控制寄存器
#define     REG_GSN             0x27		// 天线驱动输出脚电导控制寄存器（N,控制功率）
#define     REG_CWGSP           0x28		// 天线驱动输出脚电导控制寄存器（P,控制功率）
#define     REG_MODGSP          0x29		// 天线驱动输出脚电导控制寄存器（调节调制系数）
#define     REG_TMODE           0x2A		// 定时器设置寄存器
#define     REG_TPRESCALER      0x2B		// 定时器分频系数寄存器
#define     REG_TRELOADHI       0x2C		// 16位定时器重装值（Hi）
#define     REG_TRELOADLO       0x2D		// 16位定时器重装值（Lo）
#define     REG_TCOUNTERVALHI   0x2E		// 16位定时器当值（Hi）
#define     REG_TCOUNTERVALLO   0x2F		// 16位定时器当值（Lo）
// 页三；测试寄存器
#define     REG_RFU30           0x30		// 保留
#define     REG_TESTSEL1        0x31		// 测试寄存器
#define     REG_TESTSEL2        0x32		// 测试寄存器
#define     REG_TESTPINEN       0x33		// 测试寄存器
#define     REG_TESTPINVALUE    0x34		// 测试寄存器
#define     REG_TESTBUS         0x35		// 内部测试总线状态
#define     REG_AUTOTEST        0x36		// 自测试控制寄存器
#define     REG_VERSION         0x37		// 版本
#define     REG_ANALOGTEST      0x38		// AUX管脚控制寄存器
#define     REG_TESTDAC1        0x39		// DAC1测试值
#define     REG_TESTDAC2        0x3A		// DAC1测试值
#define     REG_TESTADC         0x3B		// ADC_I和ADC_Q的值
#define     REG_ANALOGUETEST1   0x3C		// 测试寄存器
#define     REG_RFT3D           0x3D		// 测试寄存器
#define     REG_RFT3E           0x3E		// 测试寄存器
#define     REG_RFT3F           0x3F		// 测试寄存器
//============== MF RC522命令码定义 ===============================================================
#define     CMD_IDLE			0x00		// 空闲命令
#define 	CMD_CONFIG		    0x01		// 配置命令
#define 	CMD_GENRANDOM	    0x02		// 
#define     CMD_CALCCRC			0x03		// 计算CRC
#define     CMD_TRANSMIT		0x04		// 发送数据 
#define     CMD_NOCMDCHANGE		0x07		// 修改命令寄存器的其他位（不改变当前命令）
#define     CMD_RECEIVE			0x08		// 激活接收器
#define     CMD_TRANSCEIVE		0x0C		// 
#define 	CMD_AUTOCOLL		0x0d
#define     CMD_AUTHENT			0x0E		// MIFARE认证
#define     CMD_SOFTRESET		0x0F		// 软件复位
//============= 位定义 ============================================================================
// CommandReg					0x01		// 命令寄存器
#define     BIT_RCVOFF			0x20		// 1 接收器模拟部分关闭
#define     BIT_POWERDOWN       0x10		// 1 软掉电
// CommIEnReg					0x02
#define     BIT_IRQINV          0x80		// IRQ脚输出反向

// DivIEnReg					0x03		// 中断请求使能1
#define     BIT_IRQPUSHPULL     0x80		// IRQ脚输出模式控制，1；CMOS输出，0；开漏输出

// CommIEn and CommIrq Register 0x02, 0x04  // 中断请求/使能
#define     BIT_TXI             0x40		// 发送器中断使能/请求
#define     BIT_RXI             0x20		// 接收器中断使能/请求
#define     BIT_IDLEI           0x10		// 空  闲中断使能/请求
#define     BIT_HIALERTI        0x08		// FIFO满中断使能/请求
#define     BIT_LOALERTI        0x04		// FIFO空中断使能/请求
#define     BIT_ERRI            0x02		// 错  误中断使能/请求
#define     BIT_TIMERI          0x01		// 定时器中断使能/请求

// DivIEn and DivIrq Register   0x03, 0x05	// 中断请求使能2
#define     BIT_MFINACTI        0x10		// MFIN激活中断请求/使能
#define     BIT_CRCI            0x04		// CRC中断请求/使能

// CommIrq and DivIrq Register  0x04, 0x05	// 
#define     BIT_SET             0x80		// 中断使能/请求位设置/清除控制位

// Error Register 				0xx06		// 错误寄存器
#define     BIT_WRERR           0x80		// 写FIFO冲突错误
#define     BIT_TEMPERR         0x40		// 芯片温度过热
#define     BIT_BUFFEROVFL      0x10		// FIFO溢出错误
#define     BIT_COLLERR         0x08		// 冲突位错误
#define     BIT_CRCERR          0x04		// CRC校验错误
#define     BIT_PARITYERR       0x02		// 奇偶校验错误
#define     BIT_PROTERR         0x01		// 协议错误

// Status 1 Register 			0x07		// 状态寄存器1
#define     BIT_CRCOK           0x40		// CRC校验通过
#define     BIT_CRCREADY        0x20		// CRC计算完毕
#define     BIT_IRQ             0x10		// 中断请求
#define     BIT_TRUNNUNG        0x08		// 定时器运行
#define     BIT_HIALERT         0x02		// FIFO大于等于满警戒线
#define     BIT_LOALERT         0x01		// FIFO小于等于空警戒线

// Status 2 Register			0x08		// 状态寄存器2
#define     BIT_TEMPSENSOFF     0x80		// 温度传感器开关
#define     BIT_I2CFORCEHS      0x40		// IIC高速模式

//#define 	BIT_TARGETACTIVATED	0x10
#define     BIT_CRYPTO1ON       0x08		// Crypto 加密模式

// FIFOLevel Register			0X0A
#define     BIT_FLUSHBUFFER     0x80		// 1 清空FIFO

// ControlReg					0x0C		// 包含不同的控制位
#define     BIT_TSTOPNOW        0x80		// 1 定时器立即停止
#define     BIT_TSTARTNOW       0x40		// 1 定时器立即启动
#define		BIT_WRNFCIDTOFIFO	0x20		// 1 产生10字节NFCID	PN51x
#define		BIT_INITIATOR		0X10		// 1 卡模式				PN51x

// BitFramiReg					0x0D		// 面向位帧
#define     BIT_STARTSEND       0x80		// 1 启动数据发送

// CollReg						0x0E		// RF接口检测到的冲突位
#define     BIT_VALUESAFTERCOLL 0x80		// 0 冲突位后的所接收的数据将被清除

// Page1
// ModeReg						0x11		// 定义发送和接收模式（包括CRC初值定义）
#define     BIT_MSBFIRST        0x80		// CRC高位在前 RC523 
#define     BIT_TXWAITRF        0x20   
#define     BIT_POLSIGIN        0x08		// SIGIN 极性

// TxModeReg					0x12		// 定义发送器波特率和模式
#define     BIT_INVMOD          0x08		// 1 发送数据调制反向

// RxModeReg					0x13		// 定义接收器波特率和模式
#define     BIT_RXNOERR         0x08		// 1 接收的位少于4位，将被忽略

// 定义 TxModeReg和RxModeReg共有的
#define     BIT_106KBPS         0x00
#define     BIT_212KBPS         0x10
#define     BIT_424KBPS         0x20
#define     BIT_848KBPS         0x30		// RC523

#define     BIT_CRCEN           0x80		// CRC使能
#define     BIT_ISO14443A       0x00		// 数据传输模式TypeA	RC523
#define     BIT_ISO14443B       0x03		// 数据传输模式TypeB	RC523

// TxControlReg					0x14		// 天线驱动脚控制逻辑
#define     BIT_INVTX2ON        0x80		// 1 若TX2使能，则TX2信号输出反向
#define     BIT_INVTX1ON        0x40		// 1 若TX1使能，则TX1信号输出反向
#define     BIT_INVTX2OFF       0x20 		// 1 若TX2禁止，则TX2信号输出反向  
#define     BIT_INVTX1OFF       0x10  		// 1 若TX1禁止，则TX1信号输出反向 
#define     BIT_TX2CW           0x08		// 1 TX2传输未调制的载波信号；
										    // 0 TX2传输调制后的载波信号
#define     BIT_TX2RFEN         0x02		// 1 TX2传输调制的载波信号
#define     BIT_TX1RFEN         0x01		// 1 TX1传输调制的载波信号

// TxASKReg						0x15		// 传输调制模式（RC523）
#define		BIT_FORCE100ASK		0x04        // 1 100%ASK调制

// DemodReg						0x19		// 解调器设置
#define     BIT_FIXIQ           0x20		// 解调器通道选择

// TModeReg						0x2A		// 定时器模式设置
#define     BIT_TAUTO           0x80		// 1 定时器自动启动和停止
#define     BIT_TAUTORESTART    0x10		// 1 定时器重新计数；
											// 0 计数器归0，并产生中断信号
//============= UART通信波特率设置 ================================================================
// BR_T0 = REG_SERIALSPEED[7:5]
// BR_T1 = REG_SERIALSPEED[4:0]
// BR_T0 = 0, BaudRate = 27.12MHz/(BR_T1+1)
// BR_T0 = 1, BaudRate = 27.12MHz/(BR_T1+33)/2^(BR_T0-1)	
#define		RCBR_7200			0xFA
#define		RCBR_9600			0xEB
#define		RCBR_14400			0xDA
#define		RCBR_19200			0xCB
#define		RCBR_38400			0xAB
#define		RCBR_57600			0x9A
#define		RCBR_115200			0x7A
#define		RCBR_128000			0x74
#define		RCBR_230400			0x5A
#define		RCBR_460800			0x3A
#define		RCBR_921600			0x1C
#define		RCBR_1228800		0x15
//============= 位屏蔽码 ========================================================================
// Command register             0x01
#define     MASK_COMMAND        0x0F			// REG_COMMAND 命令屏蔽码

// Waterlevel register          0x0B
#define     MASK_WATERLEVEL		0x3F			// REG_WATERLEVEL FIFO水平线屏蔽码

// Control register             0x0C
#define     MASK_RXBITS         0x07			// REG_CONTROL 最后接收到的字节的有效位的数目屏蔽吗

// Mode register                0x11
#define     MASK_CRCPRESET      0x03			// REG_MODE CRC预置值的选择屏蔽码

// TxMode register              0x12, 0x13
#define     MASK_SPEED          0x70			// REG_RXMODE 发送/接收数据位数率屏蔽码

// TxSel register               0x16
#define     MASK_DRIVERSEL      0x30			// REG_TXSEL TX1、TX2输出选择屏蔽码
#define     MASK_SIGOUTSEL      0x0F			// REG_TXSEL MFOUT信号源选择屏蔽码

// RxSel register               0x17
#define     MASK_UARTSEL        0xC0			// REG_RXSEL 非接触式UART输入信号选择屏蔽码
#define     MASK_RXWAIT         0x3F			// REG_RXSEL 接收等待时间设置屏蔽码

// RxThreshold register         0x18
#define     MASK_MINLEVEL       0xF0			// REG_RXTHRESHOLD 定义接收译码器输入的最小信号强度
#define     MASK_COLLEVEL       0x07			// REG_RXTHRESHOLD 定义冲突位信号的强度屏蔽码

// Demod register               0x19
#define     MASK_ADDIQ          0xC0			// REG_DEMOD 接收过程中I/Q通道的选择屏蔽码
#define     MASK_TAURCV         0x0C			// REG_DEMOD 接收过程中内部PLL的时间常数屏蔽码
#define     MASK_TAUSYNC        0x03			// REG_DEMOD 突发过程中，内部PLL的时间常数屏蔽码

// RFCfg register               0x26
#define     MASK_RXGAIN         0x70			// REG_RFCFG 接收信号电压增益因子屏蔽码

// GsN register                 0x27
#define     MASK_CWGSN          0xF0			// REG_GSN N驱动器的电导屏蔽码
#define     MASK_MODGSN         0x0F			// REG_GSN N驱动器的调制系数屏蔽码

// CWGsP register               0x28
#define     MASK_CWGSP          0x3F			// REG_CWGSP P驱动器的电导屏蔽码

// ModGsP register              0x29
#define     MASK_MODGSP         0x3F			// REG_MODGSP P驱动器的调制系数屏蔽码

// TMode register               0x2A
#define     MASK_TGATED         0x60			// REG_TMODE 定时器门工作模式屏蔽码
#define     MASK_TPRESCALER_HI  0x0F			// REG_TMODE 定时器高字节屏蔽码

//=================================================================================================
#endif				// __RC522REG_H__

