def write(self, filename): """ Writes the output file """ self._filename = os.path.basename(filename) self._ofile = open(filename, "w") self.write_header(self._ofile, "".join(HEADER)) addr_maps = self._project.get_address_maps().keys() if len(addr_maps) > 0: base = self._project.get_address_base(addr_maps[0]) for data in in_groups(self._dbase.module_name, self._project): name = full_token(data.group, "BASE_PTR", self._dbase.module_name, -1, data.format) self._ofile.write("// Base address of the block\n") address = base + data.offset self._ofile.write("#define %-30s (0x%x)\n" % (name, address)) for reg_key in self._dbase.get_keys(): register = self._dbase.get_register(reg_key) self.write_def(register, data, base) self._ofile.write('\n') for line in TRAILER: self._ofile.write('%s\n' % line.replace('$M$', self._module)) self._ofile.close()
def write_def(self, reg, data, base): """ Writes the definition in the format of: #define register (address) """ address = reg.address + base + data.base if data.repeat > 1: for i in range(0, data.repeat): name = full_token(data.group, reg.token, self._dbase.module_name, i, data.format) address += (i * data.roffset) self._ofile.write("#define %-30s (*((volatile %s)0x%x))\n" % (name, REG_TYPE[reg.width], address)) else: name = full_token(data.group, reg.token, self._dbase.module_name, -1, data.format) self._ofile.write("#define %-30s (*((volatile %s)0x%x))\n" % (name, REG_TYPE[reg.width], address))