osd-contiki/platform/osd-merkur/dev/pins_arduino.h
Ralf Schlatterbeck e65dabb119 Add Arduino compatibility layer
We can now directly compile arduino sketches (.pde) files.
Arduino compatible analogWrite works now.
But there is still a long way to go, serial I/O and timer stuff (delay,
millis etc) currently don't work (not tested but I don't expect this to
work).
It can be used in an arduino sketch or in a normal contiki program.
We get a PWM frequency of 490.2 Hz (a period of 2.040 ms), that's
Arduino compatible. If you need different frequencies see native timer
usage in examples/osd/pwm-example
In a contiki program you have to call arduino_pwm_timer_init to
initialize the timer before pwm works. The arduino sketch wrapper
already does this.
For running a sketch, see examples/osd/arduino-sketch
2014-06-26 11:00:01 +02:00

220 lines
6.5 KiB
C

/*
pins_arduino.h - Pin definition functions for Arduino
Part of Arduino - http://www.arduino.cc/
Copyright (c) 2014 Harald Pichler
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General
Public License along with this library; if not, write to the
Free Software Foundation, Inc., 59 Temple Place, Suite 330,
Boston, MA 02111-1307 USA
$Id: wiring.h 249 2014-04-18 17:35:12Z pichler $
*/
/*
This version of pins_arduino.h is for the Merkur Dev Board r1
Harald Pichler 2014 Apr 18
*/
#ifndef Pins_Arduino_h
#define Pins_Arduino_h
#include <avr/pgmspace.h>
#define NUM_DIGITAL_PINS 15
#define NUM_ANALOG_INPUTS 6
#define analogInputToDigitalPin(p) ((p < NUM_ANALOG_INPUTS) ? (p) + NUM_DIGITAL_PINS : -1)
#define digitalPinHasPWM(p) ((p) == 2 ||(p) == 3 ||(p) == 4 ||(p) == 14 )
// Dev board specific defines: RF RX and TX LEDs:
#define RXLED_DDR DDRB
#define RXLED_PORT PORTB
#define RXLED_POS PB6
#define TXLED_DDR DDRB
#define TXLED_PORT PORTB
#define TXLED_POS PB7
const static uint8_t SS = 10;
const static uint8_t MOSI = 11;
const static uint8_t MISO = 13;
const static uint8_t SCK = 12;
const static uint8_t SDA = 9;
const static uint8_t SCL = 8;
const static uint8_t LED = 4;
const static uint8_t LED1 = 4;
const static uint8_t LED2 = 5;
const static uint8_t A0 = 15;
const static uint8_t A1 = 16;
const static uint8_t A2 = 17;
const static uint8_t A3 = 18;
const static uint8_t A4 = 19;
const static uint8_t A5 = 20;
//const static uint8_t A6 = 21;
//const static uint8_t A7 = 22;
// A majority of the pins are NOT PCINTs, SO BE WARNED (i.e. you cannot use them as receive pins)
// Only pins available for RECEIVE (TRANSMIT can be on any pin):
// Pins: 10, 11, 12, 13, 14
#define digitalPinToPCICR(p) ( (((p) >= 10) && ((p) <= 14)) || ? (&PCICR) : ((uint8_t *)0) )
#define digitalPinToPCICRbit(p) ( 0 )
#define digitalPinToPCMSK(p) ( (((p) >= 10) && ((p) <= 14)) ? (&PCMSK0) : ((uint8_t *)0) )
#define digitalPinToPCMSKbit(p) ( ((p) == 10) ? 6 : \
( ((p) == 11) ? 5 : \
( ((p) == 12) ? 1 : \
( ((p) == 13) ? 3 : \
( ((p) == 14) ? 7 : \
0 ) ) ) ) )
#ifdef ARDUINO_MAIN
const uint16_t PROGMEM port_to_mode_PGM[] = {
NOT_A_PORT,
NOT_A_PORT,
(uint16_t)&DDRB,
NOT_A_PORT,
(uint16_t)&DDRD,
(uint16_t)&DDRE,
(uint16_t)&DDRF,
(uint16_t)&DDRG,
NOT_A_PORT,
NOT_A_PORT,
NOT_A_PORT,
NOT_A_PORT,
NOT_A_PORT,
};
const uint16_t PROGMEM port_to_output_PGM[] = {
NOT_A_PORT,
NOT_A_PORT,
(uint16_t)&PORTB,
NOT_A_PORT,
(uint16_t)&PORTD,
(uint16_t)&PORTE,
(uint16_t)&PORTF,
(uint16_t)&PORTG,
NOT_A_PORT,
NOT_A_PORT,
NOT_A_PORT,
NOT_A_PORT,
NOT_A_PORT,
};
const uint16_t PROGMEM port_to_input_PGM[] = {
NOT_A_PIN,
NOT_A_PIN,
NOT_A_PIN,
(uint16_t)&PINC,
(uint16_t)&PIND,
(uint16_t)&PINE,
(uint16_t)&PINF,
(uint16_t)&PING,
NOT_A_PIN,
NOT_A_PIN,
NOT_A_PIN,
NOT_A_PIN,
NOT_A_PIN,
};
const uint8_t PROGMEM digital_pin_to_port_PGM[] = {
// PORTLIST
// -------------------------------------------
PE , // PE 1 ** 0 ** D0 / USART0_TX
PE , // PE 0 ** 1 ** D1 / USART0_RX
PE , // PE 3 ** 2 ** D2 / PWM
PE , // PE 4 ** 3 ** D3 / PWM
PE , // PE 5 ** 4 ** D4 / PWM / LED1 / LED
PE , // PE 6 ** 5 ** D5 / LED2
PD , // PD 3 ** 6 ** D6 / USART1_TX
PD , // PD 2 ** 7 ** D7 / USART1_RX
PD , // PD 0 ** 8 ** D8 / I2C_SCL
PD , // PD 1 ** 9 ** D9 / I2C_SDA
PB , // PB 0 ** 10 ** D10 / SPI_SSN
PB , // PB 2 ** 11 ** D11 / SPI_MOSI
PB , // PB 1 ** 12 ** D12 / SPI_SCK
PB , // PB 3 ** 13 ** D13 / SPI_MISO
PB , // PB 4 ** 14 ** D14 / PWM
PF , // PF 7 ** 15 ** A0 / D15
PF , // PF 6 ** 16 ** A1 / D16
PF , // PF 5 ** 17 ** A2 / D17
PF , // PF 4 ** 18 ** A3 / D18
PF , // PF 0 ** 19 ** A4 / D19
PF , // PF 1 ** 20 ** A5 / D20
// PB , // PB 6 ** 34 ** D34 / LED1 / LED / PWM
// PB , // PB 7 ** 35 ** D35 / LED2 / PWM
// PE , // PE 2 ** 2 ** D2
// PE , // PE 7 ** 7 ** D7
// PB , // PB 5 ** 8 ** D8 / PWM
// PG , // PG 0 ** 16 ** D16
// PG , // PG 1 ** 17 ** D17
// PG , // PG 2 ** 18 ** D18
// PG , // PG 5 ** 19 ** D19 / PWM
// PD , // PD 4 ** 22 ** D22
// PD , // PD 5 ** 23 ** D23
// PD , // PD 6 ** 24 ** D24
// PD , // PD 7 ** 25 ** D25
// PF , // PF 2 ** 28 ** A2 / D28
// PF , // PF 3 ** 29 ** A3 / D29
};
const uint8_t PROGMEM digital_pin_to_bit_mask_PGM[] = {
// PIN IN PORT
// -------------------------------------------
_BV( 1 ) , // PE 1 ** 0 ** USART0_TX
_BV( 0 ) , // PE 0 ** 1 ** USART0_RX
_BV( 3 ) , // PE 3 ** 2 ** D3 / PWM
_BV( 4 ) , // PE 4 ** 3 ** D4 / PWM
_BV( 5 ) , // PE 5 ** 4 ** D5 / PWM
_BV( 6 ) , // PE 6 ** 5 ** D6
_BV( 3 ) , // PD 3 ** 6 ** D21 / USART1_TX
_BV( 2 ) , // PD 2 ** 7 ** D20 / USART1_RX
_BV( 0 ) , // PD 0 ** 8 ** D15 / I2C_SCL
_BV( 1 ) , // PD 1 ** 9 ** D14 / I2C_SDA
_BV( 0 ) , // PB 0 ** 10 ** D10 / SPI_SSN
_BV( 2 ) , // PB 2 ** 11 ** D11 / SPI_MOSI
_BV( 1 ) , // PB 1 ** 12 ** D13 / SPI_SCK
_BV( 3 ) , // PB 3 ** 13 ** D12 / SPI_MISO
_BV( 4 ) , // PB 4 ** 14 ** D9 / PWM
_BV( 7 ) , // PF 7 ** 15 ** A0 / D33
_BV( 6 ) , // PF 6 ** 16 ** A1 / D32
_BV( 5 ) , // PF 5 ** 17 ** A2 / D31
_BV( 4 ) , // PF 4 ** 18 ** A3 / D30
_BV( 0 ) , // PF 0 ** 19 ** A4 / D26
_BV( 1 ) , // PF 1 ** 20 ** A5 / D27
// _BV( 2 ) , // PE 2 ** 2 ** D2
// _BV( 7 ) , // PE 7 ** 7 ** D7
// _BV( 5 ) , // PB 5 ** 8 ** D8 / PWM
// _BV( 0 ) , // PG 0 ** 16 ** D16
// _BV( 1 ) , // PG 1 ** 17 ** D17
// _BV( 2 ) , // PG 2 ** 18 ** D18
// _BV( 5 ) , // PG 5 ** 19 ** D19 / PWM
// _BV( 4 ) , // PD 4 ** 22 ** D22
// _BV( 5 ) , // PD 5 ** 23 ** D23
// _BV( 6 ) , // PD 6 ** 24 ** D24
// _BV( 7 ) , // PD 7 ** 25 ** D25
// _BV( 2 ) , // PF 2 ** 28 ** A2 / D28
// _BV( 3 ) , // PF 3 ** 29 ** A3 / D29
// _BV( 6 ) , // PB 6 ** 34 ** D34 / LED1 / LED / PWM
// _BV( 7 ) , // PB 7 ** 35 ** D35 / LED2 / PWM
};
#endif
#endif