#ifndef TYW_SFMA0_H
#define TYW_SFMA0_H
#include "r_typedefs.h"
/*------------------------------------------------------------------------------------------------------*/
/* Constant definition */
/*------------------------------------------------------------------------------------------------------*/
/* return value */
#define U1G_SFMA0_RET_OK (( uint8_t )0) /* OK */
#define U1G_SFMA0_RET_NG_PARAM (( uint8_t )1) /* Parameter Invalid */
#define U1G_SFMA0_RET_NG_FAIL (( uint8_t )2) /* Fail */
/* value number */
#define U1G_SFMA0_NUM_OP_DATA (( uint8_t )4) /* Number of Option Data */
#define U1G_SFMA0_NUM_DATA (( uint8_t )2) /* Number of Transfer Data */
/* value for "Address Enable" */
#define U1G_SFMA0_EN_ADDR_DISABLE (( uint8_t )0x00) /* Output disabled */
#define U1G_SFMA0_EN_ADDR_8BIT (( uint8_t )0x04) /* ADR[23:16] */
#define U1G_SFMA0_EN_ADDR_16BIT (( uint8_t )0x06) /* ADR[23:8] */
#define U1G_SFMA0_EN_ADDR_24BIT (( uint8_t )0x07) /* ADR[23:0] */
#define U1G_SFMA0_EN_ADDR_32BIT (( uint8_t )0x0F) /* ADR[31:0] */
/* value for "Option Data Enable" */
#define U1G_SFMA0_EN_OP_DATA_DISABLE (( uint8_t )0x00) /* Output disabled */
#define U1G_SFMA0_EN_OP_DATA_OPD3 (( uint8_t )0x08) /* OPD3 */
#define U1G_SFMA0_EN_OP_DATA_OPD3_OPD2 (( uint8_t )0x0C) /* OPD3, OPD2 */
#define U1G_SFMA0_EN_OP_DATA_OPD3_OPD1 (( uint8_t )0x0E) /* OPD3, OPD2, OPD1 */
#define U1G_SFMA0_EN_OP_DATA_OPD3_OPD0 (( uint8_t )0x0F) /* OPD3, OPD2, OPD1, OPD0 */
/* value for "Transfer Data Enable" */
#define U1G_SFMA0_EN_DATA_DISABLE (( uint8_t )0x00) /* Not transferred */
#define U1G_SFMA0_EN_DATA_16BIT (( uint8_t )0x08) /* 16 bits transferred */
#define U1G_SFMA0_EN_DATA_32BIT (( uint8_t )0x0C) /* 32 bits transferred */
#define U1G_SFMA0_EN_DATA_64BIT (( uint8_t )0x0F) /* 64 bits transferred */
/* value for "Transfer Data Enable" */
#define U1G_SFMA0_NUM_DUMMY_CYCLE_1 (( uint8_t )0x00) /* 1 cycle */
#define U1G_SFMA0_NUM_DUMMY_CYCLE_2 (( uint8_t )0x01) /* 2 cycles */
#define U1G_SFMA0_NUM_DUMMY_CYCLE_3 (( uint8_t )0x02) /* 3 cycles */
#define U1G_SFMA0_NUM_DUMMY_CYCLE_4 (( uint8_t )0x03) /* 4 cycles */
#define U1G_SFMA0_NUM_DUMMY_CYCLE_5 (( uint8_t )0x04) /* 5 cycles */
#define U1G_SFMA0_NUM_DUMMY_CYCLE_6 (( uint8_t )0x05) /* 6 cycles */
#define U1G_SFMA0_NUM_DUMMY_CYCLE_7 (( uint8_t )0x06) /* 7 cycles */
#define U1G_SFMA0_NUM_DUMMY_CYCLE_8 (( uint8_t )0x07) /* 8 cycles */
/* value for "Command Bit Size", "Optional Command Bit Size", "Address Bit Size", */
/* "Option Data Bit Size" , "Transfer Data Bit Size", "Dummy Cycle Bit Size" */
#define U1G_SFMA0_SIZE_1BIT (( uint8_t )0x00) /* 1 bit */
#define U1G_SFMA0_SIZE_2BIT (( uint8_t )0x01) /* 2 bits */
#define U1G_SFMA0_SIZE_4BIT (( uint8_t )0x02) /* 4 bits */
/*------------------------------------------------------------------------------------------------------*/
/* Type definition */
/*------------------------------------------------------------------------------------------------------*/
/* data transfer */
/* */
/* <MEMO> */
/* - Setting value for members: */
/* - b4_en_addr : U1G_SFMA0_EN_ADDR_xxx */
/* - b4_en_op_data : U1G_SFMA0_EN_OP_DATA_xxx */
/* - b4_en_data : U1G_SFMA0_EN_DATA_xxx */
/* - b1_en_cmd : ON(enable), OFF(disable) */
/* - b1_en_op_cmd : ON(enable), OFF(disable) */
/* - b1_en_dmy_cycle : ON(enable), OFF(disable) */
/* - b1_en_write : ON(enable), OFF(disable) */
/* - b1_en_read : ON(enable), OFF(disable) */
/* - b1_ddr_addr : ON(DDR), OFF(SDR) */
/* - b1_ddr_op_data : ON(DDR), OFF(SDR) */
/* - b1_ddr_data : ON(DDR), OFF(SDR) */
/* - b1_keep_ssl : ON(SPBSSL is maintained at the end of transfer) */
/* : OFF(SPBSSL is negated at the end of transfer) */
/* - b3_num_dmy_cycle : U1G_SFMA0_NUM_DUMMY_CYCLE_xxx */
/* - b2_size_cmd : U1G_SFMA0_SIZE_xxx */
/* - b2_size_op_cmd : U1G_SFMA0_SIZE_xxx */
/* - b2_size_addr : U1G_SFMA0_SIZE_xxx */
/* - b2_size_op_data : U1G_SFMA0_SIZE_xxx */
/* - b2_size_data : U1G_SFMA0_SIZE_xxx */
/* - b2_size_dmy_cycle : U1G_SFMA0_SIZE_xxx */
/* - u1_cmd : any data */
/* - u1_opcmd : any data */
/* - u4_addr : any data */
/* - au1_op_data : any data */
/* - au4_wdata : any data */
/* - au4_rdata : do not set this member. */
typedef struct
{
uint32_t b4_en_addr : 4; /* Address Enable */
uint32_t b4_en_op_data : 4; /* Option Data Enable */
uint32_t b4_en_data : 4; /* Transfer Data Enable */
uint32_t b1_en_cmd : 1; /* Command Enable */
uint32_t b1_en_op_cmd : 1; /* Optional Command Enable */
uint32_t b1_en_dmy_cycle : 1; /* Dummy Cycle Enable */
uint32_t b1_en_write : 1; /* Data Write Enable */
uint32_t b1_en_read : 1; /* Data Read Enable */
uint32_t b1_ddr_addr : 1; /* Address DDR Enable */
uint32_t b1_ddr_op_data : 1; /* Option Data DDR Enable */
uint32_t b1_ddr_data : 1; /* Transfer Data DDR Enable */
uint32_t b1_keep_ssl : 1; /* SPBSSL Signal Level Keep */
uint32_t b3_num_dmy_cycle : 3; /* Number of Dummy Cycles */
uint32_t b2_size_cmd : 2; /* Command Bit Size */
uint32_t b2_size_op_cmd : 2; /* Optional Command Bit Size */
uint32_t b2_size_addr : 2; /* Address Bit Size */
uint32_t b2_size_op_data : 2; /* Option Data Bit Size */
/* --alignment-- */
uint8_t b2_size_data : 2; /* Transfer Data Bit Size */
uint8_t b2_size_dmy_cycle : 2; /* Dummy Cycle Bit Size */
uint8_t : 4; /* reserved */
uint8_t u1_cmd; /* Command */
uint8_t u1_opcmd; /* Option Command */
uint8_t u1_reserved; /* reserved */
/* --alignment-- */
uint32_t u4_addr; /* Address */
/* --alignment-- */
uint8_t au1_op_data [ U1G_SFMA0_NUM_OP_DATA ]; /* Option Data */
/* --alignment-- */
uint32_t au4_wdata [ U1G_SFMA0_NUM_DATA ]; /* Write Data */
/* --alignment-- */
uint32_t au4_rdata [ U1G_SFMA0_NUM_DATA ]; /* Read Data */
} st_SFMA0_Transfer;
/*------------------------------------------------------------------------------------------------------*/
/* Prototype declaration */
/*------------------------------------------------------------------------------------------------------*/
extern void TYW_SFMA0_Init(void); /* Initialize SFMA0 */
extern uint8_t TYW_SFMA0_Transfer(st_SFMA0_Transfer *pstt_transfer); /* Data Transfer */
#endif /* SFMA0_H */