Sinan, Things are not that easy, unfortunately. For port 4.1, that's where the interrupt line of the cc2420 is connected, you must use timer B for capture. This means that you will need to reprogram the whole timer subsystem such that timer B is driven by the internal DCO, and timer A is driven by the external 32kHz crystal oscillator.
Janos 2010/8/5 Sinan Yildirim <[email protected]>: > Hi again, > > I wanted to add some comments to my last reply. > > When I connect Timer A to SFD, I could get time= 0 from async event void > CaptureSFD.captured( uint16_t time ) and it means all timestamps are > invalid. Also, I could not get time values LocalTimeMicroC component and it > always returns 0. > > However, when I remove my modifications and connect SFD to Timer B again, I > can get time values LocalTimeMicroC component which uses timer A. > > So should I do something to time subsystem when I connect timer A to SFD? > > > 05 Ağustos 2010 12:35 tarihinde Sinan Yildirim <[email protected]> yazdı: >> >> Hi Thomas, >> >> I am working on a similar platform to Telos I think... (It is Genetlab >> Sensenode platform). I have connected TimerA to the SFD line as you said. I >> have modified the file HplCC2420InterruptsC. >> >> configuration HplCC2420InterruptsC { >> >> provides interface GpioCapture as CaptureSFD; >> provides interface GpioInterrupt as InterruptCCA; >> provides interface GpioInterrupt as InterruptFIFOP; >> >> } >> >> implementation { >> >> components HplMsp430GeneralIOC as GeneralIOC; >> components Msp430TimerC; >> components new GpioCaptureC() as CaptureSFDC; >> CaptureSFDC.Msp430TimerControl -> Msp430TimerC.ControlA0; >> CaptureSFDC.Msp430Capture -> Msp430TimerC.CaptureA0; >> // CaptureSFDC.Msp430TimerControl -> Msp430TimerC.ControlB1; >> // CaptureSFDC.Msp430Capture -> Msp430TimerC.CaptureB1; >> CaptureSFDC.GeneralIO -> GeneralIOC.Port41; >> >> components HplMsp430InterruptC; >> components new Msp430InterruptC() as InterruptCCAC; >> components new Msp430InterruptC() as InterruptFIFOPC; >> InterruptCCAC.HplInterrupt -> HplMsp430InterruptC.Port14; >> InterruptFIFOPC.HplInterrupt -> HplMsp430InterruptC.Port10; >> >> CaptureSFD = CaptureSFDC.Capture; >> InterruptCCA = InterruptCCAC.Interrupt; >> InterruptFIFOP = InterruptFIFOPC.Interrupt; >> >> } >> >> However, the node that I have programmed stopped sending and receiving >> packets after this modification... Any ideas? Do I need to make any other >> modifications? >> >> Thanks for your suggestions... >> >> K. Sinan YILDIRIM >> >> Ege University >> Computer Engineering Department >> Izmir, TURKEY >> >> >> >> 2010/8/4 Thomas Schmid <[email protected]> >>> >>> Hi Sinan, >>> >>> The problem is not in the TinyOS code. The hardware you use (I assume >>> TelosB or Sky?) does not support these timestamps by default. The >>> timestamps are taken when the SFD line toggles. This line is connected >>> to the TimerB, which is sourced from the 32kHz signal. Thus, you can >>> not get microsecond timestamps with it. >>> >>> You have two choices: >>> - Change TimerB to use a high-speed clock (note, DCO is not stable >>> enough, so your hardware has to have an external high-speed crystal or >>> clock) and rewire TinyOS to use TimerA for the virtual timer >>> subsystem. >>> - connect the SFD line to a TimerA input line. Then, use this to >>> capture the timestamps. >>> >>> Cheers, >>> >>> - Thomas >>> >>> >>> >>> 2010/8/4 Sinan Yildirim <[email protected]>: >>> > Hello all, >>> > >>> > I have a problem on microsecond precision timestamps. I am using CC24 >>> > radio >>> > chip and MSP430 microcontroller. As far as I understood, the packets >>> > are >>> > timestamped at CC2420ReceiveP and CC2420TransmitP files. >>> > >>> > /***************** CC2420Receive Commands ****************/ >>> > /** >>> > * Start frame delimiter signifies the beginning/end of a packet >>> > * See the CC2420 datasheet for details. >>> > */ >>> > async command void CC2420Receive.sfd( uint32_t time ) { >>> > if ( m_timestamp_size < TIMESTAMP_QUEUE_SIZE ) { >>> > uint8_t tail = ( ( m_timestamp_head + m_timestamp_size ) % >>> > TIMESTAMP_QUEUE_SIZE ); >>> > m_timestamp_queue[ tail ] = time; >>> > m_timestamp_size++; >>> > } >>> > } >>> > >>> > >>> > async event void CaptureSFD.captured( uint16_t time ) { >>> > uint32_t time32; >>> > uint8_t sfd_state = 0; >>> > atomic { >>> > >>> > time32 = getTime32(time); >>> > switch( m_state ) { >>> > >>> > case S_SFD: >>> > m_state = S_EFD; >>> > sfdHigh = TRUE; >>> > // in case we got stuck in the receive SFD interrupts, we can >>> > reset >>> > // the state here since we know that we are not receiving >>> > anymore >>> > m_receiving = FALSE; >>> > call CaptureSFD.captureFallingEdge(); >>> > call PacketTimeStamp.set(m_msg, time32); >>> > if (call PacketTimeSyncOffset.isSet(m_msg)) { >>> > uint8_t absOffset = >>> > sizeof(message_header_t)-sizeof(cc2420_header_t)+call >>> > PacketTimeSyncOffset.get(m_msg); >>> > timesync_radio_t *timesync = (timesync_radio_t >>> > *)((nx_uint8_t*)m_msg+absOffset); >>> > // set timesync event time as the offset between the event >>> > time >>> > and the SFD interrupt time (TEP 133) >>> > *timesync -= time32; >>> > call CSN.clr(); >>> > call TXFIFO_RAM.write( absOffset, (uint8_t*)timesync, >>> > sizeof(timesync_radio_t) ); >>> > call CSN.set(); >>> > //restoring the event time to the original value >>> > *timesync += time32; >>> > } >>> > >>> > >>> > My problem is, as far as I understood, the "time" parameter of these >>> > functions are all in 32 KHz. I am currently implementing a time >>> > synchronization protocol and I need microsecond precision. Current >>> > version >>> > of TinyOs does not have interfaces that serves microsecond timestamps >>> > in my >>> > platform. >>> > >>> > What are your suggestions? Is there a way to get microsecond precision? >>> > >>> > Thanks for your helps and thanks a lot... >>> > >>> > K. Sinan YILDIRIM >>> > >>> > Ege University >>> > Computer Engineering Department >>> > İzmir, TURKEY >>> > >>> > >>> > _______________________________________________ >>> > Tinyos-help mailing list >>> > [email protected] >>> > >>> > https://www.millennium.berkeley.edu/cgi-bin/mailman/listinfo/tinyos-help >>> > >> > > > _______________________________________________ > Tinyos-help mailing list > [email protected] > https://www.millennium.berkeley.edu/cgi-bin/mailman/listinfo/tinyos-help > _______________________________________________ Tinyos-help mailing list [email protected] https://www.millennium.berkeley.edu/cgi-bin/mailman/listinfo/tinyos-help
