解决中性光写flash闪烁问题
This commit is contained in:
@@ -340,6 +340,10 @@ __RAM_CODE static uint8_t xc_fmc_spi_flash_status(void)
|
||||
return sta[1];
|
||||
}
|
||||
|
||||
__RAM_CODE __WEAK void xc_fmc_spi_flash_busy_hook(void)
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
****************************************************************************************
|
||||
* @brief xc_fmc_spi_flash_wait_busy
|
||||
@@ -354,8 +358,14 @@ __RAM_CODE static uint8_t xc_fmc_spi_flash_status(void)
|
||||
*/
|
||||
__RAM_CODE static void xc_fmc_spi_flash_wait_busy(void)
|
||||
{
|
||||
while ((xc_fmc_spi_flash_status() & PUYA_FLASH_STATUS_WIP_SET))
|
||||
;
|
||||
for (;;) {
|
||||
xc_fmc_spi_flash_busy_hook();
|
||||
if ((xc_fmc_spi_flash_status() &
|
||||
PUYA_FLASH_STATUS_WIP_SET) == 0U)
|
||||
break;
|
||||
}
|
||||
|
||||
xc_fmc_spi_flash_busy_hook();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -472,6 +482,30 @@ __RAM_CODE void xc_fmc_spi_flash_erase_page(uint32_t addr)
|
||||
* @retval void
|
||||
****************************************************************************************
|
||||
*/
|
||||
__RAM_CODE void xc_fmc_spi_flash_write_16bytes(uint32_t addr, uint8_t *data)
|
||||
{
|
||||
uint8_t cmd[16 + 4] = {0};
|
||||
|
||||
xc_fmc_spi_flash_wait_busy();
|
||||
xc_fmc_spi_flash_write_enable();
|
||||
xc_fmc_spi_flash_wait_busy();
|
||||
|
||||
cmd[0] = CMD_PAGE_PROGRAM;
|
||||
cmd[1] = addr >> 16;
|
||||
cmd[2] = addr >> 8;
|
||||
cmd[3] = addr;
|
||||
|
||||
ram_memcpy_bytes(&cmd[4], data, 16);
|
||||
|
||||
xc_fmc_status_wait_idle();
|
||||
|
||||
xc_fmc_spi_enable(FMC_SSI_CTRL0_DFS_LEN_32BIT);
|
||||
xc_fmc_spi_write_nbyte(cmd, sizeof(cmd));
|
||||
|
||||
xc_fmc_spi_flash_wait_busy();
|
||||
xc_fmc_spi_disable();
|
||||
}
|
||||
|
||||
__RAM_CODE void xc_fmc_spi_flash_write_page(uint32_t addr, uint8_t *data,
|
||||
uint16_t size)
|
||||
{
|
||||
|
||||
@@ -293,6 +293,7 @@ void xc_fmc_spi_flash_wait_busy(void);
|
||||
void xc_fmc_spi_flash_write_enable(void);
|
||||
void xc_fmc_spi_flash_erase_sector(uint32_t addr);
|
||||
void xc_fmc_spi_flash_erase_page(uint32_t addr);
|
||||
void xc_fmc_spi_flash_write_16bytes(uint32_t addr, uint8_t *data);
|
||||
void xc_fmc_spi_flash_write_page(uint32_t addr, uint8_t *buff,
|
||||
uint16_t size);
|
||||
void xc_fmc_spi_flash_read_page(uint32_t addr, uint8_t *buff,
|
||||
|
||||
Reference in New Issue
Block a user