r4606 - developers/werner/greg
werner at docs.openmoko.org
werner at docs.openmoko.org
Mon Aug 25 20:38:52 CEST 2008
Author: werner
Date: 2008-08-25 20:38:51 +0200 (Mon, 25 Aug 2008)
New Revision: 4606
Added:
developers/werner/greg/s3c24xx-spi.greg
Modified:
developers/werner/greg/greg.c
Log:
- added S3C24xx SPI register definitions
- added "C" dump mode (experimental)
Modified: developers/werner/greg/greg.c
===================================================================
--- developers/werner/greg/greg.c 2008-08-25 03:26:38 UTC (rev 4605)
+++ developers/werner/greg/greg.c 2008-08-25 18:38:51 UTC (rev 4606)
@@ -14,6 +14,7 @@
#include <stdlib.h>
#include <stdio.h>
+#include <string.h>
#include "reg.h"
#include "cpp.h"
@@ -102,9 +103,47 @@
}
+static void dump_c_values(const char *reg_name, const struct field *field)
+{
+ const char *name;
+ unsigned long long i;
+
+ if (field->value.type != vt_list)
+ return;
+ for (i = 0; i != 1 << field->bits; i++) {
+ name = field->value.u.list[i].name;
+ if (name)
+ printf("#define %s_%s_%s %llu\n",
+ reg_name, field->name, name, i);
+ }
+}
+
+
+static void dump_c(void)
+{
+ const struct reg *reg;
+ const struct field *field;
+ int bits;
+
+ for (reg = regs; reg; reg = reg->next) {
+ printf("#define %s %s\n", reg->name, reg->id);
+ bits = 0;
+ for (field = reg->fields; field; field = field->next) {
+ if (field->name) {
+ printf("#define %s_%s %d\n",
+ reg->name, field->name, bits);
+ dump_c_values(reg->name, field);
+ }
+ bits += field->bits;
+ }
+ }
+}
+
+
static void usage(const char *name)
{
fprintf(stderr, "usage: %s regdef-file [reg value ...]\n", name);
+ fprintf(stderr, " %s regdef-file -d\n", name);
exit(1);
}
@@ -113,12 +152,17 @@
{
int i;
- if (argc < 2 || (argc & 1))
+ if (argc < 2)
usage(*argv);
run_cpp_on_file(argv[1]);
(void) yyparse();
+ if (argc == 3 && !strcmp(argv[2], "-d")) {
+ dump_c();
+ return 0;
+ }
+ if (argc & 1)
+ usage(*argv);
for (i = 2; i != argc; i += 2)
print(argv[i], strtoull(argv[i+1], NULL, 0));
return 0;
-
}
Added: developers/werner/greg/s3c24xx-spi.greg
===================================================================
--- developers/werner/greg/s3c24xx-spi.greg (rev 0)
+++ developers/werner/greg/s3c24xx-spi.greg 2008-08-25 18:38:51 UTC (rev 4606)
@@ -0,0 +1,59 @@
+/*
+ * Samsung S3C24xx SPI register definitions
+ */
+
+
+%8
+
+#define SPCONx \
+ TAGD "Receive data" \
+ { normal_mode tx_auto_garbage } \
+ CPHA "Clock phase" \
+ { format_a format_b } \
+ CPOL "Clock polarity" \
+ { active_high active_low } \
+ MSTR "Master/slave select" \
+ { slave master } \
+ ENSCK "SCK enable" \
+ { disable enable } \
+ SMOD[2] "SPI mode select" \
+ { polling interrupt dma _ } \
+ _ /* undocumented */
+
+#define SPSTAx \
+ REDY "Transfer ready" \
+ { not_ready data_ready } \
+ MULF "Multi master error" \
+ { not_detect error_detected } \
+ DCOL "Data collision error" \
+ { not_detect collision_detected } \
+ _[5]
+
+#define SPPINx \
+ KEEP "Master out keep" \
+ { release previous_level } \
+ SPICSn "CSn" \
+ { activate deactivate } \
+ ENMUL "Multi master error detect enable" \
+ { disable enable } \
+ _[5]
+
+0x59000000 SPCON0 "SPI channel 0 control"
+ SPCONx
+0x59000004 SPSTA0 "SPI channel 0 status"
+ SPSTAx
+0x59000008 SPPIN0 "SPI channel 0 PIN control"
+ SPPINx
+0x5900000c SPPRE0 "SPI channel 0 baud rate prescaler"
+0x59000010 SPTDAT0 "SPI channel 0 Tx data"
+0x59000014 SPRDAT0 "SPI channel 0 Rx data"
+
+0x59000020 SPCON1 "SPI channel 1 control"
+ SPCONx
+0x59000024 SPSTA1 "SPI channel 1 status"
+ SPSTAx
+0x59000028 SPPIN1 "SPI channel 1 PIN control"
+ SPPINx
+0x5900002c SPPRE1 "SPI channel 1 baud rate prescaler"
+0x59000030 SPTDAT1 "SPI channel 1 Tx data"
+0x59000034 SPRDAT1 "SPI channel 1 Rx data"
More information about the commitlog
mailing list