Contiki-NG
Loading...
Searching...
No Matches
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/sensors.h"
55#include "net/netstack.h"
57#include "net/linkaddr.h"
58#include "sys/platform.h"
59#include "soc.h"
60#include "cpu.h"
61#include "reg.h"
62#include "ieee-addr.h"
63#include "lpm.h"
64
65#include <stdint.h>
66#include <string.h>
67#include <stdio.h>
68/*---------------------------------------------------------------------------*/
69/* Log configuration */
70#include "sys/log.h"
71#define LOG_MODULE "OpenMote"
72#define LOG_LEVEL LOG_LEVEL_MAIN
73/*---------------------------------------------------------------------------*/
74/**
75 * \brief Board specific iniatialisation
76 */
77void board_init(void);
78/*---------------------------------------------------------------------------*/
79static void
80fade(leds_mask_t l)
81{
82 volatile int i;
83 int k, j;
84 for(k = 0; k < 800; ++k) {
85 j = k > 400 ? 800 - k : k;
86
87 leds_on(l);
88 for(i = 0; i < j; ++i) {
89 __asm("nop");
90 }
91 leds_off(l);
92 for(i = 0; i < 400 - j; ++i) {
93 __asm("nop");
94 }
95 }
96}
97/*---------------------------------------------------------------------------*/
98static void
99set_rf_params(void)
100{
101 uint16_t short_addr;
102 uint8_t ext_addr[8];
103
104 ieee_addr_cpy_to(ext_addr, 8);
105
106 short_addr = ext_addr[7];
107 short_addr |= ext_addr[6] << 8;
108
109 NETSTACK_RADIO.set_value(RADIO_PARAM_PAN_ID, IEEE802154_PANID);
110 NETSTACK_RADIO.set_value(RADIO_PARAM_16BIT_ADDR, short_addr);
111 NETSTACK_RADIO.set_value(RADIO_PARAM_CHANNEL, IEEE802154_DEFAULT_CHANNEL);
112 NETSTACK_RADIO.set_object(RADIO_PARAM_64BIT_ADDR, ext_addr, 8);
113}
114/*---------------------------------------------------------------------------*/
115void
117{
118 soc_init();
119
120 leds_init();
121 fade(LEDS_RED);
122}
123/*---------------------------------------------------------------------------*/
124void
126{
127#if UART_CONF_ENABLE
128 uart_init(0);
129 uart_init(1);
130 uart_set_input(SERIAL_LINE_CONF_UART, serial_line_input_byte);
131#endif
132
133#if USB_SERIAL_CONF_ENABLE
135 usb_serial_set_input(serial_line_input_byte);
136#endif
137
138 LOG_INFO("%s\n", BOARD_STRING);
139
140 i2c_init(I2C_SDA_PORT, I2C_SDA_PIN, I2C_SCL_PORT, I2C_SCL_PIN, I2C_SCL_NORMAL_BUS_SPEED);
141
142 serial_line_init();
143
144 board_init();
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 set_rf_params();
167
169
170 process_start(&sensors_process, NULL);
171
172 fade(LEDS_GREEN);
173}
174/*---------------------------------------------------------------------------*/
175void
177{
178 /* We have serviced all pending events. Enter a Low-Power mode. */
179 lpm_enter();
180}
181/*---------------------------------------------------------------------------*/
182/**
183 * @}
184 */
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)
Definition ieee-addr.c:47
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 udma_init()
Initialise the uDMA driver.
Definition udma.c:65
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.
void platform_init_stage_three()
Final stage of platform driver initialisation.
Definition platform.c:165
void platform_init_stage_one(void)
Basic (Stage 1) platform driver initialisation.
Definition platform.c:113
void platform_idle()
The platform's idle/sleep function.
Definition platform.c:181
void platform_init_stage_two()
Stage 2 of platform driver initialisation.
Definition platform.c:122
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 uart_init(void)
Initializa the UART driver.
Definition uart-arch.c:87
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:121
@ 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 with declarations for the I2C Control module.
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.
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...