diff --git a/atusb/fw/atspi/atspi.c b/atusb/fw/atspi/atspi.c index cee1732..7ca229b 100644 --- a/atusb/fw/atspi/atspi.c +++ b/atusb/fw/atspi/atspi.c @@ -18,10 +18,31 @@ #include "version.h" +static int in_test_mode = 0; + + +static void set_test_mode(int on) +{ + in_test_mode = on; + if (on) { + TST_MODE |= 1 << TST_BIT; + TST = 1; + LED_MODE |= 1 << LED_BIT; + } else { + TST = 0; + TST_MODE &= ~(1 << TST_BIT); + LED_MODE &= ~(1 << LED_BIT); + LED = 0; + } +} + + void reset_rf(void) { int i; + set_test_mode(0); + nRST_RF = 0; /* * 11.4.12: min 625 ns. @@ -32,6 +53,12 @@ void reset_rf(void) } +void test_mode(void) +{ + set_test_mode(1); +} + + static void init_io(void) { /* @@ -44,6 +71,7 @@ static void init_io(void) * nRST_RF push-pull 1 * IRQ_RF open drain 1 (input) * SLP_TR push-pull 0 + * TST open drain 0 * * LED push-pull 0 (set up by boot loader) * @@ -63,7 +91,7 @@ static void init_io(void) SLP_TR = 0; SLP_TR_MODE |= 1 << SLP_TR_BIT; - P0 = 1; /* IRQ_RF = 1; LED = 0; the rest is unused */ + P0 = 1; /* IRQ_RF = 1; LED = 0; TST = Z; the rest is unused */ P3 = 0; #if 0 @@ -104,6 +132,10 @@ void main(void) ep0_init(); while (1) { + if (in_test_mode) { + i++; + LED = !(i >> 13); + } usb_poll(); } } diff --git a/atusb/fw/atspi/ep0.c b/atusb/fw/atspi/ep0.c index e2e4ecc..643dead 100644 --- a/atusb/fw/atspi/ep0.c +++ b/atusb/fw/atspi/ep0.c @@ -26,6 +26,7 @@ extern void reset_rf(void); +extern void test_mode(void); #define debug(...) @@ -151,6 +152,11 @@ static __bit my_setup(struct setup_request *setup) __reentrant usb_send(&ep0, buf, 1, NULL, NULL); return 1; + case ATSPI_TO_DEV(ATSPI_TEST): + debug("ATSPI_TEST\n"); + test_mode(); + return 1; + case ATSPI_TO_DEV(ATSPI_REG_WRITE): debug("ATSPI_REG_WRITE\n"); nSS = 0; diff --git a/atusb/fw/common/io.h b/atusb/fw/common/io.h index 7ab8930..eac4355 100644 --- a/atusb/fw/common/io.h +++ b/atusb/fw/common/io.h @@ -30,5 +30,6 @@ #define nRST_RF P2_0 #define IRQ_RF P0_0 #define SLP_TR P2_1 +#define TST P0_7 #endif /* !IO_H */ diff --git a/atusb/fw/include/at86rf230.h b/atusb/fw/include/at86rf230.h index 20a3aa3..fb66b96 100644 --- a/atusb/fw/include/at86rf230.h +++ b/atusb/fw/include/at86rf230.h @@ -67,6 +67,9 @@ enum { REG_XAH_CTRL = 0x2c, REG_CSMA_SEED_0 = 0x2d, REG_CSMA_SEED_1 = 0x2e, + + REG_CONT_TX_0 = 0x36, + REG_CONT_TX_1 = 0x3d, }; /* --- TRX_STATUS [7] ------------------------------------------------------ */ @@ -113,7 +116,7 @@ enum { TRAC_STATUS_INVALID = 7 }; -/* --- TRX_CMD [4:0] ----------------------------------------------------- */ +/* --- TRX_STATE [4:0] ----------------------------------------------------- */ #define TRX_CMD_SHIFT 0 #define TRX_CMD_MASK 7 @@ -285,4 +288,15 @@ enum { #define CSMA_SEED_1_SHIFT 0 #define CSMA_SEED_1_MASK 7 +/* --- REG_CONT_TX_0 [7:0] ------------------------------------------------- */ + +#define CONT_TX_MAGIC 0x0f + +/* --- REG_CONT_TX_1 [7:0] ------------------------------------------------- */ + +#define CONT_TX_MOD 0x00 /* modulated */ +#define CONT_TX_M2M 0x10 /* f_CH-2 MHz */ +#define CONT_TX_M500K 0x80 /* f_CH-0.5 MHz */ +#define CONT_TX_P500K 0xc0 /* f_CH+0.5 MHz */ + #endif /* !AT86RF230_H */ diff --git a/atusb/fw/include/atspi/ep0.h b/atusb/fw/include/atspi/ep0.h index 4dc3928..bc128ba 100644 --- a/atusb/fw/include/atspi/ep0.h +++ b/atusb/fw/include/atspi/ep0.h @@ -23,6 +23,7 @@ * * host-> ATSPI_RF_RESET - - 0 * ->host ATSPI_POLL_INT - - 1 + * host-> ATSPI_TEST - - 0 * * host-> ATSPI_REG_WRITE value addr 0 * ->host ATSPI_REG_READ - addr 1 @@ -36,10 +37,11 @@ * EP0 protocol: * * 0.0 initial release + * 0.1 addition of ATSPI_TEST */ #define EP0ATSPI_MAJOR 0 /* EP0 protocol, major revision */ -#define EP0ATSPI_MINOR 0 /* EP0 protocol, minor revision */ +#define EP0ATSPI_MINOR 1 /* EP0 protocol, minor revision */ #define HW_TYPE_100813 0 /* 100813 */ @@ -65,6 +67,7 @@ enum atspi_requests { ATSPI_RESET, ATSPI_RF_RESET = 0x10, ATSPI_POLL_INT, + ATSPI_TEST, ATSPI_REG_WRITE = 0x20, ATSPI_REG_READ, ATSPI_BUF_WRITE,