/*
  ******************************************************************************
  * @file    apt32f102_ifc.h
  * @author  APT AE Team
  * @version V1.08
  * @date    2021/06/21
  ******************************************************************************
  *THIS SOFTWARE WHICH IS FOR ILLUSTRATIVE PURPOSES ONLY WHICH PROVIDES 
  *CUSTOMER WITH CODING INFORMATION REGARDING THEIR PRODUCTS.
  *APT CHIP SHALL NOT BE HELD RESPONSIBILITY ADN LIABILITY FOR ANY DIRECT, 
  *INDIRECT DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE CONTENT OF 
  *SUCH SOFTWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING INFORMATION 
  *CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.AND APT CHIP RESERVES 
  *THE RIGHT TO MAKE CHANGES IN THE SOFTWARE WITHOUT NOTIFICATION
  ******************************************************************************
  */
  
/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef _apt32f102_ifc_H
#define _apt32f102_ifc_H

/* Includes ------------------------------------------------------------------*/
#include "apt32f102.h"

/******************************************************************************
************************ ifc Registers Definition *************************
******************************************************************************/

#define   IFC_CLK_EN          (0x01ul)
#define   IFC_CLK_DIS         (0xfeul)
#define   EnIFCClk            (IFC->CEDR = (IFC_CLK_EN))
#define   DisIFCClk           (IFC->CEDR = (IFC_CLK_DIS))

#define   USER_KEY            (0x5A5A5A5Aul)
#define   SetUserKey          (IFC->KR = (USER_KEY))
#define   StartOp             (0x01ul)

#define  IFC_CLKEN  (0x01ul) //IFC CLKEN
#define  IFC_SWRST  (0x01ul) //IFC SWRST 

#define  HIDM0  ((0x0ul)<<8) //HID0
#define  HIDM1  ((0x1ul)<<8) //HID1
#define  HIDM2  ((0x2ul)<<8) //HID2
#define  HIDM3  ((0x3ul)<<8) //HID3

// IFC Command
#define  PROGRAM    (0x01ul)
#define  PAGE_ERASE (0x02ul)
#define  CHIP_ERASE (0x04ul)
#define  OPTION_ERASE (0x05ul)
#define  PEP_ENABLE (0x06ul)			//预编程设定
#define  PAGE_BUF_CLR (0x07ul)			//页缓存清除
#define  DIS_SWD_SET (0x0Dul)			//SWD 禁止重映射
#define  EN_SWD_SET (0x0Eul)			//SWD 使能重映射
#define  USER_OPTION (0x0Ful)			//User OPTION操作

#define  USER_KEY (0x5A5A5A5Aul)
#define  CSP_IFC_SET_KR(ifc, val) (ifc->KR = (val))

//
#define   StartErase          (IFC->CR=(StartOp))
#define   EnChipErase         (IFC->CMR=(CHIP_ERASE|HIDM1))
#define   EnPageErase         (IFC->CMR=(PAGE_ERASE|HIDM0))

/**
  * @brief  IFC page address
  */
typedef enum
{
	PROM_PageAdd0           =  ((CSP_REGISTER_T)0x00000000),					//PROM 每页256BYTE
	PROM_PageAdd1         =  ((CSP_REGISTER_T)0x00000100),
	PROM_PageAdd2          =  ((CSP_REGISTER_T)0x00000200),
	PROM_PageAdd3          =  ((CSP_REGISTER_T)0x00000300),
	PROM_PageAdd4          =  ((CSP_REGISTER_T)0x00000400),
	PROM_PageAdd5          =  ((CSP_REGISTER_T)0x00000500),
	PROM_PageAdd6          =  ((CSP_REGISTER_T)0x00000600),
	PROM_PageAdd7          =  ((CSP_REGISTER_T)0x00000700),
	PROM_PageAdd8          =  ((CSP_REGISTER_T)0x00000800),
	PROM_PageAdd9          =  ((CSP_REGISTER_T)0x00000900),
	
	PROM_PageAdd10          =  ((CSP_REGISTER_T)0x00000A00),
	PROM_PageAdd11          =  ((CSP_REGISTER_T)0x00000B00),
	PROM_PageAdd12          =  ((CSP_REGISTER_T)0x00000C00),
	PROM_PageAdd13          =  ((CSP_REGISTER_T)0x00000D00),
	PROM_PageAdd14          =  ((CSP_REGISTER_T)0x00000E00),
	PROM_PageAdd15          =  ((CSP_REGISTER_T)0x00000F00),
	PROM_PageAdd16          =  ((CSP_REGISTER_T)0x00001000),
	PROM_PageAdd17          =  ((CSP_REGISTER_T)0x00001100),
	PROM_PageAdd18          =  ((CSP_REGISTER_T)0x00001200),
	PROM_PageAdd19          =  ((CSP_REGISTER_T)0x00001300),
	
	PROM_PageAdd20          =  ((CSP_REGISTER_T)0x00001400),
	PROM_PageAdd21          =  ((CSP_REGISTER_T)0x00001500),
	PROM_PageAdd22          =  ((CSP_REGISTER_T)0x00001600),
	PROM_PageAdd23          =  ((CSP_REGISTER_T)0x00001700),
	PROM_PageAdd24          =  ((CSP_REGISTER_T)0x00001800),
	PROM_PageAdd25          =  ((CSP_REGISTER_T)0x00001900),
	PROM_PageAdd26          =  ((CSP_REGISTER_T)0x00001A00),
	PROM_PageAdd27          =  ((CSP_REGISTER_T)0x00001B00),
	PROM_PageAdd28          =  ((CSP_REGISTER_T)0x00001C00),
	PROM_PageAdd29          =  ((CSP_REGISTER_T)0x00001D00),
	
	PROM_PageAdd30          =  ((CSP_REGISTER_T)0x00001E00),
	PROM_PageAdd31          =  ((CSP_REGISTER_T)0x00001F00),
	PROM_PageAdd32          =  ((CSP_REGISTER_T)0x00002000),
	PROM_PageAdd33          =  ((CSP_REGISTER_T)0x00002100),
	PROM_PageAdd34          =  ((CSP_REGISTER_T)0x00002200),
	PROM_PageAdd35          =  ((CSP_REGISTER_T)0x00002300),
	PROM_PageAdd36          =  ((CSP_REGISTER_T)0x00002400),
	PROM_PageAdd37          =  ((CSP_REGISTER_T)0x00002500),
	PROM_PageAdd38          =  ((CSP_REGISTER_T)0x00002600),
	PROM_PageAdd39          =  ((CSP_REGISTER_T)0x00002700),
	
	PROM_PageAdd40          =  ((CSP_REGISTER_T)0x00002800),
	PROM_PageAdd41          =  ((CSP_REGISTER_T)0x00002900),
	PROM_PageAdd42          =  ((CSP_REGISTER_T)0x00002A00),
	PROM_PageAdd43          =  ((CSP_REGISTER_T)0x00002B00),
	PROM_PageAdd44          =  ((CSP_REGISTER_T)0x00002C00),
	PROM_PageAdd45          =  ((CSP_REGISTER_T)0x00002D00),
	PROM_PageAdd46          =  ((CSP_REGISTER_T)0x00002E00),
	PROM_PageAdd47          =  ((CSP_REGISTER_T)0x00002F00),
	PROM_PageAdd48          =  ((CSP_REGISTER_T)0x00003000),
	PROM_PageAdd49          =  ((CSP_REGISTER_T)0x00003100),
	
	PROM_PageAdd50          =  ((CSP_REGISTER_T)0x00003200),
	PROM_PageAdd51          =  ((CSP_REGISTER_T)0x00003300),
	PROM_PageAdd52          =  ((CSP_REGISTER_T)0x00003400),
	PROM_PageAdd53          =  ((CSP_REGISTER_T)0x00003500),
	PROM_PageAdd54          =  ((CSP_REGISTER_T)0x00003600),
	PROM_PageAdd55          =  ((CSP_REGISTER_T)0x00003700),
	PROM_PageAdd56          =  ((CSP_REGISTER_T)0x00003800),
	PROM_PageAdd57          =  ((CSP_REGISTER_T)0x00003900),
	PROM_PageAdd58          =  ((CSP_REGISTER_T)0x00003A00),
	PROM_PageAdd59          =  ((CSP_REGISTER_T)0x00003B00),
	
	PROM_PageAdd60          =  ((CSP_REGISTER_T)0x00003C00),
	PROM_PageAdd61          =  ((CSP_REGISTER_T)0x00003D00),
	PROM_PageAdd62          =  ((CSP_REGISTER_T)0x00003E00),
	PROM_PageAdd63          =  ((CSP_REGISTER_T)0x00003F00),
	PROM_PageAdd64          =  ((CSP_REGISTER_T)0x00004000),
	PROM_PageAdd65          =  ((CSP_REGISTER_T)0x00004100),
	PROM_PageAdd66          =  ((CSP_REGISTER_T)0x00004200),
	PROM_PageAdd67          =  ((CSP_REGISTER_T)0x00004300),
	PROM_PageAdd68          =  ((CSP_REGISTER_T)0x00004400),
	PROM_PageAdd69          =  ((CSP_REGISTER_T)0x00004500),
	
	PROM_PageAdd70          =  ((CSP_REGISTER_T)0x00004600),
	PROM_PageAdd71          =  ((CSP_REGISTER_T)0x00004700),
	PROM_PageAdd72          =  ((CSP_REGISTER_T)0x00004800),
	PROM_PageAdd73          =  ((CSP_REGISTER_T)0x00004900),
	PROM_PageAdd74          =  ((CSP_REGISTER_T)0x00004A00),
	PROM_PageAdd75          =  ((CSP_REGISTER_T)0x00004B00),
	PROM_PageAdd76          =  ((CSP_REGISTER_T)0x00004C00),
	PROM_PageAdd77          =  ((CSP_REGISTER_T)0x00004D00),
	PROM_PageAdd78          =  ((CSP_REGISTER_T)0x00004E00),
	PROM_PageAdd79          =  ((CSP_REGISTER_T)0x00004F00),
	
	PROM_PageAdd80          =  ((CSP_REGISTER_T)0x00005000),
	PROM_PageAdd81          =  ((CSP_REGISTER_T)0x00005100),
	PROM_PageAdd82          =  ((CSP_REGISTER_T)0x00005200),
	PROM_PageAdd83          =  ((CSP_REGISTER_T)0x00005300),
	PROM_PageAdd84          =  ((CSP_REGISTER_T)0x00005400),
	PROM_PageAdd85          =  ((CSP_REGISTER_T)0x00005500),
	PROM_PageAdd86          =  ((CSP_REGISTER_T)0x00005600),
	PROM_PageAdd87          =  ((CSP_REGISTER_T)0x00005700),
	PROM_PageAdd88          =  ((CSP_REGISTER_T)0x00005800),
	PROM_PageAdd89          =  ((CSP_REGISTER_T)0x00005900),
	
	PROM_PageAdd90          =  ((CSP_REGISTER_T)0x00005A00),
	PROM_PageAdd91          =  ((CSP_REGISTER_T)0x00005B00),
	PROM_PageAdd92          =  ((CSP_REGISTER_T)0x00005C00),
	PROM_PageAdd93          =  ((CSP_REGISTER_T)0x00005D00),
	PROM_PageAdd94          =  ((CSP_REGISTER_T)0x00005E00),
	PROM_PageAdd95          =  ((CSP_REGISTER_T)0x00005F00),
	PROM_PageAdd96          =  ((CSP_REGISTER_T)0x00006000),
	PROM_PageAdd97          =  ((CSP_REGISTER_T)0x00006100),
	PROM_PageAdd98          =  ((CSP_REGISTER_T)0x00006200),
	PROM_PageAdd99          =  ((CSP_REGISTER_T)0x00006300),
	
	PROM_PageAdd100          =  ((CSP_REGISTER_T)0x00006400),
	PROM_PageAdd101          =  ((CSP_REGISTER_T)0x00006500),
	PROM_PageAdd102          =  ((CSP_REGISTER_T)0x00006600),
	PROM_PageAdd103          =  ((CSP_REGISTER_T)0x00006700),
	PROM_PageAdd104          =  ((CSP_REGISTER_T)0x00006800),
	PROM_PageAdd105          =  ((CSP_REGISTER_T)0x00006900),
	PROM_PageAdd106          =  ((CSP_REGISTER_T)0x00006A00),
	PROM_PageAdd107          =  ((CSP_REGISTER_T)0x00006B00),
	PROM_PageAdd108          =  ((CSP_REGISTER_T)0x00006C00),
	PROM_PageAdd109          =  ((CSP_REGISTER_T)0x00006D00),
	
	PROM_PageAdd110          =  ((CSP_REGISTER_T)0x00006E00),
	PROM_PageAdd111          =  ((CSP_REGISTER_T)0x00006F00),
	PROM_PageAdd112          =  ((CSP_REGISTER_T)0x00007000),
	PROM_PageAdd113          =  ((CSP_REGISTER_T)0x00007100),
	PROM_PageAdd114          =  ((CSP_REGISTER_T)0x00007200),
	PROM_PageAdd115          =  ((CSP_REGISTER_T)0x00007300),
	PROM_PageAdd116          =  ((CSP_REGISTER_T)0x00007400),
	PROM_PageAdd117          =  ((CSP_REGISTER_T)0x00007500),
	PROM_PageAdd118          =  ((CSP_REGISTER_T)0x00007600),
	PROM_PageAdd119          =  ((CSP_REGISTER_T)0x00007700),
	
	PROM_PageAdd120          =  ((CSP_REGISTER_T)0x00007800),
	PROM_PageAdd121          =  ((CSP_REGISTER_T)0x00007900),
	PROM_PageAdd122          =  ((CSP_REGISTER_T)0x00007A00),
	PROM_PageAdd123          =  ((CSP_REGISTER_T)0x00007B00),
	PROM_PageAdd124          =  ((CSP_REGISTER_T)0x00007C00),
	PROM_PageAdd125          =  ((CSP_REGISTER_T)0x00007D00),
	PROM_PageAdd126          =  ((CSP_REGISTER_T)0x00007E00),
	PROM_PageAdd127          =  ((CSP_REGISTER_T)0x00007F00),
	PROM_PageAdd128          =  ((CSP_REGISTER_T)0x00008000),
	PROM_PageAdd129          =  ((CSP_REGISTER_T)0x00008100),
	
	PROM_PageAdd130          =  ((CSP_REGISTER_T)0x00008200),
	PROM_PageAdd131          =  ((CSP_REGISTER_T)0x00008300),
	PROM_PageAdd132          =  ((CSP_REGISTER_T)0x00008400),
	PROM_PageAdd133          =  ((CSP_REGISTER_T)0x00008500),
	PROM_PageAdd134          =  ((CSP_REGISTER_T)0x00008600),
	PROM_PageAdd135          =  ((CSP_REGISTER_T)0x00008700),
	PROM_PageAdd136          =  ((CSP_REGISTER_T)0x00008800),
	PROM_PageAdd137          =  ((CSP_REGISTER_T)0x00008900),
	PROM_PageAdd138          =  ((CSP_REGISTER_T)0x00008A00),
	PROM_PageAdd139          =  ((CSP_REGISTER_T)0x00008B00),
	
	PROM_PageAdd140          =  ((CSP_REGISTER_T)0x00008C00),
	PROM_PageAdd141          =  ((CSP_REGISTER_T)0x00008D00),
	PROM_PageAdd142          =  ((CSP_REGISTER_T)0x00008E00),
	PROM_PageAdd143          =  ((CSP_REGISTER_T)0x00008F00),
	PROM_PageAdd144          =  ((CSP_REGISTER_T)0x00009000),
	PROM_PageAdd145          =  ((CSP_REGISTER_T)0x00009100),
	PROM_PageAdd146          =  ((CSP_REGISTER_T)0x00009200),
	PROM_PageAdd147          =  ((CSP_REGISTER_T)0x00009300),
	PROM_PageAdd148          =  ((CSP_REGISTER_T)0x00009400),
	PROM_PageAdd149          =  ((CSP_REGISTER_T)0x00009500),
	
	PROM_PageAdd150          =  ((CSP_REGISTER_T)0x00009600),
	PROM_PageAdd151          =  ((CSP_REGISTER_T)0x00009700),
	PROM_PageAdd152          =  ((CSP_REGISTER_T)0x00009800),
	PROM_PageAdd153          =  ((CSP_REGISTER_T)0x00009900),
	PROM_PageAdd154          =  ((CSP_REGISTER_T)0x00009A00),
	PROM_PageAdd155          =  ((CSP_REGISTER_T)0x00009B00),
	PROM_PageAdd156          =  ((CSP_REGISTER_T)0x00009C00),
	PROM_PageAdd157          =  ((CSP_REGISTER_T)0x00009D00),
	PROM_PageAdd158          =  ((CSP_REGISTER_T)0x00009E00),
	PROM_PageAdd159          =  ((CSP_REGISTER_T)0x00009F00),
	
	PROM_PageAdd160          =  ((CSP_REGISTER_T)0x0000A000),
	PROM_PageAdd161          =  ((CSP_REGISTER_T)0x0000A100),
	PROM_PageAdd162          =  ((CSP_REGISTER_T)0x0000A200),
	PROM_PageAdd163          =  ((CSP_REGISTER_T)0x0000A300),
	PROM_PageAdd164          =  ((CSP_REGISTER_T)0x0000A400),
	PROM_PageAdd165          =  ((CSP_REGISTER_T)0x0000A500),
	PROM_PageAdd166          =  ((CSP_REGISTER_T)0x0000A600),
	PROM_PageAdd167          =  ((CSP_REGISTER_T)0x0000A700),
	PROM_PageAdd168          =  ((CSP_REGISTER_T)0x0000A800),
	PROM_PageAdd169          =  ((CSP_REGISTER_T)0x0000A900),
	
	PROM_PageAdd170          =  ((CSP_REGISTER_T)0x0000AA00),
	PROM_PageAdd171          =  ((CSP_REGISTER_T)0x0000AB00),
	PROM_PageAdd172          =  ((CSP_REGISTER_T)0x0000AC00),
	PROM_PageAdd173          =  ((CSP_REGISTER_T)0x0000AD00),
	PROM_PageAdd174          =  ((CSP_REGISTER_T)0x0000AE00),
	PROM_PageAdd175          =  ((CSP_REGISTER_T)0x0000AF00),
	PROM_PageAdd176          =  ((CSP_REGISTER_T)0x0000B000),
	PROM_PageAdd177          =  ((CSP_REGISTER_T)0x0000B100),
	PROM_PageAdd178          =  ((CSP_REGISTER_T)0x0000B200),
	PROM_PageAdd179          =  ((CSP_REGISTER_T)0x0000B300),
	
	PROM_PageAdd180          =  ((CSP_REGISTER_T)0x0000B400),
	PROM_PageAdd181          =  ((CSP_REGISTER_T)0x0000B500),
	PROM_PageAdd182          =  ((CSP_REGISTER_T)0x0000B600),
	PROM_PageAdd183          =  ((CSP_REGISTER_T)0x0000B700),
	PROM_PageAdd184          =  ((CSP_REGISTER_T)0x0000B800),
	PROM_PageAdd185          =  ((CSP_REGISTER_T)0x0000B900),
	PROM_PageAdd186          =  ((CSP_REGISTER_T)0x0000BA00),
	PROM_PageAdd187          =  ((CSP_REGISTER_T)0x0000BB00),
	PROM_PageAdd188          =  ((CSP_REGISTER_T)0x0000BC00),
	PROM_PageAdd189          =  ((CSP_REGISTER_T)0x0000BD00),
	
	PROM_PageAdd190          =  ((CSP_REGISTER_T)0x0000BE00),
	PROM_PageAdd191          =  ((CSP_REGISTER_T)0x0000BF00),
	PROM_PageAdd192          =  ((CSP_REGISTER_T)0x0000C000),
	PROM_PageAdd193          =  ((CSP_REGISTER_T)0x0000C100),
	PROM_PageAdd194          =  ((CSP_REGISTER_T)0x0000C200),
	PROM_PageAdd195          =  ((CSP_REGISTER_T)0x0000C300),
	PROM_PageAdd196          =  ((CSP_REGISTER_T)0x0000C400),
	PROM_PageAdd197          =  ((CSP_REGISTER_T)0x0000C500),
	PROM_PageAdd198          =  ((CSP_REGISTER_T)0x0000C600),
	PROM_PageAdd199          =  ((CSP_REGISTER_T)0x0000C700),
	
	PROM_PageAdd200          =  ((CSP_REGISTER_T)0x0000C800),
	PROM_PageAdd201          =  ((CSP_REGISTER_T)0x0000C900),
	PROM_PageAdd202          =  ((CSP_REGISTER_T)0x0000CA00),
	PROM_PageAdd203          =  ((CSP_REGISTER_T)0x0000CB00),
	PROM_PageAdd204          =  ((CSP_REGISTER_T)0x0000CC00),
	PROM_PageAdd205          =  ((CSP_REGISTER_T)0x0000CD00),
	PROM_PageAdd206          =  ((CSP_REGISTER_T)0x0000CE00),
	PROM_PageAdd207          =  ((CSP_REGISTER_T)0x0000CF00),
	PROM_PageAdd208          =  ((CSP_REGISTER_T)0x0000D000),
	PROM_PageAdd209          =  ((CSP_REGISTER_T)0x0000D100),
	
	PROM_PageAdd210          =  ((CSP_REGISTER_T)0x0000D200),
	PROM_PageAdd211          =  ((CSP_REGISTER_T)0x0000D300),
	PROM_PageAdd212          =  ((CSP_REGISTER_T)0x0000D400),
	PROM_PageAdd213          =  ((CSP_REGISTER_T)0x0000D500),
	PROM_PageAdd214          =  ((CSP_REGISTER_T)0x0000D600),
	PROM_PageAdd215          =  ((CSP_REGISTER_T)0x0000D700),
	PROM_PageAdd216          =  ((CSP_REGISTER_T)0x0000D800),
	PROM_PageAdd217          =  ((CSP_REGISTER_T)0x0000D900),
	PROM_PageAdd218          =  ((CSP_REGISTER_T)0x0000DA00),
	PROM_PageAdd219          =  ((CSP_REGISTER_T)0x0000DB00),
	
	PROM_PageAdd220          =  ((CSP_REGISTER_T)0x0000DC00),
	PROM_PageAdd221          =  ((CSP_REGISTER_T)0x0000DD00),
	PROM_PageAdd222          =  ((CSP_REGISTER_T)0x0000DE00),
	PROM_PageAdd223          =  ((CSP_REGISTER_T)0x0000DF00),
	PROM_PageAdd224          =  ((CSP_REGISTER_T)0x0000E000),
	PROM_PageAdd225          =  ((CSP_REGISTER_T)0x0000E100),
	PROM_PageAdd226          =  ((CSP_REGISTER_T)0x0000E200),
	PROM_PageAdd227          =  ((CSP_REGISTER_T)0x0000E300),
	PROM_PageAdd228          =  ((CSP_REGISTER_T)0x0000E400),
	PROM_PageAdd229          =  ((CSP_REGISTER_T)0x0000E500),
	
	PROM_PageAdd230          =  ((CSP_REGISTER_T)0x0000E600),
	PROM_PageAdd231          =  ((CSP_REGISTER_T)0x0000E700),
	PROM_PageAdd232          =  ((CSP_REGISTER_T)0x0000E800),
	PROM_PageAdd233          =  ((CSP_REGISTER_T)0x0000E900),
	PROM_PageAdd234          =  ((CSP_REGISTER_T)0x0000EA00),
	PROM_PageAdd235          =  ((CSP_REGISTER_T)0x0000EB00),
	PROM_PageAdd236          =  ((CSP_REGISTER_T)0x0000EC00),
	PROM_PageAdd237          =  ((CSP_REGISTER_T)0x0000ED00),
	PROM_PageAdd238          =  ((CSP_REGISTER_T)0x0000EE00),
	PROM_PageAdd239          =  ((CSP_REGISTER_T)0x0000EF00),
	
	PROM_PageAdd240          =  ((CSP_REGISTER_T)0x0000F000),
	PROM_PageAdd241          =  ((CSP_REGISTER_T)0x0000F100),
	PROM_PageAdd242          =  ((CSP_REGISTER_T)0x0000F200),
	PROM_PageAdd243          =  ((CSP_REGISTER_T)0x0000F300),
	PROM_PageAdd244          =  ((CSP_REGISTER_T)0x0000F400),
	PROM_PageAdd245          =  ((CSP_REGISTER_T)0x0000F50),
	PROM_PageAdd246          =  ((CSP_REGISTER_T)0x0000F600),
	PROM_PageAdd247          =  ((CSP_REGISTER_T)0x0000F700),
	PROM_PageAdd248          =  ((CSP_REGISTER_T)0x0000F800),
	PROM_PageAdd249          =  ((CSP_REGISTER_T)0x0000F900),
	
	PROM_PageAdd250          =  ((CSP_REGISTER_T)0x0000FA00),
	PROM_PageAdd251          =  ((CSP_REGISTER_T)0x0000FB00),
	PROM_PageAdd252          =  ((CSP_REGISTER_T)0x0000FC00),
	PROM_PageAdd253          =  ((CSP_REGISTER_T)0x0000FD00),
	PROM_PageAdd254          =  ((CSP_REGISTER_T)0x0000FE00),
	PROM_PageAdd255          =  ((CSP_REGISTER_T)0x0000FF00),

	DROM_PageAdd0           =  ((CSP_REGISTER_T)0x10000000),					//DROM 每页64BYTE
	DROM_PageAdd1           =  ((CSP_REGISTER_T)0x10000040),
	DROM_PageAdd2           =  ((CSP_REGISTER_T)0x10000080),
	DROM_PageAdd3           =  ((CSP_REGISTER_T)0x100000C0),
	DROM_PageAdd4           =  ((CSP_REGISTER_T)0x10000100),					
	DROM_PageAdd5           =  ((CSP_REGISTER_T)0x10000140),
	DROM_PageAdd6           =  ((CSP_REGISTER_T)0x10000180),
	DROM_PageAdd7           =  ((CSP_REGISTER_T)0x100001C0),
	DROM_PageAdd8           =  ((CSP_REGISTER_T)0x10000200),
	DROM_PageAdd9           =  ((CSP_REGISTER_T)0x10000240),
	
	DROM_PageAdd10           =  ((CSP_REGISTER_T)0x10000280),	
	DROM_PageAdd11           =  ((CSP_REGISTER_T)0x100002C0),
	DROM_PageAdd12           =  ((CSP_REGISTER_T)0x10000300),
	DROM_PageAdd13           =  ((CSP_REGISTER_T)0x10000340),
	DROM_PageAdd14           =  ((CSP_REGISTER_T)0x10000380),	
	DROM_PageAdd15           =  ((CSP_REGISTER_T)0x100003C0),
	DROM_PageAdd16           =  ((CSP_REGISTER_T)0x10000400),
	DROM_PageAdd17           =  ((CSP_REGISTER_T)0x10000440),
	DROM_PageAdd18           =  ((CSP_REGISTER_T)0x10000480),
	DROM_PageAdd19           =  ((CSP_REGISTER_T)0x100004C0),
	
	DROM_PageAdd20           =  ((CSP_REGISTER_T)0x10000500),	
	DROM_PageAdd21           =  ((CSP_REGISTER_T)0x10000540),
	DROM_PageAdd22           =  ((CSP_REGISTER_T)0x10000580),
	DROM_PageAdd23           =  ((CSP_REGISTER_T)0x100005C0),
	DROM_PageAdd24           =  ((CSP_REGISTER_T)0x10000600),	
	DROM_PageAdd25           =  ((CSP_REGISTER_T)0x10000640),
	DROM_PageAdd26           =  ((CSP_REGISTER_T)0x10000680),
	DROM_PageAdd27           =  ((CSP_REGISTER_T)0x100006C0),
	DROM_PageAdd28           =  ((CSP_REGISTER_T)0x10000700),
	DROM_PageAdd29           =  ((CSP_REGISTER_T)0x10000740),
	
	DROM_PageAdd30           =  ((CSP_REGISTER_T)0x10000780),	
	DROM_PageAdd31           =  ((CSP_REGISTER_T)0x100007C0)
}IFC_ROMSELETED_TypeDef;

/**
  * @brief  IFC INT mode
  */
typedef enum
{
	ERS_END_INT          =  (0x01ul),
	RGM_END_INT          =  ((0x01ul)<<1),
	PEP_END_INT      	 =  ((0x01ul)<<2),
	PROT_ERR_INT         =  ((0x01ul)<<12),
	UDEF_ERR_INT     	 =  ((0x01ul)<<13),
	ADDR_ERR_INT     	 =  ((0x01ul)<<14),
	OVW_ERR_INT     	 =  ((0x01ul)<<15)
}IFC_INT_TypeDef;


extern void ChipErase(void);
extern void PageErase(IFC_ROMSELETED_TypeDef XROM_PageAd);
extern void IFC_interrupt_CMD(FunctionalStatus NewState ,IFC_INT_TypeDef IFC_INT_x);
extern void IFC_Int_Enable(void);
extern void IFC_Int_Disable(void);
extern void Page_ProgramData(unsigned int FlashAdd,unsigned int DataSize,volatile unsigned char *BufArry);
extern void Page_ProgramData_int(unsigned int FlashAdd,unsigned int DataSize,volatile unsigned char *BufArry);
extern void ReadDataArry(unsigned int RdStartAdd,unsigned int DataLength,volatile unsigned char *DataArryPoint);
extern void ReadDataArry_U8(unsigned int RdStartAdd,unsigned int DataLength,volatile unsigned char *DataArryPoint);
extern volatile unsigned int R_INT_FlashAdd;
extern volatile unsigned char f_Drom_write_complete;
extern volatile unsigned char f_Drom_writing;
extern volatile unsigned char ifc_step;
extern void Page_ProgramData_U32(unsigned int FlashAdd,unsigned int DataSize,volatile U32_T *BufArry);
extern void ReadDataArry_U32(unsigned int RdStartAdd,unsigned int DataLength,volatile U32_T *DataArryPoint);
#endif   /**< apt32f102_ifc_H */

/******************* (C) COPYRIGHT 2020 APT Chip *****END OF FILE****/
