You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
79 lines
1.6 KiB
79 lines
1.6 KiB
#include "RegisterField.h"
|
|
|
|
/*************************************************************************************************/
|
|
quint32 RegisterField::getBitPosition()
|
|
{
|
|
auto bitPosition = 0U;
|
|
auto mask = _mask;
|
|
while(true)
|
|
{
|
|
if((mask & 0x01) == 0x01)
|
|
{
|
|
break;
|
|
}
|
|
|
|
bitPosition++;
|
|
mask = mask >> 1;
|
|
}
|
|
|
|
return bitPosition;
|
|
}
|
|
|
|
/*************************************************************************************************/
|
|
quint32 RegisterField::getBitLength()
|
|
{
|
|
auto bitlength = 0U;
|
|
auto mask = _mask >> getBitPosition();
|
|
while(true)
|
|
{
|
|
if((mask & 0x01) != 0x01)
|
|
{
|
|
break;
|
|
}
|
|
|
|
bitlength++;
|
|
mask = mask >> 1;
|
|
}
|
|
|
|
return bitlength;
|
|
}
|
|
|
|
/*************************************************************************************************/
|
|
RegisterField::RegisterField(quint32 mask, bool isSigned)
|
|
{
|
|
_mask = mask;
|
|
_isSigned = isSigned;
|
|
}
|
|
|
|
/*************************************************************************************************/
|
|
void RegisterField::update(quint32 value)
|
|
{
|
|
if(_value == value)
|
|
{
|
|
return;
|
|
}
|
|
_value = value;
|
|
|
|
quint32 temp = 0;
|
|
temp = (_value << getBitPosition()) & _mask;
|
|
|
|
emit fieldUpdated(_value, ~_mask);
|
|
}
|
|
|
|
/*************************************************************************************************/
|
|
quint32 RegisterField::getRawValue()
|
|
{
|
|
return _value;
|
|
}
|
|
|
|
/*************************************************************************************************/
|
|
void RegisterField::ExtractValue(quint32 value)
|
|
{
|
|
auto temp = (value >> getBitPosition()) & (_mask >> getBitPosition());
|
|
if(_isSigned && ((temp >> (getBitLength() - 1)) & 0x01) == 0x01)
|
|
{
|
|
temp |= (~(_mask >> getBitPosition()));
|
|
}
|
|
|
|
_value = temp;
|
|
}
|
|
|