Contiki-NG
Loading...
Searching...
No Matches
platform.c
Go to the documentation of this file.
1/*
2 * Copyright (c) 2012, 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 *
14 * 3. Neither the name of the copyright holder nor the names of its
15 * contributors may be used to endorse or promote products derived
16 * from this software without specific prior written permission.
17 *
18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
21 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
22 * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
23 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
24 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
25 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
26 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
27 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
29 * OF THE POSSIBILITY OF SUCH DAMAGE.
30 */
31/**
32 * \addtogroup cc2538-platforms
33 * @{
34 *
35 * \defgroup cc2538dk The cc2538 Development Kit platform
36 *
37 * The cc2538DK is a platform by Texas Instruments, based on the
38 * cc2538 SoC with an ARM Cortex-M3 core.
39 * @{
40 *
41 * \file
42 * Main module for the cc2538dk platform
43 */
44/*---------------------------------------------------------------------------*/
45#include "contiki.h"
46#include "dev/adc.h"
47#include "dev/leds.h"
48#include "dev/uart.h"
49#include "dev/serial-line.h"
50#include "dev/slip.h"
51#include "dev/cc2538-rf.h"
52#include "dev/udma.h"
53#include "dev/crypto.h"
54#include "dev/button-hal.h"
55#include "usb/usb-serial.h"
56#include "lib/sensors.h"
57#include "net/netstack.h"
59#include "net/linkaddr.h"
60#include "sys/platform.h"
61#include "soc.h"
62#include "cpu.h"
63#include "reg.h"
64#include "ieee-addr.h"
65#include "lpm.h"
66
67#include <stdint.h>
68#include <string.h>
69#include <stdio.h>
70/*---------------------------------------------------------------------------*/
71/* Log configuration */
72#include "sys/log.h"
73#define LOG_MODULE "CC2538DK"
74#define LOG_LEVEL LOG_LEVEL_MAIN
75/*---------------------------------------------------------------------------*/
76static void
77fade(leds_mask_t l)
78{
79 volatile int i;
80 int k, j;
81 for(k = 0; k < 800; ++k) {
82 j = k > 400 ? 800 - k : k;
83
84 leds_on(l);
85 for(i = 0; i < j; ++i) {
86 __asm("nop");
87 }
88 leds_off(l);
89 for(i = 0; i < 400 - j; ++i) {
90 __asm("nop");
91 }
92 }
93}
94/*---------------------------------------------------------------------------*/
95static void
96set_rf_params(void)
97{
98 uint16_t short_addr;
99 uint8_t ext_addr[8];
100
101 ieee_addr_cpy_to(ext_addr, 8);
102
103 short_addr = ext_addr[7];
104 short_addr |= ext_addr[6] << 8;
105
106 NETSTACK_RADIO.set_value(RADIO_PARAM_PAN_ID, IEEE802154_PANID);
107 NETSTACK_RADIO.set_value(RADIO_PARAM_16BIT_ADDR, short_addr);
108 NETSTACK_RADIO.set_value(RADIO_PARAM_CHANNEL, IEEE802154_DEFAULT_CHANNEL);
109 NETSTACK_RADIO.set_object(RADIO_PARAM_64BIT_ADDR, ext_addr, 8);
110}
111/*---------------------------------------------------------------------------*/
112void
114{
115 soc_init();
116
117 leds_init();
118 fade(LEDS_YELLOW);
119}
120/*---------------------------------------------------------------------------*/
121void
123{
124 /*
125 * Character I/O Initialisation.
126 * When the UART receives a character it will call serial_line_input_byte to
127 * notify the core. The same applies for the USB driver.
128 *
129 * If slip-arch is also linked in afterwards (e.g. if we are a border router)
130 * it will overwrite one of the two peripheral input callbacks. Characters
131 * received over the relevant peripheral will be handled by
132 * slip_input_byte instead
133 */
134#if UART_CONF_ENABLE
135 uart_init(0);
136 uart_init(1);
137 uart_set_input(SERIAL_LINE_CONF_UART, serial_line_input_byte);
138#endif
139
140#if USB_SERIAL_CONF_ENABLE
142 usb_serial_set_input(serial_line_input_byte);
143#endif
144
145 serial_line_init();
146
147 udma_init();
148
149#if CRYPTO_CONF_INIT
150 crypto_init();
152#endif
153
154 /* Populate linkaddr_node_addr */
155 ieee_addr_cpy_to(linkaddr_node_addr.u8, LINKADDR_SIZE);
156
158
160
161 fade(LEDS_GREEN);
162}
163/*---------------------------------------------------------------------------*/
164void
166{
167 LOG_INFO("%s\n", BOARD_STRING);
168
169 set_rf_params();
170
172
173 adc_init();
174
175 process_start(&sensors_process, NULL);
176
177 fade(LEDS_ORANGE);
178}
179/*---------------------------------------------------------------------------*/
180void
182{
183 /* We have serviced all pending events. Enter a Low-Power mode. */
184 lpm_enter();
185}
186/*---------------------------------------------------------------------------*/
187/**
188 * @}
189 * @}
190 */
Header file for the cc2538 ADC driver.
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
void adc_init(void)
Initializes the ADC controller.
Definition adc.c:50
#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 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 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 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...