Well, I still don't know why the overlays aren't working, but I seem to
have gotten the clocks toggled correctly to avoid a SIGBUS Bus Error.
This code turns on the clocks and waits for them to become stable. Then it
reads the SPI0 version register for confirmation.
#include <stdint.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/mman.h>
#include <stdio.h>
#include <assert.h>
// Hunt these addresses down from ls -al /sys/devices/platform/ocp | grep
gpio
// You can also pull them from the TI manual (spruh73l.pdf)
#define CM_PER_BASE 0x44E00000
#define CM_PER_SIZE 0x4000
#define CM_PER_SPI0_CLKCTRL 0x4C
#define CM_PER_L4LS_CLKCTRL 0x60
#define MCSPI0_BASE 0x48030000
#define MCSPI0_SIZE 0x00001000
#define MCSPI_REVISION (0x000)
#define MCSPI_SYSCONFIG (0x110)
#define MCSPI_SYSSTATUS (0x114)
#define MCSPI_SYST (0x124)
#define MCSPI_MODULCTRL (0x128)
#define MCSPI_CH0CONF (0x12C)
#define MCSPI_CH0STAT (0x130)
#define MCSPI_CH0CTRL (0x134)
int main(int argc, char *argv[])
{
uint8_t volatile * bbCM_PERMap = NULL;
uint8_t volatile * bbMCSPI0Map = NULL;
uint32_t ui32tmp = 0;
uint32_t volatile * ppui32tmp = NULL;
int fd = open("/dev/mem", O_RDWR);
bbCM_PERMap = mmap(0, CM_PER_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED,
fd, CM_PER_BASE);
assert(bbCM_PERMap != MAP_FAILED);
*(uint32_t volatile *)(bbCM_PERMap+CM_PER_L4LS_CLKCTRL) = 0x00000002;
// Enable L4LS_CLK
do {
ui32tmp = *(uint32_t volatile *)(bbCM_PERMap+CM_PER_SPI0_CLKCTRL);
sleep(1);
} while (((ui32tmp >> 16) & 0x00000003) != 0); // Wait for L4LS_CLK to
come up
*(uint32_t volatile *)(bbCM_PERMap+CM_PER_SPI0_CLKCTRL) = 0x00000002;
// Enable SPI0 CLK
do {
ui32tmp = *(uint32_t volatile *)(bbCM_PERMap+CM_PER_SPI0_CLKCTRL);
sleep(1);
} while (((ui32tmp >> 16) & 0x00000003) != 0); // Wait for module to
come up
bbMCSPI0Map = mmap(0, MCSPI0_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED,
fd, MCSPI0_BASE);
assert(bbMCSPI0Map != MAP_FAILED);
ppui32tmp = (uint32_t volatile *)bbMCSPI0Map;
assert(bbMCSPI0Map == ppui32tmp);
ui32tmp = *ppui32tmp; // Read the revision register
printf("SPI0 Revision: 0x%08x\n", ui32tmp);
close(fd);
return 0;
}
--
For more options, visit http://beagleboard.org/discuss
---
You received this message because you are subscribed to the Google Groups
"BeagleBoard" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.