コード例 #1
0
 def check_wr_protection_area(self, num_blk, wr_data):
     # checks fields which have the write protection bit.
     # if the write protection bit is set, we need to protect that area from changes.
     write_disable_bit = self.read_field("WR_DIS", bitstring=False)
     mask_wr_data = BitString(len(wr_data))
     mask_wr_data.set(0)
     blk = self.Blocks.get(self.Blocks.BLOCKS[num_blk])
     if blk.write_disable_bit is not None and write_disable_bit & (
         1 << blk.write_disable_bit
     ):
         mask_wr_data.set(1)
     else:
         for e in self.Fields.EFUSES:
             field = self.Fields.get(e)
             if blk.id == field.block and field.block == num_blk:
                 if field.write_disable_bit is not None and write_disable_bit & (
                     1 << field.write_disable_bit
                 ):
                     data = self.read_field(field.name)
                     data.set(1)
                     mask_wr_data.pos = mask_wr_data.length - (
                         field.word * 32 + field.pos + data.len
                     )
                     mask_wr_data.overwrite(data)
     mask_wr_data.invert()
     return wr_data & mask_wr_data