Exemple #1
0
    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()
Exemple #2
0
    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))