From 86e753fe376e661b96f3e36cccb2f3a50e3bf840 Mon Sep 17 00:00:00 2001 From: Yuri D'Elia Date: Tue, 8 Jun 2021 15:24:46 +0200 Subject: [PATCH] xflash: remove some duplication --- Firmware/xflash.c | 26 +++++++++++--------------- 1 file changed, 11 insertions(+), 15 deletions(-) diff --git a/Firmware/xflash.c b/Firmware/xflash.c index e9d894a5b..43680b2ec 100644 --- a/Firmware/xflash.c +++ b/Firmware/xflash.c @@ -90,13 +90,18 @@ void w25x20cl_wr_status_reg(uint8_t val) } #endif -void xflash_rd_data(uint32_t addr, uint8_t* data, uint16_t cnt) +static void xflash_send_cmdaddr(uint8_t cmd, uint32_t addr) { - _CS_LOW(); - _SPI_TX(_CMD_RD_DATA); // send command 0x03 + _SPI_TX(cmd); // send command 0x03 _SPI_TX(((uint8_t*)&addr)[2]); // send addr bits 16..23 _SPI_TX(((uint8_t*)&addr)[1]); // send addr bits 8..15 _SPI_TX(((uint8_t*)&addr)[0]); // send addr bits 0..7 +} + +void xflash_rd_data(uint32_t addr, uint8_t* data, uint16_t cnt) +{ + _CS_LOW(); + xflash_send_cmdaddr(_CMD_RD_DATA, addr); while (cnt--) // receive data *(data++) = _SPI_RX(); _CS_HIGH(); @@ -105,10 +110,7 @@ void xflash_rd_data(uint32_t addr, uint8_t* data, uint16_t cnt) void xflash_page_program(uint32_t addr, uint8_t* data, uint16_t cnt) { _CS_LOW(); - _SPI_TX(_CMD_PAGE_PROGRAM); // send command 0x02 - _SPI_TX(((uint8_t*)&addr)[2]); // send addr bits 16..23 - _SPI_TX(((uint8_t*)&addr)[1]); // send addr bits 8..15 - _SPI_TX(((uint8_t*)&addr)[0]); // send addr bits 0..7 + xflash_send_cmdaddr(_CMD_PAGE_PROGRAM, addr); while (cnt--) // send data _SPI_TX(*(data++)); _CS_HIGH(); @@ -117,10 +119,7 @@ void xflash_page_program(uint32_t addr, uint8_t* data, uint16_t cnt) void xflash_page_program_P(uint32_t addr, uint8_t* data, uint16_t cnt) { _CS_LOW(); - _SPI_TX(_CMD_PAGE_PROGRAM); // send command 0x02 - _SPI_TX(((uint8_t*)&addr)[2]); // send addr bits 16..23 - _SPI_TX(((uint8_t*)&addr)[1]); // send addr bits 8..15 - _SPI_TX(((uint8_t*)&addr)[0]); // send addr bits 0..7 + xflash_send_cmdaddr(_CMD_PAGE_PROGRAM, addr); while (cnt--) // send data _SPI_TX(pgm_read_byte(data++)); _CS_HIGH(); @@ -129,10 +128,7 @@ void xflash_page_program_P(uint32_t addr, uint8_t* data, uint16_t cnt) void xflash_erase(uint8_t cmd, uint32_t addr) { _CS_LOW(); - _SPI_TX(cmd); // send command 0x20 - _SPI_TX(((uint8_t*)&addr)[2]); // send addr bits 16..23 - _SPI_TX(((uint8_t*)&addr)[1]); // send addr bits 8..15 - _SPI_TX(((uint8_t*)&addr)[0]); // send addr bits 0..7 + xflash_send_cmdaddr(cmd, addr); _CS_HIGH(); }