projects
/
fw
/
altos
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
altos: Make sure cc1120 is initialized correctly at startup time
[fw/altos]
/
src
/
drivers
/
ao_cc1120.c
diff --git
a/src/drivers/ao_cc1120.c
b/src/drivers/ao_cc1120.c
index 5156b7b2c22a3fdcbd5d933a2f29be6d633a18fb..63f7cd890ec4c5a0d34d785c9d1485ee48105f05 100644
(file)
--- a/
src/drivers/ao_cc1120.c
+++ b/
src/drivers/ao_cc1120.c
@@
-77,13
+77,13
@@
ao_radio_reg_write(uint16_t addr, uint8_t value)
printf("\t\tao_radio_reg_write (%04x): %02x\n", addr, value);
#endif
if (CC1120_IS_EXTENDED(addr)) {
printf("\t\tao_radio_reg_write (%04x): %02x\n", addr, value);
#endif
if (CC1120_IS_EXTENDED(addr)) {
- data[0] = ((
1
<< CC1120_READ) |
+ data[0] = ((
0
<< CC1120_READ) |
(0 << CC1120_BURST) |
CC1120_EXTENDED);
data[1] = addr;
d = 2;
} else {
(0 << CC1120_BURST) |
CC1120_EXTENDED);
data[1] = addr;
d = 2;
} else {
- data[0] = ((
1
<< CC1120_READ) |
+ data[0] = ((
0
<< CC1120_READ) |
(0 << CC1120_BURST) |
addr);
d = 1;
(0 << CC1120_BURST) |
addr);
d = 1;
@@
-197,8
+197,8
@@
ao_radio_recv_abort(void)
*
* To make the tone last for 200ms, we need 2000 * .2 = 400 bits or 50 bytes
*/
*
* To make the tone last for 200ms, we need 2000 * .2 = 400 bits or 50 bytes
*/
-#define RDF_DRATE_E
6
-#define RDF_DRATE_M
511705
+#define RDF_DRATE_E
5
+#define RDF_DRATE_M
25166
#define RDF_PACKET_LEN 50
static const uint16_t rdf_setup[] = {
#define RDF_PACKET_LEN 50
static const uint16_t rdf_setup[] = {
@@
-216,6
+216,11
@@
static const uint16_t rdf_setup[] = {
(CC1120_PKT_CFG1_ADDR_CHECK_CFG_NONE << CC1120_PKT_CFG1_ADDR_CHECK_CFG) |
(CC1120_PKT_CFG1_CRC_CFG_DISABLED << CC1120_PKT_CFG1_CRC_CFG) |
(0 << CC1120_PKT_CFG1_APPEND_STATUS)),
(CC1120_PKT_CFG1_ADDR_CHECK_CFG_NONE << CC1120_PKT_CFG1_ADDR_CHECK_CFG) |
(CC1120_PKT_CFG1_CRC_CFG_DISABLED << CC1120_PKT_CFG1_CRC_CFG) |
(0 << CC1120_PKT_CFG1_APPEND_STATUS)),
+ CC1120_PKT_CFG0, ((0 << CC1120_PKT_CFG0_RESERVED7) |
+ (CC1120_PKT_CFG0_LENGTH_CONFIG_FIXED << CC1120_PKT_CFG0_LENGTH_CONFIG) |
+ (0 << CC1120_PKT_CFG0_PKG_BIT_LEN) |
+ (0 << CC1120_PKT_CFG0_UART_MODE_EN) |
+ (0 << CC1120_PKT_CFG0_UART_SWAP_EN)),
};
#define int_pin(w) printf("\t%s: %d\n", \
};
#define int_pin(w) printf("\t%s: %d\n", \
@@
-720,7
+725,7
@@
static const struct ao_cmds ao_radio_cmds[] = {
{ ao_radio_test, "C <1 start, 0 stop, none both>\0Radio carrier test" },
#if CC1120_DEBUG
{ ao_radio_show, "R\0Show CC1120 status" },
{ ao_radio_test, "C <1 start, 0 stop, none both>\0Radio carrier test" },
#if CC1120_DEBUG
{ ao_radio_show, "R\0Show CC1120 status" },
- { ao_radio_beep, "
B
\0Emit an RDF beacon" },
+ { ao_radio_beep, "
b
\0Emit an RDF beacon" },
#endif
{ 0, NULL }
};
#endif
{ 0, NULL }
};
@@
-728,8
+733,18
@@
static const struct ao_cmds ao_radio_cmds[] = {
void
ao_radio_init(void)
{
void
ao_radio_init(void)
{
+ int i;
+
ao_radio_configured = 0;
ao_spi_init_cs (AO_CC1120_SPI_CS_PORT, (1 << AO_CC1120_SPI_CS_PIN));
ao_radio_configured = 0;
ao_spi_init_cs (AO_CC1120_SPI_CS_PORT, (1 << AO_CC1120_SPI_CS_PIN));
+ AO_CC1120_SPI_CS_PORT.bsrr = ((uint32_t) (1 << AO_CC1120_SPI_CS_PIN));
+ for (i = 0; i < 10000; i++) {
+ if ((SPI_2_GPIO.idr & (1 << SPI_2_MISO)) == 0)
+ break;
+ }
+ AO_CC1120_SPI_CS_PORT.bsrr = (1 << AO_CC1120_SPI_CS_PIN);
+ if (i == 10000)
+ ao_panic(AO_PANIC_SELF_TEST);
ao_cmd_register(&ao_radio_cmds[0]);
}
ao_cmd_register(&ao_radio_cmds[0]);
}