r4607 - in developers/werner: . wlan-spi
werner at docs.openmoko.org
werner at docs.openmoko.org
Mon Aug 25 20:40:25 CEST 2008
Author: werner
Date: 2008-08-25 20:40:25 +0200 (Mon, 25 Aug 2008)
New Revision: 4607
Added:
developers/werner/wlan-spi/
developers/werner/wlan-spi/Makefile
developers/werner/wlan-spi/WIRING
developers/werner/wlan-spi/spi.c
Log:
- WIRING: SD/SPI wiring cheat sheet
- Makefile, spi.c: small user-mode demo for polling mode SPI (tested only TX)
Added: developers/werner/wlan-spi/Makefile
===================================================================
--- developers/werner/wlan-spi/Makefile (rev 0)
+++ developers/werner/wlan-spi/Makefile 2008-08-25 18:40:25 UTC (rev 4607)
@@ -0,0 +1,10 @@
+CC=arm-angstrom-linux-gnueabi-gcc
+
+CFLAGS=-Wall
+
+all: spi
+
+spi.c: s3c24xx-spi.h
+
+s3c24xx-spi.h: ../greg/s3c24xx-spi.greg
+ ../greg/greg $< -d >$@ || { rm -f $@; exit 1; }
Added: developers/werner/wlan-spi/WIRING
===================================================================
--- developers/werner/wlan-spi/WIRING (rev 0)
+++ developers/werner/wlan-spi/WIRING 2008-08-25 18:40:25 UTC (rev 4607)
@@ -0,0 +1,54 @@
+--- SD/SDIO connector -------------------------------------------------------
+
+ SD/SDIO SPI
+
+8 DAT1 IRQ
+7 DAT0 MISO
+6 "JB" GND GND
+5 CLK CLK
+4 VDD VDD
+3 GND GND
+2 CMD MOSI
+1 CD/DAT3 CS
+ 9 DAT2 -
+
+
+--- WLAN Prototype Board (PCB) ----------------------------------------------
+
+ SD/SDIO SPI CPU
+
+(0) VDD VDD
+1 CD/DAT3 CS G2
+2 DAT0 MISO E11
+3 X DAT2 - -
+4 DAT1 IRQ F3
+5 CLK CLK E13
+6 CMD MOSI E12
+7 GND GND
+8 VDD VDD
+
+
+--- Debug board ---------------------------------------------------------------
+
+PCB CPU Signal Pin Signal CPU PCB
+
+8 - VCC3 10 9 GND - 7
+- - - 8 7 EINT3 F3 4
+1 G2 SS 6 5 MISO E11 2
+6 E12 MOSI 4 3 CLK E13 5
+- - I2C_SDA 2 1 I2C_SCL - -
+
+
+--- Scope -------------------------------------------------------------------
+
+E12 MOSI
+
+E13 CLK
+
+F3 IRQ
+
+---
+
+E11 MISO
+
+G2 CS
Added: developers/werner/wlan-spi/spi.c
===================================================================
--- developers/werner/wlan-spi/spi.c (rev 0)
+++ developers/werner/wlan-spi/spi.c 2008-08-25 18:40:25 UTC (rev 4607)
@@ -0,0 +1,83 @@
+#include <stdint.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <fcntl.h>
+#include <sys/mman.h>
+
+#include "s3c24xx-spi.h"
+
+
+#define GPECON 0x56000040
+#define CLKCON 0x4C00000C
+#define INTMSK 0x4A000008
+
+
+static volatile void *regs;
+
+
+#define R(x) (*(volatile uint32_t *) (regs+(x)-0x40000000))
+
+
+static void fn(unsigned long reg, int bit)
+{
+ R(reg) = (R(reg) & ~(3UL << 2*bit)) | (2 << 2*bit);
+}
+
+
+int main(int argc, char **argv)
+{
+ int fd;
+ const char *s;
+ int i;
+
+ fd = open("/dev/mem", O_RDWR);
+ if (fd < 0) {
+ perror("/dev/mem");
+ exit(1);
+ }
+
+ regs = mmap(NULL, 0x20000000, PROT_READ | PROT_WRITE, MAP_SHARED, fd,
+ 0x40000000);
+ if (regs == MAP_FAILED) {
+ perror("mmap");
+ exit(1);
+ }
+
+ R(INTMSK) |= 1 << 22; /* mask SPI0 */
+
+ fn(GPECON, 11); /* GPE11 = MISO */
+ fn(GPECON, 12); /* GPE12 = MOSI */
+ fn(GPECON, 13); /* GPE13 = CLK */
+
+ R(CLKCON) |= 1 << 18; /* enable clock to SPI subsystem */
+
+ R(SPPRE0) = 0x4f; /* Dennis say's that's ~514kHz.
+ I think it's 312.5kHz. My scope says it's
+ about 317kHz. Close enough :) */
+ /* SPI clock = 50MHz/2/(SPPRE0+1) */
+
+ R(SPPIN0) =
+ (SPPIN0_ENMUL_disable << SPPIN0_ENMUL) |
+ (SPPIN0_SPICSn_deactivate << SPPIN0_SPICSn) | /* CSn is unused */
+ (SPPIN0_KEEP_previous_level << SPPIN0_KEEP);
+
+ R(SPCON0) =
+ (SPCON0_SMOD_polling << SPCON0_SMOD) |
+ (SPCON0_ENSCK_enable << SPCON0_ENSCK) |
+ (SPCON0_MSTR_master << SPCON0_MSTR) |
+ (SPCON0_CPOL_active_high << SPCON0_CPOL) |
+ (SPCON0_CPHA_format_b << SPCON0_CPHA) |
+ (SPCON0_TAGD_normal_mode << SPCON0_TAGD);
+
+ /* duh. 2442 manual says this is what we have to do */
+ for (i = 0; i != 10; i++)
+ R(SPTDAT0) = 0xff;
+
+ for (s = argv[1]; *s; s++) {
+ while (((R(SPSTA0) >> SPSTA0_REDY) & 1) ==
+ SPSTA0_REDY_not_ready);
+ R(SPTDAT0) = *s;
+ }
+
+ return 0;
+}
More information about the commitlog
mailing list