initial mc1322x commit
based on commit aac3a355451d899f02737f2907af8c874ee4feba of git://git.devl.org/git/malvira/contiki-mc1322x.git
This commit is contained in:
parent
285f508cc9
commit
419906a769
65
cpu/mc1322x/dev/uart1.h
Normal file
65
cpu/mc1322x/dev/uart1.h
Normal file
|
@ -0,0 +1,65 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2010, Mariano Alvira <mar@devl.org> and other contributors
|
||||||
|
* to the MC1322x project (http://mc1322x.devl.org) and Contiki.
|
||||||
|
*
|
||||||
|
* 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.
|
||||||
|
*
|
||||||
|
* This file is part of the Contiki OS.
|
||||||
|
*
|
||||||
|
* $Id: uart1.h,v 1.1 2010/06/10 14:55:39 maralvira Exp $
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
|
||||||
|
This file exists as a work-around for the hardware dependant calls
|
||||||
|
to slip_arch_init.
|
||||||
|
|
||||||
|
Current the prototype for slip_arch_init is slip_arch_init(urb)
|
||||||
|
|
||||||
|
and a typical call is something like
|
||||||
|
slip_arch_init(BAUD2URB(115200))
|
||||||
|
|
||||||
|
BAUD2UBR is hardware specific, however. Furthermore, for the sky
|
||||||
|
platform it's typically defined with #include "dev/uart1.h" (see
|
||||||
|
rpl-boarder-router/slip-bridge.c), a sky specific file. dev/uart1.h
|
||||||
|
includes msp430.h which includes the sky contiki-conf.h which
|
||||||
|
defines BAUD2UBR.
|
||||||
|
|
||||||
|
To me, the correct think to pass is simply the baudrate and have the
|
||||||
|
hardware specific conversion happen inside slip_arch_init.
|
||||||
|
|
||||||
|
Notably, most implementations just ignore the passed parameter
|
||||||
|
anyway. (except AVR)
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef DEV_UART1_H
|
||||||
|
#define DEV_UART1_H
|
||||||
|
|
||||||
|
#define BAUD2UBR(x) x
|
||||||
|
|
||||||
|
#endif
|
8
cpu/mc1322x/lib/Makefile.lib
Normal file
8
cpu/mc1322x/lib/Makefile.lib
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
# -*- makefile -*-
|
||||||
|
|
||||||
|
CFLAGS += -I$(LIBMC1322X)/include
|
||||||
|
|
||||||
|
LIBOBJS = $(patsubst %.c,%.o,$(wildcard $(LIBMC1322X)/*.c))
|
||||||
|
|
||||||
|
$(LIBMC1322X)/libmc1322x.a: $(LIBOBJS)
|
||||||
|
$(AR) rcs $(LIBMC1322X)/libmc1322x.a $(LIBOBJS)
|
100
cpu/mc1322x/lib/gpio.c
Normal file
100
cpu/mc1322x/lib/gpio.c
Normal file
|
@ -0,0 +1,100 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2010, Mariano Alvira <mar@devl.org> and other contributors
|
||||||
|
* to the MC1322x project (http://mc1322x.devl.org)
|
||||||
|
* 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.
|
||||||
|
*
|
||||||
|
* This file is part of libmc1322x: see http://mc1322x.devl.org
|
||||||
|
* for details.
|
||||||
|
*
|
||||||
|
* $Id: gpio.c,v 1.1 2010/06/10 14:55:39 maralvira Exp $
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <mc1322x.h>
|
||||||
|
#include <types.h>
|
||||||
|
|
||||||
|
inline void gpio_pad_dir(volatile uint64_t data)
|
||||||
|
{
|
||||||
|
*GPIO_PAD_DIR0 = (data & 0xffffffff);
|
||||||
|
*GPIO_PAD_DIR1 = (data >> 32);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void gpio_data(volatile uint64_t data)
|
||||||
|
{
|
||||||
|
*GPIO_DATA0 = (data & 0xffffffff);
|
||||||
|
*GPIO_DATA1 = (data >> 32);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline uint64_t gpio_data_get(volatile uint64_t bits) {
|
||||||
|
uint64_t rdata = 0;
|
||||||
|
|
||||||
|
rdata = *GPIO_DATA0 & (bits & 0xffffffff);
|
||||||
|
rdata |= (*GPIO_DATA1 & (bits >> 32)) << 32;
|
||||||
|
|
||||||
|
return rdata;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void gpio_pad_pu_en(volatile uint64_t data)
|
||||||
|
{
|
||||||
|
*GPIO_PAD_PU_EN0 = (data & 0xffffffff);
|
||||||
|
*GPIO_PAD_PU_EN1 = (data >> 32);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void gpio_data_sel(volatile uint64_t data)
|
||||||
|
{
|
||||||
|
*GPIO_DATA_SEL0 = (data & 0xffffffff);
|
||||||
|
*GPIO_DATA_SEL1 = (data >> 32);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void gpio_pad_pu_sel(volatile uint64_t data)
|
||||||
|
{
|
||||||
|
*GPIO_PAD_PU_SEL0 = (data & 0xffffffff);
|
||||||
|
*GPIO_PAD_PU_SEL1 = (data >> 32);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void gpio_data_set(volatile uint64_t data)
|
||||||
|
{
|
||||||
|
*GPIO_DATA_SET0 = (data & 0xffffffff);
|
||||||
|
*GPIO_DATA_SET1 = (data >> 32);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void gpio_data_reset(volatile uint64_t data)
|
||||||
|
{
|
||||||
|
*GPIO_DATA_RESET0 = (data & 0xffffffff);
|
||||||
|
*GPIO_DATA_RESET1 = (data >> 32);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void gpio_pad_dir_set(volatile uint64_t data)
|
||||||
|
{
|
||||||
|
*GPIO_PAD_DIR_SET0 = (data & 0xffffffff);
|
||||||
|
*GPIO_PAD_DIR_SET1 = (data >> 32);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void gpio_pad_dir_reset(volatile uint64_t data)
|
||||||
|
{
|
||||||
|
*GPIO_PAD_DIR_RESET0 = (data & 0xffffffff);
|
||||||
|
*GPIO_PAD_DIR_RESET1 = (data >> 32);
|
||||||
|
}
|
138
cpu/mc1322x/lib/include/crm.h
Normal file
138
cpu/mc1322x/lib/include/crm.h
Normal file
|
@ -0,0 +1,138 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2010, Mariano Alvira <mar@devl.org> and other contributors
|
||||||
|
* to the MC1322x project (http://mc1322x.devl.org)
|
||||||
|
* 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.
|
||||||
|
*
|
||||||
|
* This file is part of libmc1322x: see http://mc1322x.devl.org
|
||||||
|
* for details.
|
||||||
|
*
|
||||||
|
* $Id: crm.h,v 1.1 2010/06/10 14:55:39 maralvira Exp $
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef CRM_H
|
||||||
|
#define CRM_H
|
||||||
|
|
||||||
|
#include <types.h>
|
||||||
|
|
||||||
|
#define CRM_BASE (0x80003000)
|
||||||
|
#define CRM_SYS_CNTL ((volatile uint32_t *) (CRM_BASE+0x00))
|
||||||
|
#define CRM_WU_CNTL ((volatile uint32_t *) (CRM_BASE+0x04))
|
||||||
|
#define CRM_SLEEP_CNTL ((volatile uint32_t *) (CRM_BASE+0x08))
|
||||||
|
#define CRM_BS_CNTL ((volatile uint32_t *) (CRM_BASE+0x0c))
|
||||||
|
#define CRM_COP_CNTL ((volatile uint32_t *) (CRM_BASE+0x10))
|
||||||
|
#define CRM_COP_SERVICE ((volatile uint32_t *) (CRM_BASE+0x14))
|
||||||
|
#define CRM_STATUS ((volatile uint32_t *) (CRM_BASE+0x18))
|
||||||
|
#define CRM_MOD_STATUS ((volatile uint32_t *) (CRM_BASE+0x1c))
|
||||||
|
#define CRM_WU_COUNT ((volatile uint32_t *) (CRM_BASE+0x20))
|
||||||
|
#define CRM_WU_TIMEOUT ((volatile uint32_t *) (CRM_BASE+0x24))
|
||||||
|
#define CRM_RTC_COUNT ((volatile uint32_t *) (CRM_BASE+0x28))
|
||||||
|
#define CRM_RTC_TIMEOUT ((volatile uint32_t *) (CRM_BASE+0x2c))
|
||||||
|
#define CRM_CAL_CNTL ((volatile uint32_t *) (CRM_BASE+0x34))
|
||||||
|
#define CRM_CAL_COUNT ((volatile uint32_t *) (CRM_BASE+0x38))
|
||||||
|
#define CRM_RINGOSC_CNTL ((volatile uint32_t *) (CRM_BASE+0x3c))
|
||||||
|
#define CRM_XTAL_CNTL ((volatile uint32_t *) (CRM_BASE+0x40))
|
||||||
|
#define CRM_XTAL32_CNTL ((volatile uint32_t *) (CRM_BASE+0x44))
|
||||||
|
#define CRM_VREG_CNTL ((volatile uint32_t *) (CRM_BASE+0x48))
|
||||||
|
#define CRM_SW_RST ((volatile uint32_t *) (CRM_BASE+0x50))
|
||||||
|
|
||||||
|
/* CRM_SYS_CNTL bit locations */
|
||||||
|
#define XTAL32_EXISTS 5
|
||||||
|
|
||||||
|
/* CRM_WU_CNTL bit locations */
|
||||||
|
#define EXT_WU_IEN 20 /* 4 bits */
|
||||||
|
#define EXT_WU_EN 4 /* 4 bits */
|
||||||
|
#define EXT_WU_EDGE 8 /* 4 bits */
|
||||||
|
#define EXT_WU_POL 12 /* 4 bits */
|
||||||
|
#define TIMER_WU_EN 0
|
||||||
|
#define RTC_WU_EN 1
|
||||||
|
#define TIMER_WU_IEN 16
|
||||||
|
#define RTC_WU_IEN 17
|
||||||
|
|
||||||
|
/* CRM_STATUS bit locations */
|
||||||
|
#define EXT_WU_EVT 4 /* 4 bits, rw1c */
|
||||||
|
#define RTC_WU_EVT 3 /* rw1c */
|
||||||
|
|
||||||
|
/* RINGOSC_CNTL bit locations */
|
||||||
|
#define ROSC_CTUNE 9 /* 4 bits */
|
||||||
|
#define ROSC_FTUNE 4 /* 4 bits */
|
||||||
|
#define ROSC_EN 0
|
||||||
|
|
||||||
|
#define ring_osc_on() (set_bit(*CRM_RINGOSC_CNTL,ROSC_EN))
|
||||||
|
#define ring_osc_off() (clear_bit(*CRM_RINGOSC_CNTL,ROSC_EN))
|
||||||
|
|
||||||
|
#define REF_OSC 24000000ULL /* reference osc. frequency */
|
||||||
|
#define NOMINAL_RING_OSC_SEC 2000 /* nominal ring osc. frequency */
|
||||||
|
extern uint32_t cal_rtc_secs; /* calibrated 2khz rtc seconds */
|
||||||
|
|
||||||
|
/* XTAL32_CNTL bit locations */
|
||||||
|
#define XTAL32_GAIN 4 /* 2 bits */
|
||||||
|
#define XTAL32_EN 0
|
||||||
|
|
||||||
|
#define xtal32_on() (set_bit(*CRM_XTAL32_CNTL,XTAL32_EN))
|
||||||
|
#define xtal32_off() (clear_bit(*CRM_XTAL32_CNTL,XTAL32_EN))
|
||||||
|
#define xtal32_exists() (set_bit(*CRM_SYS_CNTL,XTAL32_EXISTS))
|
||||||
|
|
||||||
|
/* enable external wake-ups on kbi 4-7 */
|
||||||
|
/* see kbi.h for other kbi specific macros */
|
||||||
|
#define enable_ext_wu(kbi) (set_bit(*CRM_WU_CNTL,(EXT_WU_EN+kbi-4)))
|
||||||
|
#define disable_ext_wu(kbi) (clear_bit(*CRM_WU_CNTL,(EXT_WU_EN+kbi-4)))
|
||||||
|
|
||||||
|
#define is_ext_wu_evt(kbi) (bit_is_set(*CRM_STATUS,(EXT_WU_EVT+kbi-4)))
|
||||||
|
#define clear_ext_wu_evt(kbi) (set_bit(*CRM_STATUS,(EXT_WU_EVT+kbi-4))) /* r1wc bit */
|
||||||
|
|
||||||
|
/* enable wake-up timer */
|
||||||
|
#define enable_timer_wu_irq() ((set_bit(*CRM_WU_CNTL,(TIMER_WU_IEN))))
|
||||||
|
#define disable_timer_wu_irq() ((clear_bit(*CRM_WU_CNTL,(TIMER_WU_IEN))))
|
||||||
|
|
||||||
|
#define enable_timer_wu() ((set_bit(*CRM_WU_CNTL,(TIMER_WU_EN))))
|
||||||
|
#define disable_timer_wu() ((clear_bit(*CRM_WU_CNTL,(TIMER_WU_EN))))
|
||||||
|
|
||||||
|
/* enable wake-up from RTC compare */
|
||||||
|
#define enable_rtc_wu_irq() (set_bit(*CRM_WU_CNTL,RTC_WU_IEN))
|
||||||
|
#define disable_rtc_wu_irq() (clear_bit(*CRM_WU_CNTL,RTC_WU_IEN))
|
||||||
|
|
||||||
|
#define enable_rtc_wu() ((set_bit(*CRM_WU_CNTL,(RTC_WU_EN))))
|
||||||
|
#define disable_rtc_wu() ((clear_bit(*CRM_WU_CNTL,(RTC_WU_EN))))
|
||||||
|
|
||||||
|
#define clear_rtc_wu_evt() (set_bit(*CRM_STATUS,RTC_WU_EVT))
|
||||||
|
#define rtc_wu_evt() (bit_is_set(*CRM_STATUS,RTC_WU_EVT))
|
||||||
|
|
||||||
|
#define SLEEP_MODE_HIBERNATE bit(0)
|
||||||
|
#define SLEEP_MODE_DOZE bit(1)
|
||||||
|
|
||||||
|
#define SLEEP_PAD_PWR bit(7)
|
||||||
|
#define SLEEP_RETAIN_MCU bit(6)
|
||||||
|
#define sleep_ram_retain(x) (x<<4) /* 0-3 */
|
||||||
|
#define SLEEP_RAM_8K sleep_ram_retain(0)
|
||||||
|
#define SLEEP_RAM_32K sleep_ram_retain(1)
|
||||||
|
#define SLEEP_RAM_64K sleep_ram_retain(2)
|
||||||
|
#define SLEEP_RAM_96K sleep_ram_retain(3)
|
||||||
|
|
||||||
|
#define pack_XTAL_CNTL(ctune4pf, ctune, ftune, ibias) \
|
||||||
|
(*CRM_XTAL_CNTL = ((ctune4pf << 25) | (ctune << 21) | ( ftune << 16) | (ibias << 8) | 0x52))
|
||||||
|
|
||||||
|
#endif
|
90
cpu/mc1322x/lib/include/gpio.h
Normal file
90
cpu/mc1322x/lib/include/gpio.h
Normal file
|
@ -0,0 +1,90 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2010, Mariano Alvira <mar@devl.org> and other contributors
|
||||||
|
* to the MC1322x project (http://mc1322x.devl.org)
|
||||||
|
* 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.
|
||||||
|
*
|
||||||
|
* This file is part of libmc1322x: see http://mc1322x.devl.org
|
||||||
|
* for details.
|
||||||
|
*
|
||||||
|
* $Id: gpio.h,v 1.1 2010/06/10 14:55:39 maralvira Exp $
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef GPIO_H
|
||||||
|
#define GPIO_H
|
||||||
|
|
||||||
|
#define GPIO_PAD_DIR0 ((volatile uint32_t *) 0x80000000)
|
||||||
|
#define GPIO_PAD_DIR1 ((volatile uint32_t *) 0x80000004)
|
||||||
|
#define GPIO_DATA0 ((volatile uint32_t *) 0x80000008)
|
||||||
|
#define GPIO_DATA1 ((volatile uint32_t *) 0x8000000c)
|
||||||
|
#define GPIO_PAD_PU_EN0 ((volatile uint32_t *) 0x80000010)
|
||||||
|
#define GPIO_PAD_PU_EN1 ((volatile uint32_t *) 0x80000014)
|
||||||
|
#define GPIO_FUNC_SEL0 ((volatile uint32_t *) 0x80000018) /* GPIO 15 - 0; 2 bit blocks */
|
||||||
|
#define GPIO_FUNC_SEL1 ((volatile uint32_t *) 0x8000001c) /* GPIO 16 - 31; 2 bit blocks */
|
||||||
|
#define GPIO_FUNC_SEL2 ((volatile uint32_t *) 0x80000020) /* GPIO 32 - 47; 2 bit blocks */
|
||||||
|
#define GPIO_FUNC_SEL3 ((volatile uint32_t *) 0x80000024) /* GPIO 48 - 63; 2 bit blocks */
|
||||||
|
#define GPIO_DATA_SEL0 ((volatile uint32_t *) 0x80000028)
|
||||||
|
#define GPIO_DATA_SEL1 ((volatile uint32_t *) 0x8000002c)
|
||||||
|
#define GPIO_PAD_PU_SEL0 ((volatile uint32_t *) 0x80000030)
|
||||||
|
#define GPIO_PAD_PU_SEL1 ((volatile uint32_t *) 0x80000034)
|
||||||
|
|
||||||
|
#define GPIO_DATA_SET0 ((volatile uint32_t *) 0x80000048)
|
||||||
|
#define GPIO_DATA_SET1 ((volatile uint32_t *) 0x8000004c)
|
||||||
|
#define GPIO_DATA_RESET0 ((volatile uint32_t *) 0x80000050)
|
||||||
|
#define GPIO_DATA_RESET1 ((volatile uint32_t *) 0x80000054)
|
||||||
|
#define GPIO_PAD_DIR_SET0 ((volatile uint32_t *) 0x80000058)
|
||||||
|
#define GPIO_PAD_DIR_SET1 ((volatile uint32_t *) 0x8000005c)
|
||||||
|
#define GPIO_PAD_DIR_RESET0 ((volatile uint32_t *) 0x80000060)
|
||||||
|
#define GPIO_PAD_DIR_RESET1 ((volatile uint32_t *) 0x80000064)
|
||||||
|
|
||||||
|
inline void gpio_pad_dir(volatile uint64_t data);
|
||||||
|
inline void gpio_data(volatile uint64_t data);
|
||||||
|
inline uint64_t gpio_data_get(volatile uint64_t bits);
|
||||||
|
inline void gpio_pad_pu_en(volatile uint64_t data);
|
||||||
|
inline void gpio_data_sel(volatile uint64_t data);
|
||||||
|
inline void gpio_data_pu_sel(volatile uint64_t data);
|
||||||
|
inline void gpio_data_set(volatile uint64_t data);
|
||||||
|
inline void gpio_data_reset(volatile uint64_t data);
|
||||||
|
inline void gpio_pad_dir_set(volatile uint64_t data);
|
||||||
|
inline void gpio_pad_dir_reset(volatile uint64_t data);
|
||||||
|
|
||||||
|
/* select pullup or pulldown for GPIO 0-31 (b=0-31) */
|
||||||
|
#define gpio_sel0_pullup(b) (set_bit(*GPIO_PAD_PU_SEL0,b))
|
||||||
|
#define gpio_sel0_pulldown(b) (clear_bit(*GPIO_PAD_PU_SEL0,b))
|
||||||
|
|
||||||
|
/* select pullup or pulldown for GPIO 32-63 (b=32-63) */
|
||||||
|
#define gpio_sel1_pullup(b) (set_bit(*GPIO_PAD_PU_SEL1,b-32))
|
||||||
|
#define gpio_sel1_pulldown(b) (clear_bit(*GPIO_PAD_PU_SEL1,b-32))
|
||||||
|
|
||||||
|
/* enable/disable pullup for GPIO 0-31 (b=0-31) */
|
||||||
|
#define gpio_pu0_enable(b) (set_bit(*GPIO_PAD_PU_EN0,b))
|
||||||
|
#define gpio_pu0_disable(b) (clear_bit(*GPIO_PAD_PU_EN0,b))
|
||||||
|
|
||||||
|
/* enable/disable pullup for GPIO 32-63 (b=32-63) */
|
||||||
|
#define gpio_pu1_enable(b) (set_bit(*GPIO_PAD_PU_EN1,b-32))
|
||||||
|
#define gpio_pu1_disable(b) (clear_bit(*GPIO_PAD_PU_EN1,b-32))
|
||||||
|
|
||||||
|
#endif
|
96
cpu/mc1322x/lib/include/isr.h
Normal file
96
cpu/mc1322x/lib/include/isr.h
Normal file
|
@ -0,0 +1,96 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2010, Mariano Alvira <mar@devl.org> and other contributors
|
||||||
|
* to the MC1322x project (http://mc1322x.devl.org)
|
||||||
|
* 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.
|
||||||
|
*
|
||||||
|
* This file is part of libmc1322x: see http://mc1322x.devl.org
|
||||||
|
* for details.
|
||||||
|
*
|
||||||
|
* $Id: isr.h,v 1.1 2010/06/10 14:55:39 maralvira Exp $
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef ISR_H
|
||||||
|
#define ISR_H
|
||||||
|
|
||||||
|
#define INTBASE (0x80020000)
|
||||||
|
#define INTCNTL_OFF (0x0)
|
||||||
|
#define INTENNUM_OFF (0x8)
|
||||||
|
#define INTDISNUM_OFF (0xC)
|
||||||
|
#define INTENABLE_OFF (0x10)
|
||||||
|
#define INTSRC_OFF (0x30)
|
||||||
|
#define INTFRC_OFF (0x34)
|
||||||
|
#define NIPEND_OFF (0x38)
|
||||||
|
|
||||||
|
#define INTCNTL ((volatile uint32_t *) (INTBASE + INTCNTL_OFF))
|
||||||
|
#define INTENNUM ((volatile uint32_t *) (INTBASE + INTENNUM_OFF))
|
||||||
|
#define INTDISNUM ((volatile uint32_t *) (INTBASE + INTDISNUM_OFF))
|
||||||
|
#define INTENABLE ((volatile uint32_t *) (INTBASE + INTENABLE_OFF))
|
||||||
|
#define INTSRC ((volatile uint32_t *) (INTBASE + INTSRC_OFF))
|
||||||
|
#define INTFRC ((volatile uint32_t *) (INTBASE + INTFRC_OFF))
|
||||||
|
#define NIPEND ((volatile uint32_t *) (INTBASE + NIPEND_OFF))
|
||||||
|
|
||||||
|
enum interrupt_nums {
|
||||||
|
INT_NUM_ASM = 0,
|
||||||
|
INT_NUM_UART1,
|
||||||
|
INT_NUM_UART2,
|
||||||
|
INT_NUM_CRM,
|
||||||
|
INT_NUM_I2C,
|
||||||
|
INT_NUM_TMR,
|
||||||
|
INT_NUM_SPIF,
|
||||||
|
INT_NUM_MACA,
|
||||||
|
INT_NUM_SSI,
|
||||||
|
INT_NUM_ADC,
|
||||||
|
INT_NUM_SPI,
|
||||||
|
};
|
||||||
|
|
||||||
|
#define global_irq_disable() (set_bit(*INTCNTL,20))
|
||||||
|
#define global_irq_enable() (clear_bit(*INTCNTL,20))
|
||||||
|
|
||||||
|
#define enable_irq(irq) (*INTENNUM = INT_NUM_##irq)
|
||||||
|
#define disable_irq(irq) (*INTDISNUM = INT_NUM_##irq)
|
||||||
|
|
||||||
|
#define safe_irq_disable(x) volatile uint32_t saved_irq; saved_irq = *INTENABLE; disable_irq(x)
|
||||||
|
#define irq_restore() *INTENABLE = saved_irq
|
||||||
|
|
||||||
|
extern void tmr0_isr(void) __attribute__((weak));
|
||||||
|
extern void tmr1_isr(void) __attribute__((weak));
|
||||||
|
extern void tmr2_isr(void) __attribute__((weak));
|
||||||
|
extern void tmr3_isr(void) __attribute__((weak));
|
||||||
|
|
||||||
|
extern void rtc_isr(void) __attribute__((weak));
|
||||||
|
extern void kbi4_isr(void) __attribute__((weak));
|
||||||
|
extern void kbi5_isr(void) __attribute__((weak));
|
||||||
|
extern void kbi6_isr(void) __attribute__((weak));
|
||||||
|
extern void kbi7_isr(void) __attribute__((weak));
|
||||||
|
|
||||||
|
extern void uart1_isr(void) __attribute__((weak));
|
||||||
|
|
||||||
|
extern void maca_isr(void) __attribute__((weak));
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
54
cpu/mc1322x/lib/include/kbi.h
Normal file
54
cpu/mc1322x/lib/include/kbi.h
Normal file
|
@ -0,0 +1,54 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2010, Mariano Alvira <mar@devl.org> and other contributors
|
||||||
|
* to the MC1322x project (http://mc1322x.devl.org)
|
||||||
|
* 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.
|
||||||
|
*
|
||||||
|
* This file is part of libmc1322x: see http://mc1322x.devl.org
|
||||||
|
* for details.
|
||||||
|
*
|
||||||
|
* $Id: kbi.h,v 1.1 2010/06/10 14:55:39 maralvira Exp $
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef KBI_H
|
||||||
|
#define KBI_H
|
||||||
|
|
||||||
|
#define enable_irq_kbi(k) (set_bit(*CRM_WU_CNTL,(EXT_WU_IEN+k-4)))
|
||||||
|
#define disable_irq_kbi(k) (clear_bit(*CRM_WU_CNTL,(EXT_WU_IEN+k-4)))
|
||||||
|
|
||||||
|
#define kbi_evnt(k) (bit_is_set(*CRM_STATUS,(EXT_WU_EVT+k-4)))
|
||||||
|
|
||||||
|
#define kbi_edge(k) (set_bit(*CRM_WU_CNTL,(EXT_WU_EDGE+k-4)))
|
||||||
|
#define kbi_level(k) (clear_bit(*CRM_WU_CNTL,(EXT_WU_EDGE+k-4)))
|
||||||
|
|
||||||
|
#define kbi_pol_neg(k) (clear_bit(*CRM_WU_CNTL,(EXT_WU_POL+k-4)))
|
||||||
|
#define kbi_pol_pos(k) (set_bit(*CRM_WU_CNTL,(EXT_WU_POL+k-4)))
|
||||||
|
|
||||||
|
/* you have to clear these events by writing a one to them */
|
||||||
|
|
||||||
|
#define clear_kbi_evnt(k) (set_bit(*CRM_STATUS,(EXT_WU_EVT+k-4)))
|
||||||
|
|
||||||
|
#endif
|
517
cpu/mc1322x/lib/include/maca.h
Normal file
517
cpu/mc1322x/lib/include/maca.h
Normal file
|
@ -0,0 +1,517 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2010, Mariano Alvira <mar@devl.org> and other contributors
|
||||||
|
* to the MC1322x project (http://mc1322x.devl.org)
|
||||||
|
* 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.
|
||||||
|
*
|
||||||
|
* This file is part of libmc1322x: see http://mc1322x.devl.org
|
||||||
|
* for details.
|
||||||
|
*
|
||||||
|
* $Id: maca.h,v 1.1 2010/06/10 14:55:39 maralvira Exp $
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _MACA_H_
|
||||||
|
#define _MACA_H_
|
||||||
|
|
||||||
|
#include <packet.h>
|
||||||
|
#include <types.h>
|
||||||
|
#include <utils.h>
|
||||||
|
|
||||||
|
/* maca initialization and on off routines */
|
||||||
|
void maca_init(void);
|
||||||
|
void maca_off(void);
|
||||||
|
void maca_on(void);
|
||||||
|
|
||||||
|
/* run periodically to make sure the maca is still doing right */
|
||||||
|
void check_maca(void);
|
||||||
|
|
||||||
|
/* maca configuration interface */
|
||||||
|
void set_power(uint8_t power);
|
||||||
|
void set_channel(uint8_t chan);
|
||||||
|
|
||||||
|
#define DEMOD_DCD 1 /* -96dBm, 22.2mA */
|
||||||
|
#define DEMOD_NCD 0 /* -100dBm, 24.2mA */
|
||||||
|
void set_demodulator_type(uint8_t demod);
|
||||||
|
|
||||||
|
/* set_fcs_mode(NO_FCS) to disable checksum filtering */
|
||||||
|
extern volatile uint8_t fcs_mode;
|
||||||
|
#define set_fcs_mode(x) fcs_mode = (x)
|
||||||
|
|
||||||
|
/* maca packet interface */
|
||||||
|
void tx_packet(volatile packet_t *p);
|
||||||
|
volatile packet_t* rx_packet(void);
|
||||||
|
volatile packet_t* get_free_packet(void);
|
||||||
|
void free_packet(volatile packet_t *p);
|
||||||
|
void free_all_packets(void);
|
||||||
|
|
||||||
|
extern volatile packet_t *rx_head, *tx_head;
|
||||||
|
extern volatile uint32_t maca_entry;
|
||||||
|
|
||||||
|
extern void maca_rx_callback(volatile packet_t *p) __attribute__((weak));
|
||||||
|
extern void maca_tx_callback(volatile packet_t *p) __attribute__((weak));
|
||||||
|
|
||||||
|
/* maca lowlevel routines */
|
||||||
|
/* most applications won't need to use them */
|
||||||
|
void reset_maca(void);
|
||||||
|
void init_phy(void);
|
||||||
|
void flyback_init(void);
|
||||||
|
void ResumeMACASync(void);
|
||||||
|
void radio_init(void);
|
||||||
|
uint32_t init_from_flash(uint32_t addr);
|
||||||
|
|
||||||
|
#define MAX_PACKET_SIZE (MAX_PAYLOAD_SIZE + 2) /* packet includes 2 bytes of checksum */
|
||||||
|
|
||||||
|
/* maca register and field defines */
|
||||||
|
|
||||||
|
#define MACA_BASE (0x80004000)
|
||||||
|
#define MACA_RESET ((volatile uint32_t *) (MACA_BASE+0x04))
|
||||||
|
#define MACA_RANDOM ((volatile uint32_t *) (MACA_BASE+0x08))
|
||||||
|
#define MACA_CONTROL ((volatile uint32_t *) (MACA_BASE+0x0c))
|
||||||
|
|
||||||
|
/* MACA_CONTROL bits and fields */
|
||||||
|
#define ISM 20
|
||||||
|
#define PRECOUNT 16 /* preamble reapeat counter */
|
||||||
|
#define PRECOUNT_MASK bit_mask(4,PRECOUNT)
|
||||||
|
#define RTSO 15 /* reset slot counter */
|
||||||
|
#define ROLE 13 /* set if PAN coordinator */
|
||||||
|
#define NOFC 12 /* set to disable FCS */
|
||||||
|
enum {
|
||||||
|
USE_FCS = 0,
|
||||||
|
NO_FCS = 1,
|
||||||
|
};
|
||||||
|
#define PRM 11 /* set for promiscuous mode */
|
||||||
|
#define REL 10 /* 1 for relative, 0 for absolute */
|
||||||
|
#define ASAP 9 /* 1 start now, 0 timer start */
|
||||||
|
#define BCN 8 /* 1 beacon only, 0 for a */
|
||||||
|
#define AUTO 7 /* 1 continuous rx, rx only once */
|
||||||
|
#define LFSR 6 /* 1 use polynomial for Turbolink */
|
||||||
|
#define TM 5
|
||||||
|
|
||||||
|
#define MODE 3
|
||||||
|
#define MODE_MASK bit_mask(2,MODE)
|
||||||
|
#define NO_CCA 0
|
||||||
|
#define NO_SLOT_CCA 1
|
||||||
|
#define SLOT_CCA 2
|
||||||
|
|
||||||
|
#define SEQUENCE 0
|
||||||
|
#define SEQUENCE_MASK bit_mask(3,SEQUENCE)
|
||||||
|
/* end of MACA_CONTROL bits and fields */
|
||||||
|
|
||||||
|
#define MACA_STATUS ((volatile uint32_t *) (MACA_BASE+0x10))
|
||||||
|
/* MACA_STATUS bits and fields */
|
||||||
|
#define STATUS_TIMEOUT 15
|
||||||
|
#define CRC 14
|
||||||
|
#define BUSY 13
|
||||||
|
#define OVR 12
|
||||||
|
#define CODE 0
|
||||||
|
#define CODE_MASK bit_mask(4,CODE)
|
||||||
|
/* status codes */
|
||||||
|
#define SUCCESS 0
|
||||||
|
#define CODE_TIMEOUT 1
|
||||||
|
#define CHANNEL_BUSY 2
|
||||||
|
#define CRC_FAILED 3
|
||||||
|
#define ABORTED 4
|
||||||
|
#define NO_ACK 5
|
||||||
|
#define NO_DATA 6
|
||||||
|
#define LATE_START 7
|
||||||
|
#define EXT_TIMEOUT 8
|
||||||
|
#define EXT_PND_TIMEOUT 9
|
||||||
|
#define PLL_UNLOCK 12
|
||||||
|
#define EXTERNAL_ABORT 13
|
||||||
|
#define NOT_COMPLETED 14
|
||||||
|
#define DMA_BUS_ERROR 15
|
||||||
|
/* end of MACA_CONTROL bits and fields */
|
||||||
|
|
||||||
|
#define MACA_FRMPND ((volatile uint32_t *) (MACA_BASE+0x14))
|
||||||
|
#define MACA_TMREN ((volatile uint32_t *) (MACA_BASE+0x40))
|
||||||
|
#define MACA_TMRDIS ((volatile uint32_t *) (MACA_BASE+0x44))
|
||||||
|
#define MACA_CLK ((volatile uint32_t *) (MACA_BASE+0x48))
|
||||||
|
#define MACA_STARTCLK ((volatile uint32_t *) (MACA_BASE+0x4c))
|
||||||
|
#define MACA_CPLCLK ((volatile uint32_t *) (MACA_BASE+0x50))
|
||||||
|
#define MACA_SFTCLK ((volatile uint32_t *) (MACA_BASE+0x54))
|
||||||
|
#define MACA_CLKOFFSET ((volatile uint32_t *) (MACA_BASE+0x58))
|
||||||
|
#define MACA_RELCLK ((volatile uint32_t *) (MACA_BASE+0x5c))
|
||||||
|
#define MACA_CPLTIM ((volatile uint32_t *) (MACA_BASE+0x60))
|
||||||
|
#define MACA_SLOTOFFSET ((volatile uint32_t *) (MACA_BASE+0x64))
|
||||||
|
#define MACA_TIMESTAMP ((volatile uint32_t *) (MACA_BASE+0x68))
|
||||||
|
#define MACA_DMARX ((volatile uint32_t *) (MACA_BASE+0x80))
|
||||||
|
#define MACA_DMATX ((volatile uint32_t *) (MACA_BASE+0x84))
|
||||||
|
#define MACA_DMAPOLL ((volatile uint32_t *) (MACA_BASE+0x88))
|
||||||
|
#define MACA_TXLEN ((volatile uint32_t *) (MACA_BASE+0x8c))
|
||||||
|
#define MACA_TXSEQNR ((volatile uint32_t *) (MACA_BASE+0x90))
|
||||||
|
#define MACA_SETRXLVL ((volatile uint32_t *) (MACA_BASE+0x94))
|
||||||
|
#define MACA_GETRXLVL ((volatile uint32_t *) (MACA_BASE+0x98))
|
||||||
|
#define MACA_IRQ ((volatile uint32_t *) (MACA_BASE+0xc0))
|
||||||
|
#define MACA_CLRIRQ ((volatile uint32_t *) (MACA_BASE+0xc4))
|
||||||
|
#define MACA_SETIRQ ((volatile uint32_t *) (MACA_BASE+0xc8))
|
||||||
|
#define MACA_MASKIRQ ((volatile uint32_t *) (MACA_BASE+0xcc))
|
||||||
|
#define MACA_MACPANID ((volatile uint32_t *) (MACA_BASE+0x100))
|
||||||
|
#define MACA_MAC16ADDR ((volatile uint32_t *) (MACA_BASE+0x104))
|
||||||
|
#define MACA_MAC64HI ((volatile uint32_t *) (MACA_BASE+0x108))
|
||||||
|
#define MACA_MAC64LO ((volatile uint32_t *) (MACA_BASE+0x10c))
|
||||||
|
#define MACA_FLTREJ ((volatile uint32_t *) (MACA_BASE+0x110))
|
||||||
|
#define MACA_CLKDIV ((volatile uint32_t *) (MACA_BASE+0x114))
|
||||||
|
#define MACA_WARMUP ((volatile uint32_t *) (MACA_BASE+0x118))
|
||||||
|
#define MACA_PREAMBLE ((volatile uint32_t *) (MACA_BASE+0x11c))
|
||||||
|
#define MACA_WHITESEED ((volatile uint32_t *) (MACA_BASE+0x120))
|
||||||
|
#define MACA_FRAMESYNC0 ((volatile uint32_t *) (MACA_BASE+0x124))
|
||||||
|
#define MACA_FRAMESYNC1 ((volatile uint32_t *) (MACA_BASE+0x128))
|
||||||
|
#define MACA_TXACKDELAY ((volatile uint32_t *) (MACA_BASE+0x140))
|
||||||
|
#define MACA_RXACKDELAY ((volatile uint32_t *) (MACA_BASE+0x144))
|
||||||
|
#define MACA_EOFDELAY ((volatile uint32_t *) (MACA_BASE+0x148))
|
||||||
|
#define MACA_CCADELAY ((volatile uint32_t *) (MACA_BASE+0x14c))
|
||||||
|
#define MACA_RXEND ((volatile uint32_t *) (MACA_BASE+0x150))
|
||||||
|
#define MACA_TXCCADELAY ((volatile uint32_t *) (MACA_BASE+0x154))
|
||||||
|
#define MACA_KEY3 ((volatile uint32_t *) (MACA_BASE+0x158))
|
||||||
|
#define MACA_KEY2 ((volatile uint32_t *) (MACA_BASE+0x15c))
|
||||||
|
#define MACA_KEY1 ((volatile uint32_t *) (MACA_BASE+0x160))
|
||||||
|
#define MACA_KEY0 ((volatile uint32_t *) (MACA_BASE+0x164))
|
||||||
|
#define MACA_OPTIONS ((volatile uint32_t *) (MACA_BASE+0x180))
|
||||||
|
|
||||||
|
|
||||||
|
/******************************************************************************/
|
||||||
|
/* everything under this comment is messy, needs cleaning, and will */
|
||||||
|
/* probably change in the future */
|
||||||
|
/******************************************************************************/
|
||||||
|
|
||||||
|
#define control_pre_count (7<<16) /* preamble reapeat counter */
|
||||||
|
#define control_rst_slot (1<<15) /* reset slot counter */
|
||||||
|
#define control_role (1<<13) /* set if PAN coordinator */
|
||||||
|
#define control_nofc (1<<12) /* set to disable FCS */
|
||||||
|
#define control_prm (1<<11) /* set for promiscuous mode */
|
||||||
|
#define control_relative (1<<10) /* 1 for relative, 0 for absolute */
|
||||||
|
#define control_asap (1<<9) /* 1 start now, 0 timer start */
|
||||||
|
#define control_bcn (1<<8) /* 1 beacon only, 0 for a */
|
||||||
|
#define control_auto (1<<7) /* 1 continuous rx, rx only once */
|
||||||
|
#define control_lfsr (1<<6) /* 1 use polynomial for Turbolink */
|
||||||
|
|
||||||
|
#define gMACA_Clock_DIV_c 95
|
||||||
|
|
||||||
|
//rom_base_adr equ 0x00000000 ; rom base address
|
||||||
|
//ram_base_adr equ 0x00400000 ; ram base address
|
||||||
|
//ram0_base_adr equ 0x00400000 ; ram0 base address (2K words = 8K
|
||||||
|
//bytes)
|
||||||
|
//ram1_base_adr equ 0x00402000 ; ram1 base address (6K words = 24K
|
||||||
|
//bytes)
|
||||||
|
//ram2_base_adr equ 0x00408000 ; ram2 base address (8K words = 32K
|
||||||
|
//bytes)
|
||||||
|
//ram3_base_adr equ 0x00410000 ; ram3 base address (8K words
|
||||||
|
enum {
|
||||||
|
cc_success = 0,
|
||||||
|
cc_timeout = 1,
|
||||||
|
cc_channel_busy = 2,
|
||||||
|
cc_crc_fail = 3,
|
||||||
|
cc_aborted = 4,
|
||||||
|
cc_no_ack = 5,
|
||||||
|
cc_no_data = 6,
|
||||||
|
cc_late_start = 7,
|
||||||
|
cc_ext_timeout = 8,
|
||||||
|
cc_ext_pnd_timeout = 9,
|
||||||
|
cc_nc1 = 10,
|
||||||
|
cc_nc2 = 11,
|
||||||
|
cc_nc3 = 12,
|
||||||
|
cc_cc_external_abort= 13,
|
||||||
|
cc_not_completed = 14,
|
||||||
|
cc_bus_error = 15
|
||||||
|
};
|
||||||
|
//control codes for mode bits
|
||||||
|
|
||||||
|
enum {
|
||||||
|
control_mode_no_cca = 0,
|
||||||
|
control_mode_non_slotted = (1<<3),
|
||||||
|
control_mode_slotted = (1<<4)
|
||||||
|
};
|
||||||
|
//control codes for sequence bits
|
||||||
|
enum {
|
||||||
|
control_seq_nop = 0,
|
||||||
|
control_seq_abort = 1,
|
||||||
|
control_seq_wait = 2,
|
||||||
|
control_seq_tx = 3,
|
||||||
|
control_seq_rx = 4,
|
||||||
|
control_seq_txpoll = 5,
|
||||||
|
control_seq_cca = 6,
|
||||||
|
control_seq_ed = 7
|
||||||
|
};
|
||||||
|
|
||||||
|
#define maca_version (*((volatile uint32_t *)(0x80004000)))
|
||||||
|
#define maca_reset (*((volatile uint32_t *)(0x80004004)))
|
||||||
|
#define maca_random (*((volatile uint32_t *)(0x80004008)))
|
||||||
|
#define maca_control (*((volatile uint32_t *)(0x8000400c)))
|
||||||
|
#define maca_status (*((volatile uint32_t *)(0x80004010)))
|
||||||
|
#define maca_frmpnd (*((volatile uint32_t *)(0x80004014)))
|
||||||
|
|
||||||
|
#define maca_edvalue (*((volatile uint32_t *)(0x8000401c)))
|
||||||
|
#define maca_tmren (*((volatile uint32_t *)(0x80004040)))
|
||||||
|
#define maca_tmrdis (*((volatile uint32_t *)(0x80004044)))
|
||||||
|
#define maca_clk (*((volatile uint32_t *)(0x80004048)))
|
||||||
|
#define maca_startclk (*((volatile uint32_t *)(0x8000404c)))
|
||||||
|
#define maca_cplclk (*((volatile uint32_t *)(0x80004050)))
|
||||||
|
#define maca_sftclk (*((volatile uint32_t *)(0x80004054)))
|
||||||
|
#define maca_clkoffset (*((volatile uint32_t *)(0x80004058)))
|
||||||
|
#define maca_relclk (*((volatile uint32_t *)(0x8000405c)))
|
||||||
|
#define maca_cpltim (*((volatile uint32_t *)(0x80004060)))
|
||||||
|
#define maca_slotoffset (*((volatile uint32_t *)(0x80004064)))
|
||||||
|
#define maca_timestamp (*((volatile uint32_t *)(0x80004068)))
|
||||||
|
#define maca_dmarx (*((volatile uint32_t *)(0x80004080)))
|
||||||
|
#define maca_dmatx (*((volatile uint32_t *)(0x80004084)))
|
||||||
|
#define maca_dmatxpoll (*((volatile uint32_t *)(0x80004088)))
|
||||||
|
#define maca_txlen (*((volatile uint32_t *)(0x8000408c)))
|
||||||
|
#define maca_txseqnr (*((volatile uint32_t *)(0x80004090)))
|
||||||
|
#define maca_setrxlvl (*((volatile uint32_t *)(0x80004094)))
|
||||||
|
#define maca_getrxlvl (*((volatile uint32_t *)(0x80004098)))
|
||||||
|
#define maca_irq (*((volatile uint32_t *)(0x800040c0)))
|
||||||
|
#define maca_clrirq (*((volatile uint32_t *)(0x800040c4)))
|
||||||
|
#define maca_setirq (*((volatile uint32_t *)(0x800040c8)))
|
||||||
|
#define maca_maskirq (*((volatile uint32_t *)(0x800040cc)))
|
||||||
|
#define maca_panid (*((volatile uint32_t *)(0x80004100)))
|
||||||
|
#define maca_addr16 (*((volatile uint32_t *)(0x80004104)))
|
||||||
|
#define maca_maca64hi (*((volatile uint32_t *)(0x80004108)))
|
||||||
|
#define maca_maca64lo (*((volatile uint32_t *)(0x8000410c)))
|
||||||
|
#define maca_fltrej (*((volatile uint32_t *)(0x80004110)))
|
||||||
|
#define maca_divider (*((volatile uint32_t *)(0x80004114)))
|
||||||
|
#define maca_warmup (*((volatile uint32_t *)(0x80004118)))
|
||||||
|
#define maca_preamble (*((volatile uint32_t *)(0x8000411c)))
|
||||||
|
#define maca_whiteseed (*((volatile uint32_t *)(0x80004120)))
|
||||||
|
#define maca_framesync (*((volatile uint32_t *)(0x80004124)))
|
||||||
|
#define maca_framesync2 (*((volatile uint32_t *)(0x80004128)))
|
||||||
|
#define maca_txackdelay (*((volatile uint32_t *)(0x80004140)))
|
||||||
|
#define maca_rxackdelay (*((volatile uint32_t *)(0x80004144)))
|
||||||
|
#define maca_eofdelay (*((volatile uint32_t *)(0x80004148)))
|
||||||
|
#define maca_ccadelay (*((volatile uint32_t *)(0x8000414c)))
|
||||||
|
#define maca_rxend (*((volatile uint32_t *)(0x80004150)))
|
||||||
|
#define maca_txccadelay (*((volatile uint32_t *)(0x80004154)))
|
||||||
|
#define maca_key3 (*((volatile uint32_t *)(0x80004158)))
|
||||||
|
#define maca_key2 (*((volatile uint32_t *)(0x80004158)))
|
||||||
|
#define maca_key1 (*((volatile uint32_t *)(0x80004158)))
|
||||||
|
#define maca_key0 (*((volatile uint32_t *)(0x80004158)))
|
||||||
|
|
||||||
|
|
||||||
|
typedef union maca_version_reg_tag
|
||||||
|
{
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
uint32_t MINOR:8;
|
||||||
|
uint32_t RESERVED1:8;
|
||||||
|
uint32_t MAJOR:8;
|
||||||
|
uint32_t RESERVED2:8;
|
||||||
|
} Bits;
|
||||||
|
uint32_t Reg;
|
||||||
|
} maca_version_reg_t;
|
||||||
|
|
||||||
|
#define maca_version_reg_st ((maca_version_reg_t)(maca_version))
|
||||||
|
|
||||||
|
|
||||||
|
typedef union maca_reset_reg_tag
|
||||||
|
{
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
uint32_t RESERVED:30;
|
||||||
|
uint32_t CLK_ON:1;
|
||||||
|
uint32_t RST:1;
|
||||||
|
} Bits;
|
||||||
|
uint32_t Reg;
|
||||||
|
} maca_reset_reg_t;
|
||||||
|
|
||||||
|
#define maca_reset_reg_st ((maca_reset_reg_t)(maca_reset))
|
||||||
|
|
||||||
|
|
||||||
|
/* typedef union maca_ctrl_reg_tag */
|
||||||
|
/* { */
|
||||||
|
/* struct */
|
||||||
|
/* { */
|
||||||
|
/* uint32_t RESERVED:11; */
|
||||||
|
/* uint32_t ISM:1; */
|
||||||
|
/* uint32_t PRE_COUNT:4; */
|
||||||
|
/* uint32_t RSTO:1; */
|
||||||
|
/* uint32_t RSV:1; */
|
||||||
|
/* uint32_t ROLE:1; */
|
||||||
|
/* uint32_t NOFC:1; */
|
||||||
|
/* uint32_t PRM:1; */
|
||||||
|
/* uint32_t rel:1; */
|
||||||
|
/* uint32_t ASAP:1; */
|
||||||
|
/* uint32_t BCN:1; */
|
||||||
|
/* uint32_t AUTO:1; */
|
||||||
|
/* uint32_t LFSR:1; */
|
||||||
|
/* uint32_t TM:1; */
|
||||||
|
/* uint32_t MODE:2; */
|
||||||
|
/* uint32_t SEQUENCE:3; */
|
||||||
|
/* } Bits; */
|
||||||
|
/* uint32_t Reg; */
|
||||||
|
/* } maca_ctrl_reg_t; */
|
||||||
|
|
||||||
|
#define maca_control_ism (1<<20)
|
||||||
|
#define maca_control_zigbee (~maca_control_ism)
|
||||||
|
|
||||||
|
#define maca_ctrl_reg_st ((maca_ctrl_reg_t *)(&maca_reset))
|
||||||
|
#define _set_maca_test_mode(x) (maca_ctrl_reg_st->Bits.TM = x)
|
||||||
|
#define _set_maca_sequence(x) (maca_ctrl_reg_st->Bits.SEQUENCE = x)
|
||||||
|
#define _set_maca_asap(x) (maca_ctrl_reg_st->Bits.ASAP = x)
|
||||||
|
|
||||||
|
|
||||||
|
#define MACA_CTRL_ZIGBEE_MODE (0)
|
||||||
|
#define MACA_CTRL_ISM_MODE (1)
|
||||||
|
#define MACA_CTRL_PRM_NORMAL_MODE (0)
|
||||||
|
#define MACA_CTRL_PRM_PROMISCUOUS_MODE (1)
|
||||||
|
#define MACA_CTRL_BCN_ALL (0)
|
||||||
|
#define MACA_CTRL_BCN_BEACON (1)
|
||||||
|
#define MACA_CTRL_TM_NORMAL (0)
|
||||||
|
#define MACA_CTRL_TM_TEST (1)
|
||||||
|
#define MACA_CTRL_MODE_NO_CCA (0)
|
||||||
|
#define MACA_CTRL_MODE_NON_SLOTTED (1)
|
||||||
|
#define MACA_CTRL_MODE_SLOTTED (2)
|
||||||
|
|
||||||
|
typedef enum maca_freq_chann_tag
|
||||||
|
{
|
||||||
|
SMAC_CHANN_11 = 0,
|
||||||
|
SMAC_CHANN_12,
|
||||||
|
SMAC_CHANN_13,
|
||||||
|
SMAC_CHANN_14,
|
||||||
|
SMAC_CHANN_15,
|
||||||
|
SMAC_CHANN_16,
|
||||||
|
SMAC_CHANN_17,
|
||||||
|
SMAC_CHANN_18,
|
||||||
|
SMAC_CHANN_19,
|
||||||
|
SMAC_CHANN_20,
|
||||||
|
SMAC_CHANN_21,
|
||||||
|
SMAC_CHANN_22,
|
||||||
|
SMAC_CHANN_23,
|
||||||
|
SMAC_CHANN_24,
|
||||||
|
SMAC_CHANN_25,
|
||||||
|
SMAC_CHANN_26,
|
||||||
|
MAX_SMAC_CHANNELS
|
||||||
|
} maca_freq_chann_t;
|
||||||
|
|
||||||
|
|
||||||
|
/* Sequence complete codes */
|
||||||
|
enum maca_complete_code {
|
||||||
|
maca_cc_success = 0,
|
||||||
|
maca_cc_timeout = 1,
|
||||||
|
maca_cc_channel_busy = 2,
|
||||||
|
maca_cc_crc_fail = 3,
|
||||||
|
maca_cc_aborted = 4,
|
||||||
|
maca_cc_no_ack = 5,
|
||||||
|
maca_cc_no_data = 6,
|
||||||
|
maca_cc_late_start = 7,
|
||||||
|
maca_cc_ext_timeout = 8,
|
||||||
|
maca_cc_ext_pnd_timeout = 9,
|
||||||
|
maca_cc_nc1 = 10,
|
||||||
|
maca_cc_nc2 = 11,
|
||||||
|
maca_cc_nc3 = 12,
|
||||||
|
maca_cc_cc_external_abort= 13,
|
||||||
|
maca_cc_not_completed = 14,
|
||||||
|
maca_cc_bus_error = 15
|
||||||
|
};
|
||||||
|
|
||||||
|
/* control sequence codes */
|
||||||
|
enum maca_ctrl_seq {
|
||||||
|
maca_ctrl_seq_nop = 0,
|
||||||
|
maca_ctrl_seq_abort = 1,
|
||||||
|
maca_ctrl_seq_wait = 2,
|
||||||
|
maca_ctrl_seq_tx = 3,
|
||||||
|
maca_ctrl_seq_rx = 4,
|
||||||
|
maca_ctrl_seq_txpoll = 5,
|
||||||
|
maca_ctrl_seq_cca = 6,
|
||||||
|
maca_ctrl_seq_ed = 7
|
||||||
|
};
|
||||||
|
|
||||||
|
/* transmission modes */
|
||||||
|
enum maca_ctrl_modes {
|
||||||
|
maca_ctrl_mode_no_cca = 0,
|
||||||
|
maca_ctrl_mode_non_slotted_csma_ca = 1,
|
||||||
|
maca_ctrl_mode_slotted_csma_ca = 2,
|
||||||
|
};
|
||||||
|
|
||||||
|
/* MACA_CONTROL bits */
|
||||||
|
enum maca_ctrl_bits {
|
||||||
|
maca_ctrl_seq = 0, /* 3 bits */
|
||||||
|
maca_ctrl_mode = 3, /* 2 bits */
|
||||||
|
maca_ctrl_tm = 5,
|
||||||
|
maca_ctrl_lfsr = 6,
|
||||||
|
maca_ctrl_auto = 7,
|
||||||
|
maca_ctrl_bcn = 8,
|
||||||
|
maca_ctrl_asap = 9,
|
||||||
|
maca_ctrl_rel = 10,
|
||||||
|
maca_ctrl_prm = 11,
|
||||||
|
maca_ctrl_nofc = 12,
|
||||||
|
maca_ctrl_role = 13,
|
||||||
|
/* 14 reserved */
|
||||||
|
maca_ctrl_rsto = 15,
|
||||||
|
maca_ctrl_pre_count = 16, /* 4 bits */
|
||||||
|
maca_ctrl_ism = 20,
|
||||||
|
};
|
||||||
|
|
||||||
|
/* MACA_IRQ bits */
|
||||||
|
enum maca_irqs {
|
||||||
|
maca_irq_acpl = 0,
|
||||||
|
maca_irq_poll = 1,
|
||||||
|
maca_irq_di = 2,
|
||||||
|
maca_irq_wu = 3,
|
||||||
|
maca_irq_rst = 4,
|
||||||
|
maca_irq_lvl = 9,
|
||||||
|
maca_irq_sftclk = 10,
|
||||||
|
maca_irq_flt = 11,
|
||||||
|
maca_irq_crc = 12,
|
||||||
|
maca_irq_cm = 13,
|
||||||
|
maca_irq_sync = 14,
|
||||||
|
maca_irq_strt = 15,
|
||||||
|
};
|
||||||
|
|
||||||
|
/* MACA_RESET bits */
|
||||||
|
enum maca_reset_bits {
|
||||||
|
maca_reset_rst = 0,
|
||||||
|
maca_reset_clkon = 1,
|
||||||
|
};
|
||||||
|
|
||||||
|
/* MACA_TMREN bits */
|
||||||
|
enum maca_tmren_bits {
|
||||||
|
maca_tmren_strt = 0,
|
||||||
|
maca_tmren_cpl = 1,
|
||||||
|
maca_tmren_sft = 2,
|
||||||
|
};
|
||||||
|
|
||||||
|
enum maca_status_bits {
|
||||||
|
maca_status_ovr = 12,
|
||||||
|
maca_status_busy = 13,
|
||||||
|
maca_status_crc = 14,
|
||||||
|
maca_status_to = 15,
|
||||||
|
};
|
||||||
|
|
||||||
|
#define action_complete_irq() bit_is_set(*MACA_IRQ,maca_irq_acpl)
|
||||||
|
#define filter_failed_irq() bit_is_set(*MACA_IRQ,maca_irq_flt)
|
||||||
|
#define checksum_failed_irq() bit_is_set(*MACA_IRQ,maca_irq_crc)
|
||||||
|
#define data_indication_irq() bit_is_set(*MACA_IRQ,maca_irq_di)
|
||||||
|
#define softclock_irq() bit_is_set(*MACA_IRQ,maca_irq_sftclk)
|
||||||
|
#define poll_irq() bit_is_set(*MACA_IRQ,maca_irq_poll)
|
||||||
|
|
||||||
|
#define status_is_not_completed() ((*MACA_STATUS & 0xffff) == maca_cc_not_completed)
|
||||||
|
#define status_is_success() ((*MACA_STATUS & 0xffff) == maca_cc_success)
|
||||||
|
|
||||||
|
#define SMAC_MACA_CNTL_INIT_STATE ( control_prm | control_nofc | control_mode_non_slotted )
|
||||||
|
|
||||||
|
#define MACA_WRITE(reg, src) (reg = src)
|
||||||
|
#define MACA_READ(reg) reg
|
||||||
|
|
||||||
|
#endif // _MACA_H_
|
51
cpu/mc1322x/lib/include/mc1322x.h
Normal file
51
cpu/mc1322x/lib/include/mc1322x.h
Normal file
|
@ -0,0 +1,51 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2010, Mariano Alvira <mar@devl.org> and other contributors
|
||||||
|
* to the MC1322x project (http://mc1322x.devl.org)
|
||||||
|
* 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.
|
||||||
|
*
|
||||||
|
* This file is part of libmc1322x: see http://mc1322x.devl.org
|
||||||
|
* for details.
|
||||||
|
*
|
||||||
|
* $Id: mc1322x.h,v 1.1 2010/06/10 14:55:39 maralvira Exp $
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef MC1322X_H
|
||||||
|
#define MC1322X_H
|
||||||
|
|
||||||
|
#include "types.h"
|
||||||
|
#include "isr.h"
|
||||||
|
#include "gpio.h"
|
||||||
|
#include "crm.h"
|
||||||
|
#include "nvm.h"
|
||||||
|
#include "tmr.h"
|
||||||
|
#include "kbi.h"
|
||||||
|
#include "maca.h"
|
||||||
|
#include "packet.h"
|
||||||
|
#include "uart1.h"
|
||||||
|
#include "utils.h"
|
||||||
|
|
||||||
|
#endif
|
82
cpu/mc1322x/lib/include/nvm.h
Normal file
82
cpu/mc1322x/lib/include/nvm.h
Normal file
|
@ -0,0 +1,82 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2010, Mariano Alvira <mar@devl.org> and other contributors
|
||||||
|
* to the MC1322x project (http://mc1322x.devl.org)
|
||||||
|
* 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.
|
||||||
|
*
|
||||||
|
* This file is part of libmc1322x: see http://mc1322x.devl.org
|
||||||
|
* for details.
|
||||||
|
*
|
||||||
|
* $Id: nvm.h,v 1.1 2010/06/10 14:55:39 maralvira Exp $
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef NVM_H
|
||||||
|
#define NVM_H
|
||||||
|
|
||||||
|
#include "types.h"
|
||||||
|
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
gNvmType_NoNvm_c,
|
||||||
|
gNvmType_SST_c,
|
||||||
|
gNvmType_ST_c,
|
||||||
|
gNvmType_ATM_c,
|
||||||
|
gNvmType_Max_c
|
||||||
|
} nvmType_t;
|
||||||
|
|
||||||
|
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
gNvmErrNoError_c = 0,
|
||||||
|
gNvmErrInvalidInterface_c,
|
||||||
|
gNvmErrInvalidNvmType_c,
|
||||||
|
gNvmErrInvalidPointer_c,
|
||||||
|
gNvmErrWriteProtect_c,
|
||||||
|
gNvmErrVerifyError_c,
|
||||||
|
gNvmErrAddressSpaceOverflow_c,
|
||||||
|
gNvmErrBlankCheckError_c,
|
||||||
|
gNvmErrRestrictedArea_c,
|
||||||
|
gNvmErrMaxError_c
|
||||||
|
} nvmErr_t;
|
||||||
|
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
gNvmInternalInterface_c,
|
||||||
|
gNvmExternalInterface_c,
|
||||||
|
gNvmInterfaceMax_c
|
||||||
|
} nvmInterface_t;
|
||||||
|
|
||||||
|
/* ROM code seems to be THUMB */
|
||||||
|
/* need to be in a THUMB block before calling them */
|
||||||
|
extern nvmErr_t (*nvm_detect)(nvmInterface_t nvmInterface,nvmType_t* pNvmType);
|
||||||
|
extern nvmErr_t (*nvm_read)(nvmInterface_t nvmInterface , nvmType_t nvmType , void *pDest, uint32_t address, uint32_t numBytes);
|
||||||
|
extern nvmErr_t (*nvm_write)(nvmInterface_t nvmInterface, nvmType_t nvmType ,void *pSrc, uint32_t address, uint32_t numBytes);
|
||||||
|
/* sector bit field selects which sector to erase */
|
||||||
|
/* SST flash has 32 sectors 4096 bytes each */
|
||||||
|
/* bit 0 is the first sector, bit 31 is the last */
|
||||||
|
extern nvmErr_t (*nvm_erase)(nvmInterface_t nvmInterface, nvmType_t nvmType ,uint32_t sectorBitfield);
|
||||||
|
extern void(*nvm_setsvar)(uint32_t zero_for_awesome);
|
||||||
|
#endif //NVM_H
|
64
cpu/mc1322x/lib/include/packet.h
Normal file
64
cpu/mc1322x/lib/include/packet.h
Normal file
|
@ -0,0 +1,64 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2010, Mariano Alvira <mar@devl.org> and other contributors
|
||||||
|
* to the MC1322x project (http://mc1322x.devl.org)
|
||||||
|
* 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.
|
||||||
|
*
|
||||||
|
* This file is part of libmc1322x: see http://mc1322x.devl.org
|
||||||
|
* for details.
|
||||||
|
*
|
||||||
|
* $Id: packet.h,v 1.1 2010/06/10 14:55:39 maralvira Exp $
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef PACKET_H
|
||||||
|
#define PACKET_H
|
||||||
|
|
||||||
|
/* does not include 2 byte FCS checksum */
|
||||||
|
#ifndef MAX_PAYLOAD_SIZE
|
||||||
|
#define MAX_PAYLOAD_SIZE 125
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define PACKET_STATS 0
|
||||||
|
|
||||||
|
struct packet {
|
||||||
|
uint8_t length; /* does not include FCS checksum */
|
||||||
|
volatile struct packet * left;
|
||||||
|
volatile struct packet * right;
|
||||||
|
/* offset into data for first byte of the packet payload */
|
||||||
|
/* On TX this should be 0 */
|
||||||
|
/* On RX this should be 1 since the maca puts the length as the first byte*/
|
||||||
|
uint8_t offset;
|
||||||
|
#if PACKET_STATS
|
||||||
|
uint8_t seen;
|
||||||
|
uint8_t post_tx;
|
||||||
|
uint8_t get_free;
|
||||||
|
uint8_t rxd;
|
||||||
|
#endif
|
||||||
|
uint8_t data[MAX_PAYLOAD_SIZE+2+1]; /* +2 for FCS; + 1 since maca returns the length as the first byte */
|
||||||
|
};
|
||||||
|
typedef struct packet packet_t;
|
||||||
|
|
||||||
|
#endif
|
127
cpu/mc1322x/lib/include/tmr.h
Normal file
127
cpu/mc1322x/lib/include/tmr.h
Normal file
|
@ -0,0 +1,127 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2010, Mariano Alvira <mar@devl.org> and other contributors
|
||||||
|
* to the MC1322x project (http://mc1322x.devl.org)
|
||||||
|
* 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.
|
||||||
|
*
|
||||||
|
* This file is part of libmc1322x: see http://mc1322x.devl.org
|
||||||
|
* for details.
|
||||||
|
*
|
||||||
|
* $Id: tmr.h,v 1.1 2010/06/10 14:55:39 maralvira Exp $
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "utils.h"
|
||||||
|
|
||||||
|
/* Timer registers are all 16-bit wide with 16-bit access only */
|
||||||
|
#define TMR_OFFSET (0x20)
|
||||||
|
#define TMR_BASE (0x80007000)
|
||||||
|
#define TMR0_BASE (TMR_BASE)
|
||||||
|
#define TMR1_BASE (TMR_BASE + TMR_OFFSET*1)
|
||||||
|
#define TMR2_BASE (TMR_BASE + TMR_OFFSET*2)
|
||||||
|
#define TMR3_BASE (TMR_BASE + TMR_OFFSET*3)
|
||||||
|
|
||||||
|
#define TMR_REGOFF_COMP1 (0x0)
|
||||||
|
#define TMR_REGOFF_COMP2 (0x2)
|
||||||
|
#define TMR_REGOFF_CAPT (0x4)
|
||||||
|
#define TMR_REGOFF_LOAD (0x6)
|
||||||
|
#define TMR_REGOFF_HOLD (0x8)
|
||||||
|
#define TMR_REGOFF_CNTR (0xa)
|
||||||
|
#define TMR_REGOFF_CTRL (0xc)
|
||||||
|
#define TMR_REGOFF_SCTRL (0xe)
|
||||||
|
#define TMR_REGOFF_CMPLD1 (0x10)
|
||||||
|
#define TMR_REGOFF_CMPLD2 (0x12)
|
||||||
|
#define TMR_REGOFF_CSCTRL (0x14)
|
||||||
|
#define TMR_REGOFF_ENBL (0x1e)
|
||||||
|
|
||||||
|
/* one enable register to rule them all */
|
||||||
|
#define TMR_ENBL ((volatile uint16_t *) (TMR0_BASE + TMR_REGOFF_ENBL))
|
||||||
|
|
||||||
|
/* Timer 0 registers */
|
||||||
|
#define TMR0_COMP1 ((volatile uint16_t *) (TMR0_BASE + TMR_REGOFF_COMP1))
|
||||||
|
#define TMR0_COMP_UP TMR0_COMP1
|
||||||
|
#define TMR0_COMP2 (TMR0_BASE + TMR_REGOFF_COMP2)
|
||||||
|
#define TMR0_COMP_DOWN TMR0_COMP2
|
||||||
|
#define TMR0_CAPT ((volatile uint16_t *) (TMR0_BASE + TMR_REGOFF_CAPT))
|
||||||
|
#define TMR0_LOAD ((volatile uint16_t *) (TMR0_BASE + TMR_REGOFF_LOAD))
|
||||||
|
#define TMR0_HOLD ((volatile uint16_t *) (TMR0_BASE + TMR_REGOFF_HOLD))
|
||||||
|
#define TMR0_CNTR ((volatile uint16_t *) (TMR0_BASE + TMR_REGOFF_CTRL))
|
||||||
|
#define TMR0_CTRL ((volatile uint16_t *) (TMR0_BASE + TMR_REGOFF_CTRL))
|
||||||
|
#define TMR0_SCTRL ((volatile uint16_t *) (TMR0_BASE + TMR_REGOFF_SCTRL))
|
||||||
|
#define TMR0_CMPLD1 ((volatile uint16_t *) (TMR0_BASE + TMR_REGOFF_CMPLD1))
|
||||||
|
#define TMR0_CMPLD2 ((volatile uint16_t *) (TMR0_BASE + TMR_REGOFF_CMPLD2))
|
||||||
|
#define TMR0_CSCTRL ((volatile uint16_t *) (TMR0_BASE + TMR_REGOFF_CSCTRL))
|
||||||
|
|
||||||
|
/* Timer 1 registers */
|
||||||
|
#define TMR1_COMP1 ((volatile uint16_t *) (TMR1_BASE + TMR_REGOFF_COMP1))
|
||||||
|
#define TMR1_COMP_UP TMR1_COMP1
|
||||||
|
#define TMR1_COMP2 ((volatile uint16_t *) (TMR1_BASE + TMR_REGOFF_COMP2))
|
||||||
|
#define TMR1_COMP_DOWN TMR1_COMP2
|
||||||
|
#define TMR1_CAPT ((volatile uint16_t *) (TMR1_BASE + TMR_REGOFF_CAPT))
|
||||||
|
#define TMR1_LOAD ((volatile uint16_t *) (TMR1_BASE + TMR_REGOFF_LOAD))
|
||||||
|
#define TMR1_HOLD ((volatile uint16_t *) (TMR1_BASE + TMR_REGOFF_HOLD))
|
||||||
|
#define TMR1_CNTR ((volatile uint16_t *) (TMR1_BASE + TMR_REGOFF_CTRL))
|
||||||
|
#define TMR1_CTRL ((volatile uint16_t *) (TMR1_BASE + TMR_REGOFF_CTRL))
|
||||||
|
#define TMR1_SCTRL ((volatile uint16_t *) (TMR1_BASE + TMR_REGOFF_SCTRL))
|
||||||
|
#define TMR1_CMPLD1 ((volatile uint16_t *) (TMR1_BASE + TMR_REGOFF_CMPLD1))
|
||||||
|
#define TMR1_CMPLD2 ((volatile uint16_t *) (TMR1_BASE + TMR_REGOFF_CMPLD2))
|
||||||
|
#define TMR1_CSCTRL ((volatile uint16_t *) (TMR1_BASE + TMR_REGOFF_CSCTRL))
|
||||||
|
|
||||||
|
/* Timer 2 registers */
|
||||||
|
#define TMR2_COMP1 ((volatile uint16_t *) (TMR2_BASE + TMR_REGOFF_COMP1))
|
||||||
|
#define TMR2_COMP_UP TMR2_COMP1
|
||||||
|
#define TMR2_COMP2 ((volatile uint16_t *) (TMR2_BASE + TMR_REGOFF_COMP2))
|
||||||
|
#define TMR2_COMP_DOWN TMR2_COMP2
|
||||||
|
#define TMR2_CAPT ((volatile uint16_t *) (TMR2_BASE + TMR_REGOFF_CAPT))
|
||||||
|
#define TMR2_LOAD ((volatile uint16_t *) (TMR2_BASE + TMR_REGOFF_LOAD))
|
||||||
|
#define TMR2_HOLD ((volatile uint16_t *) (TMR2_BASE + TMR_REGOFF_HOLD))
|
||||||
|
#define TMR2_CNTR ((volatile uint16_t *) (TMR2_BASE + TMR_REGOFF_CTRL))
|
||||||
|
#define TMR2_CTRL ((volatile uint16_t *) (TMR2_BASE + TMR_REGOFF_CTRL))
|
||||||
|
#define TMR2_SCTRL ((volatile uint16_t *) (TMR2_BASE + TMR_REGOFF_SCTRL))
|
||||||
|
#define TMR2_CMPLD1 ((volatile uint16_t *) (TMR2_BASE + TMR_REGOFF_CMPLD1))
|
||||||
|
#define TMR2_CMPLD2 ((volatile uint16_t *) (TMR2_BASE + TMR_REGOFF_CMPLD2))
|
||||||
|
#define TMR2_CSCTRL ((volatile uint16_t *) (TMR2_BASE + TMR_REGOFF_CSCTRL))
|
||||||
|
|
||||||
|
/* Timer 3 registers */
|
||||||
|
#define TMR3_COMP1 ((volatile uint16_t *) (TMR3_BASE + TMR_REGOFF_COMP1))
|
||||||
|
#define TMR3_COMP_UP TMR3_COMP1
|
||||||
|
#define TMR3_COMP2 ((volatile uint16_t *) (TMR3_BASE + TMR_REGOFF_COMP2))
|
||||||
|
#define TMR3_COMP_DOWN TMR3_COMP2
|
||||||
|
#define TMR3_CAPT ((volatile uint16_t *) (TMR3_BASE + TMR_REGOFF_CAPT))
|
||||||
|
#define TMR3_LOAD ((volatile uint16_t *) (TMR3_BASE + TMR_REGOFF_LOAD))
|
||||||
|
#define TMR3_HOLD ((volatile uint16_t *) (TMR3_BASE + TMR_REGOFF_HOLD))
|
||||||
|
#define TMR3_CNTR ((volatile uint16_t *) (TMR3_BASE + TMR_REGOFF_CTRL))
|
||||||
|
#define TMR3_CTRL ((volatile uint16_t *) (TMR3_BASE + TMR_REGOFF_CTRL))
|
||||||
|
#define TMR3_SCTRL ((volatile uint16_t *) (TMR3_BASE + TMR_REGOFF_SCTRL))
|
||||||
|
#define TMR3_CMPLD1 ((volatile uint16_t *) (TMR3_BASE + TMR_REGOFF_CMPLD1))
|
||||||
|
#define TMR3_CMPLD2 ((volatile uint16_t *) (TMR3_BASE + TMR_REGOFF_CMPLD2))
|
||||||
|
#define TMR3_CSCTRL ((volatile uint16_t *) (TMR3_BASE + TMR_REGOFF_CSCTRL))
|
||||||
|
|
||||||
|
#define TCF 15
|
||||||
|
#define TCF1 4
|
||||||
|
#define TCF2 5
|
||||||
|
|
||||||
|
#define TMR(num, reg) CAT2(TMR,num,_##reg)
|
||||||
|
|
48
cpu/mc1322x/lib/include/types.h
Normal file
48
cpu/mc1322x/lib/include/types.h
Normal file
|
@ -0,0 +1,48 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2010, Mariano Alvira <mar@devl.org> and other contributors
|
||||||
|
* to the MC1322x project (http://mc1322x.devl.org)
|
||||||
|
* 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.
|
||||||
|
*
|
||||||
|
* This file is part of libmc1322x: see http://mc1322x.devl.org
|
||||||
|
* for details.
|
||||||
|
*
|
||||||
|
* $Id: types.h,v 1.1 2010/06/10 14:55:39 maralvira Exp $
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _TYPES_H
|
||||||
|
#define _TYPES_H
|
||||||
|
|
||||||
|
typedef signed char int8_t;
|
||||||
|
typedef unsigned char uint8_t;
|
||||||
|
typedef signed short int16_t;
|
||||||
|
typedef unsigned short uint16_t;
|
||||||
|
typedef signed int int32_t;
|
||||||
|
typedef unsigned int uint32_t;
|
||||||
|
typedef signed long long int int64_t;
|
||||||
|
typedef unsigned long long int uint64_t;
|
||||||
|
|
||||||
|
#endif
|
80
cpu/mc1322x/lib/include/uart1.h
Normal file
80
cpu/mc1322x/lib/include/uart1.h
Normal file
|
@ -0,0 +1,80 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2010, Mariano Alvira <mar@devl.org> and other contributors
|
||||||
|
* to the MC1322x project (http://mc1322x.devl.org)
|
||||||
|
* 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.
|
||||||
|
*
|
||||||
|
* This file is part of libmc1322x: see http://mc1322x.devl.org
|
||||||
|
* for details.
|
||||||
|
*
|
||||||
|
* $Id: uart1.h,v 1.1 2010/06/10 14:55:39 maralvira Exp $
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef UART1_H
|
||||||
|
#define UART1_H
|
||||||
|
|
||||||
|
#include <types.h>
|
||||||
|
|
||||||
|
#define UCON (0)
|
||||||
|
/* UCON bits */
|
||||||
|
#define UCON_SAMP 10
|
||||||
|
#define UCON_SAMP_8X 0
|
||||||
|
#define UCON_SAMP_16X 1
|
||||||
|
|
||||||
|
#define USTAT (0x04)
|
||||||
|
#define UDATA (0x08)
|
||||||
|
#define URXCON (0x0c)
|
||||||
|
#define UTXCON (0x10)
|
||||||
|
#define UCTS (0x14)
|
||||||
|
#define UBRCNT (0x18)
|
||||||
|
|
||||||
|
#define UART1_BASE (0x80005000)
|
||||||
|
#define UART2_BASE (0x8000b000)
|
||||||
|
|
||||||
|
#define UART1_UCON ((volatile uint32_t *) ( UART1_BASE + UCON ))
|
||||||
|
#define UART1_USTAT ((volatile uint32_t *) ( UART1_BASE + USTAT ))
|
||||||
|
#define UART1_UDATA ((volatile uint32_t *) ( UART1_BASE + UDATA ))
|
||||||
|
#define UART1_URXCON ((volatile uint32_t *) ( UART1_BASE + URXCON ))
|
||||||
|
#define UART1_UTXCON ((volatile uint32_t *) ( UART1_BASE + UTXCON ))
|
||||||
|
#define UART1_UCTS ((volatile uint32_t *) ( UART1_BASE + UCTS ))
|
||||||
|
#define UART1_UBRCNT ((volatile uint32_t *) ( UART1_BASE + UBRCNT ))
|
||||||
|
|
||||||
|
#define UART2_UCON ((volatile uint32_t *) ( UART2_BASE + UCON ))
|
||||||
|
#define UART2_USTAT ((volatile uint32_t *) ( UART2_BASE + USTAT ))
|
||||||
|
#define UART2_UDATA ((volatile uint32_t *) ( UART2_BASE + UDATA ))
|
||||||
|
#define UART2_URXCON ((volatile uint32_t *) ( UART2_BASE + URXCON ))
|
||||||
|
#define UART2_UTXCON ((volatile uint32_t *) ( UART2_BASE + UTXCON ))
|
||||||
|
#define UART2_UCTS ((volatile uint32_t *) ( UART2_BASE + UCTS ))
|
||||||
|
#define UART2_UBRCNT ((volatile uint32_t *) ( UART2_BASE + UBRCNT ))
|
||||||
|
|
||||||
|
extern volatile uint32_t u1_head, u1_tail;
|
||||||
|
void uart1_putc(char c);
|
||||||
|
#define uart1_can_get() (*UART1_URXCON > 0)
|
||||||
|
uint8_t uart1_getc(void);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
58
cpu/mc1322x/lib/include/utils.h
Normal file
58
cpu/mc1322x/lib/include/utils.h
Normal file
|
@ -0,0 +1,58 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2010, Mariano Alvira <mar@devl.org> and other contributors
|
||||||
|
* to the MC1322x project (http://mc1322x.devl.org)
|
||||||
|
* 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.
|
||||||
|
*
|
||||||
|
* This file is part of libmc1322x: see http://mc1322x.devl.org
|
||||||
|
* for details.
|
||||||
|
*
|
||||||
|
* $Id: utils.h,v 1.1 2010/06/10 14:55:39 maralvira Exp $
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef UTILS_H
|
||||||
|
#define UTILS_H
|
||||||
|
|
||||||
|
#define mem32(x) ((volatile uint32_t *)(x))
|
||||||
|
#define mem16(x) ((volatile uint16_t *)(x))
|
||||||
|
|
||||||
|
#define CAT2(x, y, z) x##y##z
|
||||||
|
|
||||||
|
#define STR(x) #x
|
||||||
|
#define STR2(x) STR(x)
|
||||||
|
|
||||||
|
#define bit(bit) (1 << bit)
|
||||||
|
#define bit_is_set(val, bit) (((val & (1 << bit)) >> bit) == 1)
|
||||||
|
#define clear_bit(val, bit) (val = (val & ~(1 << bit)))
|
||||||
|
#define set_bit(val, bit) (val = (val | (1 << bit)))
|
||||||
|
|
||||||
|
#define ones(num) ( (1ULL << num) - 1 )
|
||||||
|
#define bit_mask(length, shift) (ones(length) << shift)
|
||||||
|
#define get_field(val, field) ((val & field##_MASK) >> field)
|
||||||
|
//#define bitfield(name, length, shift) ( #define #name length #define #name##_MASK bit_mask(length, shift))
|
||||||
|
#define bitfield(name, length, shift) ( define #name length )
|
||||||
|
|
||||||
|
#endif /* UTILS_H */
|
1213
cpu/mc1322x/lib/maca.c
Normal file
1213
cpu/mc1322x/lib/maca.c
Normal file
File diff suppressed because it is too large
Load diff
57
cpu/mc1322x/lib/nvm.c
Normal file
57
cpu/mc1322x/lib/nvm.c
Normal file
|
@ -0,0 +1,57 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2010, Mariano Alvira <mar@devl.org> and other contributors
|
||||||
|
* to the MC1322x project (http://mc1322x.devl.org)
|
||||||
|
* 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.
|
||||||
|
*
|
||||||
|
* This file is part of libmc1322x: see http://mc1322x.devl.org
|
||||||
|
* for details.
|
||||||
|
*
|
||||||
|
* $Id: nvm.c,v 1.1 2010/06/10 14:55:39 maralvira Exp $
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "nvm.h"
|
||||||
|
|
||||||
|
nvmErr_t (*nvm_detect)
|
||||||
|
(nvmInterface_t nvmInterface,nvmType_t* pNvmType)
|
||||||
|
= (void *) 0x00006cb9;
|
||||||
|
|
||||||
|
nvmErr_t (*nvm_read)
|
||||||
|
(nvmInterface_t nvmInterface , nvmType_t nvmType , void *pDest, uint32_t address, uint32_t numBytes)
|
||||||
|
= (void *) 0x00006d69;
|
||||||
|
|
||||||
|
nvmErr_t (*nvm_write)
|
||||||
|
(nvmInterface_t nvmInterface, nvmType_t nvmType ,void *pSrc, uint32_t address, uint32_t numBytes)
|
||||||
|
= (void *) 0x00006ec5;
|
||||||
|
|
||||||
|
nvmErr_t (*nvm_erase)
|
||||||
|
(nvmInterface_t nvmInterface, nvmType_t nvmType ,uint32_t sectorBitfield)
|
||||||
|
= (void*) 0x00006e05;
|
||||||
|
|
||||||
|
void(*nvm_setsvar)
|
||||||
|
(uint32_t zero_for_awesome)
|
||||||
|
= (void *)0x00007085;
|
||||||
|
|
77
cpu/mc1322x/lib/uart1.c
Normal file
77
cpu/mc1322x/lib/uart1.c
Normal file
|
@ -0,0 +1,77 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2010, Mariano Alvira <mar@devl.org> and other contributors
|
||||||
|
* to the MC1322x project (http://mc1322x.devl.org)
|
||||||
|
* 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.
|
||||||
|
*
|
||||||
|
* This file is part of libmc1322x: see http://mc1322x.devl.org
|
||||||
|
* for details.
|
||||||
|
*
|
||||||
|
* $Id: uart1.c,v 1.1 2010/06/10 14:55:39 maralvira Exp $
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <mc1322x.h>
|
||||||
|
#include <types.h>
|
||||||
|
|
||||||
|
volatile char u1_tx_buf[1024];
|
||||||
|
volatile uint32_t u1_head, u1_tail;
|
||||||
|
|
||||||
|
void uart1_isr(void) {
|
||||||
|
while( *UART1_UTXCON != 0 ) {
|
||||||
|
if (u1_head == u1_tail) {
|
||||||
|
disable_irq(UART1);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
*UART1_UDATA = u1_tx_buf[u1_tail];
|
||||||
|
u1_tail++;
|
||||||
|
if (u1_tail >= sizeof(u1_tx_buf))
|
||||||
|
u1_tail = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void uart1_putc(char c) {
|
||||||
|
/* disable UART1 since */
|
||||||
|
/* UART1 isr modifies u1_head and u1_tail */
|
||||||
|
disable_irq(UART1);
|
||||||
|
|
||||||
|
if( (u1_head == u1_tail) &&
|
||||||
|
(*UART1_UTXCON != 0)) {
|
||||||
|
*UART1_UDATA = c;
|
||||||
|
} else {
|
||||||
|
u1_tx_buf[u1_head] = c;
|
||||||
|
u1_head += 1;
|
||||||
|
if (u1_head >= sizeof(u1_tx_buf))
|
||||||
|
u1_head = 0;
|
||||||
|
if (u1_head == u1_tail) /* drop chars when no room */
|
||||||
|
return;
|
||||||
|
enable_irq(UART1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t uart1_getc(void) {
|
||||||
|
while(uart1_can_get() == 0) { continue; }
|
||||||
|
return *UART1_UDATA;
|
||||||
|
}
|
44
cpu/mc1322x/tests/Makefile
Normal file
44
cpu/mc1322x/tests/Makefile
Normal file
|
@ -0,0 +1,44 @@
|
||||||
|
MC1322X := ..
|
||||||
|
|
||||||
|
# all off the common objects for each target
|
||||||
|
# a COBJ is made for EACH board and goes the obj_$(BOARD)_board directory
|
||||||
|
# board specific code is OK in these files
|
||||||
|
COBJS := tests.o put.o
|
||||||
|
|
||||||
|
# all of the target programs to build
|
||||||
|
TARGETS := blink-red blink-green blink-blue blink-white blink-allio \
|
||||||
|
uart1-loopback \
|
||||||
|
tmr tmr-ints \
|
||||||
|
sleep \
|
||||||
|
printf
|
||||||
|
|
||||||
|
# these targets are built with space reserved for variables needed by ROM services
|
||||||
|
# this space is initialized with a rom call to rom_data_init
|
||||||
|
TARGETS_WITH_ROM_VARS := nvm-read nvm-write romimg flasher \
|
||||||
|
rftest-rx rftest-tx \
|
||||||
|
per
|
||||||
|
|
||||||
|
##################################################
|
||||||
|
# you shouldn't need to edit anything below here #
|
||||||
|
##################################################
|
||||||
|
|
||||||
|
# This Makefile includes the default rule at the top
|
||||||
|
# it needs to be included first
|
||||||
|
-include $(MC1322X)/Makefile.include
|
||||||
|
|
||||||
|
# this rule will become the default_goal if
|
||||||
|
# $(MC1322X)/Makefile.include doesn't exist it will try to update the
|
||||||
|
# submodule, check if $(MC1322X) exists, and if it does
|
||||||
|
# try make again
|
||||||
|
submodule:
|
||||||
|
git submodule update --init
|
||||||
|
if [ ! -d $(MC1322X) ] ; then echo "*** cannot find MC1322X directory $(MC1322X)" ; exit 2; fi
|
||||||
|
$(MAKE)
|
||||||
|
|
||||||
|
.PHONY: submodule
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
66
cpu/mc1322x/tests/blink-allio.c
Normal file
66
cpu/mc1322x/tests/blink-allio.c
Normal file
|
@ -0,0 +1,66 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2010, Mariano Alvira <mar@devl.org> and other contributors
|
||||||
|
* to the MC1322x project (http://mc1322x.devl.org)
|
||||||
|
* 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.
|
||||||
|
*
|
||||||
|
* This file is part of libmc1322x: see http://mc1322x.devl.org
|
||||||
|
* for details.
|
||||||
|
*
|
||||||
|
* $Id: blink-allio.c,v 1.1 2010/06/10 14:55:39 maralvira Exp $
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <mc1322x.h>
|
||||||
|
#include <board.h>
|
||||||
|
|
||||||
|
#define DELAY 400000
|
||||||
|
|
||||||
|
void main(void) {
|
||||||
|
|
||||||
|
*GPIO_FUNC_SEL0 = 0xffffffff;
|
||||||
|
*GPIO_FUNC_SEL1 = 0xffffffff;
|
||||||
|
*GPIO_FUNC_SEL2 = 0xffffffff;
|
||||||
|
*GPIO_FUNC_SEL3 = 0xffffffff;
|
||||||
|
|
||||||
|
*GPIO_PAD_DIR0 = 0xffffffff;
|
||||||
|
*GPIO_PAD_DIR1 = 0xffffffff;
|
||||||
|
|
||||||
|
volatile uint32_t i;
|
||||||
|
|
||||||
|
while(1) {
|
||||||
|
|
||||||
|
*GPIO_DATA0 = 0xffffffff;
|
||||||
|
*GPIO_DATA1 = 0xffffffff;
|
||||||
|
|
||||||
|
for(i=0; i<DELAY; i++) { continue; }
|
||||||
|
|
||||||
|
*GPIO_DATA0 = 0x00000000;
|
||||||
|
*GPIO_DATA1 = 0x00000000;
|
||||||
|
|
||||||
|
for(i=0; i<DELAY; i++) { continue; }
|
||||||
|
|
||||||
|
};
|
||||||
|
}
|
61
cpu/mc1322x/tests/blink-blue.c
Normal file
61
cpu/mc1322x/tests/blink-blue.c
Normal file
|
@ -0,0 +1,61 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2010, Mariano Alvira <mar@devl.org> and other contributors
|
||||||
|
* to the MC1322x project (http://mc1322x.devl.org)
|
||||||
|
* 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.
|
||||||
|
*
|
||||||
|
* This file is part of libmc1322x: see http://mc1322x.devl.org
|
||||||
|
* for details.
|
||||||
|
*
|
||||||
|
* $Id: blink-blue.c,v 1.1 2010/06/10 14:55:39 maralvira Exp $
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <mc1322x.h>
|
||||||
|
#include <board.h>
|
||||||
|
|
||||||
|
#define DELAY 400000
|
||||||
|
|
||||||
|
#define LED (1ULL << LED_BLUE)
|
||||||
|
|
||||||
|
void main(void) {
|
||||||
|
volatile uint32_t i;
|
||||||
|
|
||||||
|
gpio_pad_dir(LED);
|
||||||
|
|
||||||
|
while(1) {
|
||||||
|
|
||||||
|
gpio_data(LED);
|
||||||
|
|
||||||
|
for(i=0; i<DELAY; i++) { continue; }
|
||||||
|
|
||||||
|
gpio_data(0);
|
||||||
|
|
||||||
|
for(i=0; i<DELAY; i++) { continue; }
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
61
cpu/mc1322x/tests/blink-green.c
Normal file
61
cpu/mc1322x/tests/blink-green.c
Normal file
|
@ -0,0 +1,61 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2010, Mariano Alvira <mar@devl.org> and other contributors
|
||||||
|
* to the MC1322x project (http://mc1322x.devl.org)
|
||||||
|
* 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.
|
||||||
|
*
|
||||||
|
* This file is part of libmc1322x: see http://mc1322x.devl.org
|
||||||
|
* for details.
|
||||||
|
*
|
||||||
|
* $Id: blink-green.c,v 1.1 2010/06/10 14:55:39 maralvira Exp $
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <mc1322x.h>
|
||||||
|
#include <board.h>
|
||||||
|
|
||||||
|
#define DELAY 400000
|
||||||
|
|
||||||
|
#define LED (1ULL << LED_GREEN)
|
||||||
|
|
||||||
|
void main(void) {
|
||||||
|
volatile uint32_t i;
|
||||||
|
|
||||||
|
gpio_pad_dir(LED);
|
||||||
|
|
||||||
|
while(1) {
|
||||||
|
|
||||||
|
gpio_data(LED);
|
||||||
|
|
||||||
|
for(i=0; i<DELAY; i++) { continue; }
|
||||||
|
|
||||||
|
gpio_data(0);
|
||||||
|
|
||||||
|
for(i=0; i<DELAY; i++) { continue; }
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
61
cpu/mc1322x/tests/blink-red.c
Normal file
61
cpu/mc1322x/tests/blink-red.c
Normal file
|
@ -0,0 +1,61 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2010, Mariano Alvira <mar@devl.org> and other contributors
|
||||||
|
* to the MC1322x project (http://mc1322x.devl.org)
|
||||||
|
* 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.
|
||||||
|
*
|
||||||
|
* This file is part of libmc1322x: see http://mc1322x.devl.org
|
||||||
|
* for details.
|
||||||
|
*
|
||||||
|
* $Id: blink-red.c,v 1.1 2010/06/10 14:55:39 maralvira Exp $
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <mc1322x.h>
|
||||||
|
#include <board.h>
|
||||||
|
|
||||||
|
#define DELAY 400000
|
||||||
|
|
||||||
|
#define LED (1ULL << LED_RED)
|
||||||
|
|
||||||
|
void main(void) {
|
||||||
|
volatile uint32_t i;
|
||||||
|
|
||||||
|
gpio_pad_dir(LED);
|
||||||
|
|
||||||
|
while(1) {
|
||||||
|
|
||||||
|
gpio_data(LED);
|
||||||
|
|
||||||
|
for(i=0; i<DELAY; i++) { continue; }
|
||||||
|
|
||||||
|
gpio_data(0);
|
||||||
|
|
||||||
|
for(i=0; i<DELAY; i++) { continue; }
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
63
cpu/mc1322x/tests/blink-white.c
Normal file
63
cpu/mc1322x/tests/blink-white.c
Normal file
|
@ -0,0 +1,63 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2010, Mariano Alvira <mar@devl.org> and other contributors
|
||||||
|
* to the MC1322x project (http://mc1322x.devl.org)
|
||||||
|
* 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.
|
||||||
|
*
|
||||||
|
* This file is part of libmc1322x: see http://mc1322x.devl.org
|
||||||
|
* for details.
|
||||||
|
*
|
||||||
|
* $Id: blink-white.c,v 1.1 2010/06/10 14:55:39 maralvira Exp $
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <mc1322x.h>
|
||||||
|
#include <board.h>
|
||||||
|
|
||||||
|
#include "led.h"
|
||||||
|
|
||||||
|
#define DELAY 400000
|
||||||
|
|
||||||
|
#define LED LED_WHITE
|
||||||
|
|
||||||
|
void main(void) {
|
||||||
|
volatile uint32_t i;
|
||||||
|
|
||||||
|
gpio_pad_dir(LED);
|
||||||
|
|
||||||
|
while(1) {
|
||||||
|
|
||||||
|
gpio_data(LED);
|
||||||
|
|
||||||
|
for(i=0; i<DELAY; i++) { continue; }
|
||||||
|
|
||||||
|
gpio_data(0);
|
||||||
|
|
||||||
|
for(i=0; i<DELAY; i++) { continue; }
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
75
cpu/mc1322x/tests/config.h
Normal file
75
cpu/mc1322x/tests/config.h
Normal file
|
@ -0,0 +1,75 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2010, Mariano Alvira <mar@devl.org> and other contributors
|
||||||
|
* to the MC1322x project (http://mc1322x.devl.org)
|
||||||
|
* 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.
|
||||||
|
*
|
||||||
|
* This file is part of libmc1322x: see http://mc1322x.devl.org
|
||||||
|
* for details.
|
||||||
|
*
|
||||||
|
* $Id: config.h,v 1.1 2010/06/10 14:55:39 maralvira Exp $
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef CONFIG_H
|
||||||
|
#define CONFIG_H
|
||||||
|
|
||||||
|
/* Baud rate */
|
||||||
|
#define MOD 9999
|
||||||
|
/* 230400 bps, INC=767, MOD=9999, 24Mhz 16x samp */
|
||||||
|
/* 115200 bps, INC=767, MOD=9999, 24Mhz 8x samp */
|
||||||
|
#define INC 767
|
||||||
|
/* 921600 bps, MOD=9999, 24Mhz 16x samp */
|
||||||
|
//#define INC 3071
|
||||||
|
#define SAMP UCON_SAMP_8X
|
||||||
|
//#define SAMP UCON_SAMP_16X
|
||||||
|
|
||||||
|
/* use uart1 for console */
|
||||||
|
#define uart_init uart1_init
|
||||||
|
|
||||||
|
/* nvm-read */
|
||||||
|
#define READ_ADDR 0x1E000
|
||||||
|
#define READ_NBYTES 8
|
||||||
|
|
||||||
|
/* nvm-write */
|
||||||
|
#define WRITE_NBYTES 8
|
||||||
|
#define WRITE_ADDR 0x1e000
|
||||||
|
#define WRITEVAL0 0xdeadbeef
|
||||||
|
#define WRITEVAL1 0xdeadbeef
|
||||||
|
|
||||||
|
/* romimg */
|
||||||
|
#define DUMP_BASE 0x00000000
|
||||||
|
#define DUMP_LEN 0x00014000
|
||||||
|
|
||||||
|
/* flasher */
|
||||||
|
/* if both BOOT_OK and BOOT_SECURE are 0 then flash image will not be bootable */
|
||||||
|
/* if both are 1 then flash image will be secure */
|
||||||
|
#define BOOT_OK 1
|
||||||
|
#define BOOT_SECURE 0
|
||||||
|
|
||||||
|
/* sleep */
|
||||||
|
#undef USE_32KHZ /* board should have a HAS_32KHZ define */
|
||||||
|
|
||||||
|
#endif
|
248
cpu/mc1322x/tests/flasher.c
Normal file
248
cpu/mc1322x/tests/flasher.c
Normal file
|
@ -0,0 +1,248 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2010, Mariano Alvira <mar@devl.org> and other contributors
|
||||||
|
* to the MC1322x project (http://mc1322x.devl.org)
|
||||||
|
* 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.
|
||||||
|
*
|
||||||
|
* This file is part of libmc1322x: see http://mc1322x.devl.org
|
||||||
|
* for details.
|
||||||
|
*
|
||||||
|
* $Id: flasher.c,v 1.1 2010/06/10 14:55:39 maralvira Exp $
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <mc1322x.h>
|
||||||
|
#include <board.h>
|
||||||
|
|
||||||
|
#include "tests.h"
|
||||||
|
#include "config.h"
|
||||||
|
|
||||||
|
#define DEBUG 1
|
||||||
|
#if DEBUG
|
||||||
|
#define dbg_putchr(...) putchr(__VA_ARGS__)
|
||||||
|
#define dbg_putstr(...) putstr(__VA_ARGS__)
|
||||||
|
#define dbg_put_hex(...) put_hex(__VA_ARGS__)
|
||||||
|
#define dbg_put_hex16(...) put_hex16(__VA_ARGS__)
|
||||||
|
#define dbg_put_hex32(...) put_hex32(__VA_ARGS__)
|
||||||
|
#else
|
||||||
|
#define dbg_putchr(...)
|
||||||
|
#define dbg_putstr(...)
|
||||||
|
#define dbg_put_hex(...)
|
||||||
|
#define dbg_put_hex16(...)
|
||||||
|
#define dbg_put_hex32(...)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
uint8_t getc(void)
|
||||||
|
{
|
||||||
|
volatile uint8_t c;
|
||||||
|
while(*UART1_URXCON == 0);
|
||||||
|
|
||||||
|
c = *UART1_UDATA;
|
||||||
|
return c;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void flushrx(void);
|
||||||
|
uint32_t to_u32(volatile uint32_t *c);
|
||||||
|
|
||||||
|
enum parse_states {
|
||||||
|
SCAN_X,
|
||||||
|
READ_CHARS,
|
||||||
|
PROCESS,
|
||||||
|
MAX_STATE,
|
||||||
|
};
|
||||||
|
|
||||||
|
void main(void) {
|
||||||
|
nvmType_t type=0;
|
||||||
|
nvmErr_t err;
|
||||||
|
volatile uint8_t c;
|
||||||
|
volatile uint32_t i;
|
||||||
|
volatile uint32_t buf[4];
|
||||||
|
volatile uint32_t len=0;
|
||||||
|
volatile uint32_t state = SCAN_X;
|
||||||
|
volatile uint32_t addr,data;
|
||||||
|
|
||||||
|
|
||||||
|
uart_init(INC, MOD, SAMP);
|
||||||
|
disable_irq(UART1);
|
||||||
|
|
||||||
|
vreg_init();
|
||||||
|
|
||||||
|
dbg_putstr("Detecting internal nvm\n\r");
|
||||||
|
|
||||||
|
err = nvm_detect(gNvmInternalInterface_c, &type);
|
||||||
|
|
||||||
|
dbg_putstr("nvm_detect returned: 0x");
|
||||||
|
dbg_put_hex(err);
|
||||||
|
dbg_putstr(" type is: 0x");
|
||||||
|
dbg_put_hex32(type);
|
||||||
|
dbg_putstr("\n\r");
|
||||||
|
|
||||||
|
/* erase the flash */
|
||||||
|
err = nvm_erase(gNvmInternalInterface_c, type, 0x4fffffff);
|
||||||
|
|
||||||
|
dbg_putstr("nvm_erase returned: 0x");
|
||||||
|
dbg_put_hex(err);
|
||||||
|
dbg_putstr("\n\r");
|
||||||
|
|
||||||
|
dbg_putstr(" type is: 0x");
|
||||||
|
dbg_put_hex32(type);
|
||||||
|
dbg_putstr("\n\r");
|
||||||
|
|
||||||
|
/* say we are ready */
|
||||||
|
len = 0;
|
||||||
|
putstr("ready");
|
||||||
|
flushrx();
|
||||||
|
|
||||||
|
/* read the length */
|
||||||
|
for(i=0; i<4; i++) {
|
||||||
|
c = uart1_getc();
|
||||||
|
/* bail if the first byte of the length is zero */
|
||||||
|
len += (c<<(i*8));
|
||||||
|
}
|
||||||
|
|
||||||
|
dbg_putstr("len: ");
|
||||||
|
dbg_put_hex32(len);
|
||||||
|
dbg_putstr("\n\r");
|
||||||
|
|
||||||
|
/* write the OKOK magic */
|
||||||
|
|
||||||
|
#if BOOT_OK
|
||||||
|
((uint8_t *)buf)[0] = 'O'; ((uint8_t *)buf)[1] = 'K'; ((uint8_t *)buf)[2] = 'O'; ((uint8_t *)buf)[3] = 'K';
|
||||||
|
#elif BOOT_SECURE
|
||||||
|
((uint8_t *)buf)[0] = 'S'; ((uint8_t *)buf)[1] = 'E'; ((uint8_t *)buf)[2] = 'C'; ((uint8_t *)buf)[3] = 'U';
|
||||||
|
#else
|
||||||
|
((uint8_t *)buf)[0] = 'N'; ((uint8_t *)buf)[1] = 'O'; ((uint8_t *)buf)[2] = 'N'; ((uint8_t *)buf)[3] = 'O';
|
||||||
|
#endif
|
||||||
|
|
||||||
|
dbg_putstr(" type is: 0x");
|
||||||
|
dbg_put_hex32(type);
|
||||||
|
dbg_putstr("\n\r");
|
||||||
|
|
||||||
|
err = nvm_write(gNvmInternalInterface_c, type, (uint8_t *)buf, 0, 4);
|
||||||
|
|
||||||
|
dbg_putstr("nvm_write returned: 0x");
|
||||||
|
dbg_put_hex(err);
|
||||||
|
dbg_putstr("\n\r");
|
||||||
|
|
||||||
|
/* write the length */
|
||||||
|
err = nvm_write(gNvmInternalInterface_c, type, (uint8_t *)&len, 4, 4);
|
||||||
|
|
||||||
|
/* read a byte, write a byte */
|
||||||
|
/* byte at a time will make this work as a contiki process better */
|
||||||
|
/* for OTAP */
|
||||||
|
for(i=0; i<len; i++) {
|
||||||
|
c = getc();
|
||||||
|
err = nvm_write(gNvmInternalInterface_c, type, (uint8_t *)&c, 8+i, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
putstr("flasher done\n\r");
|
||||||
|
|
||||||
|
state = SCAN_X; addr=0;
|
||||||
|
while((c=getc())) {
|
||||||
|
if(state == SCAN_X) {
|
||||||
|
/* read until we see an 'x' */
|
||||||
|
if(c==0) { break; }
|
||||||
|
if(c!='x'){ continue; }
|
||||||
|
/* go to read_chars once we have an 'x' */
|
||||||
|
state = READ_CHARS;
|
||||||
|
i = 0;
|
||||||
|
}
|
||||||
|
if(state == READ_CHARS) {
|
||||||
|
/* read all the chars up to a ',' */
|
||||||
|
((uint8_t *)buf)[i++] = c;
|
||||||
|
/* after reading a ',' */
|
||||||
|
/* goto PROCESS state */
|
||||||
|
if((c == ',') || (c == 0)) { state = PROCESS; }
|
||||||
|
}
|
||||||
|
if(state == PROCESS) {
|
||||||
|
if(addr==0) {
|
||||||
|
/*interpret the string as the starting address */
|
||||||
|
addr = to_u32(buf);
|
||||||
|
} else {
|
||||||
|
/* string is data to write */
|
||||||
|
data = to_u32(buf);
|
||||||
|
putstr("writing addr ");
|
||||||
|
put_hex32(addr);
|
||||||
|
putstr(" data ");
|
||||||
|
put_hex32(data);
|
||||||
|
putstr("\n\r");
|
||||||
|
err = nvm_write(gNvmInternalInterface_c, 1, (uint8_t *)&data, addr, 4);
|
||||||
|
addr += 4;
|
||||||
|
}
|
||||||
|
/* look for the next 'x' */
|
||||||
|
state=SCAN_X;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
while(1) {continue;};
|
||||||
|
}
|
||||||
|
|
||||||
|
void flushrx(void)
|
||||||
|
{
|
||||||
|
volatile uint8_t c;
|
||||||
|
while(*UART1_URXCON !=0) {
|
||||||
|
c = *UART1_UDATA;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Convert from ASCII hex. Returns
|
||||||
|
the value, or 16 if it was space/newline, or
|
||||||
|
32 if some other character. */
|
||||||
|
uint8_t from_hex(uint8_t ch)
|
||||||
|
{
|
||||||
|
if(ch==' ' || ch=='\r' || ch=='\n')
|
||||||
|
return 16;
|
||||||
|
|
||||||
|
if(ch < '0')
|
||||||
|
goto bad;
|
||||||
|
if(ch <= '9')
|
||||||
|
return ch - '0';
|
||||||
|
ch |= 0x20;
|
||||||
|
if(ch < 'a')
|
||||||
|
goto bad;
|
||||||
|
if(ch <= 'f')
|
||||||
|
return ch - 'a' + 10;
|
||||||
|
bad:
|
||||||
|
return 32;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t to_u32(volatile uint32_t *c)
|
||||||
|
{
|
||||||
|
volatile uint32_t ret=0;
|
||||||
|
volatile uint32_t i,val;
|
||||||
|
|
||||||
|
/* c should be /x\d+,/ */
|
||||||
|
i=1; /* skip x */
|
||||||
|
while(((uint8_t *)c)[i] != ',') {
|
||||||
|
ret = ret<<4;
|
||||||
|
val = from_hex(((uint8_t *)c)[i++]);
|
||||||
|
ret += val;
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
44
cpu/mc1322x/tests/led.h
Normal file
44
cpu/mc1322x/tests/led.h
Normal file
|
@ -0,0 +1,44 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2010, Mariano Alvira <mar@devl.org> and other contributors
|
||||||
|
* to the MC1322x project (http://mc1322x.devl.org)
|
||||||
|
* 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.
|
||||||
|
*
|
||||||
|
* This file is part of libmc1322x: see http://mc1322x.devl.org
|
||||||
|
* for details.
|
||||||
|
*
|
||||||
|
* $Id: led.h,v 1.1 2010/06/10 14:55:39 maralvira Exp $
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef LED_H
|
||||||
|
#define LED_H
|
||||||
|
|
||||||
|
#define LED_YELLOW ((1ULL << LED_RED) | (1ULL << LED_GREEN) )
|
||||||
|
#define LED_PURPLE ((1ULL << LED_RED) | (1ULL << LED_BLUE))
|
||||||
|
#define LED_CYAN ( (1ULL << LED_GREEN) | (1ULL << LED_BLUE))
|
||||||
|
#define LED_WHITE ((1ULL << LED_RED) | (1ULL << LED_GREEN) | (1ULL << LED_BLUE))
|
||||||
|
|
||||||
|
#endif
|
80
cpu/mc1322x/tests/nvm-read.c
Normal file
80
cpu/mc1322x/tests/nvm-read.c
Normal file
|
@ -0,0 +1,80 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2010, Mariano Alvira <mar@devl.org> and other contributors
|
||||||
|
* to the MC1322x project (http://mc1322x.devl.org)
|
||||||
|
* 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.
|
||||||
|
*
|
||||||
|
* This file is part of libmc1322x: see http://mc1322x.devl.org
|
||||||
|
* for details.
|
||||||
|
*
|
||||||
|
* $Id: nvm-read.c,v 1.1 2010/06/10 14:55:39 maralvira Exp $
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <mc1322x.h>
|
||||||
|
#include <board.h>
|
||||||
|
|
||||||
|
#include "tests.h"
|
||||||
|
#include "config.h"
|
||||||
|
|
||||||
|
void main(void) {
|
||||||
|
nvmType_t type=0;
|
||||||
|
nvmErr_t err;
|
||||||
|
uint32_t buf[READ_NBYTES/4];
|
||||||
|
uint32_t i;
|
||||||
|
|
||||||
|
uart_init(INC, MOD, SAMP);
|
||||||
|
|
||||||
|
print_welcome("nvm-read");
|
||||||
|
|
||||||
|
vreg_init();
|
||||||
|
|
||||||
|
putstr("Detecting internal nvm\n\r");
|
||||||
|
|
||||||
|
err = nvm_detect(gNvmInternalInterface_c, &type);
|
||||||
|
|
||||||
|
putstr("nvm_detect returned: 0x");
|
||||||
|
put_hex(err);
|
||||||
|
putstr(" type is: 0x");
|
||||||
|
put_hex32(type);
|
||||||
|
putstr("\n\r");
|
||||||
|
|
||||||
|
nvm_setsvar(0);
|
||||||
|
|
||||||
|
err = nvm_read(gNvmInternalInterface_c, type, (uint8_t *)buf, READ_ADDR, READ_NBYTES);
|
||||||
|
putstr("nvm_read returned: 0x");
|
||||||
|
put_hex(err);
|
||||||
|
putstr("\n\r");
|
||||||
|
|
||||||
|
for(i=0; i<READ_NBYTES/4; i++) {
|
||||||
|
putstr("0x");
|
||||||
|
put_hex32(buf[i]);
|
||||||
|
putstr("\n\r");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
while(1) {continue;};
|
||||||
|
}
|
||||||
|
|
99
cpu/mc1322x/tests/nvm-write.c
Normal file
99
cpu/mc1322x/tests/nvm-write.c
Normal file
|
@ -0,0 +1,99 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2010, Mariano Alvira <mar@devl.org> and other contributors
|
||||||
|
* to the MC1322x project (http://mc1322x.devl.org)
|
||||||
|
* 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.
|
||||||
|
*
|
||||||
|
* This file is part of libmc1322x: see http://mc1322x.devl.org
|
||||||
|
* for details.
|
||||||
|
*
|
||||||
|
* $Id: nvm-write.c,v 1.1 2010/06/10 14:55:39 maralvira Exp $
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <mc1322x.h>
|
||||||
|
#include <board.h>
|
||||||
|
|
||||||
|
#include "tests.h"
|
||||||
|
#include "config.h"
|
||||||
|
|
||||||
|
void main(void) {
|
||||||
|
nvmType_t type=0;
|
||||||
|
nvmErr_t err;
|
||||||
|
uint32_t buf[WRITE_NBYTES/4];
|
||||||
|
uint32_t i;
|
||||||
|
|
||||||
|
uart_init(INC, MOD, SAMP);
|
||||||
|
|
||||||
|
print_welcome("nvm-write");
|
||||||
|
|
||||||
|
vreg_init();
|
||||||
|
|
||||||
|
putstr("Detecting internal nvm\n\r");
|
||||||
|
|
||||||
|
err = nvm_detect(gNvmInternalInterface_c, &type);
|
||||||
|
|
||||||
|
putstr("nvm_detect returned: 0x");
|
||||||
|
put_hex(err);
|
||||||
|
putstr(" type is: 0x");
|
||||||
|
put_hex32(type);
|
||||||
|
putstr("\n\r");
|
||||||
|
|
||||||
|
|
||||||
|
buf[0] = WRITEVAL0;
|
||||||
|
buf[1] = WRITEVAL1;
|
||||||
|
|
||||||
|
err = nvm_erase(gNvmInternalInterface_c, type, 0x40000000); /* erase sector 30 --- sector 31 is the 'secret zone' */
|
||||||
|
putstr("nvm_erase returned: 0x");
|
||||||
|
put_hex(err);
|
||||||
|
putstr("\n\r");
|
||||||
|
|
||||||
|
err = nvm_write(gNvmInternalInterface_c, type, (uint8_t *)buf, WRITE_ADDR, WRITE_NBYTES);
|
||||||
|
putstr("nvm_write returned: 0x");
|
||||||
|
put_hex(err);
|
||||||
|
putstr("\n\r");
|
||||||
|
putstr("writing\n\r");
|
||||||
|
for(i=0; i<WRITE_NBYTES/4; i++) {
|
||||||
|
putstr("0x");
|
||||||
|
put_hex32(buf[i]);
|
||||||
|
putstr("\n\r");
|
||||||
|
buf[i] = 0x00000000; /* clear buf for the read */
|
||||||
|
}
|
||||||
|
|
||||||
|
err = nvm_read(gNvmInternalInterface_c, type, (uint8_t *)buf, WRITE_ADDR, WRITE_NBYTES);
|
||||||
|
putstr("nvm_read returned: 0x");
|
||||||
|
put_hex(err);
|
||||||
|
putstr("\n\r");
|
||||||
|
putstr("reading\n\r");
|
||||||
|
for(i=0; i<WRITE_NBYTES/4; i++) {
|
||||||
|
putstr("0x");
|
||||||
|
put_hex32(buf[i]);
|
||||||
|
putstr("\n\r");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
while(1) {continue;};
|
||||||
|
}
|
||||||
|
|
173
cpu/mc1322x/tests/per.c
Normal file
173
cpu/mc1322x/tests/per.c
Normal file
|
@ -0,0 +1,173 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2010, Mariano Alvira <mar@devl.org> and other contributors
|
||||||
|
* to the MC1322x project (http://mc1322x.devl.org)
|
||||||
|
* 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.
|
||||||
|
*
|
||||||
|
* This file is part of libmc1322x: see http://mc1322x.devl.org
|
||||||
|
* for details.
|
||||||
|
*
|
||||||
|
* $Id: per.c,v 1.1 2010/06/10 14:55:39 maralvira Exp $
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <mc1322x.h>
|
||||||
|
#include <board.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
#include "tests.h"
|
||||||
|
#include "config.h"
|
||||||
|
|
||||||
|
/* This program communicates with itself and determines the packet */
|
||||||
|
/* error rate (PER) under a variety of powers and packet sizes */
|
||||||
|
/* Each test the packets are sent and received as fast as possible */
|
||||||
|
|
||||||
|
/* The program first scans on channel 11 and attempts to open a test */
|
||||||
|
/* session with a node. After opening a session, the nodes begin the */
|
||||||
|
/* test sequence */
|
||||||
|
|
||||||
|
/* how long to wait between session requests */
|
||||||
|
#define SESSION_REQ_TIMEOUT 10000 /* phony seconds */
|
||||||
|
|
||||||
|
enum STATES {
|
||||||
|
SCANNING,
|
||||||
|
MAX_STATE
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef uint32_t ptype_t;
|
||||||
|
enum PACKET_TYPE {
|
||||||
|
PACKET_SESS_REQ,
|
||||||
|
MAX_PACKET_TYPE
|
||||||
|
};
|
||||||
|
/* get protocol level packet type */
|
||||||
|
/* this is not 802.15.4 packet type */
|
||||||
|
ptype_t get_packet_type(packet_t * p __attribute__((unused))) {
|
||||||
|
return MAX_PACKET_TYPE;
|
||||||
|
}
|
||||||
|
|
||||||
|
typedef uint32_t session_id_t;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* phony get_time */
|
||||||
|
uint32_t get_time(void) {
|
||||||
|
static volatile int32_t cur_time = 0;
|
||||||
|
cur_time++;
|
||||||
|
return cur_time;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#define random_short_addr() (*MACA_RANDOM & ones(sizeof(uint16_t)*8))
|
||||||
|
|
||||||
|
void build_session_req(volatile packet_t *p) {
|
||||||
|
static uint8_t count = 0;
|
||||||
|
p->length = 4; p->offset = 0;
|
||||||
|
p->data[0] = 0xff;
|
||||||
|
p->data[1] = 0x01;
|
||||||
|
p->data[2] = 0x02;
|
||||||
|
p->data[3] = count++;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
void session_req(uint16_t addr __attribute__((unused))) {
|
||||||
|
static volatile int time = 0;
|
||||||
|
volatile packet_t *p;
|
||||||
|
|
||||||
|
if((get_time() - time) > SESSION_REQ_TIMEOUT) {
|
||||||
|
time = get_time();
|
||||||
|
if((p = get_free_packet())) {
|
||||||
|
build_session_req(p);
|
||||||
|
tx_packet(p);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
session_id_t open_session(uint16_t addr __attribute((unused))) { return 0; }
|
||||||
|
|
||||||
|
void main(void) {
|
||||||
|
uint32_t state;
|
||||||
|
volatile packet_t *p;
|
||||||
|
session_id_t sesid;
|
||||||
|
ptype_t type;
|
||||||
|
uint16_t addr, my_addr;
|
||||||
|
|
||||||
|
/* trim the reference osc. to 24MHz */
|
||||||
|
pack_XTAL_CNTL(CTUNE_4PF, CTUNE, FTUNE, IBIAS);
|
||||||
|
|
||||||
|
uart_init(INC, MOD, SAMP);
|
||||||
|
|
||||||
|
vreg_init();
|
||||||
|
|
||||||
|
maca_init();
|
||||||
|
|
||||||
|
set_power(0x0f); /* 0dbm */
|
||||||
|
set_channel(0); /* channel 11 */
|
||||||
|
|
||||||
|
/* generate a random short address */
|
||||||
|
my_addr = random_short_addr();
|
||||||
|
|
||||||
|
/* sets up tx_on, should be a board specific item */
|
||||||
|
*GPIO_FUNC_SEL2 = (0x01 << ((44-16*2)*2));
|
||||||
|
gpio_pad_dir_set( 1ULL << 44 );
|
||||||
|
|
||||||
|
print_welcome("Packet error test");
|
||||||
|
|
||||||
|
state = SCANNING;
|
||||||
|
while(1) {
|
||||||
|
|
||||||
|
switch(state) {
|
||||||
|
case SCANNING:
|
||||||
|
if((p = rx_packet())) {
|
||||||
|
/* extract what we need and free the packet */
|
||||||
|
printf("Recv: ");
|
||||||
|
print_packet(p);
|
||||||
|
type = get_packet_type((packet_t *) p);
|
||||||
|
addr = 0; /* FIXME */
|
||||||
|
free_packet(p);
|
||||||
|
/* pick a new address if someone else is using ours */
|
||||||
|
if(addr == my_addr) {
|
||||||
|
my_addr = random_short_addr();
|
||||||
|
printf("DUP addr received, changing to new addr 0x%x02\n\r",my_addr);
|
||||||
|
}
|
||||||
|
/* if we have a packet */
|
||||||
|
/* check if it's a session request beacon */
|
||||||
|
if(type == PACKET_SESS_REQ) {
|
||||||
|
/* try to start a session */
|
||||||
|
sesid = open_session(addr);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
session_req(my_addr);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
136
cpu/mc1322x/tests/printf.c
Normal file
136
cpu/mc1322x/tests/printf.c
Normal file
|
@ -0,0 +1,136 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2010, Mariano Alvira <mar@devl.org> and other contributors
|
||||||
|
* to the MC1322x project (http://mc1322x.devl.org)
|
||||||
|
* 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.
|
||||||
|
*
|
||||||
|
* This file is part of libmc1322x: see http://mc1322x.devl.org
|
||||||
|
* for details.
|
||||||
|
*
|
||||||
|
* $Id: printf.c,v 1.1 2010/06/10 14:55:39 maralvira Exp $
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <mc1322x.h>
|
||||||
|
#include <board.h>
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <math.h>
|
||||||
|
|
||||||
|
#include "tests.h"
|
||||||
|
#include "config.h"
|
||||||
|
|
||||||
|
#define print_size(x) do { \
|
||||||
|
printf("sizeof("); \
|
||||||
|
printf(#x); \
|
||||||
|
printf("): %d\n", sizeof(x)); \
|
||||||
|
} while(0)
|
||||||
|
|
||||||
|
FILE *stderr;
|
||||||
|
|
||||||
|
void __assert_fail(void) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
int fputs(const char *s, FILE *stream) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t fwrite(const void *ptr, size_t size, size_t nmemb,
|
||||||
|
FILE *stream) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(void)
|
||||||
|
{
|
||||||
|
char *ptr = "Hello world!";
|
||||||
|
char *np = 0;
|
||||||
|
int i = 5;
|
||||||
|
unsigned int bs = sizeof(int)*8;
|
||||||
|
int mi;
|
||||||
|
// char buf[80];
|
||||||
|
|
||||||
|
uart_init(INC, MOD, SAMP);
|
||||||
|
|
||||||
|
print_size(int8_t);
|
||||||
|
print_size(uint8_t);
|
||||||
|
print_size(int16_t);
|
||||||
|
print_size(uint16_t);
|
||||||
|
print_size(int32_t);
|
||||||
|
print_size(uint32_t);
|
||||||
|
print_size(int64_t);
|
||||||
|
print_size(uint64_t);
|
||||||
|
|
||||||
|
mi = (1 << (bs-1)) + 1;
|
||||||
|
printf("%s\n", ptr);
|
||||||
|
printf("printf test\n");
|
||||||
|
printf("%s is null pointer\n", np);
|
||||||
|
printf("%d = 5\n", i);
|
||||||
|
printf("%d = - max int\n", mi);
|
||||||
|
printf("char %c = 'a'\n", 'a');
|
||||||
|
printf("hex %x = ff\n", 0xff);
|
||||||
|
printf("hex %02x = 00\n", 0);
|
||||||
|
printf("signed %d = unsigned %u = hex %x\n", -3, -3, -3);
|
||||||
|
printf("%d %s(s)", 0, "message");
|
||||||
|
printf("\n");
|
||||||
|
printf("%d %s(s) with %%\n", 0, "message");
|
||||||
|
|
||||||
|
printf("sqrt(5) * 100 = %d\n", (int) (sqrt(5)*100));
|
||||||
|
|
||||||
|
// sprintf(buf, "justif: \"%-10s\"\n", "left"); printf("%s", buf);
|
||||||
|
// sprintf(buf, "justif: \"%10s\"\n", "right"); printf("%s", buf);
|
||||||
|
// sprintf(buf, " 3: %04d zero padded\n", 3); printf("%s", buf);
|
||||||
|
// sprintf(buf, " 3: %-4d left justif.\n", 3); printf("%s", buf);
|
||||||
|
// sprintf(buf, " 3: %4d right justif.\n", 3); printf("%s", buf);
|
||||||
|
// sprintf(buf, "-3: %04d zero padded\n", -3); printf("%s", buf);
|
||||||
|
// sprintf(buf, "-3: %-4d left justif.\n", -3); printf("%s", buf);
|
||||||
|
// sprintf(buf, "-3: %4d right justif.\n", -3); printf("%s", buf);
|
||||||
|
|
||||||
|
while(1) { continue; }
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* this should display (on 32bit int machine) :
|
||||||
|
*
|
||||||
|
* Hello world!
|
||||||
|
* printf test
|
||||||
|
* (null) is null pointer
|
||||||
|
* 5 = 5
|
||||||
|
* -2147483647 = - max int
|
||||||
|
* char a = 'a'
|
||||||
|
* hex ff = ff
|
||||||
|
* hex 00 = 00
|
||||||
|
* signed -3 = unsigned 4294967293 = hex fffffffd
|
||||||
|
* 0 message(s)
|
||||||
|
* 0 message(s) with %
|
||||||
|
* justif: "left "
|
||||||
|
* justif: " right"
|
||||||
|
* 3: 0003 zero padded
|
||||||
|
* 3: 3 left justif.
|
||||||
|
* 3: 3 right justif.
|
||||||
|
* -3: -003 zero padded
|
||||||
|
* -3: -3 left justif.
|
||||||
|
* -3: -3 right justif.
|
||||||
|
*/
|
73
cpu/mc1322x/tests/put.c
Normal file
73
cpu/mc1322x/tests/put.c
Normal file
|
@ -0,0 +1,73 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2010, Mariano Alvira <mar@devl.org> and other contributors
|
||||||
|
* to the MC1322x project (http://mc1322x.devl.org)
|
||||||
|
* 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.
|
||||||
|
*
|
||||||
|
* This file is part of libmc1322x: see http://mc1322x.devl.org
|
||||||
|
* for details.
|
||||||
|
*
|
||||||
|
* $Id: put.c,v 1.1 2010/06/10 14:55:39 maralvira Exp $
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <mc1322x.h>
|
||||||
|
#include <board.h>
|
||||||
|
|
||||||
|
const uint8_t hex[16]={'0','1','2','3','4','5','6','7',
|
||||||
|
'8','9','a','b','c','d','e','f'};
|
||||||
|
|
||||||
|
void putchr(char c) {
|
||||||
|
while(*UART1_UTXCON == 31);
|
||||||
|
/* wait for there to be room in the buffer */
|
||||||
|
// while( *UART1_UTXCON == 0 ) { continue; }
|
||||||
|
*UART1_UDATA = c;
|
||||||
|
}
|
||||||
|
|
||||||
|
void putstr(char *s) {
|
||||||
|
while(s && *s!=0) {
|
||||||
|
putchr(*s++);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void put_hex(uint8_t x)
|
||||||
|
{
|
||||||
|
putchr(hex[x >> 4]);
|
||||||
|
putchr(hex[x & 15]);
|
||||||
|
}
|
||||||
|
|
||||||
|
void put_hex16(uint16_t x)
|
||||||
|
{
|
||||||
|
put_hex((x >> 8) & 0xFF);
|
||||||
|
put_hex((x) & 0xFF);
|
||||||
|
}
|
||||||
|
|
||||||
|
void put_hex32(uint32_t x)
|
||||||
|
{
|
||||||
|
put_hex((x >> 24) & 0xFF);
|
||||||
|
put_hex((x >> 16) & 0xFF);
|
||||||
|
put_hex((x >> 8) & 0xFF);
|
||||||
|
put_hex((x) & 0xFF);
|
||||||
|
}
|
45
cpu/mc1322x/tests/put.h
Normal file
45
cpu/mc1322x/tests/put.h
Normal file
|
@ -0,0 +1,45 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2010, Mariano Alvira <mar@devl.org> and other contributors
|
||||||
|
* to the MC1322x project (http://mc1322x.devl.org)
|
||||||
|
* 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.
|
||||||
|
*
|
||||||
|
* This file is part of libmc1322x: see http://mc1322x.devl.org
|
||||||
|
* for details.
|
||||||
|
*
|
||||||
|
* $Id: put.h,v 1.1 2010/06/10 14:55:39 maralvira Exp $
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef PUT_H
|
||||||
|
#define PUT_H
|
||||||
|
|
||||||
|
void putchr(char c);
|
||||||
|
void putstr(char *s);
|
||||||
|
void put_hex(uint8_t x);
|
||||||
|
void put_hex16(uint16_t x);
|
||||||
|
void put_hex32(uint32_t x);
|
||||||
|
|
||||||
|
#endif
|
91
cpu/mc1322x/tests/rftest-rx.c
Normal file
91
cpu/mc1322x/tests/rftest-rx.c
Normal file
|
@ -0,0 +1,91 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2010, Mariano Alvira <mar@devl.org> and other contributors
|
||||||
|
* to the MC1322x project (http://mc1322x.devl.org)
|
||||||
|
* 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.
|
||||||
|
*
|
||||||
|
* This file is part of libmc1322x: see http://mc1322x.devl.org
|
||||||
|
* for details.
|
||||||
|
*
|
||||||
|
* $Id: rftest-rx.c,v 1.1 2010/06/10 14:55:39 maralvira Exp $
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <mc1322x.h>
|
||||||
|
#include <board.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
#include "tests.h"
|
||||||
|
#include "config.h"
|
||||||
|
|
||||||
|
#define LED LED_GREEN
|
||||||
|
|
||||||
|
void maca_rx_callback(volatile packet_t *p) {
|
||||||
|
(void)p;
|
||||||
|
gpio_data_set(1ULL<< LED);
|
||||||
|
gpio_data_reset(1ULL<< LED);
|
||||||
|
}
|
||||||
|
|
||||||
|
void main(void) {
|
||||||
|
volatile packet_t *p;
|
||||||
|
|
||||||
|
gpio_data(0);
|
||||||
|
|
||||||
|
gpio_pad_dir_set( 1ULL << LED );
|
||||||
|
/* read from the data register instead of the pad */
|
||||||
|
/* this is needed because the led clamps the voltage low */
|
||||||
|
gpio_data_sel( 1ULL << LED);
|
||||||
|
|
||||||
|
/* trim the reference osc. to 24MHz */
|
||||||
|
trim_xtal();
|
||||||
|
|
||||||
|
uart_init(INC, MOD, SAMP);
|
||||||
|
|
||||||
|
vreg_init();
|
||||||
|
|
||||||
|
maca_init();
|
||||||
|
|
||||||
|
/* sets up tx_on, should be a board specific item */
|
||||||
|
// *GPIO_FUNC_SEL2 = (0x01 << ((44-16*2)*2));
|
||||||
|
gpio_pad_dir_set( 1ULL << 44 );
|
||||||
|
|
||||||
|
set_power(0x0f); /* 0dbm */
|
||||||
|
set_channel(0); /* channel 11 */
|
||||||
|
|
||||||
|
print_welcome("rftest-rx");
|
||||||
|
while(1) {
|
||||||
|
|
||||||
|
/* call check_maca() periodically --- this works around */
|
||||||
|
/* a few lockup conditions */
|
||||||
|
check_maca();
|
||||||
|
|
||||||
|
if((p = rx_packet())) {
|
||||||
|
/* print and free the packet */
|
||||||
|
printf("rftest-rx --- ");
|
||||||
|
print_packet(p);
|
||||||
|
free_packet(p);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
110
cpu/mc1322x/tests/rftest-tx.c
Normal file
110
cpu/mc1322x/tests/rftest-tx.c
Normal file
|
@ -0,0 +1,110 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2010, Mariano Alvira <mar@devl.org> and other contributors
|
||||||
|
* to the MC1322x project (http://mc1322x.devl.org)
|
||||||
|
* 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.
|
||||||
|
*
|
||||||
|
* This file is part of libmc1322x: see http://mc1322x.devl.org
|
||||||
|
* for details.
|
||||||
|
*
|
||||||
|
* $Id: rftest-tx.c,v 1.1 2010/06/10 14:55:39 maralvira Exp $
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <mc1322x.h>
|
||||||
|
#include <board.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
#include "tests.h"
|
||||||
|
#include "config.h"
|
||||||
|
|
||||||
|
#define LED LED_RED
|
||||||
|
|
||||||
|
/* 802.15.4 PSDU is 127 MAX */
|
||||||
|
/* 2 bytes are the FCS */
|
||||||
|
/* therefore 125 is the max payload length */
|
||||||
|
#define PAYLOAD_LEN 16
|
||||||
|
#define DELAY 100000
|
||||||
|
|
||||||
|
void fill_packet(volatile packet_t *p) {
|
||||||
|
static volatile uint8_t count=0;
|
||||||
|
volatile uint8_t i;
|
||||||
|
p->length = PAYLOAD_LEN;
|
||||||
|
p->offset = 0;
|
||||||
|
for(i=0; i<PAYLOAD_LEN; i++) {
|
||||||
|
p->data[i] = count++;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* acks get treated differently, even in promiscuous mode */
|
||||||
|
/* setting the third bit makes sure that we never send an ack */
|
||||||
|
/* or any valid 802.15.4-2006 packet */
|
||||||
|
p->data[0] |= (1 << 3);
|
||||||
|
}
|
||||||
|
|
||||||
|
void main(void) {
|
||||||
|
volatile uint32_t i;
|
||||||
|
volatile packet_t *p;
|
||||||
|
|
||||||
|
/* trim the reference osc. to 24MHz */
|
||||||
|
trim_xtal();
|
||||||
|
|
||||||
|
uart_init(INC, MOD, SAMP);
|
||||||
|
|
||||||
|
vreg_init();
|
||||||
|
|
||||||
|
maca_init();
|
||||||
|
|
||||||
|
set_channel(0); /* channel 11 */
|
||||||
|
// set_power(0x0f); /* 0xf = -1dbm, see 3-22 */
|
||||||
|
// set_power(0x11); /* 0x11 = 3dbm, see 3-22 */
|
||||||
|
set_power(0x12); /* 0x12 is the highest, not documented */
|
||||||
|
|
||||||
|
/* sets up tx_on, should be a board specific item */
|
||||||
|
*GPIO_FUNC_SEL2 = (0x01 << ((44-16*2)*2));
|
||||||
|
gpio_pad_dir_set( 1ULL << 44 );
|
||||||
|
|
||||||
|
print_welcome("rftest-tx");
|
||||||
|
|
||||||
|
while(1) {
|
||||||
|
|
||||||
|
/* call check_maca() periodically --- this works around */
|
||||||
|
/* a few lockup conditions */
|
||||||
|
check_maca();
|
||||||
|
|
||||||
|
p = get_free_packet();
|
||||||
|
if(p) {
|
||||||
|
fill_packet(p);
|
||||||
|
|
||||||
|
printf("rftest-tx --- ");
|
||||||
|
print_packet(p);
|
||||||
|
|
||||||
|
tx_packet(p);
|
||||||
|
|
||||||
|
for(i=0; i<DELAY; i++) { continue; }
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
53
cpu/mc1322x/tests/romimg.c
Normal file
53
cpu/mc1322x/tests/romimg.c
Normal file
|
@ -0,0 +1,53 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2010, Mariano Alvira <mar@devl.org> and other contributors
|
||||||
|
* to the MC1322x project (http://mc1322x.devl.org)
|
||||||
|
* 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.
|
||||||
|
*
|
||||||
|
* This file is part of libmc1322x: see http://mc1322x.devl.org
|
||||||
|
* for details.
|
||||||
|
*
|
||||||
|
* $Id: romimg.c,v 1.1 2010/06/10 14:55:39 maralvira Exp $
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <mc1322x.h>
|
||||||
|
#include <board.h>
|
||||||
|
|
||||||
|
#include "tests.h"
|
||||||
|
#include "config.h"
|
||||||
|
|
||||||
|
void main(void) {
|
||||||
|
volatile uint8_t *data;
|
||||||
|
|
||||||
|
uart_init(INC, MOD, SAMP);
|
||||||
|
|
||||||
|
for(data = DUMP_BASE; data < ((uint8_t *)(DUMP_BASE+DUMP_LEN)); data++) {
|
||||||
|
uart1_putc(*data);
|
||||||
|
}
|
||||||
|
|
||||||
|
while(1);
|
||||||
|
|
||||||
|
}
|
173
cpu/mc1322x/tests/sleep.c
Normal file
173
cpu/mc1322x/tests/sleep.c
Normal file
|
@ -0,0 +1,173 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2010, Mariano Alvira <mar@devl.org> and other contributors
|
||||||
|
* to the MC1322x project (http://mc1322x.devl.org)
|
||||||
|
* 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.
|
||||||
|
*
|
||||||
|
* This file is part of libmc1322x: see http://mc1322x.devl.org
|
||||||
|
* for details.
|
||||||
|
*
|
||||||
|
* $Id: sleep.c,v 1.1 2010/06/10 14:55:39 maralvira Exp $
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <mc1322x.h>
|
||||||
|
#include <board.h>
|
||||||
|
|
||||||
|
#include "tests.h"
|
||||||
|
#include "config.h"
|
||||||
|
|
||||||
|
void main(void) {
|
||||||
|
|
||||||
|
uart_init(INC,MOD,SAMP);
|
||||||
|
|
||||||
|
*mem32(0x00401ffc) = 0x01234567;
|
||||||
|
*mem32(0x00407ffc) = 0xdeadbeef;
|
||||||
|
*mem32(0x0040fffc) = 0xface00ff;
|
||||||
|
*mem32(0x00410000) = 0xabcd0123;
|
||||||
|
|
||||||
|
putstr("sleep test\n\r");
|
||||||
|
putstr("0x00401ffc: ");
|
||||||
|
put_hex32(*mem32(0x00401ffc));
|
||||||
|
putstr("\r\n");
|
||||||
|
putstr("0x00407ffc: ");
|
||||||
|
put_hex32(*mem32(0x00407ffc));
|
||||||
|
putstr("\r\n");
|
||||||
|
putstr("0x0040fffc: ");
|
||||||
|
put_hex32(*mem32(0x0040fffc));
|
||||||
|
putstr("\r\n");
|
||||||
|
putstr("0x00410000: ");
|
||||||
|
put_hex32(*mem32(0x00410000));
|
||||||
|
putstr("\r\n");
|
||||||
|
|
||||||
|
/* radio must be OFF before sleeping */
|
||||||
|
/* otherwise MCU will not wake up properly */
|
||||||
|
/* this is undocumented behavior */
|
||||||
|
// radio_off();
|
||||||
|
|
||||||
|
#if USE_32KHZ
|
||||||
|
/* turn on the 32kHz crystal */
|
||||||
|
putstr("enabling 32kHz crystal\n\r");
|
||||||
|
/* you have to hold it's hand with this on */
|
||||||
|
/* once you start the 32xHz crystal it can only be stopped with a reset (hard or soft) */
|
||||||
|
/* first, disable the ring osc */
|
||||||
|
clear_bit(*CRM_RINGOSC_CNTL,0);
|
||||||
|
/* enable the 32kHZ crystal */
|
||||||
|
set_bit(*CRM_XTAL32_CNTL,0);
|
||||||
|
|
||||||
|
/* set the XTAL32_EXISTS bit */
|
||||||
|
/* the datasheet says to do this after you've check that RTC_COUNT is changing */
|
||||||
|
/* the datasheet is not correct */
|
||||||
|
set_bit(*CRM_SYS_CNTL,5);
|
||||||
|
{
|
||||||
|
static volatile uint32_t old;
|
||||||
|
old = *CRM_RTC_COUNT;
|
||||||
|
putstr("waiting for xtal\n\r");
|
||||||
|
while(*CRM_RTC_COUNT == old) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
/* RTC has started up */
|
||||||
|
|
||||||
|
set_bit(*CRM_SYS_CNTL,5);
|
||||||
|
putstr("32kHZ xtal started\n\r");
|
||||||
|
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/* go to sleep */
|
||||||
|
|
||||||
|
// *CRM_WU_CNTL = 0; /* don't wake up */
|
||||||
|
*CRM_WU_CNTL = 0x1; /* enable wakeup from wakeup timer */
|
||||||
|
// *CRM_WU_TIMEOUT = 1875000; /* wake 10 sec later if doze */
|
||||||
|
#if USE_32KHZ
|
||||||
|
*CRM_WU_TIMEOUT = 327680*2;
|
||||||
|
#else
|
||||||
|
*CRM_WU_TIMEOUT = 20000; /* wake 10 sec later if hibernate ring osc */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* hobby board: 2kHz = 11uA; 32kHz = 11uA */
|
||||||
|
// *CRM_SLEEP_CNTL = 1; /* hibernate, RAM page 0 only, don't retain state, don't power GPIO */ /* approx. 2kHz = 2.0uA */
|
||||||
|
/* hobby board: 2kHz = 18uA; 32kHz = 19uA */
|
||||||
|
// *CRM_SLEEP_CNTL = 0x41; /* hibernate, RAM page 0 only, retain state, don't power GPIO */ /* approx. 2kHz = 10.0uA */
|
||||||
|
/* hobby board: 2kHz = 20uA; 32kHz = 21uA */
|
||||||
|
// *CRM_SLEEP_CNTL = 0x51; /* hibernate, RAM page 0&1 only, retain state, don't power GPIO */ /* approx. 2kHz = 11.7uA */
|
||||||
|
/* hobby board: 2kHz = 22uA; 32kHz = 22.5uA */
|
||||||
|
// *CRM_SLEEP_CNTL = 0x61; /* hibernate, RAM page 0,1,2 only, retain state, don't power GPIO */ /* approx. 2kHz = 13.9uA */
|
||||||
|
/* hobby board: 2kHz = 24uA; 32kHz = 25uA */
|
||||||
|
*CRM_SLEEP_CNTL = 0x71; /* hibernate, all RAM pages, retain state, don't power GPIO */ /* approx. 2kHz = 16.1uA */
|
||||||
|
// *CRM_SLEEP_CNTL = 0xf1; /* hibernate, all RAM pages, retain state, power GPIO */ /* consumption depends on GPIO hookup */
|
||||||
|
|
||||||
|
// *CRM_SLEEP_CNTL = 2; /* doze , RAM page 0 only, don't retain state, don't power GPIO */ /* approx. 69.2 uA */
|
||||||
|
// *CRM_SLEEP_CNTL = 0x42; /* doze , RAM page 0 only, retain state, don't power GPIO */ /* approx. 77.3uA */
|
||||||
|
// *CRM_SLEEP_CNTL = 0x52; /* doze , RAM page 0&1 only, retain state, don't power GPIO */ /* approx. 78.9uA */
|
||||||
|
// *CRM_SLEEP_CNTL = 0x62; /* doze , RAM page 0,1,2 only, retain state, don't power GPIO */ /* approx. 81.2uA */
|
||||||
|
// *CRM_SLEEP_CNTL = 0x72; /* doze , all RAM pages, retain state, don't power GPIO */ /* approx. 83.4uA - possibly with periodic refresh*/
|
||||||
|
// *CRM_SLEEP_CNTL = 0xf2; /* doze , all RAM pages, retain state, power GPIO */ /* consumption depends on GPIO hookup */
|
||||||
|
|
||||||
|
|
||||||
|
/* wait for the sleep cycle to complete */
|
||||||
|
while((*CRM_STATUS & 0x1) == 0) { continue; }
|
||||||
|
/* write 1 to sleep_sync --- this clears the bit (it's a r1wc bit) and powers down */
|
||||||
|
*CRM_STATUS = 1;
|
||||||
|
|
||||||
|
/* asleep */
|
||||||
|
|
||||||
|
/* wait for the awake cycle to complete */
|
||||||
|
while((*CRM_STATUS & 0x1) == 0) { continue; }
|
||||||
|
/* write 1 to sleep_sync --- this clears the bit (it's a r1wc bit) and finishes wakeup */
|
||||||
|
*CRM_STATUS = 1;
|
||||||
|
|
||||||
|
putstr("\n\r\n\r\n\r");
|
||||||
|
putstr("0x00401ffc: ");
|
||||||
|
put_hex32(*mem32(0x00401ffc));
|
||||||
|
putstr("\r\n");
|
||||||
|
putstr("0x00407ffc: ");
|
||||||
|
put_hex32(*mem32(0x00407ffc));
|
||||||
|
putstr("\r\n");
|
||||||
|
putstr("0x0040fffc: ");
|
||||||
|
put_hex32(*mem32(0x0040fffc));
|
||||||
|
putstr("\r\n");
|
||||||
|
putstr("0x00410000: ");
|
||||||
|
put_hex32(*mem32(0x00410000));
|
||||||
|
putstr("\r\n");
|
||||||
|
|
||||||
|
*GPIO_PAD_DIR0 = LED_RED;
|
||||||
|
#define DELAY 400000
|
||||||
|
|
||||||
|
volatile uint32_t i;
|
||||||
|
while(1) {
|
||||||
|
|
||||||
|
*GPIO_DATA0 = LED_RED;
|
||||||
|
|
||||||
|
for(i=0; i<DELAY; i++) { continue; }
|
||||||
|
|
||||||
|
*GPIO_DATA0 = 0;
|
||||||
|
|
||||||
|
for(i=0; i<DELAY; i++) { continue; }
|
||||||
|
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
80
cpu/mc1322x/tests/tests.c
Normal file
80
cpu/mc1322x/tests/tests.c
Normal file
|
@ -0,0 +1,80 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2010, Mariano Alvira <mar@devl.org> and other contributors
|
||||||
|
* to the MC1322x project (http://mc1322x.devl.org)
|
||||||
|
* 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.
|
||||||
|
*
|
||||||
|
* This file is part of libmc1322x: see http://mc1322x.devl.org
|
||||||
|
* for details.
|
||||||
|
*
|
||||||
|
* $Id: tests.c,v 1.1 2010/06/10 14:55:39 maralvira Exp $
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <mc1322x.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
#include "put.h"
|
||||||
|
#include "tests.h"
|
||||||
|
|
||||||
|
void print_welcome(char* testname) {
|
||||||
|
printf("mc1322x-test: %s\n\r",testname);
|
||||||
|
printf("board: %s\n\r", STR2(BOARD));
|
||||||
|
}
|
||||||
|
|
||||||
|
void print_packet(volatile packet_t *p) {
|
||||||
|
volatile uint8_t i,j,k;
|
||||||
|
#define PER_ROW 16
|
||||||
|
if(p) {
|
||||||
|
printf("len 0x%02x",p->length);
|
||||||
|
for(j=0, k=0; j <= ((p->length)%PER_ROW); j++) {
|
||||||
|
printf("\n\r");
|
||||||
|
for(i=0; i < PER_ROW; i++, k++) {
|
||||||
|
if(k >= p->length ) {
|
||||||
|
printf("\n\r");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
printf("%02x ",p->data[j*PER_ROW + i + p->offset]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
printf("\n\r");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
void dump_regs(uint32_t base, uint32_t len) {
|
||||||
|
volatile uint32_t i;
|
||||||
|
|
||||||
|
printf("base +0 +4 +8 +c +10 +14 +18 +1c \n\r");
|
||||||
|
for (i = 0; i < len; i ++) {
|
||||||
|
if ((i & 7) == 0) {
|
||||||
|
printf("%02lx",(uint32_t)(4 * i));
|
||||||
|
}
|
||||||
|
printf(" %08lx",(uint32_t)*mem32(base+(4*i)));
|
||||||
|
if ((i & 7) == 7)
|
||||||
|
printf(NL);
|
||||||
|
}
|
||||||
|
printf(NL);
|
||||||
|
}
|
48
cpu/mc1322x/tests/tests.h
Normal file
48
cpu/mc1322x/tests/tests.h
Normal file
|
@ -0,0 +1,48 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2010, Mariano Alvira <mar@devl.org> and other contributors
|
||||||
|
* to the MC1322x project (http://mc1322x.devl.org)
|
||||||
|
* 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.
|
||||||
|
*
|
||||||
|
* This file is part of libmc1322x: see http://mc1322x.devl.org
|
||||||
|
* for details.
|
||||||
|
*
|
||||||
|
* $Id: tests.h,v 1.1 2010/06/10 14:55:39 maralvira Exp $
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef TESTS_H
|
||||||
|
#define TESTS_H
|
||||||
|
|
||||||
|
#include "put.h"
|
||||||
|
#include "led.h"
|
||||||
|
|
||||||
|
#define NL "\033[K\r\n"
|
||||||
|
|
||||||
|
void print_welcome(char* testname);
|
||||||
|
void dump_regs(uint32_t base, uint32_t len);
|
||||||
|
void print_packet(volatile packet_t *p);
|
||||||
|
|
||||||
|
#endif
|
102
cpu/mc1322x/tests/tmr-ints.c
Normal file
102
cpu/mc1322x/tests/tmr-ints.c
Normal file
|
@ -0,0 +1,102 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2010, Mariano Alvira <mar@devl.org> and other contributors
|
||||||
|
* to the MC1322x project (http://mc1322x.devl.org)
|
||||||
|
* 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.
|
||||||
|
*
|
||||||
|
* This file is part of libmc1322x: see http://mc1322x.devl.org
|
||||||
|
* for details.
|
||||||
|
*
|
||||||
|
* $Id: tmr-ints.c,v 1.1 2010/06/10 14:55:39 maralvira Exp $
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <mc1322x.h>
|
||||||
|
#include <board.h>
|
||||||
|
|
||||||
|
#include "tests.h"
|
||||||
|
#include "config.h"
|
||||||
|
|
||||||
|
volatile uint8_t led;
|
||||||
|
|
||||||
|
#define LED LED_PURPLE
|
||||||
|
#define led_init() do { gpio_pad_dir_set(LED_WHITE); gpio_data_reset(LED_WHITE); } while(0);
|
||||||
|
#define led_on() do { led = 1; gpio_data_set(LED); } while(0);
|
||||||
|
#define led_off() do { led = 0; gpio_data_reset(LED); } while(0);
|
||||||
|
|
||||||
|
void toggle_led(void) {
|
||||||
|
if(0 == led) {
|
||||||
|
led_on();
|
||||||
|
led = 1;
|
||||||
|
|
||||||
|
} else {
|
||||||
|
led_off();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void tmr0_isr(void) {
|
||||||
|
|
||||||
|
toggle_led();
|
||||||
|
*TMR0_SCTRL = 0;
|
||||||
|
*TMR0_CSCTRL = 0x0040; /* clear compare flag */
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void main(void) {
|
||||||
|
|
||||||
|
/* pin direction */
|
||||||
|
led_init();
|
||||||
|
|
||||||
|
/* timer setup */
|
||||||
|
/* CTRL */
|
||||||
|
#define COUNT_MODE 1 /* use rising edge of primary source */
|
||||||
|
#define PRIME_SRC 0xf /* Perip. clock with 128 prescale (for 24Mhz = 187500Hz)*/
|
||||||
|
#define SEC_SRC 0 /* don't need this */
|
||||||
|
#define ONCE 0 /* keep counting */
|
||||||
|
#define LEN 1 /* count until compare then reload with value in LOAD */
|
||||||
|
#define DIR 0 /* count up */
|
||||||
|
#define CO_INIT 0 /* other counters cannot force a re-initialization of this counter */
|
||||||
|
#define OUT_MODE 0 /* OFLAG is asserted while counter is active */
|
||||||
|
|
||||||
|
*TMR_ENBL = 0; /* tmrs reset to enabled */
|
||||||
|
*TMR0_SCTRL = 0;
|
||||||
|
*TMR0_CSCTRL = 0x0040;
|
||||||
|
*TMR0_LOAD = 0; /* reload to zero */
|
||||||
|
*TMR0_COMP_UP = 18750; /* trigger a reload at the end */
|
||||||
|
*TMR0_CMPLD1 = 18750; /* compare 1 triggered reload level, 10HZ maybe? */
|
||||||
|
*TMR0_CNTR = 0; /* reset count register */
|
||||||
|
*TMR0_CTRL = (COUNT_MODE<<13) | (PRIME_SRC<<9) | (SEC_SRC<<7) | (ONCE<<6) | (LEN<<5) | (DIR<<4) | (CO_INIT<<3) | (OUT_MODE);
|
||||||
|
*TMR_ENBL = 0xf; /* enable all the timers --- why not? */
|
||||||
|
|
||||||
|
led_on();
|
||||||
|
|
||||||
|
enable_irq(TMR);
|
||||||
|
|
||||||
|
while(1) {
|
||||||
|
/* sit here and let the interrupts do the work */
|
||||||
|
continue;
|
||||||
|
};
|
||||||
|
}
|
86
cpu/mc1322x/tests/tmr.c
Normal file
86
cpu/mc1322x/tests/tmr.c
Normal file
|
@ -0,0 +1,86 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2010, Mariano Alvira <mar@devl.org> and other contributors
|
||||||
|
* to the MC1322x project (http://mc1322x.devl.org)
|
||||||
|
* 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.
|
||||||
|
*
|
||||||
|
* This file is part of libmc1322x: see http://mc1322x.devl.org
|
||||||
|
* for details.
|
||||||
|
*
|
||||||
|
* $Id: tmr.c,v 1.1 2010/06/10 14:55:39 maralvira Exp $
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <mc1322x.h>
|
||||||
|
#include <board.h>
|
||||||
|
|
||||||
|
#include "tests.h"
|
||||||
|
#include "config.h"
|
||||||
|
|
||||||
|
#define LED LED_YELLOW
|
||||||
|
|
||||||
|
void main(void) {
|
||||||
|
|
||||||
|
/* pin direction */
|
||||||
|
gpio_pad_dir_set(LED_WHITE);
|
||||||
|
/* all LEDs off */
|
||||||
|
gpio_data_reset(LED_WHITE);
|
||||||
|
|
||||||
|
/* timer setup */
|
||||||
|
/* CTRL */
|
||||||
|
#define COUNT_MODE 1 /* use rising edge of primary source */
|
||||||
|
#define PRIME_SRC 0xf /* Perip. clock with 128 prescale (for 24Mhz = 187500Hz)*/
|
||||||
|
#define SEC_SRC 0 /* don't need this */
|
||||||
|
#define ONCE 0 /* keep counting */
|
||||||
|
#define LEN 1 /* count until compare then reload with value in LOAD */
|
||||||
|
#define DIR 0 /* count up */
|
||||||
|
#define CO_INIT 0 /* other counters cannot force a re-initialization of this counter */
|
||||||
|
#define OUT_MODE 0 /* OFLAG is asserted while counter is active */
|
||||||
|
|
||||||
|
*TMR_ENBL = 0; /* tmrs reset to enabled */
|
||||||
|
*TMR0_SCTRL = 0;
|
||||||
|
*TMR0_LOAD = 0; /* reload to zero */
|
||||||
|
*TMR0_COMP_UP = 18750; /* trigger a reload at the end */
|
||||||
|
*TMR0_CMPLD1 = 18750; /* compare 1 triggered reload level, 10HZ maybe? */
|
||||||
|
*TMR0_CNTR = 0; /* reset count register */
|
||||||
|
*TMR0_CTRL = (COUNT_MODE<<13) | (PRIME_SRC<<9) | (SEC_SRC<<7) | (ONCE<<6) | (LEN<<5) | (DIR<<4) | (CO_INIT<<3) | (OUT_MODE);
|
||||||
|
*TMR_ENBL = 0xf; /* enable all the timers --- why not? */
|
||||||
|
|
||||||
|
while(1) {
|
||||||
|
|
||||||
|
/* blink on */
|
||||||
|
gpio_data_set(LED);
|
||||||
|
|
||||||
|
while((*TMR0_SCTRL >> 15) == 0) { continue; }
|
||||||
|
*TMR0_SCTRL = 0; /*clear bit 15, and all the others --- should be ok, but clearly not "the right thing to do" */
|
||||||
|
|
||||||
|
/* blink off */
|
||||||
|
gpio_data_reset(LED);
|
||||||
|
|
||||||
|
while((*TMR0_SCTRL >> 15) == 0) { continue; }
|
||||||
|
*TMR0_SCTRL = 0; /*clear bit 15, and all the others --- should be ok, but clearly not "the right thing to do" */
|
||||||
|
|
||||||
|
};
|
||||||
|
}
|
54
cpu/mc1322x/tests/uart1-loopback.c
Normal file
54
cpu/mc1322x/tests/uart1-loopback.c
Normal file
|
@ -0,0 +1,54 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2010, Mariano Alvira <mar@devl.org> and other contributors
|
||||||
|
* to the MC1322x project (http://mc1322x.devl.org)
|
||||||
|
* 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.
|
||||||
|
*
|
||||||
|
* This file is part of libmc1322x: see http://mc1322x.devl.org
|
||||||
|
* for details.
|
||||||
|
*
|
||||||
|
* $Id: uart1-loopback.c,v 1.1 2010/06/10 14:55:39 maralvira Exp $
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <mc1322x.h>
|
||||||
|
#include <board.h>
|
||||||
|
|
||||||
|
#include "tests.h"
|
||||||
|
#include "config.h"
|
||||||
|
|
||||||
|
void main(void) {
|
||||||
|
|
||||||
|
uart1_init(INC,MOD,SAMP);
|
||||||
|
|
||||||
|
while(1) {
|
||||||
|
if(uart1_can_get()) {
|
||||||
|
/* Receive buffer isn't empty */
|
||||||
|
/* read a byte and write it to the transmit buffer */
|
||||||
|
uart1_putc(uart1_getc());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
10
cpu/mc1322x/tools/ftditools/Makefile
Normal file
10
cpu/mc1322x/tools/ftditools/Makefile
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
LDFLAGS = -lftdi
|
||||||
|
|
||||||
|
TARGETS = bbmc
|
||||||
|
|
||||||
|
CFLAGS = -Wall -Wextra #-Werror
|
||||||
|
|
||||||
|
all: $(TARGETS)
|
||||||
|
|
||||||
|
clean:
|
||||||
|
-rm $(TARGETS)
|
497
cpu/mc1322x/tools/ftditools/bbmc.c
Normal file
497
cpu/mc1322x/tools/ftditools/bbmc.c
Normal file
|
@ -0,0 +1,497 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2010, Mariano Alvira <mar@devl.org> and other contributors
|
||||||
|
* to the MC1322x project (http://mc1322x.devl.org)
|
||||||
|
* 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.
|
||||||
|
*
|
||||||
|
* This file is part of libmc1322x: see http://mc1322x.devl.org
|
||||||
|
* for details.
|
||||||
|
*
|
||||||
|
* $Id: bbmc.c,v 1.1 2010/06/10 14:55:39 maralvira Exp $
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* control reset and VREF2 lines */
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <getopt.h>
|
||||||
|
#include <ftdi.h>
|
||||||
|
|
||||||
|
#define DEBUG 0
|
||||||
|
|
||||||
|
#define low(x) (1 << x)
|
||||||
|
#define high(x) (1 << (x + 8))
|
||||||
|
|
||||||
|
#define REDBEE_ECONOTAG_RESET high(2)
|
||||||
|
#define REDBEE_ECONOTAG_VREF2L high(7)
|
||||||
|
#define REDBEE_ECONOTAG_VREF2H high(6)
|
||||||
|
#define REDBEE_ECONOTAG_INTERFACE INTERFACE_A
|
||||||
|
|
||||||
|
#define REDBEE_USB_RESET high(2)
|
||||||
|
#define REDBEE_USB_VREF2L low(5)
|
||||||
|
#define REDBEE_USB_VREF2H low(6)
|
||||||
|
#define REDBEE_USB_INTERFACE INTERFACE_B
|
||||||
|
|
||||||
|
#define BOARD REDBEE_USB
|
||||||
|
|
||||||
|
#define STR(x) #x
|
||||||
|
#define STR2(x) STR(x)
|
||||||
|
#define CAT(x,y) x##y
|
||||||
|
#define CAT2(x, y, z) x##y##z
|
||||||
|
|
||||||
|
#define dir(x) ( CAT(x,_RESET) | CAT(x,_VREF2L) | CAT(x,_VREF2H))
|
||||||
|
#define interface(x) ( CAT(x,_INTERFACE) )
|
||||||
|
#define reset_release(x) ( CAT(x,_RESET) )
|
||||||
|
#define reset_set(x) ( 0 )
|
||||||
|
#define vref2_normal(x) ( CAT(x,_VREF2H) )
|
||||||
|
#define vref2_erase(x) ( CAT(x,_VREF2L) )
|
||||||
|
|
||||||
|
/* fgets input buffer length: for prompts and such */
|
||||||
|
#define BUF_LEN 32
|
||||||
|
|
||||||
|
struct layout {
|
||||||
|
char *name;
|
||||||
|
char *desc;
|
||||||
|
enum ftdi_interface interface;
|
||||||
|
uint16_t dir;
|
||||||
|
uint16_t reset_release;
|
||||||
|
uint16_t reset_set;
|
||||||
|
uint16_t vref2_normal;
|
||||||
|
uint16_t vref2_erase;
|
||||||
|
};
|
||||||
|
|
||||||
|
int print_and_prompt( struct ftdi_device_list *devlist );
|
||||||
|
int bb_mpsee(struct ftdi_context *ftdic, uint16_t dir, uint16_t val);
|
||||||
|
void reset(struct ftdi_context *ftdic, const struct layout * l);
|
||||||
|
void erase(struct ftdi_context *ftdic, const struct layout * l);
|
||||||
|
void usage(void);
|
||||||
|
|
||||||
|
#define std_layout(x) \
|
||||||
|
.interface = interface(x), \
|
||||||
|
.dir = dir(x), \
|
||||||
|
.reset_release = reset_release(x), \
|
||||||
|
.reset_set = reset_set(x), \
|
||||||
|
.vref2_normal = vref2_normal(x), \
|
||||||
|
.vref2_erase = vref2_erase(x),
|
||||||
|
|
||||||
|
static struct layout layouts[] =
|
||||||
|
{
|
||||||
|
{ .name = "redbee-econotag",
|
||||||
|
.desc = "Redbee Econotag",
|
||||||
|
std_layout(REDBEE_ECONOTAG)
|
||||||
|
},
|
||||||
|
{ .name = "redbee-usb",
|
||||||
|
.desc = "Redbee USB stick",
|
||||||
|
std_layout(REDBEE_USB)
|
||||||
|
},
|
||||||
|
{ .name = NULL, /* end of table */ },
|
||||||
|
};
|
||||||
|
|
||||||
|
struct command {
|
||||||
|
char *name;
|
||||||
|
char *desc;
|
||||||
|
void (*cmd)(struct ftdi_context *ftdic, const struct layout * l);
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct command commands[] =
|
||||||
|
{
|
||||||
|
{
|
||||||
|
.name = "reset",
|
||||||
|
.desc = "Toggles reset pin",
|
||||||
|
.cmd = reset,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.name = "erase",
|
||||||
|
.desc = "Sets VREF2 erase mode; toggles reset; waits 2 sec.; sets normal; toggles reset again",
|
||||||
|
.cmd = erase,
|
||||||
|
},
|
||||||
|
{ .name = NULL, /* end of table */ },
|
||||||
|
};
|
||||||
|
|
||||||
|
struct layout * find_layout(char * str)
|
||||||
|
{
|
||||||
|
uint32_t i = 0;
|
||||||
|
|
||||||
|
while(layouts[i].name != NULL) {
|
||||||
|
if(strcmp(layouts[i].name, str) == 0) { return &layouts[i]; }
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static uint32_t vendid = 0x0403; uint32_t prodid = 0x6010;
|
||||||
|
|
||||||
|
int main(int argc, char **argv)
|
||||||
|
{
|
||||||
|
struct ftdi_context ftdic;
|
||||||
|
struct ftdi_device_list *devlist;
|
||||||
|
int dev_index = -1; int num_devs;
|
||||||
|
char layout_str[BUF_LEN];
|
||||||
|
struct layout layout;
|
||||||
|
struct layout *l = NULL;
|
||||||
|
int i, ret;
|
||||||
|
|
||||||
|
/* overrides for layout parameters */
|
||||||
|
int interface = -1;
|
||||||
|
int dir = -1;
|
||||||
|
int reset_release = -1;
|
||||||
|
int reset_set = -1;
|
||||||
|
int vref2_normal = -1;
|
||||||
|
int vref2_erase = -1;
|
||||||
|
|
||||||
|
layout.name = NULL;
|
||||||
|
|
||||||
|
while (1) {
|
||||||
|
int c;
|
||||||
|
int option_index = 0;
|
||||||
|
static struct option long_options[] = {
|
||||||
|
{"layout", required_argument, 0, 'l'},
|
||||||
|
{"index", required_argument, 0, 'i'},
|
||||||
|
{"vendor", required_argument, 0, 'v'},
|
||||||
|
{"product", required_argument, 0, 'p'},
|
||||||
|
{"dir", required_argument, 0, 0 },
|
||||||
|
{"reset_release", required_argument, 0, 0 },
|
||||||
|
{"reset_set", required_argument, 0, 0 },
|
||||||
|
{"vref2_normal", required_argument, 0, 0 },
|
||||||
|
{"vref2_erase", required_argument, 0, 0 },
|
||||||
|
{"interface", required_argument, 0, 0 },
|
||||||
|
{"help", no_argument, 0, '?'},
|
||||||
|
{0, 0, 0, 0}
|
||||||
|
};
|
||||||
|
|
||||||
|
c = getopt_long (argc, argv, "i:l:v:p:",
|
||||||
|
long_options, &option_index);
|
||||||
|
if (c == -1)
|
||||||
|
break;
|
||||||
|
|
||||||
|
switch (c) {
|
||||||
|
/* process long opts */
|
||||||
|
case 0:
|
||||||
|
if(strcmp(long_options[option_index].name, "interface") == 0) {
|
||||||
|
sscanf(optarg, "%i", &interface);
|
||||||
|
}
|
||||||
|
if(strcmp(long_options[option_index].name, "dir") == 0) {
|
||||||
|
sscanf(optarg, "%i", &dir);
|
||||||
|
}
|
||||||
|
if (strcmp(long_options[option_index].name, "reset_release") == 0) {
|
||||||
|
sscanf(optarg, "%i", &reset_release);
|
||||||
|
}
|
||||||
|
if (strcmp(long_options[option_index].name, "reset_set") == 0) {
|
||||||
|
sscanf(optarg, "%i", &reset_set);
|
||||||
|
}
|
||||||
|
if (strcmp(long_options[option_index].name, "vref2_normal") == 0) {
|
||||||
|
sscanf(optarg, "%i", &vref2_normal);
|
||||||
|
}
|
||||||
|
if (strcmp(long_options[option_index].name, "vref2_erase") == 0) {
|
||||||
|
sscanf(optarg, "%i", &vref2_erase);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'l':
|
||||||
|
strncpy(layout_str, optarg, BUF_LEN);
|
||||||
|
break;
|
||||||
|
case 'i':
|
||||||
|
dev_index = atoi(optarg);
|
||||||
|
break;
|
||||||
|
case 'v':
|
||||||
|
sscanf(optarg, "%i", &vendid);
|
||||||
|
break;
|
||||||
|
case 'p':
|
||||||
|
sscanf(optarg, "%i", &prodid);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
usage();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if( !(l = find_layout(layout_str)) &&
|
||||||
|
!((interface >= 0) &&
|
||||||
|
(dir >= 0) &&
|
||||||
|
(reset_release >= 0) &&
|
||||||
|
(reset_set >= 0) &&
|
||||||
|
(vref2_normal >= 0) &&
|
||||||
|
(vref2_erase >= 0))
|
||||||
|
) {
|
||||||
|
|
||||||
|
printf("*** You must specify a layout or a complete set of overrides\n");
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(l) {
|
||||||
|
memcpy(&layout, l, sizeof(struct layout));
|
||||||
|
}
|
||||||
|
|
||||||
|
#define override(x) if(x > 0) { layout.x = x; }
|
||||||
|
override(interface);
|
||||||
|
override(dir);
|
||||||
|
override(reset_release); override(reset_set);
|
||||||
|
override(vref2_normal); override(vref2_erase);
|
||||||
|
|
||||||
|
if ((num_devs = ftdi_usb_find_all(&ftdic, &devlist, vendid, prodid)) < 0)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "ftdi_usb_find_all failed: %d (%s)\n",
|
||||||
|
num_devs,
|
||||||
|
ftdi_get_error_string(&ftdic));
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ftdi_init(&ftdic) < 0)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "ftdi_init failed\n");
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ftdi_set_interface(&ftdic, layout.interface) < 0) {
|
||||||
|
fprintf(stderr, "couldn't set interface %d\n", layout.interface);
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("Found %d devices with vendor id 0x%04x product id 0x%04x\n",
|
||||||
|
num_devs, vendid, prodid);
|
||||||
|
|
||||||
|
if(num_devs == 0) { return EXIT_SUCCESS; }
|
||||||
|
|
||||||
|
if(num_devs == 1) { dev_index = 0; }
|
||||||
|
while( (dev_index < 0) || (dev_index >= num_devs)){
|
||||||
|
dev_index = print_and_prompt(devlist);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(layout.name != NULL) {
|
||||||
|
printf("Opening device %d interface %d using layout %s\n",
|
||||||
|
dev_index, layout.interface, layout.name);
|
||||||
|
} else {
|
||||||
|
printf("Opening device %d interface %d without a layout.\n",
|
||||||
|
dev_index, layout.interface);
|
||||||
|
}
|
||||||
|
|
||||||
|
if( (ret = ftdi_usb_open_desc_index(
|
||||||
|
&ftdic,
|
||||||
|
vendid,
|
||||||
|
prodid,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
dev_index)) < 0) {
|
||||||
|
fprintf(stderr, "couldn't open dev_index %d\n", dev_index);
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
for(i = 0; commands[i].name != NULL; i++) {
|
||||||
|
if( (argv[optind] != NULL) &&
|
||||||
|
(strcmp(commands[i].name, argv[optind]) == 0)) { break; }
|
||||||
|
}
|
||||||
|
if(commands[i].name != NULL) {
|
||||||
|
commands[i].cmd(&ftdic, &layout);
|
||||||
|
} else {
|
||||||
|
printf("invalid command\n");
|
||||||
|
|
||||||
|
ftdi_list_free(&devlist);
|
||||||
|
ftdi_deinit(&ftdic);
|
||||||
|
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("done.\n");
|
||||||
|
|
||||||
|
ftdi_list_free(&devlist);
|
||||||
|
ftdi_deinit(&ftdic);
|
||||||
|
|
||||||
|
return EXIT_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
void usage(void)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
printf( "Usage: bbmc [options|overrides] -l|--layout layout command \n");
|
||||||
|
printf( "Commands:\n");
|
||||||
|
for(i = 0; commands[i].name != NULL; i++) {
|
||||||
|
printf( " %s: %s\n", commands[i].name, commands[i].desc);
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
printf( "Required options:\n");
|
||||||
|
printf( " -l|--layout\t specifiy which board layout to use\n");
|
||||||
|
printf( " \t layout is not necessary with a full\n");
|
||||||
|
printf( " \t set of overrides\n");
|
||||||
|
printf( "\nLayout overrides:\n");
|
||||||
|
printf( " --interface\t\t FTDI interface to use\n");
|
||||||
|
printf( " --dir\t\t direction (1 is output)\n");
|
||||||
|
printf( " --reset_release\t reset release command\n");
|
||||||
|
printf( " --reset_set\t\t reset set command\n");
|
||||||
|
printf( " --vref2_normal\t vref2 normal\n");
|
||||||
|
printf( " --vref2_erase\t vref2 erase\n");
|
||||||
|
printf("\n");
|
||||||
|
printf( "Layouts:\n");
|
||||||
|
for(i = 0; layouts[i].name != NULL; i++) {
|
||||||
|
printf( "\t%s: %s\n", layouts[i].name, layouts[i].desc);
|
||||||
|
printf("\n");
|
||||||
|
printf( "\t\tinterface: \t0x%04x\n", layouts[i].interface);
|
||||||
|
printf( "\t\tdir: \t\t0x%04x\n", layouts[i].dir);
|
||||||
|
printf( "\t\treset release: \t0x%04x\n", layouts[i].reset_release);
|
||||||
|
printf( "\t\treset hold: \t0x%04x\n", layouts[i].reset_set);
|
||||||
|
printf( "\t\tvref2 normal: \t0x%04x\n", layouts[i].vref2_normal);
|
||||||
|
printf( "\t\tvref2 erase: \t0x%04x\n", layouts[i].vref2_erase);
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
printf( "Options:\n");
|
||||||
|
printf( " -i|--index specifiy which device to use (default 0)\n");
|
||||||
|
printf( " -v|--vendor set vendor id (default 0x0403)\n");
|
||||||
|
printf( " -p|--product set vendor id (default 0x6010)\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
int print_and_prompt( struct ftdi_device_list *devlist )
|
||||||
|
{
|
||||||
|
int i, ret;
|
||||||
|
struct ftdi_context ftdic;
|
||||||
|
struct ftdi_device_list *curdev;
|
||||||
|
char manufacturer[128], description[128], serial[128];
|
||||||
|
char input[BUF_LEN]; char *s;
|
||||||
|
int sel = -1;
|
||||||
|
|
||||||
|
printf("\n");
|
||||||
|
|
||||||
|
i = 0;
|
||||||
|
for (curdev = devlist; curdev != NULL; i++)
|
||||||
|
{
|
||||||
|
printf(" [%d] ", i);
|
||||||
|
if (0 > (ret = ftdi_usb_get_strings(&ftdic,
|
||||||
|
curdev->dev,
|
||||||
|
manufacturer, 128,
|
||||||
|
description, 128,
|
||||||
|
serial, 128)))
|
||||||
|
{
|
||||||
|
fprintf(stderr, "ftdi_usb_get_strings failed: %d (%s)\n",
|
||||||
|
ret, ftdi_get_error_string(&ftdic));
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
|
printf("Manufacturer: %s, Description: %s, Serial %s\n",
|
||||||
|
manufacturer, description, serial);
|
||||||
|
curdev = curdev->next;
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("\nUse which device? ");
|
||||||
|
|
||||||
|
s = fgets(input, BUF_LEN, stdin);
|
||||||
|
if (s != NULL) {
|
||||||
|
size_t last = strlen (input) - 1;
|
||||||
|
if (input[last] == '\n') input[last] = '\0';
|
||||||
|
}
|
||||||
|
|
||||||
|
sscanf(s, "%i",&sel);
|
||||||
|
|
||||||
|
return sel;
|
||||||
|
}
|
||||||
|
|
||||||
|
void reset(struct ftdi_context *ftdic, const struct layout * l)
|
||||||
|
{
|
||||||
|
|
||||||
|
/* using MPSSE since it give access to high GPIO*/
|
||||||
|
/* set as inputs for now */
|
||||||
|
ftdi_set_bitmode(ftdic, 0 , BITMODE_MPSSE);
|
||||||
|
|
||||||
|
printf("toggle reset\n");
|
||||||
|
|
||||||
|
bb_mpsee(ftdic, l->dir, (l->reset_release | l->vref2_normal));
|
||||||
|
bb_mpsee(ftdic, l->dir, (l->reset_set | l->vref2_normal));
|
||||||
|
bb_mpsee(ftdic, l->dir, (l->reset_release | l->vref2_normal));
|
||||||
|
|
||||||
|
return;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void erase(struct ftdi_context *ftdic, const struct layout * l)
|
||||||
|
{
|
||||||
|
printf("setting VREF2 erase\n");
|
||||||
|
|
||||||
|
/* using MPSSE since it give access to high GPIO*/
|
||||||
|
/* set as inputs for now */
|
||||||
|
ftdi_set_bitmode(ftdic, 0 , BITMODE_MPSSE);
|
||||||
|
|
||||||
|
bb_mpsee(ftdic, l->dir, (l->reset_release | l->vref2_normal));
|
||||||
|
bb_mpsee(ftdic, l->dir, (l->reset_release | l->vref2_erase));
|
||||||
|
|
||||||
|
printf("toggle reset\n");
|
||||||
|
|
||||||
|
bb_mpsee(ftdic, l->dir, (l->reset_set | l->vref2_erase));
|
||||||
|
bb_mpsee(ftdic, l->dir, (l->reset_release | l->vref2_erase));
|
||||||
|
|
||||||
|
printf("waiting for erase\n");
|
||||||
|
|
||||||
|
sleep(2);
|
||||||
|
|
||||||
|
printf("setting VREF2 normal\n");
|
||||||
|
|
||||||
|
bb_mpsee(ftdic, l->dir, (l->reset_release | l->vref2_normal));
|
||||||
|
|
||||||
|
reset(ftdic, l);
|
||||||
|
|
||||||
|
return;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int bb_mpsee(struct ftdi_context *ftdic, uint16_t dir, uint16_t val)
|
||||||
|
{
|
||||||
|
uint8_t buf[3];
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
/* command "set data bits low byte" */
|
||||||
|
buf[0] = 0x80;
|
||||||
|
buf[1] = (val & 0xff);
|
||||||
|
buf[2] = dir & 0xff;
|
||||||
|
#if DEBUG
|
||||||
|
fprintf(stderr,"write %x %x %x\n",buf[0],buf[1],buf[2]);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if ((ret = (ftdi_write_data(ftdic, buf, 3))) < 0)
|
||||||
|
{
|
||||||
|
perror("ft2232_write error");
|
||||||
|
fprintf(stderr, "ft2232_write command %x\n", buf[0]);
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* command "set data bits high byte" */
|
||||||
|
buf[0] = 0x82;
|
||||||
|
buf[1] = (val >> 8);
|
||||||
|
buf[2] = dir >> 8;
|
||||||
|
#if DEBUG
|
||||||
|
fprintf(stderr,"write %x %x %x\n",buf[0],buf[1],buf[2]);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if ((ret = (ftdi_write_data(ftdic, buf, 3))) < 0)
|
||||||
|
{
|
||||||
|
perror("ft2232_write error");
|
||||||
|
fprintf(stderr, "ft2232_write command %x\n", buf[0]);
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
}
|
31
cpu/mc1322x/tools/map2dot.pl
Executable file
31
cpu/mc1322x/tools/map2dot.pl
Executable file
|
@ -0,0 +1,31 @@
|
||||||
|
#!/usr/bin/perl
|
||||||
|
|
||||||
|
# Try:
|
||||||
|
# gcc -static -o test test.c -Wl,--print-map | perl parse-map.pl | unflatten -l 3 | dot -Tpng > map.png
|
||||||
|
#
|
||||||
|
# This won't show all edges! An archive member is only listed the first
|
||||||
|
# time it needs to get included. But this shows at least one reason why each
|
||||||
|
# archive member appears in the final object.
|
||||||
|
|
||||||
|
my $flag = 0;
|
||||||
|
my $line = "";
|
||||||
|
print "digraph map {\n";
|
||||||
|
print "rankdir = LR;";
|
||||||
|
while(<>)
|
||||||
|
{
|
||||||
|
$flag++ if /^Archive member included because of file \(symbol\)$/;
|
||||||
|
$flag++ if /^$/;
|
||||||
|
next unless $flag == 2;
|
||||||
|
|
||||||
|
chomp ($line .= $_);
|
||||||
|
if ($line =~ /^(\S+)\s+(\S+)\s+\(([^)]+)\)$/s) {
|
||||||
|
$line = "";
|
||||||
|
my $archive_member = $1;
|
||||||
|
my $because_file = $2;
|
||||||
|
my $because_symbol = $3;
|
||||||
|
$archive_member =~ s|.*/([^/]+)|$1|;
|
||||||
|
$because_file =~ s|.*/([^/]+)|$1|;
|
||||||
|
print "\"$because_file\" -> \"$archive_member\";\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
print "}\n";
|
134
cpu/mc1322x/tools/mc1322x-load.pl
Executable file
134
cpu/mc1322x/tools/mc1322x-load.pl
Executable file
|
@ -0,0 +1,134 @@
|
||||||
|
#!/usr/bin/perl -w
|
||||||
|
|
||||||
|
use Device::SerialPort;
|
||||||
|
use Term::ReadKey;
|
||||||
|
use Getopt::Long;
|
||||||
|
use Time::HiRes qw(usleep);
|
||||||
|
|
||||||
|
use strict;
|
||||||
|
|
||||||
|
my $filename = '';
|
||||||
|
my $second = '';
|
||||||
|
my $term = '/dev/ttyUSB0';
|
||||||
|
my $baud = '115200';
|
||||||
|
my $verbose;
|
||||||
|
my $rts = 'rts';
|
||||||
|
|
||||||
|
GetOptions ('file=s' => \$filename,
|
||||||
|
'secondfile=s' => \$second,
|
||||||
|
'terminal=s' => \$term,
|
||||||
|
'verbose' => \$verbose,
|
||||||
|
'baud=s' => \$baud,
|
||||||
|
'rts=s' => \$rts,
|
||||||
|
) or die 'bad options';
|
||||||
|
|
||||||
|
$| = 1;
|
||||||
|
|
||||||
|
if($filename eq '') {
|
||||||
|
print "Example usage: mc1322x-load.pl -f foo.bin -t /dev/ttyS0 -b 9600\n";
|
||||||
|
print " or : mc1322x-load.pl -f flasher.bin -s flashme.bin 0x1e000,0x11223344,0x55667788\n";
|
||||||
|
print " -f required: binary file to load\n";
|
||||||
|
print " -s optional: secondary binary file to send\n";
|
||||||
|
print " -t default: /dev/ttyUSB0\n";
|
||||||
|
print " -b default: 115200\n";
|
||||||
|
print " -r [none|rts] flow control default: rts\n";
|
||||||
|
print " anything on the command line is sent\n";
|
||||||
|
print " after all of the files.\n";
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!(-e $filename)) { die "file $filename not found\n"; }
|
||||||
|
if (($second ne '') && !(-e $second)) { die "secondary file $second not found\n"; }
|
||||||
|
|
||||||
|
my $ob = Device::SerialPort->new ($term) or die "Can't start $term\n";
|
||||||
|
# next test will die at runtime unless $ob
|
||||||
|
|
||||||
|
$ob->baudrate($baud);
|
||||||
|
$ob->parity('none');
|
||||||
|
$ob->databits(8);
|
||||||
|
$ob->stopbits(1);
|
||||||
|
if($rts eq 'rts') {
|
||||||
|
$ob->handshake('rts');
|
||||||
|
} else {
|
||||||
|
$ob->handshake('none');
|
||||||
|
}
|
||||||
|
$ob->read_const_time(1000); # 1 second per unfulfilled "read" call
|
||||||
|
$ob->rts_active(1);
|
||||||
|
|
||||||
|
my $s = 0;
|
||||||
|
|
||||||
|
while(1) {
|
||||||
|
|
||||||
|
my $c; my $count; my $ret = ''; my $test='';
|
||||||
|
|
||||||
|
if($s == 1) { print "secondary send...\n"; }
|
||||||
|
|
||||||
|
$ob->write(pack('C','0'));
|
||||||
|
|
||||||
|
if($s == 1) {
|
||||||
|
$test = 'ready';
|
||||||
|
} else {
|
||||||
|
$test = 'CONNECT';
|
||||||
|
}
|
||||||
|
|
||||||
|
until($ret =~ /$test$/) {
|
||||||
|
($count,$c) = $ob->read(1);
|
||||||
|
if ($count == 0) {
|
||||||
|
print '.';
|
||||||
|
$ob->write(pack('C','0'));
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
$ret .= $c;
|
||||||
|
}
|
||||||
|
print $ret . "\n";
|
||||||
|
|
||||||
|
if (-e $filename) {
|
||||||
|
|
||||||
|
my $size = -s $filename;
|
||||||
|
|
||||||
|
print ("Size: $size bytes\n");
|
||||||
|
$ob->write(pack('V',$size));
|
||||||
|
|
||||||
|
open(FILE, $filename) or die($!);
|
||||||
|
print "Sending $filename\n";
|
||||||
|
|
||||||
|
my $i = 1;
|
||||||
|
while(read(FILE, $c, 1)) {
|
||||||
|
$i++;
|
||||||
|
usleep(50); # this is as fast is it can go...
|
||||||
|
usleep(50) if ($s==1);
|
||||||
|
$ob->write($c);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
last if ($s==1);
|
||||||
|
if((-e $second)) {
|
||||||
|
$s=1; $filename = $second;
|
||||||
|
} else {
|
||||||
|
last;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
print "done sending files.\n";
|
||||||
|
|
||||||
|
if(scalar(@ARGV)!=0) {
|
||||||
|
print "sending " ;
|
||||||
|
print @ARGV;
|
||||||
|
print ",\n";
|
||||||
|
|
||||||
|
$ob->write(@ARGV);
|
||||||
|
$ob->write(',');
|
||||||
|
}
|
||||||
|
|
||||||
|
my $c; my $count;
|
||||||
|
while(1) {
|
||||||
|
($count, $c) = $ob->read(1);
|
||||||
|
print $c if (defined($count) && ($count != 0));
|
||||||
|
}
|
||||||
|
|
||||||
|
$ob -> close or die "Close failed: $!\n";
|
||||||
|
ReadMode 0;
|
||||||
|
undef $ob; # closes port AND frees memory in perl
|
||||||
|
exit;
|
||||||
|
|
91
cpu/mc1322x/tools/rftestrx2pcap.pl
Executable file
91
cpu/mc1322x/tools/rftestrx2pcap.pl
Executable file
|
@ -0,0 +1,91 @@
|
||||||
|
#!/usr/bin/perl -w
|
||||||
|
|
||||||
|
use Device::SerialPort;
|
||||||
|
use Term::ReadKey;
|
||||||
|
use Getopt::Long;
|
||||||
|
use Time::HiRes qw(usleep gettimeofday);
|
||||||
|
|
||||||
|
use strict;
|
||||||
|
|
||||||
|
my $filename = '';
|
||||||
|
my $second = '';
|
||||||
|
my $term = '/dev/ttyUSB0';
|
||||||
|
my $baud = '115200';
|
||||||
|
my $verbose;
|
||||||
|
|
||||||
|
GetOptions (
|
||||||
|
'terminal=s' => \$term,
|
||||||
|
'baud=s' => \$baud,
|
||||||
|
);
|
||||||
|
|
||||||
|
$| = 1;
|
||||||
|
|
||||||
|
# TODO: add help argument
|
||||||
|
# print "Example usage: rftestrx2pcap.pl -t /dev/ttyS0 -b 9600\n";
|
||||||
|
# exit;
|
||||||
|
|
||||||
|
my $ob = Device::SerialPort->new ($term) or die "Can't start $term\n";
|
||||||
|
# next test will die at runtime unless $ob
|
||||||
|
|
||||||
|
$ob->baudrate($baud);
|
||||||
|
$ob->parity('none');
|
||||||
|
$ob->databits(8);
|
||||||
|
$ob->stopbits(1);
|
||||||
|
$ob->read_const_time(1000); # 1 second per unfulfilled "read" call
|
||||||
|
|
||||||
|
my $str = '';
|
||||||
|
my ($sec, $usec, $len);
|
||||||
|
my @frame;
|
||||||
|
|
||||||
|
my $magic = 0xa1b2c3d4;
|
||||||
|
my $major = 2;
|
||||||
|
my $minor = 4;
|
||||||
|
my $zone = 0;
|
||||||
|
my $sig = 0;
|
||||||
|
my $snaplen = 0xffff;
|
||||||
|
my $network = 195; # 802.15.4
|
||||||
|
|
||||||
|
print pack('LSSLLLL',($magic,$major,$minor,$zone,$sig,$snaplen,$network));
|
||||||
|
|
||||||
|
while(1) {
|
||||||
|
my ($count, $c) = $ob->read(1);
|
||||||
|
|
||||||
|
if (defined($count) && ($count != 0)) {
|
||||||
|
$str .= $c;
|
||||||
|
# match if ends in \n or \r and process line
|
||||||
|
if(($str =~ /\n$/) ||
|
||||||
|
($str =~ /\r$/)) {
|
||||||
|
if($str =~ /^rftest/) {
|
||||||
|
#new packet
|
||||||
|
($sec, $usec) = gettimeofday;
|
||||||
|
print STDERR "rftestline: $sec $usec $str";
|
||||||
|
} elsif($str =~ /^\s*data/) {
|
||||||
|
#packet payload
|
||||||
|
print STDERR "dataline: ";
|
||||||
|
print STDERR $str;
|
||||||
|
$str =~ /data: 0x\d+ (.+)/;
|
||||||
|
my @data = split(' ',$1);
|
||||||
|
($len, @data) = @data;
|
||||||
|
#write out pcap entry
|
||||||
|
print pack('LLLL',($sec,$usec,scalar(@data),scalar(@data)+2));
|
||||||
|
print STDERR "new packet: $sec $usec " . scalar(@data) . " " . (scalar(@data)+2) . "\n\r";
|
||||||
|
@frame = @data[0,1];
|
||||||
|
print pack ('CC',(hex($frame[0]),hex($frame[1])));
|
||||||
|
print STDERR "$frame[0] $frame[1] ";
|
||||||
|
foreach my $data (@data[2..scalar(@data)-1]) {
|
||||||
|
print pack ('C',hex($data));
|
||||||
|
print STDERR "$data ";
|
||||||
|
}
|
||||||
|
print STDERR "\n\r";
|
||||||
|
}
|
||||||
|
print STDERR "\n\r";
|
||||||
|
$str = '';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$ob -> close or die "Close failed: $!\n";
|
||||||
|
ReadMode 0;
|
||||||
|
undef $ob; # closes port AND frees memory in perl
|
||||||
|
exit;
|
||||||
|
|
67
cpu/mc1322x/tools/rimecollect-rrd/collect2rrd.pl
Executable file
67
cpu/mc1322x/tools/rimecollect-rrd/collect2rrd.pl
Executable file
|
@ -0,0 +1,67 @@
|
||||||
|
#!/usr/bin/perl -w
|
||||||
|
use strict;
|
||||||
|
my $verbose = 1;
|
||||||
|
|
||||||
|
####
|
||||||
|
# Feed data on stdin from a RIME collect sink
|
||||||
|
#
|
||||||
|
# Enters data into rimeaddr.rrd
|
||||||
|
#
|
||||||
|
# Creates rimeaddr.rrd from a template if data shows up from a source and
|
||||||
|
# rimeaddr.rrd doesn't exist
|
||||||
|
#
|
||||||
|
# default template is read from default.rrdtmpl
|
||||||
|
#
|
||||||
|
# if rimeaddr.rrdtmpl exisits, that is used instead.
|
||||||
|
|
||||||
|
####
|
||||||
|
#
|
||||||
|
# Templates are shell scripts that create the desired rrd
|
||||||
|
#
|
||||||
|
|
||||||
|
####
|
||||||
|
# Data messages are in the form of:
|
||||||
|
#
|
||||||
|
# Sink got message from 1.0, seqno 109, hops 0: len 12 'GPIO29-High'
|
||||||
|
#
|
||||||
|
#
|
||||||
|
|
||||||
|
my $datapattern = 'Sink got message from ([\d\.]+), seqno \d+, hops \d+: len \d+ \'([\w\d]+-[\w\d]+)\'';
|
||||||
|
|
||||||
|
sub rrdcreate {
|
||||||
|
my ($newrrd_filename, $tmpl_filename) = @_;
|
||||||
|
open FILE, "$tmpl_filename" or die $!;
|
||||||
|
my $tmpl = <FILE>;
|
||||||
|
chomp $tmpl;
|
||||||
|
print "using template $tmpl found in $tmpl_filename\n" if $verbose;
|
||||||
|
`rrdtool create $newrrd_filename $tmpl`;
|
||||||
|
}
|
||||||
|
|
||||||
|
while(<>) {
|
||||||
|
|
||||||
|
next if($_ !~ /$datapattern/);
|
||||||
|
print("rimeaddr $1 data $2\n") if $verbose;
|
||||||
|
|
||||||
|
my ($ds,$data) = split(/-/,$2);
|
||||||
|
print("ds: $ds, data: $data\n") if $verbose;
|
||||||
|
|
||||||
|
if(-e "$1.rrd") {
|
||||||
|
# an rrd already exists for this device
|
||||||
|
# do an update
|
||||||
|
`rrdtool update $1.rrd -t $ds N:$data`
|
||||||
|
} else {
|
||||||
|
# an rrd for this device doesn't exist yet
|
||||||
|
# find a template and make it
|
||||||
|
my $tmpl = "DS:speed:COUNTER:600:U:U RRA:AVERAGE:0.5:6:10";
|
||||||
|
print "creating new rrd $1.rrd... " if $verbose;
|
||||||
|
if(-e "$1.rrdtmpl") {
|
||||||
|
rrdcreate("$1.rrd","$1.rrdtmpl");
|
||||||
|
`rrdtool update $1.rrd -t $ds N:$data`
|
||||||
|
} elsif(-e "default.rrdtmpl") {
|
||||||
|
rrdcreate("$1.rrd","default.rrdtmpl");
|
||||||
|
`rrdtool update $1.rrd -t $ds N:$data`
|
||||||
|
} else {
|
||||||
|
print "can't create rrd for $1: no template found\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
1
cpu/mc1322x/tools/rimecollect-rrd/default.rrdtmpl
Normal file
1
cpu/mc1322x/tools/rimecollect-rrd/default.rrdtmpl
Normal file
|
@ -0,0 +1 @@
|
||||||
|
-s 1 DS:GPIO29:GAUGE:600:U:U RRA:LAST:0.99:1:3600
|
70
cpu/mc1322x/tools/rimecollect-rrd/meshstat.cgi
Executable file
70
cpu/mc1322x/tools/rimecollect-rrd/meshstat.cgi
Executable file
|
@ -0,0 +1,70 @@
|
||||||
|
#!/usr/bin/perl -w
|
||||||
|
|
||||||
|
# CGI script that creates a fill-out form
|
||||||
|
# and echoes back its values.
|
||||||
|
|
||||||
|
use CGI qw/:standard/;
|
||||||
|
|
||||||
|
# configs
|
||||||
|
|
||||||
|
# paths
|
||||||
|
my $meshpath = "/home/malvira/work";
|
||||||
|
my $wwwpath = "/var/www";
|
||||||
|
my $hostname = "hotdog.redwirellc.com";
|
||||||
|
|
||||||
|
# aliases
|
||||||
|
my %aliases = (
|
||||||
|
"2.0" => {
|
||||||
|
alias => "Lower Door",
|
||||||
|
ds=> {
|
||||||
|
"GPIO29" => "Lock (0 - locked, 1 - unlocked)",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
"4.0" => {
|
||||||
|
alias => "Upper Door",
|
||||||
|
},
|
||||||
|
"1.0" => {
|
||||||
|
alias => "Hotdog (datasink)",
|
||||||
|
},
|
||||||
|
);
|
||||||
|
|
||||||
|
opendir(MESHDIR, $meshpath);
|
||||||
|
my @files = readdir(MESHDIR);
|
||||||
|
|
||||||
|
print header;
|
||||||
|
print start_html('Collect Mesh');
|
||||||
|
|
||||||
|
|
||||||
|
foreach my $file (@files) {
|
||||||
|
next if $file !~ /([\d\.]+)\.rrd$/;
|
||||||
|
my $addr = $1;
|
||||||
|
print hr;
|
||||||
|
print h1("$addr: $aliases{$addr}{'alias'}");
|
||||||
|
my @info = split(/\n/,qx(rrdtool info $meshpath/$addr.rrd));
|
||||||
|
|
||||||
|
my %dses;
|
||||||
|
foreach my $info (@info) {
|
||||||
|
next if $info !~ /ds\[([\w\d]+)\]\.([\w\d_]+)\s+=\s+([\w\d]+)/;
|
||||||
|
$dses{$1}{$2} = $3;
|
||||||
|
}
|
||||||
|
|
||||||
|
my $lastupdate = qx(rrdtool lastupdate $meshpath/$addr.rrd);
|
||||||
|
$lastupdate =~ /([\w\d]+)\s+(\d+):\s+([\w\d]+)/;
|
||||||
|
print localtime($2) . " $1 $3<br>";
|
||||||
|
|
||||||
|
foreach my $ds (keys(%dses)) {
|
||||||
|
print h2("$ds: $aliases{$addr}{'ds'}{$ds}");
|
||||||
|
qx(rrdtool graph $wwwpath/$addr-$ds.png --start end-60min DEF:$ds=$meshpath/$addr.rrd:$ds:LAST LINE2:$ds#00a000:\"$ds\");
|
||||||
|
print img({src=>"http://$hostname/$addr-$ds.png"});
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
print hr;
|
||||||
|
|
||||||
|
print end_html;
|
||||||
|
|
||||||
|
#/var/www/demo.png --title="Door" --start end-60min
|
||||||
|
# --imginfo '<IMG SRC=http://localhost/demo.png>'
|
||||||
|
# DEF:door=/home/malvira/work/2.0.rrd:GPIO29:LAST
|
||||||
|
# LINE2:door#00a000:"Door lock">
|
Loading…
Reference in a new issue