Newer
Older
mbed-os / targets / TARGET_TOSHIBA / TARGET_TMPM4KN / Periph_Driver / src / rda_flash512ud32_b.h
@Deepak V. Shreshti Deepak V. Shreshti on 23 Dec 2021 25 KB Added M4KN Platform
/**
 *******************************************************************************
 * @file     rda_flash512ud32_b.h
 * @brief    This file provides rda_flash512ud32 definition.\n
 * @version  V1.0.0
 *
 * DO NOT USE THIS SOFTWARE WITHOUT THE SOFTWARE LICENSE AGREEMENT.
 *
 * Copyright(C) Toshiba Electronic Device Solutions Corporation 2020
 *******************************************************************************
 */
/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __RDA_FLASH512UD32_B_H
#define __RDA_FLASH512UD32_B_H

#ifdef __cplusplus
extern "C" {
#endif                          /* __cplusplus */

/* Includes ------------------------------------------------------------------*/
#include "flash.h"
//#include "driver_com.h"
#include "TMPM4KNA.h"


/**
 * @addtogroup Periph_Driver Peripheral Driver
 * @{
 */

/**
 * @addtogroup RDA_FLASH512UD32 RDA_FLASH512UD32
 * @{
 */

/*------------------------------------------------------------------------------*/
/*  Enumerated Type Definition                                                  */
/*------------------------------------------------------------------------------*/
#if defined ( __CC_ARM   )      /* RealView Compiler */
extern uint32_t Load$$FLASH_CODE_RAM$$Base;
extern uint32_t Image$$FLASH_CODE_RAM$$Base;
extern uint32_t Load$$FLASH_CODE_RAM$$Length;
extern uint32_t Image$$FLASH_DEMO_A$$Base;
extern uint32_t Load$$FLASH_DEMO_B$$Base;
extern uint32_t Image$$RAM_DEMO_A$$Base;
extern uint32_t Image$$RAM_DEMO_B$$Base;

#elif defined ( __ICCARM__ )    /* IAR Compiler */
#pragma section = "FLASH_CODE_RAM"
#pragma section = "FLASH_CODE_ROM"
#pragma section = "FLASH_DEMO_A"
#pragma section = "FLASH_DEMO_B"
#pragma section = "RAM_DEMO_A"
#pragma section = "RAM_DEMO_B"

#endif

/**
 *  @addtogroup RDA_FLASH512UD32_Private_define RDA_FLASH512UD32 Private Define
 *  @{
 */
#if defined ( __CC_ARM   )      /* RealView Compiler */
#define FLASH_API_ROM           (uint32_t *)&Load$$FLASH_CODE_RAM$$Base

#define FLASH_API_RAM           (uint32_t *)&Image$$FLASH_CODE_RAM$$Base
#define SIZE_FLASH_API          (uint32_t)&Load$$FLASH_CODE_RAM$$Length

#define DEMO_A_FLASH            (uint32_t *)&Image$$FLASH_DEMO_A$$Base
#define DEMO_B_FLASH            (uint32_t *)&Load$$FLASH_DEMO_B$$Base

#define DEMO_A_RAM              (uint32_t *)&Image$$RAM_DEMO_A$$Base
#define DEMO_B_RAM              (uint32_t *)&Image$$RAM_DEMO_B$$Base


#elif defined ( __ICCARM__ )    /* IAR Compiler */
#define FLASH_API_ROM           ((uint32_t *)__section_begin("FLASH_CODE_ROM"))

#define FLASH_API_RAM           ((uint32_t *)__section_begin("FLASH_CODE_RAM"))
#define SIZE_FLASH_API          ((uint32_t)__section_size("FLASH_CODE_ROM"))

#define DEMO_A_FLASH            ((uint32_t *)__section_begin("FLASH_DEMO_A"))
#define DEMO_B_FLASH            ((uint32_t *)__section_begin("FLASH_DEMO_B"))

#define DEMO_A_RAM              ((uint32_t *)__section_begin("RAM_DEMO_A"))
#define DEMO_B_RAM              ((uint32_t *)__section_begin("RAM_DEMO_B"))

#endif

/* code start address */
#define DEMO_START_ADDR         ((uint32_t)DEMO_A_FLASH)

#define USERINFOSIZE      (128)        /*<! User Information data size */

/**
 *  @}
 */ /* End of group RDA_FLASH512UD32_Private_define */


/**
 * @addtogroup RDA_FLASH512UD32_enum
 * @{
 */

/*----------------------------------*/
/**
 *  @enum   fc_sr0_t
 *  @brief  Enumerated type definition of the FCSR0 register.
 */
/*----------------------------------*/
typedef enum {
    FC_SR0_RDYBSY           = (0x00000001UL)      /*!< 0:Busy, 1:Ready all flash     */
} fc_sr0_t;

/*----------------------------------*/
/**
 *  @enum   fc_erase_kind_t
 *  @brief  FC Erase Flash Kind structure definenition.
*/
/*----------------------------------*/
typedef enum {
    FC_ERASE_KIND_PAGE      = (0x00000040UL),    /*!< Page Erase                     */
    FC_ERASE_KIND_BLOCK     = (0x00000030UL),    /*!< Block Erase                    */
    FC_ERASE_KIND_AREA      = (0x00000020UL)     /*!< Area Erase                     */
} fc_erase_kind_t;

typedef enum {
    FC_CODE_FLASH_PAGE0 = 0,    /*!< (0x5E000000UL), CODE FLASH Page0   */
    FC_CODE_FLASH_PAGE1,        /*!< (0x5E001000UL), CODE FLASH Page1   */
    FC_CODE_FLASH_PAGE2,        /*!< (0x5E002000UL), CODE FLASH Page2   */
    FC_CODE_FLASH_PAGE3,        /*!< (0x5E003000UL), CODE FLASH Page3   */
    FC_CODE_FLASH_PAGE4,        /*!< (0x5E004000UL), CODE FLASH Page4   */
    FC_CODE_FLASH_PAGE5,        /*!< (0x5E005000UL), CODE FLASH Page5   */
    FC_CODE_FLASH_PAGE6,        /*!< (0x5E006000UL), CODE FLASH Page6   */
    FC_CODE_FLASH_PAGE7,        /*!< (0x5E007000UL), CODE FLASH Page7   */
    FC_CODE_FLASH_PAGE8,        /*!< (0x5E008000UL), CODE FLASH Page8   */
    FC_CODE_FLASH_PAGE9,        /*!< (0x5E009000UL), CODE FLASH Page9   */
    FC_CODE_FLASH_PAGE10,       /*!< (0x5E00A000UL), CODE FLASH Page10  */
    FC_CODE_FLASH_PAGE11,       /*!< (0x5E00B000UL), CODE FLASH Page11  */
    FC_CODE_FLASH_PAGE12,       /*!< (0x5E00C000UL), CODE FLASH Page12  */
    FC_CODE_FLASH_PAGE13,       /*!< (0x5E00D000UL), CODE FLASH Page13  */
    FC_CODE_FLASH_PAGE14,       /*!< (0x5E00E000UL), CODE FLASH Page14  */
    FC_CODE_FLASH_PAGE15,       /*!< (0x5E00F000UL), CODE FLASH Page15  */
    FC_CODE_FLASH_PAGE16,       /*!< (0x5E010000UL), CODE FLASH Page16  */
    FC_CODE_FLASH_PAGE17,       /*!< (0x5E011000UL), CODE FLASH Page17  */
    FC_CODE_FLASH_PAGE18,       /*!< (0x5E012000UL), CODE FLASH Page18  */
    FC_CODE_FLASH_PAGE19,       /*!< (0x5E013000UL), CODE FLASH Page19  */
    FC_CODE_FLASH_PAGE20,       /*!< (0x5E014000UL), CODE FLASH Page20  */
    FC_CODE_FLASH_PAGE21,       /*!< (0x5E015000UL), CODE FLASH Page21  */
    FC_CODE_FLASH_PAGE22,       /*!< (0x5E016000UL), CODE FLASH Page22  */
    FC_CODE_FLASH_PAGE23,       /*!< (0x5E017000UL), CODE FLASH Page23  */
    FC_CODE_FLASH_PAGE24,       /*!< (0x5E018000UL), CODE FLASH Page24  */
    FC_CODE_FLASH_PAGE25,       /*!< (0x5E019000UL), CODE FLASH Page25  */
    FC_CODE_FLASH_PAGE26,       /*!< (0x5E01A000UL), CODE FLASH Page26  */
    FC_CODE_FLASH_PAGE27,       /*!< (0x5E01B000UL), CODE FLASH Page27  */
    FC_CODE_FLASH_PAGE28,       /*!< (0x5E01C000UL), CODE FLASH Page28  */
    FC_CODE_FLASH_PAGE29,       /*!< (0x5E01D000UL), CODE FLASH Page29  */
    FC_CODE_FLASH_PAGE30,       /*!< (0x5E01E000UL), CODE FLASH Page30  */
    FC_CODE_FLASH_PAGE31,       /*!< (0x5E01F000UL), CODE FLASH Page31  */
    FC_CODE_FLASH_PAGE32,       /*!< (0x5E020000UL), CODE FLASH Page32  */
    FC_CODE_FLASH_PAGE33,       /*!< (0x5E021000UL), CODE FLASH Page33  */
    FC_CODE_FLASH_PAGE34,       /*!< (0x5E022000UL), CODE FLASH Page34  */
    FC_CODE_FLASH_PAGE35,       /*!< (0x5E023000UL), CODE FLASH Page35  */
    FC_CODE_FLASH_PAGE36,       /*!< (0x5E024000UL), CODE FLASH Page36  */
    FC_CODE_FLASH_PAGE37,       /*!< (0x5E025000UL), CODE FLASH Page37  */
    FC_CODE_FLASH_PAGE38,       /*!< (0x5E026000UL), CODE FLASH Page38  */
    FC_CODE_FLASH_PAGE39,       /*!< (0x5E027000UL), CODE FLASH Page39  */
    FC_CODE_FLASH_PAGE40,       /*!< (0x5E028000UL), CODE FLASH Page40  */
    FC_CODE_FLASH_PAGE41,       /*!< (0x5E029000UL), CODE FLASH Page41  */
    FC_CODE_FLASH_PAGE42,       /*!< (0x5E02A000UL), CODE FLASH Page42  */
    FC_CODE_FLASH_PAGE43,       /*!< (0x5E02B000UL), CODE FLASH Page43  */
    FC_CODE_FLASH_PAGE44,       /*!< (0x5E02C000UL), CODE FLASH Page44  */
    FC_CODE_FLASH_PAGE45,       /*!< (0x5E02D000UL), CODE FLASH Page45  */
    FC_CODE_FLASH_PAGE46,       /*!< (0x5E02E000UL), CODE FLASH Page46  */
    FC_CODE_FLASH_PAGE47,       /*!< (0x5E02F000UL), CODE FLASH Page47  */
    FC_CODE_FLASH_PAGE48,       /*!< (0x5E030000UL), CODE FLASH Page48  */
    FC_CODE_FLASH_PAGE49,       /*!< (0x5E031000UL), CODE FLASH Page49  */
    FC_CODE_FLASH_PAGE50,       /*!< (0x5E032000UL), CODE FLASH Page50  */
    FC_CODE_FLASH_PAGE51,       /*!< (0x5E033000UL), CODE FLASH Page51  */
    FC_CODE_FLASH_PAGE52,       /*!< (0x5E034000UL), CODE FLASH Page52  */
    FC_CODE_FLASH_PAGE53,       /*!< (0x5E035000UL), CODE FLASH Page53  */
    FC_CODE_FLASH_PAGE54,       /*!< (0x5E036000UL), CODE FLASH Page54  */
    FC_CODE_FLASH_PAGE55,       /*!< (0x5E037000UL), CODE FLASH Page55  */
    FC_CODE_FLASH_PAGE56,       /*!< (0x5E038000UL), CODE FLASH Page56  */
    FC_CODE_FLASH_PAGE57,       /*!< (0x5E039000UL), CODE FLASH Page57  */
    FC_CODE_FLASH_PAGE58,       /*!< (0x5E03A000UL), CODE FLASH Page58  */
    FC_CODE_FLASH_PAGE59,       /*!< (0x5E03B000UL), CODE FLASH Page59  */
    FC_CODE_FLASH_PAGE60,       /*!< (0x5E03C000UL), CODE FLASH Page60  */
    FC_CODE_FLASH_PAGE61,       /*!< (0x5E03D000UL), CODE FLASH Page61  */
    FC_CODE_FLASH_PAGE62,       /*!< (0x5E03E000UL), CODE FLASH Page62  */
    FC_CODE_FLASH_PAGE63,       /*!< (0x5E03F000UL), CODE FLASH Page63  */
    FC_CODE_FLASH_PAGE64,       /*!< (0x5E040000UL), CODE FLASH Page64  */
    FC_CODE_FLASH_PAGE65,       /*!< (0x5E041000UL), CODE FLASH Page65  */
    FC_CODE_FLASH_PAGE66,       /*!< (0x5E042000UL), CODE FLASH Page66  */
    FC_CODE_FLASH_PAGE67,       /*!< (0x5E043000UL), CODE FLASH Page67  */
    FC_CODE_FLASH_PAGE68,       /*!< (0x5E044000UL), CODE FLASH Page68  */
    FC_CODE_FLASH_PAGE69,       /*!< (0x5E045000UL), CODE FLASH Page69  */
    FC_CODE_FLASH_PAGE70,       /*!< (0x5E046000UL), CODE FLASH Page70  */
    FC_CODE_FLASH_PAGE71,       /*!< (0x5E047000UL), CODE FLASH Page71  */
    FC_CODE_FLASH_PAGE72,       /*!< (0x5E048000UL), CODE FLASH Page72  */
    FC_CODE_FLASH_PAGE73,       /*!< (0x5E049000UL), CODE FLASH Page73  */
    FC_CODE_FLASH_PAGE74,       /*!< (0x5E04A000UL), CODE FLASH Page74  */
    FC_CODE_FLASH_PAGE75,       /*!< (0x5E04B000UL), CODE FLASH Page75  */
    FC_CODE_FLASH_PAGE76,       /*!< (0x5E04C000UL), CODE FLASH Page76  */
    FC_CODE_FLASH_PAGE77,       /*!< (0x5E04D000UL), CODE FLASH Page77  */
    FC_CODE_FLASH_PAGE78,       /*!< (0x5E04E000UL), CODE FLASH Page78  */
    FC_CODE_FLASH_PAGE79,       /*!< (0x5E04F000UL), CODE FLASH Page79  */
    FC_CODE_FLASH_PAGE80,       /*!< (0x5E050000UL), CODE FLASH Page80  */
    FC_CODE_FLASH_PAGE81,       /*!< (0x5E051000UL), CODE FLASH Page81  */
    FC_CODE_FLASH_PAGE82,       /*!< (0x5E052000UL), CODE FLASH Page82  */
    FC_CODE_FLASH_PAGE83,       /*!< (0x5E053000UL), CODE FLASH Page83  */
    FC_CODE_FLASH_PAGE84,       /*!< (0x5E054000UL), CODE FLASH Page84  */
    FC_CODE_FLASH_PAGE85,       /*!< (0x5E055000UL), CODE FLASH Page85  */
    FC_CODE_FLASH_PAGE86,       /*!< (0x5E056000UL), CODE FLASH Page86  */
    FC_CODE_FLASH_PAGE87,       /*!< (0x5E057000UL), CODE FLASH Page87  */
    FC_CODE_FLASH_PAGE88,       /*!< (0x5E058000UL), CODE FLASH Page88  */
    FC_CODE_FLASH_PAGE89,       /*!< (0x5E059000UL), CODE FLASH Page89  */
    FC_CODE_FLASH_PAGE90,       /*!< (0x5E05A000UL), CODE FLASH Page90  */
    FC_CODE_FLASH_PAGE91,       /*!< (0x5E05B000UL), CODE FLASH Page91  */
    FC_CODE_FLASH_PAGE92,       /*!< (0x5E05C000UL), CODE FLASH Page92  */
    FC_CODE_FLASH_PAGE93,       /*!< (0x5E05D000UL), CODE FLASH Page93  */
    FC_CODE_FLASH_PAGE94,       /*!< (0x5E05E000UL), CODE FLASH Page94  */
    FC_CODE_FLASH_PAGE95,       /*!< (0x5E05F000UL), CODE FLASH Page95  */
    FC_CODE_FLASH_PAGE96,       /*!< (0x5E060000UL), CODE FLASH Page96  */
    FC_CODE_FLASH_PAGE97,       /*!< (0x5E061000UL), CODE FLASH Page97  */
    FC_CODE_FLASH_PAGE98,       /*!< (0x5E062000UL), CODE FLASH Page98  */
    FC_CODE_FLASH_PAGE99,       /*!< (0x5E063000UL), CODE FLASH Page99  */
    FC_CODE_FLASH_PAGE100,      /*!< (0x5E064000UL), CODE FLASH Page100 */
    FC_CODE_FLASH_PAGE101,      /*!< (0x5E065000UL), CODE FLASH Page101 */
    FC_CODE_FLASH_PAGE102,      /*!< (0x5E066000UL), CODE FLASH Page102 */
    FC_CODE_FLASH_PAGE103,      /*!< (0x5E067000UL), CODE FLASH Page103 */
    FC_CODE_FLASH_PAGE104,      /*!< (0x5E068000UL), CODE FLASH Page104 */
    FC_CODE_FLASH_PAGE105,      /*!< (0x5E069000UL), CODE FLASH Page105 */
    FC_CODE_FLASH_PAGE106,      /*!< (0x5E06A000UL), CODE FLASH Page106 */
    FC_CODE_FLASH_PAGE107,      /*!< (0x5E06B000UL), CODE FLASH Page107 */
    FC_CODE_FLASH_PAGE108,      /*!< (0x5E06C000UL), CODE FLASH Page108 */
    FC_CODE_FLASH_PAGE109,      /*!< (0x5E06D000UL), CODE FLASH Page109 */
    FC_CODE_FLASH_PAGE110,      /*!< (0x5E06E000UL), CODE FLASH Page110 */
    FC_CODE_FLASH_PAGE111,      /*!< (0x5E06F000UL), CODE FLASH Page111 */
    FC_CODE_FLASH_PAGE112,      /*!< (0x5E070000UL), CODE FLASH Page112 */
    FC_CODE_FLASH_PAGE113,      /*!< (0x5E071000UL), CODE FLASH Page113 */
    FC_CODE_FLASH_PAGE114,      /*!< (0x5E072000UL), CODE FLASH Page114 */
    FC_CODE_FLASH_PAGE115,      /*!< (0x5E073000UL), CODE FLASH Page115 */
    FC_CODE_FLASH_PAGE116,      /*!< (0x5E074000UL), CODE FLASH Page116 */
    FC_CODE_FLASH_PAGE117,      /*!< (0x5E075000UL), CODE FLASH Page117 */
    FC_CODE_FLASH_PAGE118,      /*!< (0x5E076000UL), CODE FLASH Page118 */
    FC_CODE_FLASH_PAGE119,      /*!< (0x5E077000UL), CODE FLASH Page119 */
    FC_CODE_FLASH_PAGE120,      /*!< (0x5E078000UL), CODE FLASH Page120 */
    FC_CODE_FLASH_PAGE121,      /*!< (0x5E079000UL), CODE FLASH Page121 */
    FC_CODE_FLASH_PAGE122,      /*!< (0x5E07A000UL), CODE FLASH Page122 */
    FC_CODE_FLASH_PAGE123,      /*!< (0x5E07B000UL), CODE FLASH Page123 */
    FC_CODE_FLASH_PAGE124,      /*!< (0x5E07C000UL), CODE FLASH Page124 */
    FC_CODE_FLASH_PAGE125,      /*!< (0x5E07D000UL), CODE FLASH Page125 */
    FC_CODE_FLASH_PAGE126,      /*!< (0x5E07E000UL), CODE FLASH Page126 */
    FC_CODE_FLASH_PAGE127       /*!< (0x5E07F000UL), CODE FLASH Page127 */
} fc_code_flash_page_number_t;

typedef enum {
    FC_CODE_FLASH_BLOCK0  = 0,  /*!< (0x5E000000UL), CODE FLASH Block0  */
    FC_CODE_FLASH_BLOCK1,       /*!< (0x5E008000UL), CODE FLASH Block1  */
    FC_CODE_FLASH_BLOCK2,       /*!< (0x5E010000UL), CODE FLASH Block2  */
    FC_CODE_FLASH_BLOCK3,       /*!< (0x5E018000UL), CODE FLASH Block3  */
    FC_CODE_FLASH_BLOCK4,       /*!< (0x5E020000UL), CODE FLASH Block4  */
    FC_CODE_FLASH_BLOCK5,       /*!< (0x5E028000UL), CODE FLASH Block5  */
    FC_CODE_FLASH_BLOCK6,       /*!< (0x5E030000UL), CODE FLASH Block6  */
    FC_CODE_FLASH_BLOCK7,       /*!< (0x5E038000UL), CODE FLASH Block7  */
    FC_CODE_FLASH_BLOCK8,       /*!< (0x5E040000UL), CODE FLASH Block8  */
    FC_CODE_FLASH_BLOCK9,       /*!< (0x5E048000UL), CODE FLASH Block9  */
    FC_CODE_FLASH_BLOCK10,      /*!< (0x5E050000UL), CODE FLASH Block10 */
    FC_CODE_FLASH_BLOCK11,      /*!< (0x5E058000UL), CODE FLASH Block11 */
    FC_CODE_FLASH_BLOCK12,      /*!< (0x5E060000UL), CODE FLASH Block12 */
    FC_CODE_FLASH_BLOCK13,      /*!< (0x5E068000UL), CODE FLASH Block13 */
    FC_CODE_FLASH_BLOCK14,      /*!< (0x5E070000UL), CODE FLASH Block14 */
    FC_CODE_FLASH_BLOCK15       /*!< (0x5E078000UL), CODE FLASH Block15 */
} fc_code_flash_block_number_t;

typedef enum {
    FC_DATA_FLASH_PAGE0  = 0,   /*!< (0x30000000UL), DATA FLASH Page0   */
    FC_DATA_FLASH_PAGE1,        /*!< (0x30000100UL), DATA FLASH Page1   */
    FC_DATA_FLASH_PAGE2,        /*!< (0x30000200UL), DATA FLASH Page2   */
    FC_DATA_FLASH_PAGE3,        /*!< (0x30000300UL), DATA FLASH Page3   */
    FC_DATA_FLASH_PAGE4,        /*!< (0x30000400UL), DATA FLASH Page4   */
    FC_DATA_FLASH_PAGE5,        /*!< (0x30000500UL), DATA FLASH Page5   */
    FC_DATA_FLASH_PAGE6,        /*!< (0x30000600UL), DATA FLASH Page6   */
    FC_DATA_FLASH_PAGE7,        /*!< (0x30000700UL), DATA FLASH Page7   */
    FC_DATA_FLASH_PAGE8,        /*!< (0x30000800UL), DATA FLASH Page8   */
    FC_DATA_FLASH_PAGE9,        /*!< (0x30000900UL), DATA FLASH Page9   */
    FC_DATA_FLASH_PAGE10,       /*!< (0x30000A00UL), DATA FLASH Page10  */
    FC_DATA_FLASH_PAGE11,       /*!< (0x30000B00UL), DATA FLASH Page11  */
    FC_DATA_FLASH_PAGE12,       /*!< (0x30000C00UL), DATA FLASH Page12  */
    FC_DATA_FLASH_PAGE13,       /*!< (0x30000D00UL), DATA FLASH Page13  */
    FC_DATA_FLASH_PAGE14,       /*!< (0x30000E00UL), DATA FLASH Page14  */
    FC_DATA_FLASH_PAGE15,       /*!< (0x30000F00UL), DATA FLASH Page15  */
    FC_DATA_FLASH_PAGE16,       /*!< (0x30001000UL), DATA FLASH Page16  */
    FC_DATA_FLASH_PAGE17,       /*!< (0x30001100UL), DATA FLASH Page17  */
    FC_DATA_FLASH_PAGE18,       /*!< (0x30001200UL), DATA FLASH Page18  */
    FC_DATA_FLASH_PAGE19,       /*!< (0x30001300UL), DATA FLASH Page19  */
    FC_DATA_FLASH_PAGE20,       /*!< (0x30001400UL), DATA FLASH Page20  */
    FC_DATA_FLASH_PAGE21,       /*!< (0x30001500UL), DATA FLASH Page21  */
    FC_DATA_FLASH_PAGE22,       /*!< (0x30001600UL), DATA FLASH Page22  */
    FC_DATA_FLASH_PAGE23,       /*!< (0x30001700UL), DATA FLASH Page23  */
    FC_DATA_FLASH_PAGE24,       /*!< (0x30001800UL), DATA FLASH Page24  */
    FC_DATA_FLASH_PAGE25,       /*!< (0x30001900UL), DATA FLASH Page25  */
    FC_DATA_FLASH_PAGE26,       /*!< (0x30001A00UL), DATA FLASH Page26  */
    FC_DATA_FLASH_PAGE27,       /*!< (0x30001B00UL), DATA FLASH Page27  */
    FC_DATA_FLASH_PAGE28,       /*!< (0x30001C00UL), DATA FLASH Page28  */
    FC_DATA_FLASH_PAGE29,       /*!< (0x30001D00UL), DATA FLASH Page29  */
    FC_DATA_FLASH_PAGE30,       /*!< (0x30001E00UL), DATA FLASH Page30  */
    FC_DATA_FLASH_PAGE31,       /*!< (0x30001F00UL), DATA FLASH Page31  */
    FC_DATA_FLASH_PAGE32        /*!< (0x30002000UL), DATA FLASH Page32  */
} fc_data_flash_page_number_t;

typedef enum {
    FC_CODE_FLASH_AREA0  = 0    /*!< (0x5E000000UL), CODE FLASH AREA0   */
} fc_code_flash_area_number_t;


typedef enum {
    FC_DATA_FLASH_BLOCK0  = 0,  /*!< (0x30000000UL), DATA FLASH Block0  */
    FC_DATA_FLASH_BLOCK1,       /*!< (0x30001000UL), DATA FLASH Block1  */
    FC_DATA_FLASH_BLOCK2,       /*!< (0x30002000UL), DATA FLASH Block2  */
    FC_DATA_FLASH_BLOCK3,       /*!< (0x30003000UL), DATA FLASH Block3  */
    FC_DATA_FLASH_BLOCK4,       /*!< (0x30004000UL), DATA FLASH Block4  */
    FC_DATA_FLASH_BLOCK5,       /*!< (0x30005000UL), DATA FLASH Block5  */
    FC_DATA_FLASH_BLOCK6,       /*!< (0x30006000UL), DATA FLASH Block6  */
    FC_DATA_FLASH_BLOCK7        /*!< (0x30007000UL), DATA FLASH Block7  */
} fc_data_flash_block_number_t;

typedef enum {
    FC_DATA_FLASH_AREA4  = 0    /*!< (0x30000000UL), DATA FLASH AREA4   */
} fc_data_flash_area_number_t;

typedef enum {
    FC_PROTECT_KIND_PAGE  = (0x00000000UL),    /*!< Page Protect        */
    FC_PROTECT_KIND_BLOCK = (0x00000001UL),    /*!< Block Protect       */
} fc_protect_kind_t;

/**
 *  @}
 */ /* End of group RDA_FLASH512UD32_enum */

/*------------------------------------------------------------------------------*/
/*  Macro Definition                                                            */
/*------------------------------------------------------------------------------*/
/**
 *  @addtogroup RDA_FLASH512UD32_Exported_define RDA_FLASH512UD32 Exported Define
 *  @{
 */
#define FC_CODE_FLASH_ADDRESS_TOP   (0x5E000000UL)              /*!< CODE FLASH Address Top */
#define FC_CODE_DATA_ADDRESS_TOP    (0x30000000UL)              /*!< CODE FLASH Address Top */
#define FC_PAGE_SIZE                (0x1000)                    /*!< The number of bytes in a page. */
#define FC_BLOCK_SIZE               (0x8000)                    /*!< The number of bytes in a block. */
#define FC_AREA_SIZE                (0x320000)                  /*!< The number of bytes in a area. */
#define FC_DATA_FLASH_ADDRESS_TOP   (0x30000000UL)              /*!< DATA FLASH Address Top */
#define FC_DATA_PAGE_SIZE           (0x100)                     /*!< The number of bytes in a page. */
#define FC_DATA_BLOCK_SIZE          (0x1000)                    /*!< The number of bytes in a block. */
#define FC_DATA_AREA_SIZE           (0x8000)                    /*!< The number of bytes in a area. */
#define FC_DATA_FLASH_WRITE_SIZE    (sizeof(uint32_t)*4)        /*!< CDATA FLASH WRITE SIZE */
#define FC_CODE_FLASH_WRITE_SIZE    (sizeof(uint32_t)*4)        /*!< CODE FLASH WRITE SIZE */
#define FC_CODE_FLASH_PG            (0x00000000UL)              /*!< CODE FLASH PG */
#define FC_CODE_FLASH_BLK           (0x00000001UL)              /*!< CODE FLASH BLK */
#define FC_DATA_FLASH               (0x00000002UL)              /*!< DATA FLASH */

#define FC_PROTECT_PM0              (0x00000001UL)              /*!< CODE FLASH PM0   protect */
#define FC_PROTECT_PM1              (0x00000002UL)              /*!< CODE FLASH PM1   protect */
#define FC_PROTECT_PM2              (0x00000004UL)              /*!< CODE FLASH PM2   protect */
#define FC_PROTECT_PM3              (0x00000008UL)              /*!< CODE FLASH PM3   protect */
#define FC_PROTECT_PM4              (0x00000010UL)              /*!< CODE FLASH PM4   protect */
#define FC_PROTECT_PM5              (0x00000020UL)              /*!< CODE FLASH PM5   protect */
#define FC_PROTECT_PM6              (0x00000040UL)              /*!< CODE FLASH PM6   protect */
#define FC_PROTECT_PM7              (0x00000080UL)              /*!< CODE FLASH PM7   protect */
#define FC_PROTECT_MSK1             (0x00000002UL)              /*!< CODE FLASH MSK1  protect */
#define FC_PROTECT_MSK2             (0x00000004UL)              /*!< CODE FLASH MSK2  protect */
#define FC_PROTECT_MSK3             (0x00000008UL)              /*!< CODE FLASH MSK3  protect */
#define FC_PROTECT_MSK4             (0x00000010UL)              /*!< CODE FLASH MSK4  protect */
#define FC_PROTECT_MSK5             (0x00000020UL)              /*!< CODE FLASH MSK5  protect */
#define FC_PROTECT_MSK6             (0x00000040UL)              /*!< CODE FLASH MSK6  protect */
#define FC_PROTECT_MSK7             (0x00000080UL)              /*!< CODE FLASH MSK7  protect */
#define FC_PROTECT_MSK8             (0x00000100UL)              /*!< CODE FLASH MSK8  protect */
#define FC_PROTECT_MSK9             (0x00000200UL)              /*!< CODE FLASH MSK9  protect */
#define FC_PROTECT_MSK10            (0x00000400UL)              /*!< CODE FLASH MSK10 protect */
#define FC_PROTECT_MSK11            (0x00000800UL)              /*!< CODE FLASH MSK11 protect */
#define FC_PROTECT_MSK12            (0x00001000UL)              /*!< CODE FLASH MSK12 protect */
#define FC_PROTECT_MSK13            (0x00002000UL)              /*!< CODE FLASH MSK13 protect */
#define FC_PROTECT_MSK14            (0x00004000UL)              /*!< CODE FLASH MSK14 protect */
#define FC_PROTECT_MSK15            (0x00008000UL)              /*!< CODE FLASH MSK15 protect */
#define FC_PROTECT_DMSK0            (0x00000001UL)              /*!< DATA FLASH DMSK0 protect */
#define FC_PROTECT_DMSK1            (0x00000002UL)              /*!< DATA FLASH DMSK1 protect */
#define FC_PROTECT_DMSK2            (0x00000004UL)              /*!< DATA FLASH DMSK2 protect */
#define FC_PROTECT_DMSK3            (0x00000008UL)              /*!< DATA FLASH DMSK3 protect */
#define FC_PROTECT_DMSK4            (0x00000010UL)              /*!< DATA FLASH DMSK4 protect */
#define FC_PROTECT_DMSK5            (0x00000020UL)              /*!< DATA FLASH DMSK5 protect */
#define FC_PROTECT_DMSK6            (0x00000040UL)              /*!< DATA FLASH DMSK6 protect */
#define FC_PROTECT_DMSK7            (0x00000080UL)              /*!< DATA FLASH DMSK7 protect */

/**
 *  @addtogroup  FCSR0  FCSR0 Register
 *  @brief     Flash Status Register 0.
 *  @details   Detail.
 *  | Bit   | Bit Symbol |
 *  | :---  | :---       |
 *  | 31:11 | -          |
 *  | 10    | RDYBSY2    |
 *  | 9     | -          |
 *  | 8     | RDYBSY0    |
 *  | 7:1   | -          |
 *  | 0     | RDYBSY     |
 *  @{
 */
/* RDYBSY */
#define FCSR0_RDYBSY_MASK           ((uint32_t)0x00000001)    /*!< RDYBSY :Mask            */
#define FCSR0_RDYBSY_R_RUNNING      ((uint32_t)0x00000000)    /*!< RDYBSY :[R] :Running    */
#define FCSR0_RDYBSY_R_DONE         ((uint32_t)0x00000001)    /*!< RDYBSY :[R] :Done       */
/**
 *  @}
 */ /* End of group FCSR0 */


/**
 *  @}
 */ /* End of group RDA_FLASH512UD32_Exported_define */

/*------------------------------------------------------------------------------*/
/*  Structure Definition                                                        */
/*------------------------------------------------------------------------------*/
/**
 *  @addtogroup RDA_FLASH512UD32_Private_typedef RDA_FLASH512UD32 Private Typedef
 *  @{
 */

/**
 *  @}
 */ /* End of group RDA_FLASH512UD32_Private_typedef */


/*------------------------------------------------------------------------------*/
/*  Inline Functions                                                             */
/*------------------------------------------------------------------------------*/
/**
 * @addtogroup RDA_FLASH512UD32_Exported_function RDA_FLASH512UD32 Exported Function
 * @{
 */

void     fc_read_clock_set(void);
void     fc_fixed_clock_set(uint32_t);
uint32_t Get_param_FC_RDYBSY(void);

void     copy_fc_func(void);
void     copy_user_program(uint32_t size);
void     copy_user_data(char *data_a, char *data_b, uint32_t size);

uint32_t rewrite_user_program(uint32_t size);

void     fc_read_user_information_area(uint32_t *src_address, uint32_t *dst_address, uint32_t size);

uint32_t fc_write_page_data_flash(uint32_t page, uint32_t size);
uint32_t fc_write_code_flash(uint32_t *src_address, uint32_t *dst_address, uint32_t size);
uint32_t fc_write_user_information_area(uint32_t *src_address, uint32_t size, uint32_t User_Information_Area);


uint32_t fc_erase_area_data_flash(fc_data_flash_area_number_t area);
uint32_t fc_erase_page_data_flash(fc_data_flash_page_number_t first_page, uint8_t num_of_pages);
uint32_t fc_erase_page_code_flash(fc_code_flash_page_number_t first_page, uint8_t num_of_pages);
uint32_t fc_erase_block_data_flash(fc_data_flash_block_number_t first_block, uint8_t num_of_block);
uint32_t fc_erase_block_code_flash(fc_code_flash_block_number_t first_block, uint8_t num_of_block);
uint32_t fc_erase_user_information_area(uint32_t User_Information_Area);

uint32_t fc_protect_page_code_flash(fc_code_flash_page_number_t page);
uint32_t fc_protect_block_code_flash(fc_code_flash_block_number_t block);
uint32_t fc_protect_erase_code_flash(void);


/**
 *  @}
 */ /* End of group RDA_FLASH512UD32_Exported_function */


/**
 *  @}
 */ /* End of RDA_FLASH512UD32 */

/**
 *  @}
 */ /* End of group Periph_driver */

#ifdef __cplusplus
}
#endif  /* __cplusplus */
#endif  /* __RDA_FLASH512UD32_B_H */