, , . ..: '48h-53h'. , . , , .
:
def get_sub_register_value(sub_reg_bits_addr, bit_string):
"""
Given a register address description string, and a register value
string, return the bits from the value described by the address
:param sub_reg_bits_addr: string of the form '48h-53h'
:param bit_string: register value string of the form,
'00000800031C1060EC9FBD3C00000000'
:return: returns string of sub register: eg
"""
start, end = (int(x[:-1], 16) for x in sub_reg_bits_addr.split('-'))
value = int(bit_string, 16)
mask = (1 << (end - start + 1)) - 1
return ("%x" % ((value >> start) & mask)).upper()
:
EPC = '00000800031C1060EC9FBD3C0000000'
agency = '48h-53h'
pattern = 'FEDCBA98765432109876543210'
assert get_sub_register_value(agency, EPC) == '1C1'
assert get_sub_register_value('0h-3h', pattern) == '0'
assert get_sub_register_value('1h-4h', pattern) == '8'
assert get_sub_register_value('5h-8h', pattern) == '0'
assert get_sub_register_value('5h-9h', pattern) == '10'
assert get_sub_register_value('4h-9h', pattern) == '21'
assert get_sub_register_value('3h-9h', pattern) == '42'