I’m trying to write user-space SPI1 driver in slave mode. I just got past the bus errors trying to access the SPI registers without first turning on the clock in the clock module. Now I’m not able to change the pin mux settings:
#define MUX_SPI1_CS0 0x99C
#define MUX_SPI1_D0 0x994
#define MUX_SPI1_D1 0x998
#define MUX_SPI1_SCLK 0x990
#define CONTROL_MODULE_BANK_SIZE 0x2000 /* 8K */
Control_Module_Base = 0x44E10000;
m_controlModule = (uint32_t *)mmap(NULL, CONTROL_MODULE_BANK_SIZE,
(PROT_READ | PROT_WRITE),
MAP_SHARED, m_io_fd,
Control_Module_Base);
Read initial pin mux values:
printf("%s(): old MUX vals:\n"
“MUX_SPI1_CS0 = 0x%08X\n”
“MUX_SPI1_D0 = 0x%08X\n”
“MUX_SPI1_D1 = 0x%08X\n”
“MUX_SPI1_SCLK = 0x%08X\n”, FUNCTION,
m_controlModule[MUX_SPI1_CS0/4],
m_controlModule[MUX_SPI1_D0/4],
m_controlModule[MUX_SPI1_D1/4],
m_controlModule[MUX_SPI1_SCLK/4]);
output:
0x33, 0x33, 0x23, 0x23
Write new values:
m_controlModule[MUX_SPI1_CS0/4] = 0x3B;
m_controlModule[MUX_SPI1_D0/4] = 0x3B;
m_controlModule[MUX_SPI1_D1/4] = 0x1B;
m_controlModule[MUX_SPI1_SCLK/4] = 0x3B;
Read back values:
0x33, 0x33, 0x23, 0x23
Any ideas?