CI13LC SDK API手册  2.1.1
本手册用于描述CI13LC SDK各个组件和驱动API
结构体 | 宏定义 | 类型定义 | 函数 | 变量
ci13lc_dtrflash.c 文件参考
#include "ci_dtrflash.h"
#include "ci_system.h"
#include "ci_dma.h"
#include "romlib_api.h"

结构体

struct  spic_register
 
struct  spic_config_t
 

宏定义

#define DMAC_CHANNEL0_LOCK()   do{}while(0);
 
#define DMAC_CHANNEL0_UNLOCK()   do{}while(0);
 
#define SPIC_TIMEOUT   (5000)
 
#define SPIC_FIFO_ADDR   (0x50000000) /*cpu在FLASH正常模式下访问该地址、dma在XIP模式下访问该地址、dma在FLASH正常模式下,访问该地址*/
 
#define SPIC_DMA_FIFO_ADDR   (0x60000000)
 
#define SPIC_CS_HIGH_CYCLE   (1)
 
#define SPIC_CS_LOW_CYCLE   (1)
 
#define SPIC_WFIFO_AMFULL_LEVEL   (60)
 
#define SPIC_RFIFO_AMEMPTY_LEVEL   (30)
 
#define SPIC_RFIFO_AMFULL_LEVEL   (2)
 
#define STATE_REG_GM_DONE_INT   (0x1 << 3)
 
#define SPIC_CMD_SIZE   (1)
 
#define SPIC_CMD_EN   (1)
 
#define SPIC_PREFETCH_EN   (1)
 

类型定义

typedef volatile struct spic_register spic_register_t
 
typedef volatile struct spic_registerspic_register_p
 
typedef struct spic_config_tspic_config_p
 

函数

void spic_change_clk (uint32_t spic_base, flash_clk_div_t clk)
 切换flash的时钟分频 更多...
 
static int32_t spic_wait_idle (uint32_t spic_base)
 等待spic空闲 更多...
 
static int32_t spic_ready_change_mode (uint32_t spic_base)
 spic是否能够进行模式切换 更多...
 
static int32_t spic_general_mode_config (uint32_t spic_base, spic_config_p config)
 通用模式配置 更多...
 
int32_t spic_xip_config (uint32_t spic_base, spic_base_config_p base_config)
 XIP配置 更多...
 
int32_t spic_cmd (uint32_t spic_base, spic_base_config_p spic_base_config)
 spic向flash发送命令 更多...
 
int32_t spic_read_by_cpu (uint32_t spic_base, spic_base_config_p spic_base_config, uint8_t *read_data, uint32_t read_len)
 spic以CPU的方式向flash读数据 更多...
 
int32_t spic_write_by_cpu (uint32_t spic_base, spic_base_config_p spic_base_config, uint8_t *write_data, uint32_t write_len)
 spic以CPU的方式向flash写数据 更多...
 
int32_t spic_readwrite_by_dma (uint32_t spic_base, spic_base_config_p spic_base_config, uint8_t *data, uint32_t len, flash_flag_t flag)
 spic以dma的方式flash写/读数据 更多...
 
int32_t spic_init (uint32_t spic_base, spic_init_p init)
 spic控制器初始化 更多...
 
int32_t spic_clk_phase_set (uint32_t spic_base, uint32_t tx_shift, uint32_t tx_nege_en, uint32_t rx_shift, uint32_t rx_nege_en)
 flash时钟相位调制 更多...
 
uint32_t spic_prefetch_en (uint32_t spic_base, bool en)
 flash预取开关 更多...
 
int32_t spic_clk_bypass_en (uint32_t spic_base, bool en)
 flash时钟同频开关 更多...
 
void spic_rx_sample (uint32_t spic_base, uint8_t sample)
 flash的rx_sample配置 更多...
 
void spic_delay_line (uint32_t spic_base, uint8_t delay)
 flash的delay_line配置 更多...
 
void spic_rx_nege_en (uint32_t spic_base, uint8_t nege)
 flash的delay_line配置 更多...
 

变量

static uint8_t spi_dma_buf [512]
 
static uint32_t global_flash_sel = 0
 
static uint32_t global_addr_size = 0
 
DMACChannelx dmachanel = DMACChannel0
 
typedef enum
 

结构体说明

◆ spic_register

struct spic_register
成员变量
uint32_t addr_mask_cfg

属性:RW 偏移:0x0C 位宽:32 功能:地址MASK寄存器 功能:addr_mask[x]:1 = nomask,0 = mask;例: 器件大小16MB,器件有效地址24bit,addr_mask = 16'h00FF; 器件大小32MB,器件有效地址25bit,addr_mask = 16'h01FF;

uint32_t fifo_level_cfg

属性:RW 偏移:0x30 位宽:32 功能:FIFO水线配置寄存器

uint32_t globe1_cfg

属性:RW 偏移:0x04 位宽:32 功能:全局配置寄存器1

uint32_t globe_cfg

属性:RW 偏移:0x00 位宽:32 功能:全局配置寄存器0

uint32_t gm1_cfg

属性:RW 偏移:0x14 位宽:32 功能:通用模式配置寄存器1

uint32_t gm_addr_cfg

属性:RW 偏移:0x18 位宽:32 功能:通用模式读写地址

uint32_t gm_cfg

属性:RW 偏移:0x10 位宽:32 功能:通用模式配置寄存器0

uint32_t gm_data_szie_cfg

属性:RW 偏移:0x1C 位宽:32 功能:通用模式数据大小配置寄存器

uint32_t int_ctrl_cfg

属性:RW 偏移:0x3C 位宽:32 功能:中断控制寄存器

uint32_t rd1_cfg

属性:RW 偏移:0x24 位宽:32 功能:读操作模式配置寄存器1

uint32_t rd_cfg

属性:RW 偏移:0x20 位宽:32 功能:读操作模式配置寄存器0

uint32_t rw_data0_cfg

属性:RW 偏移:0x34 位宽:32 功能:读写数据寄存器0

uint32_t rw_data1_cfg

属性:RW 偏移:0x38 位宽:32 功能:读写数据寄存器1

uint32_t rx_clk_cfg

属性:RW 偏移:0x08 位宽:32 功能:接收时钟配置寄存器

uint32_t state_reg

属性:RO 偏移:0x40 位宽:32 功能:状态寄存器

uint32_t wr1_cfg

属性:RW 偏移:0x2C 位宽:32 功能:写操作模式配置寄存器1(PSRAM用)

uint32_t wr_cfg

属性:RW 偏移:0x28 位宽:32 功能:写操作模式配置寄存器0(PSRAM用)

◆ spic_config_t

struct spic_config_t
成员变量
spic_base_config_t base_config
uint32_t gm_data_size
uint32_t gm_data_store_md
uint32_t gm_dma_en
uint32_t gm_read_en
uint32_t gm_write_en

宏定义说明

◆ DMAC_CHANNEL0_LOCK

#define DMAC_CHANNEL0_LOCK ( )    do{}while(0);

◆ DMAC_CHANNEL0_UNLOCK

#define DMAC_CHANNEL0_UNLOCK ( )    do{}while(0);

◆ SPIC_CMD_EN

#define SPIC_CMD_EN   (1)

◆ SPIC_CMD_SIZE

#define SPIC_CMD_SIZE   (1)

◆ SPIC_CS_HIGH_CYCLE

#define SPIC_CS_HIGH_CYCLE   (1)

◆ SPIC_CS_LOW_CYCLE

#define SPIC_CS_LOW_CYCLE   (1)

◆ SPIC_DMA_FIFO_ADDR

#define SPIC_DMA_FIFO_ADDR   (0x60000000)

◆ SPIC_FIFO_ADDR

#define SPIC_FIFO_ADDR   (0x50000000) /*cpu在FLASH正常模式下访问该地址、dma在XIP模式下访问该地址、dma在FLASH正常模式下,访问该地址*/

◆ SPIC_PREFETCH_EN

#define SPIC_PREFETCH_EN   (1)

◆ SPIC_RFIFO_AMEMPTY_LEVEL

#define SPIC_RFIFO_AMEMPTY_LEVEL   (30)

◆ SPIC_RFIFO_AMFULL_LEVEL

#define SPIC_RFIFO_AMFULL_LEVEL   (2)

◆ SPIC_TIMEOUT

#define SPIC_TIMEOUT   (5000)

◆ SPIC_WFIFO_AMFULL_LEVEL

#define SPIC_WFIFO_AMFULL_LEVEL   (60)

◆ STATE_REG_GM_DONE_INT

#define STATE_REG_GM_DONE_INT   (0x1 << 3)

类型定义说明

◆ spic_config_p

typedef struct spic_config_t* spic_config_p

◆ spic_register_p

typedef volatile struct spic_register* spic_register_p

◆ spic_register_t

typedef volatile struct spic_register spic_register_t

函数说明

◆ spic_change_clk()

void spic_change_clk ( uint32_t  spic_base,
flash_clk_div_t  clk 
)

切换flash的时钟分频

◆ spic_clk_bypass_en()

int32_t spic_clk_bypass_en ( uint32_t  spic_base,
bool  en 
)

flash时钟同频开关

参数
enenable:开启(同频);disable:关闭(默认2分频);

◆ spic_clk_phase_set()

int32_t spic_clk_phase_set ( uint32_t  spic_base,
uint32_t  tx_shift,
uint32_t  tx_nege_en,
uint32_t  rx_shift,
uint32_t  rx_nege_en 
)

flash时钟相位调制

参数
tx_shift偏移X个core_clk,注意X必须小于core_clk与flash_clk的频率倍数(dtr模式下小于倍数的一半)
tx_nege_en配置为1时在shift的基础上再向后平移半个core_clk周期
rx_shift偏移X个core_clk,注意X必须小于core_clk与flash_clk的频率倍数(dtr模式下小于倍数的一半)
rx_nege_en配置为1时在shift的基础上再向后平移半个core_clk周期
返回
int32_t 0:成功;1:失败;

◆ spic_cmd()

int32_t spic_cmd ( uint32_t  spic_base,
spic_base_config_p  spic_base_config 
)

spic向flash发送命令

参数
spic_base_config配置结构体指针
返回
int32_t 0:成功;1:失败;

◆ spic_delay_line()

void spic_delay_line ( uint32_t  spic_base,
uint8_t  delay 
)

flash的delay_line配置

参数
delay:1~ 32

◆ spic_general_mode_config()

static int32_t spic_general_mode_config ( uint32_t  spic_base,
spic_config_p  config 
)
static

通用模式配置

参数
config配置结构体指针
返回
int32_t 0:成功;1:失败;

◆ spic_init()

int32_t spic_init ( uint32_t  spic_base,
spic_init_p  init 
)

spic控制器初始化

参数
init初始化结构体
返回
int32_t 0:成功;1:失败;

◆ spic_prefetch_en()

uint32_t spic_prefetch_en ( uint32_t  spic_base,
bool  en 
)

flash预取开关

参数
enenable:开启;disable:关闭;

◆ spic_read_by_cpu()

int32_t spic_read_by_cpu ( uint32_t  spic_base,
spic_base_config_p  spic_base_config,
uint8_t *  read_data,
uint32_t  read_len 
)

spic以CPU的方式向flash读数据

参数
spic_base_config配置结构体指针
read_data数据指针
read_len数据长度
返回
int32_t 0:成功;1:失败;

◆ spic_readwrite_by_dma()

int32_t spic_readwrite_by_dma ( uint32_t  spic_base,
spic_base_config_p  spic_base_config,
uint8_t *  data,
uint32_t  len,
flash_flag_t  flag 
)

spic以dma的方式flash写/读数据

参数
spic_base_config配置结构体指针
data数据指针
len数据长度
flag读写标志
返回
int32_t 0:成功;1:失败;

◆ spic_ready_change_mode()

static int32_t spic_ready_change_mode ( uint32_t  spic_base)
static

spic是否能够进行模式切换

返回
int32_t 0:成功;1:失败;

◆ spic_rx_nege_en()

void spic_rx_nege_en ( uint32_t  spic_base,
uint8_t  nege 
)

flash的delay_line配置

参数
nege:0、1

◆ spic_rx_sample()

void spic_rx_sample ( uint32_t  spic_base,
uint8_t  sample 
)

flash的rx_sample配置

参数
sample:0,上升沿采样。1,下降沿采样。

◆ spic_wait_idle()

static int32_t spic_wait_idle ( uint32_t  spic_base)
static

等待spic空闲

返回
int32_t 0:成功;1:失败;

◆ spic_write_by_cpu()

int32_t spic_write_by_cpu ( uint32_t  spic_base,
spic_base_config_p  spic_base_config,
uint8_t *  write_data,
uint32_t  write_len 
)

spic以CPU的方式向flash写数据

参数
spic_base_config配置结构体指针
write_data数据指针
write_len数据长度
返回
int32_t 0:成功;1:失败;

◆ spic_xip_config()

int32_t spic_xip_config ( uint32_t  spic_base,
spic_base_config_p  base_config 
)

XIP配置

参数
config配置结构体指针
返回
int32_t 0:成功;1:失败;

变量说明

◆ dmachanel

◆ enum

typedef enum
初始值:
{
RAM_CLK_MD_0 = 0,
RAM_CLK_MD_2 = 1,
RAM_CLK_MD_4 = 2,
}ram_clk_md_t

< 功能:flash fifo时钟与sram时钟频率关系 功能:同频 功能:2分频 功能:4分频

◆ global_addr_size

uint32_t global_addr_size = 0
static

◆ global_flash_sel

uint32_t global_flash_sel = 0
static

◆ spi_dma_buf

uint8_t spi_dma_buf[512]
static