Skip to content

Wrong datatype of mask form bitfield set

Python version: 3.13.0 Command line to execute: handleReg.register_1_bf.reg1_arr1 = 1

{
            "name": "register_1",
            "description": "Register 1",
            "bitfields": [
                {
                    "name": "Reg1_arr1",
                    "description": "Register 1, Array 1",
                    "reset": 0,
                    "width": 24,
                    "lsb": 0,
                    "access": "rw",
                    "hardware": "o"
                },
                {
                    "name": "Reg1_arr2",
                    "description": "Register 1, Array 2",
                    "reset": 0,
                    "width": 8,
                    "lsb": 24,
                    "access": "rw",
                    "hardware": "o"
                }
            ]
        }
}

Problem in the regs.py file: the setter of a bitfield does not work. It seems that the "~" operator generates the wrong datatype. This bitinversion creates a signed int and the mask needs a unsigned.

_@reg1_arr1.setter
    def reg1_arr1(self, val):
        rdata = self._rmap._if.read(self._rmap.REGISTER_1_ADDR)
        rdata = rdata & (~(self._rmap.REGISTER_1_REG1_ARR1_MSK << self._rmap.REGISTER_1_REG1_ARR1_POS))_

Quick fix:

_@reg1_arr1.setter
    def reg1_arr1(self, val):
        rdata = self._rmap._if.read(self._rmap.REGISTER_1_ADDR)
        rdata = rdata & (~(self._rmap.REGISTER_1_REG1_ARR1_MSK << self._rmap.REGISTER_1_REG1_ARR1_POS) & 0xffffffff)_

this generates again a unsigned

Edited by Janik Witzig