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