summaryrefslogtreecommitdiff
path: root/cesar/hal/phy/src/phy.c
diff options
context:
space:
mode:
authorNicolas Schodet2011-05-12 14:23:18 +0200
committerNicolas Schodet2011-09-08 16:22:54 +0200
commit312e093208777de66cbc084c3bfc3dd710cfcd61 (patch)
tree9a58929ef68bd976259b8699580a914441aa23af /cesar/hal/phy/src/phy.c
parentc33847d8de066d8e2ac34594b4ff72d3f9f92593 (diff)
cesar/cp, cesar/hal/phy, cesar/mac/pbproc: use delta external, refs #572
When frequency error is known, use external delta. This means: - RESYS program must be patched, - change delta accumulation coefficients register, - store computed delta in hardware register.
Diffstat (limited to 'cesar/hal/phy/src/phy.c')
-rw-r--r--cesar/hal/phy/src/phy.c37
1 files changed, 36 insertions, 1 deletions
diff --git a/cesar/hal/phy/src/phy.c b/cesar/hal/phy/src/phy.c
index c8e1ee5dcb..f4ce010a2f 100644
--- a/cesar/hal/phy/src/phy.c
+++ b/cesar/hal/phy/src/phy.c
@@ -31,6 +31,7 @@
#include "config/phy/cap.h"
#include "lib/stats.h"
+#include "lib/fixed.h"
#include <string.h>
@@ -550,7 +551,10 @@ phy_init (void *user_data, phy_rx_fc_cb_t rx_fc_cb, phy_access_cb_t access_cb,
(TCC_HALF_IT_DATA,
PHY_PARAM_RX_FEC_PARAM__TCC_HALF_IT_DATA_LAST_PB));
PHY_DSPSS_CHANNEL_ESTIM_COEF = PHY_PARAMS (PHY_DSPSS, CHANNEL_ESTIM_COEF,
- COEF_PREAMBLE, COEF_RES_DELTA);
+ COEF_PREAMBLE)
+ | BF_FILL (PHY_DSPSS_CHANNEL_ESTIM_COEF,
+ (COEF_RES_DELTA,
+ PHY_PARAM_CHANNEL_ESTIM_COEF__COEF_RES_DELTA_INTERNAL));
PHY_DSPSS_RESYS_THRESHOLD = PHY_PARAMS (PHY_DSPSS, RESYS_THRESHOLD,
NB_SYNCP_1, NB_SYNCP_2);
PHY_DSPSS_OSYSEQ_CONFIG =
@@ -965,3 +969,34 @@ phy_set_tonemap (phy_t *ctx, blk_t *tonemap)
dbg_assert (timeout);
}
+void
+phy_freq_error_set (phy_t *ctx, bool sync, s32 rho_q30)
+{
+ dbg_claim (ctx);
+ if (sync != ctx->freq_error_sync)
+ {
+ if (sync)
+ {
+ PHY_DSPSS_CHANNEL_ESTIM_COEF =
+ PHY_PARAMS (PHY_DSPSS, CHANNEL_ESTIM_COEF, COEF_PREAMBLE)
+ | BF_FILL (
+ PHY_DSPSS_CHANNEL_ESTIM_COEF,
+ (COEF_RES_DELTA,
+ PHY_PARAM_CHANNEL_ESTIM_COEF__COEF_RES_DELTA_EXTERNAL));
+ }
+ else
+ {
+ PHY_DSPSS_CHANNEL_ESTIM_COEF =
+ PHY_PARAMS (PHY_DSPSS, CHANNEL_ESTIM_COEF, COEF_PREAMBLE)
+ | BF_FILL (
+ PHY_DSPSS_CHANNEL_ESTIM_COEF,
+ (COEF_RES_DELTA,
+ PHY_PARAM_CHANNEL_ESTIM_COEF__COEF_RES_DELTA_INTERNAL));
+ }
+ phy_resys_patch (ctx, sync);
+ ctx->freq_error_sync = sync;
+ }
+ PHY_DSPSS_MACACKE_DELTA_USED = fixed_round (
+ -rho_q30, 30 - PHY_DSPSS_MACACKE_DELTA_USED__VALUE__RHO_Q);
+}
+