[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Commit-gnuradio] r7387 - in usrp2/branches/developers/eb/u2-precompute/
From: |
eb |
Subject: |
[Commit-gnuradio] r7387 - in usrp2/branches/developers/eb/u2-precompute/firmware: apps lib |
Date: |
Wed, 9 Jan 2008 07:33:44 -0700 (MST) |
Author: eb
Date: 2008-01-09 07:33:44 -0700 (Wed, 09 Jan 2008)
New Revision: 7387
Modified:
usrp2/branches/developers/eb/u2-precompute/firmware/apps/rx_only.c
usrp2/branches/developers/eb/u2-precompute/firmware/apps/tx_only.c
usrp2/branches/developers/eb/u2-precompute/firmware/lib/buffer_pool.h
usrp2/branches/developers/eb/u2-precompute/firmware/lib/dbsm.c
usrp2/branches/developers/eb/u2-precompute/firmware/lib/dbsm.h
Log:
speedups for firmware; merge after testing on h/w
Modified: usrp2/branches/developers/eb/u2-precompute/firmware/apps/rx_only.c
===================================================================
--- usrp2/branches/developers/eb/u2-precompute/firmware/apps/rx_only.c
2008-01-09 13:21:11 UTC (rev 7386)
+++ usrp2/branches/developers/eb/u2-precompute/firmware/apps/rx_only.c
2008-01-09 14:33:44 UTC (rev 7387)
@@ -37,9 +37,6 @@
#include <string.h>
-#define USE_BUFFER_INTERRUPT 0 // 0 or 1
-
-
static int timer_delta = MASTER_CLK_RATE/1000; // tick at 1kHz
/*
@@ -172,7 +169,7 @@
bp_clear_buf(DSP_RX_BUF_1);
}
-void
+inline static void
buffer_irq_handler(unsigned irq)
{
uint32_t status = buffer_pool_status->status;
@@ -210,9 +207,6 @@
// Control LEDs
hal_set_leds(0x0, 0x3);
- if (USE_BUFFER_INTERRUPT)
- pic_register_handler(IRQ_BUFFER, buffer_irq_handler);
-
pic_register_handler(IRQ_OVERRUN, overrun_irq_handler);
pic_register_handler(IRQ_UNDERRUN, underrun_irq_handler);
@@ -251,8 +245,6 @@
}
while(1){
- if (!USE_BUFFER_INTERRUPT)
- buffer_irq_handler(0);
- // FIXME perhaps handle low-pri stuff here
+ buffer_irq_handler(0);
}
}
Modified: usrp2/branches/developers/eb/u2-precompute/firmware/apps/tx_only.c
===================================================================
--- usrp2/branches/developers/eb/u2-precompute/firmware/apps/tx_only.c
2008-01-09 13:21:11 UTC (rev 7386)
+++ usrp2/branches/developers/eb/u2-precompute/firmware/apps/tx_only.c
2008-01-09 14:33:44 UTC (rev 7387)
@@ -35,9 +35,7 @@
#include <stdlib.h>
#include <string.h>
-#define USE_BUFFER_INTERRUPT 0 // 0 or 1
-
static int timer_delta = MASTER_CLK_RATE/1000; // tick at 1kHz
/*
@@ -199,7 +197,7 @@
#endif
-void
+inline static void
buffer_irq_handler(unsigned irq)
{
//hal_toggle_leds(0x2);
@@ -231,9 +229,6 @@
// Control LEDs
hal_set_leds(0x0, 0x3);
- if (USE_BUFFER_INTERRUPT)
- pic_register_handler(IRQ_BUFFER, buffer_irq_handler);
-
pic_register_handler(IRQ_OVERRUN, overrun_irq_handler);
pic_register_handler(IRQ_UNDERRUN, underrun_irq_handler);
@@ -257,8 +252,7 @@
dbsm_start(&dsp_tx_sm);
while(1){
- if (!USE_BUFFER_INTERRUPT)
- buffer_irq_handler(0);
+ buffer_irq_handler(0);
}
}
Modified: usrp2/branches/developers/eb/u2-precompute/firmware/lib/buffer_pool.h
===================================================================
--- usrp2/branches/developers/eb/u2-precompute/firmware/lib/buffer_pool.h
2008-01-09 13:21:11 UTC (rev 7386)
+++ usrp2/branches/developers/eb/u2-precompute/firmware/lib/buffer_pool.h
2008-01-09 14:33:44 UTC (rev 7387)
@@ -24,7 +24,7 @@
// define to have common buffer operations inlined
-//#define INLINE_BUFFER_POOL 1
+#define INLINE_BUFFER_POOL 1
void bp_init(void);
Modified: usrp2/branches/developers/eb/u2-precompute/firmware/lib/dbsm.c
===================================================================
--- usrp2/branches/developers/eb/u2-precompute/firmware/lib/dbsm.c
2008-01-09 13:21:11 UTC (rev 7386)
+++ usrp2/branches/developers/eb/u2-precompute/firmware/lib/dbsm.c
2008-01-09 14:33:44 UTC (rev 7387)
@@ -62,9 +62,55 @@
buffer_state[sm->buf0] = BS_EMPTY;
buffer_state[sm->buf0 ^ 1] = BS_EMPTY;
+
+ sm->precomputed_receive_to_buf_ctrl_word[0] =
+ (BPC_READ
+ | BPC_BUFFER(sm->buf0)
+ | BPC_PORT(sm->recv_args.port)
+ | BPC_STEP(1)
+ | BPC_FIRST_LINE(sm->recv_args.first_line)
+ | BPC_LAST_LINE(sm->recv_args.last_line));
+
+ sm->precomputed_receive_to_buf_ctrl_word[1] =
+ (BPC_READ
+ | BPC_BUFFER(sm->buf0 ^ 1)
+ | BPC_PORT(sm->recv_args.port)
+ | BPC_STEP(1)
+ | BPC_FIRST_LINE(sm->recv_args.first_line)
+ | BPC_LAST_LINE(sm->recv_args.last_line));
+
+ sm->precomputed_send_from_buf_ctrl_word[0] =
+ (BPC_WRITE
+ | BPC_BUFFER(sm->buf0)
+ | BPC_PORT(sm->send_args.port)
+ | BPC_STEP(1)
+ | BPC_FIRST_LINE(sm->send_args.first_line)
+ | BPC_LAST_LINE(0)); // last line filled in at runtime
+
+ sm->precomputed_send_from_buf_ctrl_word[1] =
+ (BPC_WRITE
+ | BPC_BUFFER(sm->buf0 ^ 1)
+ | BPC_PORT(sm->send_args.port)
+ | BPC_STEP(1)
+ | BPC_FIRST_LINE(sm->send_args.first_line)
+ | BPC_LAST_LINE(0)); // last line filled in at runtime
+
}
+static inline void
+dbsm_receive_to_buf(dbsm_t *sm, int bufno)
+{
+ buffer_pool_ctrl->ctrl = sm->precomputed_receive_to_buf_ctrl_word[bufno & 1];
+}
+static inline void
+dbsm_send_from_buf(dbsm_t *sm, int bufno)
+{
+ buffer_pool_ctrl->ctrl =
+ (sm->precomputed_send_from_buf_ctrl_word[bufno & 1]
+ | BPC_LAST_LINE(buffer_pool_status->last_line[bufno] - 1));
+}
+
void
dbsm_start(dbsm_t *sm)
{
@@ -80,8 +126,7 @@
sm->tx_idle = true;
sm->rx_idle = false;
- bp_receive_to_buf(sm->buf0, sm->recv_args.port, 1,
- sm->recv_args.first_line, sm->recv_args.last_line);
+ dbsm_receive_to_buf(sm, sm->buf0);
buffer_state[sm->buf0] = BS_FILLING;
}
@@ -124,16 +169,14 @@
//
if (sm->inspect(sm, buf_this)){
// s/w handled the packet; refill the buffer
- bp_receive_to_buf(buf_this, sm->recv_args.port, 1,
- sm->recv_args.first_line, sm->recv_args.last_line);
+ dbsm_receive_to_buf(sm, buf_this);
buffer_state[buf_this] = BS_FILLING;
}
else { // s/w didn't handle this; pass it on
if(buffer_state[buf_other] == BS_EMPTY){
- bp_receive_to_buf(buf_other, sm->recv_args.port, 1,
- sm->recv_args.first_line, sm->recv_args.last_line);
+ dbsm_receive_to_buf(sm, buf_other);
buffer_state[buf_other] = BS_FILLING;
}
else
@@ -141,9 +184,7 @@
if (sm->tx_idle){
sm->tx_idle = false;
- bp_send_from_buf(buf_this, sm->send_args.port, 1,
- sm->send_args.first_line,
- buffer_pool_status->last_line[buf_this] - 1);
+ dbsm_send_from_buf(sm, buf_this);
buffer_state[buf_this] = BS_EMPTYING;
}
}
@@ -152,14 +193,11 @@
buffer_state[buf_this] = BS_EMPTY;
if (sm->rx_idle){
sm->rx_idle = false;
- bp_receive_to_buf(buf_this, sm->recv_args.port, 1,
- sm->recv_args.first_line, sm->recv_args.last_line);
+ dbsm_receive_to_buf(sm, buf_this);
buffer_state[buf_this] = BS_FILLING;
}
if (buffer_state[buf_other] == BS_FULL){
- bp_send_from_buf(buf_other, sm->send_args.port, 1,
- sm->send_args.first_line,
- buffer_pool_status->last_line[buf_other] - 1);
+ dbsm_send_from_buf(sm, buf_other);
buffer_state[buf_other] = BS_EMPTYING;
}
else
Modified: usrp2/branches/developers/eb/u2-precompute/firmware/lib/dbsm.h
===================================================================
--- usrp2/branches/developers/eb/u2-precompute/firmware/lib/dbsm.h
2008-01-09 13:21:11 UTC (rev 7386)
+++ usrp2/branches/developers/eb/u2-precompute/firmware/lib/dbsm.h
2008-01-09 14:33:44 UTC (rev 7387)
@@ -59,6 +59,8 @@
buf_cmd_args_t recv_args;
buf_cmd_args_t send_args;
inspector_t inspect;
+ uint32_t precomputed_receive_to_buf_ctrl_word[2];
+ uint32_t precomputed_send_from_buf_ctrl_word[2];
};
void dbsm_init(dbsm_t *sm, int buf0,
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Commit-gnuradio] r7387 - in usrp2/branches/developers/eb/u2-precompute/firmware: apps lib,
eb <=