| | |
| | | //diagnostics->debug2 = dwt_read32bitoffsetreg(0x27, 0xc); |
| | | |
| | | } |
| | | #define B20_SIGN_EXTEND_TEST (0x00100000UL) |
| | | #define B20_SIGN_EXTEND_MASK (0xFFF00000UL) |
| | | /* offset from DRX_CONF_ID in bytes to 21-bit signed RX carrier integrator value */ |
| | | #define DRX_CARRIER_INT_OFFSET 0x28 |
| | | #define DRX_CARRIER_INT_LEN (3) |
| | | #define DRX_CARRIER_INT_MASK 0x001FFFFF |
| | | int32_t dwt_readcarrierintegrator(void) |
| | | { |
| | | uint32_t regval = 0 ; |
| | | int j ; |
| | | uint8_t buffer[DRX_CARRIER_INT_LEN] ; |
| | | |
| | | /* Read 3 bytes into buffer (21-bit quantity) */ |
| | | |
| | | dwt_readfromdevice(DRX_CONF_ID,DRX_CARRIER_INT_OFFSET,DRX_CARRIER_INT_LEN, buffer) ; |
| | | |
| | | for (j = 2 ; j >= 0 ; j --) // arrange the three bytes into an unsigned integer value |
| | | { |
| | | regval = (regval << 8) + buffer[j] ; |
| | | } |
| | | |
| | | if (regval & B20_SIGN_EXTEND_TEST) regval |= B20_SIGN_EXTEND_MASK ; // sign extend bit #20 to whole word |
| | | else regval &= DRX_CARRIER_INT_MASK ; // make sure upper bits are clear if not sign extending |
| | | |
| | | return (int32_t) regval ; // cast unsigned value to signed quantity. |
| | | } |
| | | /*! ------------------------------------------------------------------------------------------------------------------ |
| | | * @fn dwt_readtxtimestamp() |
| | | * |