XIP: Change "variable style" by "pointer style" (#521)

This commit is contained in:
Stephan 2023-02-27 18:54:06 +01:00 committed by GitHub
commit 781b8ce03b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 22 additions and 22 deletions

View file

@ -781,7 +781,7 @@ enum NEORV32_SDI_CTRL_enum {
**************************************************************************/ **************************************************************************/
/**@{*/ /**@{*/
/** XIP module prototype */ /** XIP module prototype */
typedef struct __attribute__((packed,aligned(4))) { typedef volatile struct __attribute__((packed,aligned(4))) {
uint32_t CTRL; /**< offset 0: control register (#NEORV32_XIP_CTRL_enum) */ uint32_t CTRL; /**< offset 0: control register (#NEORV32_XIP_CTRL_enum) */
const uint32_t reserved; /**< offset 4: reserved */ const uint32_t reserved; /**< offset 4: reserved */
uint32_t DATA_LO; /**< offset 8: SPI data register low */ uint32_t DATA_LO; /**< offset 8: SPI data register low */
@ -792,7 +792,7 @@ typedef struct __attribute__((packed,aligned(4))) {
#define NEORV32_XIP_BASE (0xFFFFFF40U) #define NEORV32_XIP_BASE (0xFFFFFF40U)
/** XIP module hardware access (#neorv32_xip_t) */ /** XIP module hardware access (#neorv32_xip_t) */
#define NEORV32_XIP (*((volatile neorv32_xip_t*) (NEORV32_XIP_BASE))) #define NEORV32_XIP ((neorv32_xip_t*) (NEORV32_XIP_BASE))
/** XIP control/data register bits */ /** XIP control/data register bits */
enum NEORV32_XIP_CTRL_enum { enum NEORV32_XIP_CTRL_enum {

View file

@ -80,11 +80,11 @@ int neorv32_xip_setup(uint8_t prsc, uint8_t cpol, uint8_t cpha, uint8_t rd_cmd)
} }
// reset and disable module // reset and disable module
NEORV32_XIP.CTRL = 0; NEORV32_XIP->CTRL = 0;
// clear data registers // clear data registers
NEORV32_XIP.DATA_LO = 0; NEORV32_XIP->DATA_LO = 0;
NEORV32_XIP.DATA_HI = 0; // will not trigger SPI transfer since module is disabled NEORV32_XIP->DATA_HI = 0; // will not trigger SPI transfer since module is disabled
uint32_t ctrl = 0; uint32_t ctrl = 0;
ctrl |= ((uint32_t)(1 )) << XIP_CTRL_EN; // enable module ctrl |= ((uint32_t)(1 )) << XIP_CTRL_EN; // enable module
@ -94,16 +94,16 @@ int neorv32_xip_setup(uint8_t prsc, uint8_t cpol, uint8_t cpha, uint8_t rd_cmd)
ctrl |= ((uint32_t)(8 )) << XIP_CTRL_SPI_NBYTES_LSB; // set 8 bytes transfer size as default ctrl |= ((uint32_t)(8 )) << XIP_CTRL_SPI_NBYTES_LSB; // set 8 bytes transfer size as default
ctrl |= ((uint32_t)(rd_cmd & 0xff)) << XIP_CTRL_RD_CMD_LSB; ctrl |= ((uint32_t)(rd_cmd & 0xff)) << XIP_CTRL_RD_CMD_LSB;
NEORV32_XIP.CTRL = ctrl; NEORV32_XIP->CTRL = ctrl;
// send 64 SPI dummy clocks but without an active CS // send 64 SPI dummy clocks but without an active CS
NEORV32_XIP.DATA_LO = 0; NEORV32_XIP->DATA_LO = 0;
NEORV32_XIP.DATA_HI = 0; // trigger SPI transfer NEORV32_XIP->DATA_HI = 0; // trigger SPI transfer
// wait for transfer to complete // wait for transfer to complete
while (NEORV32_XIP.CTRL & (1 << XIP_CTRL_PHY_BUSY)); // direct SPI mode -> check PHY status while (NEORV32_XIP->CTRL & (1 << XIP_CTRL_PHY_BUSY)); // direct SPI mode -> check PHY status
NEORV32_XIP.CTRL |= 1 << XIP_CTRL_SPI_CSEN; // finally enable automatic SPI chip-select NEORV32_XIP->CTRL |= 1 << XIP_CTRL_SPI_CSEN; // finally enable automatic SPI chip-select
return 0; return 0;
} }
@ -127,7 +127,7 @@ int neorv32_xip_start(uint8_t abytes, uint32_t page_base) {
} }
page_base >>= 28; page_base >>= 28;
uint32_t ctrl = NEORV32_XIP.CTRL; uint32_t ctrl = NEORV32_XIP->CTRL;
// address bytes send to SPI flash // address bytes send to SPI flash
ctrl &= ~(3 << XIP_CTRL_XIP_ABYTES_LSB); // clear old configuration ctrl &= ~(3 << XIP_CTRL_XIP_ABYTES_LSB); // clear old configuration
@ -144,7 +144,7 @@ int neorv32_xip_start(uint8_t abytes, uint32_t page_base) {
ctrl |= 1 << XIP_CTRL_XIP_EN; // enable XIP mode ctrl |= 1 << XIP_CTRL_XIP_EN; // enable XIP mode
NEORV32_XIP.CTRL = ctrl; NEORV32_XIP->CTRL = ctrl;
return 0; return 0;
} }
@ -157,7 +157,7 @@ int neorv32_xip_start(uint8_t abytes, uint32_t page_base) {
**************************************************************************/ **************************************************************************/
void neorv32_xip_highspeed_enable(void) { void neorv32_xip_highspeed_enable(void) {
NEORV32_XIP.CTRL |= 1 << XIP_CTRL_HIGHSPEED; NEORV32_XIP->CTRL |= 1 << XIP_CTRL_HIGHSPEED;
} }
@ -166,7 +166,7 @@ void neorv32_xip_highspeed_enable(void) {
**************************************************************************/ **************************************************************************/
void neorv32_xip_highspeed_disable(void) { void neorv32_xip_highspeed_disable(void) {
NEORV32_XIP.CTRL &= ~(1 << XIP_CTRL_HIGHSPEED); NEORV32_XIP->CTRL &= ~(1 << XIP_CTRL_HIGHSPEED);
} }
@ -177,7 +177,7 @@ void neorv32_xip_highspeed_disable(void) {
**************************************************************************/ **************************************************************************/
void neorv32_xip_burst_mode_enable(void) { void neorv32_xip_burst_mode_enable(void) {
NEORV32_XIP.CTRL |= 1 << XIP_CTRL_BURST_EN; NEORV32_XIP->CTRL |= 1 << XIP_CTRL_BURST_EN;
} }
@ -186,7 +186,7 @@ void neorv32_xip_burst_mode_enable(void) {
**************************************************************************/ **************************************************************************/
void neorv32_xip_burst_mode_disable(void) { void neorv32_xip_burst_mode_disable(void) {
NEORV32_XIP.CTRL &= ~(1 << XIP_CTRL_BURST_EN); NEORV32_XIP->CTRL &= ~(1 << XIP_CTRL_BURST_EN);
} }
@ -207,10 +207,10 @@ int neorv32_xip_spi_trans(uint8_t nbytes, uint64_t *rtx_data) {
} }
// configure number of bytes to transfer // configure number of bytes to transfer
uint32_t ctrl = NEORV32_XIP.CTRL; uint32_t ctrl = NEORV32_XIP->CTRL;
ctrl &= ~(0xF << XIP_CTRL_SPI_NBYTES_LSB); // clear old configuration ctrl &= ~(0xF << XIP_CTRL_SPI_NBYTES_LSB); // clear old configuration
ctrl |= nbytes << XIP_CTRL_SPI_NBYTES_LSB; // set new configuration ctrl |= nbytes << XIP_CTRL_SPI_NBYTES_LSB; // set new configuration
NEORV32_XIP.CTRL = ctrl; NEORV32_XIP->CTRL = ctrl;
union { union {
uint64_t uint64; uint64_t uint64;
@ -218,13 +218,13 @@ int neorv32_xip_spi_trans(uint8_t nbytes, uint64_t *rtx_data) {
} data; } data;
data.uint64 = *rtx_data; data.uint64 = *rtx_data;
NEORV32_XIP.DATA_LO = data.uint32[0]; NEORV32_XIP->DATA_LO = data.uint32[0];
NEORV32_XIP.DATA_HI = data.uint32[1]; // trigger SPI transfer NEORV32_XIP->DATA_HI = data.uint32[1]; // trigger SPI transfer
// wait for transfer to complete // wait for transfer to complete
while (NEORV32_XIP.CTRL & (1 << XIP_CTRL_PHY_BUSY)); // direct SPI mode -> check PHY status while (NEORV32_XIP->CTRL & (1 << XIP_CTRL_PHY_BUSY)); // direct SPI mode -> check PHY status
data.uint32[0] = NEORV32_XIP.DATA_LO; // RX data is always 32-bit and LSB-aligned data.uint32[0] = NEORV32_XIP->DATA_LO; // RX data is always 32-bit and LSB-aligned
data.uint32[1] = 0; data.uint32[1] = 0;
*rtx_data = data.uint64; *rtx_data = data.uint64;