Contiki-NG
platform.c
Go to the documentation of this file.
1/*
2 * Copyright (c) 2014, Texas Instruments Incorporated - http://www.ti.com/
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in the
12 * documentation and/or other materials provided with the distribution.
13 * 3. Neither the name of the copyright holder nor the names of its
14 * contributors may be used to endorse or promote products derived
15 * from this software without specific prior written permission.
16 *
17 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
19 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
20 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
21 * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
22 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
23 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
24 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
25 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
26 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
27 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
28 * OF THE POSSIBILITY OF SUCH DAMAGE.
29 *
30 * This file is part of the Contiki operating system.
31 *
32 */
33/*---------------------------------------------------------------------------*/
34/**
35 * \addtogroup openmote-platform
36 * @{
37 *
38 * \file
39 * Main module for the OpenMote platform
40 */
41/*---------------------------------------------------------------------------*/
42#include "contiki.h"
43#include "dev/leds.h"
44#include "dev/uart.h"
45#include "dev/i2c.h"
46#include "dev/button-sensor.h"
47#include "dev/serial-line.h"
48#include "dev/slip.h"
49#include "dev/cc2538-rf.h"
50#include "dev/udma.h"
51#include "dev/crypto.h"
52#include "dev/button-hal.h"
53#include "usb/usb-serial.h"
54#include "lib/random.h"
55#include "lib/sensors.h"
56#include "net/netstack.h"
58#include "net/linkaddr.h"
59#include "sys/platform.h"
60#include "soc.h"
61#include "cpu.h"
62#include "reg.h"
63#include "ieee-addr.h"
64#include "lpm.h"
65
66#include <stdint.h>
67#include <string.h>
68#include <stdio.h>
69/*---------------------------------------------------------------------------*/
70/* Log configuration */
71#include "sys/log.h"
72#define LOG_MODULE "OpenMote"
73#define LOG_LEVEL LOG_LEVEL_MAIN
74/*---------------------------------------------------------------------------*/
75/**
76 * \brief Board specific iniatialisation
77 */
78void board_init(void);
79/*---------------------------------------------------------------------------*/
80static void
81fade(leds_mask_t l)
82{
83 volatile int i;
84 int k, j;
85 for(k = 0; k < 800; ++k) {
86 j = k > 400 ? 800 - k : k;
87
88 leds_on(l);
89 for(i = 0; i < j; ++i) {
90 __asm("nop");
91 }
92 leds_off(l);
93 for(i = 0; i < 400 - j; ++i) {
94 __asm("nop");
95 }
96 }
97}
98/*---------------------------------------------------------------------------*/
99static void
100set_rf_params(void)
101{
102 uint16_t short_addr;
103 uint8_t ext_addr[8];
104
105 ieee_addr_cpy_to(ext_addr, 8);
106
107 short_addr = ext_addr[7];
108 short_addr |= ext_addr[6] << 8;
109
110 NETSTACK_RADIO.set_value(RADIO_PARAM_PAN_ID, IEEE802154_PANID);
111 NETSTACK_RADIO.set_value(RADIO_PARAM_16BIT_ADDR, short_addr);
112 NETSTACK_RADIO.set_value(RADIO_PARAM_CHANNEL, IEEE802154_DEFAULT_CHANNEL);
113 NETSTACK_RADIO.set_object(RADIO_PARAM_64BIT_ADDR, ext_addr, 8);
114}
115/*---------------------------------------------------------------------------*/
116void
118{
119 soc_init();
120
121 leds_init();
122 fade(LEDS_RED);
123}
124/*---------------------------------------------------------------------------*/
125void
127{
128#if UART_CONF_ENABLE
129 uart_init(0);
130 uart_init(1);
132#endif
133
134#if USB_SERIAL_CONF_ENABLE
137#endif
138
139 i2c_init(I2C_SDA_PORT, I2C_SDA_PIN, I2C_SCL_PORT, I2C_SCL_PIN, I2C_SCL_NORMAL_BUS_SPEED);
140
141 serial_line_init();
142
143 /* Initialise the H/W RNG engine. */
144 random_init(0);
145
146 udma_init();
147
148#if CRYPTO_CONF_INIT
149 crypto_init();
151#endif
152
153 /* Populate linkaddr_node_addr */
154 ieee_addr_cpy_to(linkaddr_node_addr.u8, LINKADDR_SIZE);
155
157
159
160 fade(LEDS_BLUE);
161}
162/*---------------------------------------------------------------------------*/
163void
165{
166 LOG_INFO("%s\n", BOARD_STRING);
167
168 set_rf_params();
169
170 board_init();
171
173
174 process_start(&sensors_process, NULL);
175
176 fade(LEDS_GREEN);
177}
178/*---------------------------------------------------------------------------*/
179void
181{
182 /* We have serviced all pending events. Enter a Low-Power mode. */
183 lpm_enter();
184}
185/*---------------------------------------------------------------------------*/
186/**
187 * @}
188 */
Header file for the button HAL.
Header file for the cc2538 RF driver.
Header file with prototypes for interrupt control on the cc2538 Cortex-M3 micro.
Header file for the cc2538 AES/SHA cryptoprocessor driver.
802.15.4 frame creation and parsing functions
void button_hal_init()
Initialise the button HAL.
Definition: button-hal.c:213
#define INTERRUPTS_ENABLE()
Enables all CPU interrupts.
Definition: cpu.h:51
void crypto_init(void)
Enables and resets the AES/SHA cryptoprocessor.
Definition: crypto.c:77
void crypto_disable(void)
Disables the AES/SHA cryptoprocessor.
Definition: crypto.c:101
void i2c_init(uint8_t port_sda, uint8_t pin_sda, uint8_t port_scl, uint8_t pin_scl, uint32_t bus_speed)
Initialize the I2C peripheral and pins.
Definition: i2c.c:49
void ieee_addr_cpy_to(uint8_t *dst, uint8_t len)
Copy the node's IEEE address to a destination memory area.
Definition: ieee-addr.c:47
void random_init(unsigned short seed)
Seed the cc2538 random number generator.
Definition: random.c:84
void soc_print_info(void)
Prints SoC information.
Definition: soc.c:98
void soc_init()
Common initialisation routine for all CC2538-based platforms.
Definition: soc.c:120
void uart_set_input(uint8_t uart, int(*input)(unsigned char c))
Assigns a callback to be called when the UART receives a byte.
Definition: uart.c:334
void uart_init(uint8_t uart)
Initialises the UART controller, configures I/O control and interrupts.
Definition: uart.c:241
void udma_init()
Initialise the uDMA driver.
Definition: udma.c:57
void usb_serial_set_input(int(*input)(unsigned char c))
Set an input hook for bytes received over USB.
Definition: usb-serial.c:295
void usb_serial_init()
Initialise the Serial-over-USB process.
Definition: usb-serial.c:301
#define SERIAL_LINE_CONF_UART
UART to use with serial line.
Definition: cc2538-conf.h:126
void platform_init_stage_three()
Final stage of platform driver initialisation.
Definition: platform.c:169
void platform_init_stage_one(void)
Basic (Stage 1) platform driver initialisation.
Definition: platform.c:114
void platform_idle()
The platform's idle/sleep function.
Definition: platform.c:185
void platform_init_stage_two()
Stage 2 of platform driver initialisation.
Definition: platform.c:123
void board_init(void)
Board specific iniatialisation.
Definition: board.c:80
void leds_init(void)
Initialise the LED HAL.
Definition: minileds.c:44
uint8_t leds_mask_t
An OR mask datatype to represents multiple LEDs.
Definition: leds.h:164
void leds_on(leds_mask_t leds)
Turn on multiple LEDs.
Definition: leds.c:168
void leds_off(leds_mask_t leds)
Turn off multiple LEDs.
Definition: leds.c:186
linkaddr_t linkaddr_node_addr
The link-layer address of the node.
Definition: linkaddr.c:48
void process_start(struct process *p, process_data_t data)
Start a process.
Definition: process.c:99
@ RADIO_PARAM_CHANNEL
Channel used for radio communication.
Definition: radio.h:134
@ RADIO_PARAM_64BIT_ADDR
Long (64 bits) address for the radio, which is used by the address filter.
Definition: radio.h:263
@ RADIO_PARAM_PAN_ID
The personal area network identifier (PAN ID), which is used by the h/w frame filtering functionality...
Definition: radio.h:150
@ RADIO_PARAM_16BIT_ADDR
The short address (16 bits) for the radio, which is used by the h/w filter.
Definition: radio.h:166
Header file for the LED HAL.
Header file for the link-layer address representation.
Header file for the logging system.
#define IEEE802154_DEFAULT_CHANNEL
The default channel for IEEE 802.15.4 networks.
Definition: mac.h:52
Include file for the Contiki low-layer network stack (NETSTACK)
Header file for the Contiki-NG main routine.
Header file with register manipulation macro definitions.
Generic serial I/O process header filer.
int serial_line_input_byte(unsigned char c)
Get one byte of input from the serial driver.
Definition: serial-line.c:64
Header file with macro and function declarations for the cc2538 SoC.
Header file for the cc2538 UART driver.
Header file with register, macro and function declarations for the cc2538 micro-DMA controller module...