Home  >  Support  >  Support Forum  >  Programmable XBee S2B freezes after sleeping the radio
Notice! We've recently migrated to using a new forum, we hope you enjoy it. If you are an existing member and this is your first time visiting our new forum, please reset your password to be able to sign in.

Programmable XBee S2B freezes after sleeping the radio

0 votes
I'm writing an application for a programmable S2B which in one configuration needs to sleep the radio during initialization (before entry into the main for loop). I'm seeing the application freeze inside the sys_xbee_tick() function. I traced it to the processing of a modem status == joined (2) message which calls the internal handler. The handler never returns. The handler basically sends a bunch of AT command queries to the EM250. Since the watchdog doesn't reset the CPU, I'm assuming it is stuck inside the loop in the xbee_ser_write function waiting for the bytes to go to the EM250's UART, but the radio is sleeping. As far as I can tell, this is the only loop that resets the watchdog timer, from xbee_serial_hcs08.c, line 183 and onward:
case SERIAL_PORT_SCI2: // EM250 while (length--) { // SCI2S1_TDRE -- 0 = sending, 1 = ready for byte // PTDD_PTDD6 -- 0 = clear to send, 1 = not clear while (! SCI2S1_TDRE || PTDD_PTDD6) { __RESET_WATCHDOG(); } SCI2D = *((const byte FAR *)buffer)++; } break;

How do I prevent the joined message from triggering this freeze?
asked May 6 in XBee Programmable Development by Andy III New to the Community (1 point)
edited May 6 by Andy III

Please log in or register to answer this question.

1 Answer

0 votes
Best answer
Try adding an end If statement having the processor query /CTS. If /CTS is not active, then do not query the radio.
answered May 6 by mvut Veteran of the Digi Community (1,552 points)
selected May 6 by Andy III
My code is not querying the radio.  That code is part of the XBee framework that handles modem status messages.  I have the modem status handler disabled in my config.xml.  This is some library code that is updating the network address and other values in the xbee device struct.
I tried as you suggested in the main for loop around sys_xbee_tick() and it worked.  Thank you very much! I added if (xbee_ser_get_cts(&(xdev.serport))) in front of sys_xbee_tick().
Contact a Digi expert and get started today! CONTACT US