You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
61 lines
1.7 KiB
61 lines
1.7 KiB
#!/usr/bin/env python |
|
''' |
|
extra DMA mapping tables from a stm32 datasheet |
|
|
|
This assumes a csv file extracted from the datasheet using tablula: |
|
https://github.com/tabulapdf/tabula |
|
|
|
''' |
|
|
|
import sys, csv, os |
|
|
|
def parse_dma_table(fname, table): |
|
dma_num = 1 |
|
csvt = csv.reader(open(fname,'rb')) |
|
i = 0 |
|
last_channel = -1 |
|
for row in csvt: |
|
if len(row) > 1 and row[1].startswith('Channel '): |
|
row = row[1:] |
|
if not row[0].startswith('Channel '): |
|
continue |
|
channel = int(row[0].split(' ')[1]) |
|
if channel < last_channel: |
|
dma_num += 1 |
|
last_channel = channel |
|
for stream in range(8): |
|
s = row[stream+1] |
|
s = s.replace('_\r', '_') |
|
s = s.replace('\r_', '_') |
|
if s == '-': |
|
continue |
|
keys = s.split() |
|
for k in keys: |
|
brace = k.find('(') |
|
if brace != -1: |
|
k = k[:brace] |
|
if k not in table: |
|
table[k] = [] |
|
table[k] += [(dma_num, stream)] |
|
|
|
table = {} |
|
|
|
if len(sys.argv) != 2: |
|
print("Error: expected a CSV files and output file") |
|
sys.exit(1) |
|
|
|
parse_dma_table(sys.argv[1], table) |
|
|
|
sys.stdout.write("DMA_Map = {\n"); |
|
sys.stdout.write('\t# format is [DMA_TABLE, StreamNum]\n') |
|
sys.stdout.write('\t# extracted from %sn\n' % os.path.basename(sys.argv[1])) |
|
|
|
for k in sorted(table.iterkeys()): |
|
s = '"%s"' % k |
|
sys.stdout.write('\t%-10s\t:\t[' % s) |
|
for i in range(len(table[k])): |
|
sys.stdout.write("(%u,%u)" % (table[k][i][0], table[k][i][1])) |
|
if i < len(table[k])-1: |
|
sys.stdout.write(",") |
|
sys.stdout.write("],\n") |
|
sys.stdout.write("}\n");
|
|
|