From 3336d0f726afd1d43cf62280940e5fb91dab2e91 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Fri, 6 May 2011 21:13:19 -0700 Subject: altos: Fix BT link status pin for real TBT hardware The prototype used P2_1, while the real hardware uses P1_7. Lots of defines to make this work... Signed-off-by: Keith Packard --- src/ao_btm.c | 50 ++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 40 insertions(+), 10 deletions(-) (limited to 'src/ao_btm.c') diff --git a/src/ao_btm.c b/src/ao_btm.c index db0ff6b0..355c3ca4 100644 --- a/src/ao_btm.c +++ b/src/ao_btm.c @@ -208,26 +208,44 @@ ao_btm(void) __xdata struct ao_task ao_btm_task; +#if BT_LINK_ON_P2 +#define BT_PICTL_ICON PICTL_P2ICON +#define BT_PIFG P2IFG +#define BT_PDIR P2DIR +#define BT_PINP P2INP +#define BT_IEN2_PIE IEN2_P2IE +#endif +#if BT_LINK_ON_P1 +#define BT_PICTL_ICON PICTL_P1ICON +#define BT_PIFG P1IFG +#define BT_PDIR P1DIR +#define BT_PINP P1INP +#define BT_IEN2_PIE IEN2_P1IE +#endif + void ao_btm_check_link() __critical { - if (P2_1) { + /* Check the pin and configure the interrupt detector to wait for the + * pin to flip the other way + */ + if (BT_LINK_PIN) { ao_btm_connected = 0; - PICTL |= PICTL_P2ICON; + PICTL |= BT_PICTL_ICON; } else { ao_btm_connected = 1; - PICTL &= ~PICTL_P2ICON; + PICTL &= ~BT_PICTL_ICON; } } void ao_btm_isr(void) { - if (P2IFG & (1 << 1)) { + if (BT_PIFG & (1 << BT_LINK_PIN_INDEX)) { ao_btm_check_link(); ao_wakeup(&ao_btm_connected); } - P2IFG = 0; + BT_PIFG = 0; } void @@ -240,14 +258,26 @@ ao_btm_init (void) * Configure link status line */ - /* Set P2_1 to input, pull-down */ - P2DIR &= ~(1 << 1); - P2INP |= P2INP_MDP2_1_TRISTATE; + /* Set pin to input */ + BT_PDIR &= ~(1 << BT_LINK_PIN_INDEX); + + /* Set pin to tri-state */ + BT_PINP |= (1 << BT_LINK_PIN_INDEX); - /* Enable P2 interrupts */ - IEN2 |= IEN2_P2IE; + /* Enable interrupts */ + IEN2 |= BT_IEN2_PIE; + + /* Check current pin state */ ao_btm_check_link(); + +#if BT_LINK_ON_P2 + /* Eable the pin interrupt */ PICTL |= PICTL_P2IEN; +#endif +#if BT_LINK_ON_P1 + /* Enable pin interrupt */ + P1IEN |= (1 << BT_LINK_PIN_INDEX); +#endif ao_add_task(&ao_btm_task, ao_btm, "bt"); } -- cgit v1.2.3 From 6d858b64ee0e8c227c149d2af6d2d634536964f4 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Fri, 6 May 2011 22:12:31 -0700 Subject: altos: pull TBT v0.1 ser_reset line low This line resets the BT module if held low for three seconds. Signed-off-by: Keith Packard --- src/ao_btm.c | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'src/ao_btm.c') diff --git a/src/ao_btm.c b/src/ao_btm.c index 355c3ca4..241b3f6a 100644 --- a/src/ao_btm.c +++ b/src/ao_btm.c @@ -254,6 +254,15 @@ ao_btm_init (void) ao_serial_init(); ao_serial_set_speed(AO_SERIAL_SPEED_19200); +#if BT_LINK_ON_P1 + /* + * Configure ser reset line + */ + + P1_6 = 0; + P1DIR |= (1 << 6); +#endif + /* * Configure link status line */ -- cgit v1.2.3 From 22e3ac0eb014b8255029763ae8180ad3527ba306 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Fri, 6 May 2011 22:42:32 -0700 Subject: altos: Add beeper to TBT v0.1 It's available, let's use it. Signed-off-by: Keith Packard --- src/Makefile.proto | 1 + src/ao_btm.c | 4 ++++ src/ao_pins.h | 2 +- 3 files changed, 6 insertions(+), 1 deletion(-) (limited to 'src/ao_btm.c') diff --git a/src/Makefile.proto b/src/Makefile.proto index 04b708b2..c86de823 100644 --- a/src/Makefile.proto +++ b/src/Makefile.proto @@ -259,6 +259,7 @@ TBT_V_0_1_SRC = \ $(TBT_BASE_SRC) \ $(SPI_DRIVER_SRC) \ $(M25_DRIVER_SRC) \ + $(BEEP_DRIVER_SRC) \ ao_log_telem.c # diff --git a/src/ao_btm.c b/src/ao_btm.c index 241b3f6a..4b3c5209 100644 --- a/src/ao_btm.c +++ b/src/ao_btm.c @@ -166,6 +166,10 @@ ao_btm(void) */ ao_delay(AO_SEC_TO_TICKS(3)); +#if HAS_BEEP + ao_beep_for(AO_BEEP_MID, AO_MS_TO_TICKS(200)); +#endif + /* * The first time we connect, the BTM-180 comes up at 19200 baud. * After that, it will remember and come up at 57600 baud. So, see diff --git a/src/ao_pins.h b/src/ao_pins.h index 21b99027..4a03ca50 100644 --- a/src/ao_pins.h +++ b/src/ao_pins.h @@ -250,7 +250,7 @@ #if defined(TELEBT_V_0_1) #define HAS_FLIGHT 0 #define HAS_USB 1 - #define HAS_BEEP 0 + #define HAS_BEEP 1 #define HAS_SERIAL_1 1 #define HAS_SERIAL_1_ALT_1 1 #define HAS_SERIAL_1_ALT_2 0 -- cgit v1.2.3 From 514348055630edec12224c4b0964240b929759a3 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Fri, 6 May 2011 22:42:58 -0700 Subject: altos: Debugging TBT issues -- check pin configuration after boot Make sure the serial pins are configured as peripherals Make sure the ser_reset and bt_link pins are going the right direction. Signed-off-by: Keith Packard --- src/ao_btm.c | 39 ++++++++++++++++++++++++--------------- 1 file changed, 24 insertions(+), 15 deletions(-) (limited to 'src/ao_btm.c') diff --git a/src/ao_btm.c b/src/ao_btm.c index 4b3c5209..490b2667 100644 --- a/src/ao_btm.c +++ b/src/ao_btm.c @@ -17,6 +17,21 @@ #include "ao.h" +#if BT_LINK_ON_P2 +#define BT_PICTL_ICON PICTL_P2ICON +#define BT_PIFG P2IFG +#define BT_PDIR P2DIR +#define BT_PINP P2INP +#define BT_IEN2_PIE IEN2_P2IE +#endif +#if BT_LINK_ON_P1 +#define BT_PICTL_ICON PICTL_P1ICON +#define BT_PIFG P1IFG +#define BT_PDIR P1DIR +#define BT_PINP P1INP +#define BT_IEN2_PIE IEN2_P1IE +#endif + int8_t ao_btm_stdio; __xdata uint8_t ao_btm_connected; @@ -166,6 +181,15 @@ ao_btm(void) */ ao_delay(AO_SEC_TO_TICKS(3)); +#if BT_LINK_ON_P1 + if ((P1DIR & (1 << 6)) == 0) + ao_panic(AO_PANIC_BT); + if ((P1DIR & (1 << 7)) != 0) + ao_panic(AO_PANIC_BT); + if ((P0SEL & ((1 << 5) | (1 << 4) | (1 << 3) | (1 << 2))) != + ((1 << 5) | (1 << 4) | (1 << 3) | (1 << 2))) + ao_panic(AO_PANIC_BT); +#endif #if HAS_BEEP ao_beep_for(AO_BEEP_MID, AO_MS_TO_TICKS(200)); #endif @@ -212,21 +236,6 @@ ao_btm(void) __xdata struct ao_task ao_btm_task; -#if BT_LINK_ON_P2 -#define BT_PICTL_ICON PICTL_P2ICON -#define BT_PIFG P2IFG -#define BT_PDIR P2DIR -#define BT_PINP P2INP -#define BT_IEN2_PIE IEN2_P2IE -#endif -#if BT_LINK_ON_P1 -#define BT_PICTL_ICON PICTL_P1ICON -#define BT_PIFG P1IFG -#define BT_PDIR P1DIR -#define BT_PINP P1INP -#define BT_IEN2_PIE IEN2_P1IE -#endif - void ao_btm_check_link() __critical { -- cgit v1.2.3 From 8be559baa979c15e78f8dba7879b383dbe3936d3 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Fri, 6 May 2011 22:59:15 -0700 Subject: altos: Hook up the P1 ISR for TeleBT v0.1 bt_link line Otherwise, we're heading off into the weeds... Signed-off-by: Keith Packard --- src/ao.h | 12 ++++++++++-- src/ao_btm.c | 3 +++ src/ao_usb.c | 2 ++ 3 files changed, 15 insertions(+), 2 deletions(-) (limited to 'src/ao_btm.c') diff --git a/src/ao.h b/src/ao.h index 226f9a22..600c488a 100644 --- a/src/ao.h +++ b/src/ao.h @@ -1367,9 +1367,17 @@ ao_packet_slave_init(uint8_t enable); /* ao_btm.c */ -/* Shared by USB, so the USB code calls this function */ +/* If bt_link is on P2, this interrupt is shared by USB, so the USB + * code calls this function. Otherwise, it's a regular ISR. + */ + void -ao_btm_isr(void); +ao_btm_isr(void) +#if BT_LINK_ON_P1 + __interrupt 15 +#endif + ; + void ao_btm_init(void); diff --git a/src/ao_btm.c b/src/ao_btm.c index 490b2667..172004e9 100644 --- a/src/ao_btm.c +++ b/src/ao_btm.c @@ -253,6 +253,9 @@ ao_btm_check_link() __critical void ao_btm_isr(void) +#if BT_LINK_ON_P1 + __interrupt 15 +#endif { if (BT_PIFG & (1 << BT_LINK_PIN_INDEX)) { ao_btm_check_link(); diff --git a/src/ao_usb.c b/src/ao_usb.c index ece6756a..dd752152 100644 --- a/src/ao_usb.c +++ b/src/ao_usb.c @@ -59,8 +59,10 @@ ao_usb_isr(void) __interrupt 6 if (USBCIF & USBCIF_RSTIF) ao_usb_set_interrupts(); #if HAS_BTM +#if BT_LINK_ON_P2 ao_btm_isr(); #endif +#endif } struct ao_usb_setup { -- cgit v1.2.3 From 66bdf0e066bc0bb7a326a6c2a9c88b69e5c1be66 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Fri, 6 May 2011 23:12:47 -0700 Subject: altos: clear CPU port 1 interrupt flag when handled Signed-off-by: Keith Packard --- src/ao_btm.c | 3 +++ src/ao_usb.c | 1 - 2 files changed, 3 insertions(+), 1 deletion(-) (limited to 'src/ao_btm.c') diff --git a/src/ao_btm.c b/src/ao_btm.c index 172004e9..a9306c10 100644 --- a/src/ao_btm.c +++ b/src/ao_btm.c @@ -257,6 +257,9 @@ ao_btm_isr(void) __interrupt 15 #endif { +#if BT_LINK_ON_P1 + P1IF = 0; +#endif if (BT_PIFG & (1 << BT_LINK_PIN_INDEX)) { ao_btm_check_link(); ao_wakeup(&ao_btm_connected); diff --git a/src/ao_usb.c b/src/ao_usb.c index dd752152..e4b7938d 100644 --- a/src/ao_usb.c +++ b/src/ao_usb.c @@ -46,7 +46,6 @@ void ao_usb_isr(void) __interrupt 6 { USBIF = 0; - IRCON2 &= ~IRCON2_USBIF; ao_usb_iif |= USBIIF; if (ao_usb_iif & 1) ao_wakeup(&ao_usb_task); -- cgit v1.2.3 From 479bdffa35d0b8d4e48868c8d20f3cb1549521ab Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Fri, 6 May 2011 23:55:23 -0700 Subject: Revert "altos: Debugging TBT issues -- check pin configuration after boot" This reverts commit 514348055630edec12224c4b0964240b929759a3. Looks like this was never a problem. --- src/ao_btm.c | 39 +++++++++++++++------------------------ 1 file changed, 15 insertions(+), 24 deletions(-) (limited to 'src/ao_btm.c') diff --git a/src/ao_btm.c b/src/ao_btm.c index a9306c10..44155ec1 100644 --- a/src/ao_btm.c +++ b/src/ao_btm.c @@ -17,21 +17,6 @@ #include "ao.h" -#if BT_LINK_ON_P2 -#define BT_PICTL_ICON PICTL_P2ICON -#define BT_PIFG P2IFG -#define BT_PDIR P2DIR -#define BT_PINP P2INP -#define BT_IEN2_PIE IEN2_P2IE -#endif -#if BT_LINK_ON_P1 -#define BT_PICTL_ICON PICTL_P1ICON -#define BT_PIFG P1IFG -#define BT_PDIR P1DIR -#define BT_PINP P1INP -#define BT_IEN2_PIE IEN2_P1IE -#endif - int8_t ao_btm_stdio; __xdata uint8_t ao_btm_connected; @@ -181,15 +166,6 @@ ao_btm(void) */ ao_delay(AO_SEC_TO_TICKS(3)); -#if BT_LINK_ON_P1 - if ((P1DIR & (1 << 6)) == 0) - ao_panic(AO_PANIC_BT); - if ((P1DIR & (1 << 7)) != 0) - ao_panic(AO_PANIC_BT); - if ((P0SEL & ((1 << 5) | (1 << 4) | (1 << 3) | (1 << 2))) != - ((1 << 5) | (1 << 4) | (1 << 3) | (1 << 2))) - ao_panic(AO_PANIC_BT); -#endif #if HAS_BEEP ao_beep_for(AO_BEEP_MID, AO_MS_TO_TICKS(200)); #endif @@ -236,6 +212,21 @@ ao_btm(void) __xdata struct ao_task ao_btm_task; +#if BT_LINK_ON_P2 +#define BT_PICTL_ICON PICTL_P2ICON +#define BT_PIFG P2IFG +#define BT_PDIR P2DIR +#define BT_PINP P2INP +#define BT_IEN2_PIE IEN2_P2IE +#endif +#if BT_LINK_ON_P1 +#define BT_PICTL_ICON PICTL_P1ICON +#define BT_PIFG P1IFG +#define BT_PDIR P1DIR +#define BT_PINP P1INP +#define BT_IEN2_PIE IEN2_P1IE +#endif + void ao_btm_check_link() __critical { -- cgit v1.2.3