Browse Source

xflash: remove some duplication

Yuri D'Elia 2 years ago
parent
commit
86e753fe37
1 changed files with 11 additions and 15 deletions
  1. 11 15
      Firmware/xflash.c

+ 11 - 15
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();
 }