Broke out the CC2420 SFD interrupt into a separate file to allow easier overloading with project-specific files

This commit is contained in:
adamdunkels 2009-12-05 19:42:56 +00:00
parent 4a1a823a49
commit e3fed27f4a
4 changed files with 115 additions and 35 deletions

View file

@ -0,0 +1,74 @@
/*
* Copyright (c) 2009, Swedish Institute of Computer Science
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. Neither the name of the Institute nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* @(#)$Id: cc2420-arch-sfd.c,v 1.1 2009/12/05 19:42:56 adamdunkels Exp $
*/
#include <io.h>
#include <signal.h>
#include "dev/spi.h"
#include "dev/cc2420.h"
uint16_t cc2420_arch_sfd_start_time;
uint16_t cc2420_arch_sfd_end_time;
/*---------------------------------------------------------------------------*/
/* SFD interrupt for timestamping radio packets */
interrupt(TIMERB1_VECTOR)
cc24240_timerb1_interrupt(void)
{
int tbiv;
ENERGEST_ON(ENERGEST_TYPE_IRQ);
/* always read TBIV to clear IFG */
tbiv = TBIV;
if(SFD_IS_1) {
cc2420_arch_sfd_start_time = TBCCR1;
} else {
cc2420_arch_sfd_end_time = TBCCR1;
}
ENERGEST_OFF(ENERGEST_TYPE_IRQ);
}
/*---------------------------------------------------------------------------*/
void
cc2420_arch_sfd_init(void)
{
/* Need to select the special function! */
P4SEL = BV(SFD);
/* start timer B - 32768 ticks per second */
TBCTL = TBSSEL_1 | TBCLR;
/* CM_3 = capture mode - capture on both edges */
TBCCTL1 = CM_3 | CAP | SCS;
TBCCTL1 |= CCIE;
/* Start Timer_B in continuous mode. */
TBCTL |= MC1;
}
/*---------------------------------------------------------------------------*/

View file

@ -0,0 +1,36 @@
/*
* Copyright (c) 2009, Swedish Institute of Computer Science
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. Neither the name of the Institute nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* @(#)$Id: cc2420-arch-sfd.h,v 1.1 2009/12/05 19:42:56 adamdunkels Exp $
*/
#ifndef CC2420_ARCH_SFD_H
#define CC2420_ARCH_SFD_H
void cc2420_arch_sfd_init(void);
#endif /* CC2420_ARCH_SFD_H */

View file

@ -26,7 +26,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* @(#)$Id: cc2420-arch.c,v 1.4 2009/04/02 22:39:29 joxe Exp $
* @(#)$Id: cc2420-arch.c,v 1.5 2009/12/05 19:42:56 adamdunkels Exp $
*/
#include <io.h>
@ -39,8 +39,7 @@
#include "dev/cc2420.h"
#ifdef CONF_SFD_TIMESTAMPS
uint16_t sfd_start_time;
uint16_t sfd_end_time;
#include "cc2420-arch-sfd.h"
#endif
/*---------------------------------------------------------------------------*/
@ -54,24 +53,6 @@ cc24240_port1_interrupt(void)
ENERGEST_OFF(ENERGEST_TYPE_IRQ);
}
#ifdef CONF_SFD_TIMESTAMPS
/*---------------------------------------------------------------------------*/
/* SFD interrupt for timestamping radio packets */
interrupt(TIMERB1_VECTOR)
cc24240_timerb1_interrupt(void)
{
int tbiv;
ENERGEST_ON(ENERGEST_TYPE_IRQ);
/* always read TBIV to clear IFG */
tbiv = TBIV;
if(SFD_IS_1) {
sfd_start_time = TBCCR1;
} else {
sfd_end_time = TBCCR1;
}
ENERGEST_OFF(ENERGEST_TYPE_IRQ);
}
#endif
/*---------------------------------------------------------------------------*/
void
cc2420_arch_init(void)
@ -82,18 +63,7 @@ cc2420_arch_init(void)
P4DIR |= BV(CSN) | BV(VREG_EN) | BV(RESET_N);
#ifdef CONF_SFD_TIMESTAMPS
/* Need to select the special function! */
P4SEL = BV(SFD);
/* start timer B - 32768 ticks per second */
TBCTL = TBSSEL_1 | TBCLR;
/* CM_3 = capture mode - capture on both edges */
TBCCTL1 = CM_3 | CAP | SCS;
TBCCTL1 |= CCIE;
/* Start Timer_B in continuous mode. */
TBCTL |= MC1;
cc2420_arch_sfd_init();
#endif
SPI_DISABLE(); /* Unselect radio. */

View file

@ -1,9 +1,9 @@
# $Id: Makefile.sky,v 1.28 2009/10/29 22:10:21 adamdunkels Exp $
# $Id: Makefile.sky,v 1.29 2009/12/05 19:43:39 adamdunkels Exp $
ARCH=msp430.c leds.c watchdog.c light.c spi.c ds2411.c \
xmem.c i2c.c sht11.c battery-sensor.c acc-sensor.c ext-sensor.c \
cc2420.c cc2420-aes.c cc2420-arch.c irq.c \
cc2420.c cc2420-aes.c cc2420-arch.c cc2420-arch-sfd.c irq.c \
node-id.c sensors.c button-sensor.c cfs-coffee.c \
radio-sensor.c uart1.c uip-ipchksum.c \
checkpoint-arch.c #slip.c slip_uart1.c