[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Commit-gnuradio] r6036 - gnuradio/branches/developers/matt/u2f/firmware
From: |
matt |
Subject: |
[Commit-gnuradio] r6036 - gnuradio/branches/developers/matt/u2f/firmware |
Date: |
Thu, 19 Jul 2007 18:07:41 -0600 (MDT) |
Author: matt
Date: 2007-07-19 18:07:41 -0600 (Thu, 19 Jul 2007)
New Revision: 6036
Modified:
gnuradio/branches/developers/matt/u2f/firmware/test1_main.c
Log:
double buffering demo
Modified: gnuradio/branches/developers/matt/u2f/firmware/test1_main.c
===================================================================
--- gnuradio/branches/developers/matt/u2f/firmware/test1_main.c 2007-07-20
00:06:36 UTC (rev 6035)
+++ gnuradio/branches/developers/matt/u2f/firmware/test1_main.c 2007-07-20
00:07:41 UTC (rev 6036)
@@ -17,14 +17,69 @@
void int_handler_func () __attribute__ ((interrupt_handler));
-void int_handler_func () {
+void int_handler_func () {}
+void double_buffering();
+
+int
+main(void)
+{
int i;
+
+ u2_init();
+
+ // Control LEDs
+ output_regs->leds = 0x02;
+
+ // Turn on ADCs
+ output_regs->adc_ctrl = 0x0A;
+
+ // Set up TX Chain
+ dsp_tx_regs->freq = 0;
+ dsp_tx_regs->scale_i = 1;
+ dsp_tx_regs->scale_q = 1;
+ dsp_tx_regs->interp_rate = 32;
+
+ // Set up RX Chain
+ dsp_rx_regs->freq = 0;
+ dsp_rx_regs->scale_i = 1;
+ dsp_rx_regs->scale_q = 1;
+ dsp_rx_regs->decim_rate = 32;
+
+ // Set up buffer control, using only 4 for now
+ for(i=0;i<4;i++)
+ buffer_state[i] = EMPTY;
+
+ // Set up DSP RX
+ buffer_state[0] = FILLING;
+ serdes_tx_idle = 1;
+ receive_to_buf(0, 1, 1, 10, 509); // DSP_RX to buffer 0, use 500 lines
+
+ dsp_rx_regs->run_rx = 1; // Start DSP_RX
+ sim_puts("Done DSP RX setup\n");
+
+ // Set up serdes RX
+ buffer_state[2] = FILLING;
+ dsp_tx_idle = 1;
+ receive_to_buf(2, 0, 1, 5, 504);
+
+ dsp_tx_regs->run_tx = 1;
+ sim_puts("Done DSP TX setup\n");
+
+ while(1) {
+ double_buffering();
+ }
+
+ sim_finish();
+ return 1;
+}
+
+void
+double_buffering() {
unsigned int *status = (unsigned int *) 0xB020;
unsigned int localstatus = *status;
if(localstatus & 1) {
clear_buf(0);
-
if(buffer_state[0] == FILLING) {
buffer_state[0] = FULL;
if(buffer_state[1] == EMPTY) {
@@ -43,7 +98,7 @@
buffer_state[0] = EMPTY;
if(dsp_rx_idle) {
dsp_rx_idle = 0;
- receive_to_buf(0, 1, 1, 10, 509); // DSP_RX to buffer 1, use 500 lines
+ receive_to_buf(0, 1, 1, 10, 509); // DSP_RX to buffer 0, use 500 lines
buffer_state[0] = FILLING;
}
if(buffer_state[1] == FULL) {
@@ -53,6 +108,7 @@
else
serdes_tx_idle = 1;
}
+ sim_puts("Int Proc'ed 0\n");
}
if(localstatus & 2) {
clear_buf(1);
@@ -84,67 +140,74 @@
else
serdes_tx_idle = 1;
}
+ sim_puts("Int Proc'ed 1\n");
}
- sim_puts("Int Proc'ed\n");
+ if(localstatus & 4) {
+ clear_buf(2);
+ if(buffer_state[2] == FILLING) {
+ buffer_state[2] = FULL;
+ if(buffer_state[3] == EMPTY) {
+ receive_to_buf(3, 0, 1, 5, 504); // SERDES_RX to buffer 3, use 500
lines
+ buffer_state[3] = FILLING;
+ }
+ else
+ serdes_rx_idle = 1;
+ if(dsp_tx_idle) {
+ dsp_tx_idle = 0;
+ send_from_buf(2, 1, 1, 5, 504); // DSP_TX from buffer 2
+ buffer_state[2] = EMPTYING;
+ }
+ }
+ else { // buffer was emptying
+ buffer_state[2] = EMPTY;
+ if(serdes_rx_idle) {
+ serdes_rx_idle = 0;
+ receive_to_buf(2, 0, 1, 5, 504); // SERDES_RX to buffer 2
+ buffer_state[2] = FILLING;
+ }
+ if(buffer_state[3] == FULL) {
+ send_from_buf(3, 1, 1, 5, 504); // DSP_TX from buffer 3
+ buffer_state[3] = EMPTYING;
+ }
+ else
+ dsp_tx_idle = 1;
+ }
+ sim_puts("Int Proc'ed 2\n");
+ }
+ if(localstatus & 8) {
+ clear_buf(3);
+ if(buffer_state[3] == FILLING) {
+ buffer_state[3] = FULL;
+ if(buffer_state[2] == EMPTY) {
+ receive_to_buf(2, 0, 1, 5, 504); // SERDES_RX to buffer 2, use 500
lines
+ buffer_state[2] = FILLING;
+ }
+ else
+ serdes_rx_idle = 1;
+ if(dsp_tx_idle) {
+ dsp_tx_idle = 0;
+ send_from_buf(3, 1, 1, 5, 504); // DSP_TX from buffer 3
+ buffer_state[3] = EMPTYING;
+ }
+ }
+ else { // buffer was emptying
+ buffer_state[3] = EMPTY;
+ if(serdes_rx_idle) {
+ serdes_rx_idle = 0;
+ receive_to_buf(3, 0, 1, 5, 504); // SERDES_RX to buffer 3
+ buffer_state[3] = FILLING;
+ }
+ if(buffer_state[2] == FULL) {
+ send_from_buf(2, 1, 1, 5, 504); // DSP_TX from buffer 2
+ buffer_state[2] = EMPTYING;
+ }
+ else
+ dsp_tx_idle = 1;
+ }
+ sim_puts("Int Proc'ed 3\n");
+ }
}
-int
-main(void)
-{
- int i;
-
- u2_init();
-
- // Control LEDs
- output_regs->leds = 0x02;
-
- // Turn on ADCs
- output_regs->adc_ctrl = 0x0A;
-
- // Set up TX Chain
- dsp_tx_regs->freq = 0;
- dsp_tx_regs->scale_i = 1;
- dsp_tx_regs->scale_q = 1;
- dsp_tx_regs->interp_rate = 32;
-
- // Set up RX Chain
- dsp_rx_regs->freq = 0;
- dsp_rx_regs->scale_i = 1;
- dsp_rx_regs->scale_q = 1;
- dsp_rx_regs->decim_rate = 32;
-
- // Set up buffer control, using only 4 for now
- for(i=0;i<4;i++)
- buffer_state[i] = EMPTY;
- dsp_rx_buf = -1;
- dsp_tx_buf = -1;
- serdes_rx_buf = -1;
- serdes_tx_buf = -1;
-
- // Set up DSP RX
- dsp_rx_buf = 0;
- buffer_state[0] = FILLING;
- serdes_tx_idle = 1;
- receive_to_buf(0, 1, 1, 10, 509); // DSP_RX to buffer 0, use 500 lines
-
- dsp_rx_regs->run_rx = 1; // Start DSP_RX
- sim_puts("Done DSP RX setup\n");
-
- // Set up serdes TX
- serdes_tx_buf = 0;
-
-
- // Set SERDES RX
- //receive_to_buf(2, 0, 1, 5, 504); // SERDES_RX to buffer 2, use 500 lines
-
- //dsp_tx_regs->run_tx = 1;
-
- while(1) {};
- sim_finish();
- return 1;
-}
-
-
// Spare Code
#if 0
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Commit-gnuradio] r6036 - gnuradio/branches/developers/matt/u2f/firmware,
matt <=