File: io_gen.py

package info (click to toggle)
simulavr 0.1.2.2-5
  • links: PTS
  • area: main
  • in suites: etch, etch-m68k
  • size: 2,752 kB
  • ctags: 3,176
  • sloc: ansic: 19,987; sh: 3,623; python: 3,528; makefile: 390; asm: 308; yacc: 145; lex: 48
file content (74 lines) | stat: -rw-r--r-- 2,437 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#! /usr/bin/env python
###############################################################################
#
# simulavr - A simulator for the Atmel AVR family of microcontrollers.
# Copyright (C) 2004  Theodore A. Roth
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
#
###############################################################################
#
# $Id: io_gen.py,v 1.1 2004/01/29 05:35:33 troth Exp $
#

#
# This script is for generating the .io_reg field initializer of the
# DevSuppDefn for a specfic device. The input should be one of the io*.h files
# provided by avr-libc in the include/avr/ directory.
#
# Usage: io_gen.py <io_header>
#
# This best way to use this script is while using vim to edit the
# devsupp.c. You can run the script from vim and have the output of the script
# inserted directly into the devsupp.c file with a command like this:
#
#   :r!../misc/io_gen.py ~/dev/tools/avr-libc-cvs/include/avr/io1200.h
#

import sys, re

base_regx = r'[#]define\s*?(\S+)\s*?%s\s*[(]\s*?(\S+?)\s*?[)]'

re_io8 = re.compile (base_regx % ('_SFR_IO8'))
re_mem8 = re.compile (base_regx % ('_SFR_MEM8'))

# Open the input file.

f = open (sys.argv[1]).read ()

register = {}

# Find all the _SFR_IO8 defs.

for name, addr_str in re_io8.findall (f):
    addr = int (addr_str, 0) + 0x20
    register[addr] = name

# Find all the _SFR_MEM8 defs.

for name, addr_str in re_mem8.findall (f):
    addr = int (addr_str, 0)
    register[addr] = name

# Print the field initializer to stdout.

print '    .io_reg = {'
addrs = register.keys ()
addrs.sort ()
for addr in addrs:
    print '        { .addr = 0x%02x, .name = "%s", },' % (addr, register[addr])
print '        /* May need to add SREG, SPL, SPH, and eeprom registers. */'
print '        IO_REG_DEFN_TERMINATOR'
print '    }'