/trunk/build_system/env_arduino_uno.py |
---|
0,0 → 1,19 |
# Import environment set for AVR-GCC. |
Import('env_avr') |
# Create target environment by cloning AVR environment. |
env_target = env_avr.Clone() |
# Declare some variables about microcontroller. |
# Microcontroller type. |
DEVICE = 'atmega328p' |
# Microcontroller frequency. |
CPU_FREQUENCY = '16000000UL' # Hz |
# Set environment for an Atmel AVR ATmega328p microcontroller. |
env_target.Append(CCFLAGS = '-mmcu=' + DEVICE) |
env_target.Append(LINKFLAGS = '-mmcu=' + DEVICE) |
env_target.Append(CPPDEFINES = 'F_CPU=' + CPU_FREQUENCY) |
# Export environment set for target. |
Export('env_target', 'DEVICE') |
/trunk/build_system/env_arduino_mega2560.py |
---|
0,0 → 1,19 |
# Import environment set for AVR-GCC. |
Import('env_avr') |
# Create target environment by cloning AVR environment. |
env_target = env_avr.Clone() |
# Declare some variables about microcontroller. |
# Microcontroller type. |
DEVICE = 'atmega2560' |
# Microcontroller frequency. |
CPU_FREQUENCY = '16000000UL' # Hz |
# Set environment for an Atmel AVR Atmega 2560 microcontroller. |
env_target.Append(CCFLAGS = '-mmcu=' + DEVICE) |
env_target.Append(LINKFLAGS = '-mmcu=' + DEVICE) |
env_target.Append(CPPDEFINES = 'F_CPU=' + CPU_FREQUENCY) |
# Export environment set for target. |
Export('env_target', 'DEVICE') |
/trunk/build_system/env_avr.py |
---|
0,0 → 1,14 |
# Create and initialize the environment. |
env_avr = Environment() |
# Set environment for AVR-GCC. |
env_avr['CC'] = 'avr-gcc' |
env_avr['CPPPATH'] = '/usr/lib/avr/include' |
env_avr['OBJCOPY'] = 'avr-objcopy' |
env_avr['SIZE'] = 'avr-size' |
env_avr['AR'] = 'avr-ar' |
env_avr['RANLIB'] = 'avr-ranlib' |
env_avr.Append(CCFLAGS = '-Os') |
# Export environment set for AVR-GCC. |
Export('env_avr') |
/trunk/SConscript |
---|
0,0 → 1,39 |
# Import environment set for target. |
Import('env_target', 'env_name', 'DEVICE') |
# Set target name. |
TARGET = 'helloworld' |
# Set libraries to use. |
libraries = [ |
'digital_io' |
] |
# Build libraries. |
for library in libraries: |
SConscript( |
'#libraries/' + library + '/SConscript', |
exports = { 'env_target' : env_target, 'env_name' : env_name }, |
duplicate = 0 |
) |
# Set source file. |
sources = 'helloworld.c' |
# Build program. |
env_target.Program(target = TARGET + '.elf', source = sources) |
# Create hex binary file. |
env_target.Command( |
TARGET + '.hex', |
TARGET + '.elf', |
env_target['OBJCOPY'] + ' -O ihex $SOURCE $TARGET' |
) |
# Compute memory usage. |
env_target.Command( |
None, |
TARGET + '.elf', |
env_target['SIZE'] + ' -C --mcu=' + DEVICE + ' $SOURCE' |
) |
/trunk/SConstruct |
---|
0,0 → 1,32 |
# Set environment for AVR-GCC. |
SConscript('#build_system/env_avr.py') |
# Import environment set for AVR-GCC. |
Import('env_avr') |
# Append CPPPATH with the root path of libraries. |
env_avr.Append(CPPPATH = [ '#libraries/' ]) |
# Define environments to use (one environment per target). |
environments = [ |
'env_arduino_uno', |
'env_arduino_mega2560' |
] |
# Browse environments. |
for environment in environments: |
# Set environment for target. |
SConscript( |
'#build_system/' + environment + '.py', |
exports = 'env_avr' |
) |
# Import environment set for target. |
Import('env_target') |
# Build program. |
SConscript( |
'SConscript', |
variant_dir = '#build/' + environment, |
exports = { 'env_target' : env_target, 'env_name' : environment }, |
duplicate = 0 |
) |
/trunk/libraries/useful/bits.h |
---|
0,0 → 1,67 |
/**************************************************************************//** |
* \brief Bit manipulation library - API |
* \author Copyright (C) 2011 Julien Le Sech - www.idreammicro.com |
* \version 1.0 |
* \date 20110823 |
* |
* This file is part of the iDreamMicro library. |
* |
* 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 3 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 program. If not, see http://www.gnu.org/licenses/ |
******************************************************************************/ |
/**************************************************************************//** |
* \headerfile bits.h |
******************************************************************************/ |
#ifndef H__IDREAMMICRO__USEFUL__BITS__H |
#define H__IDREAMMICRO__USEFUL__BITS__H |
#ifdef _cplusplus |
extern "C"{ |
#endif |
/****************************************************************************** |
* Public macro definitions. |
******************************************************************************/ |
/**************************************************************************//** |
* \def BIT__SET |
* \brief Set a bit in a byte. |
******************************************************************************/ |
#define BIT__SET(variable, bit) (variable |= (1 << bit)) |
/**************************************************************************//** |
* \def BIT__RST |
* \brief Reset a bit in a byte. |
******************************************************************************/ |
#define BIT__RST(variable, bit) (variable &= ~(1 << bit)) |
/**************************************************************************//** |
* \def BIT__TGL |
* \brief Toggle a bit in a byte. |
******************************************************************************/ |
#define BIT__TGL(variable, bit) (variable ^= (1 << bit)) |
/**************************************************************************//** |
* \def BIT__TST |
* \brief Test a bit in a byte. |
******************************************************************************/ |
#define BIT__TST(variable, bit) (variable & (1 << bit)) |
#ifdef _cplusplus |
} |
#endif |
#endif /* H__IDREAMMICRO__USEFUL__BITS__H */ |
/trunk/libraries/digital_io/test/digital_io__test.c |
---|
0,0 → 1,68 |
/**************************************************************************//** |
* \brief Digital I/O library - Test program |
* \author Copyright (C) 2011 Julien Le Sech - www.idreammicro.com |
* \version 1.0 |
* \date 20090314 |
* |
* This file is part of the iDreamMicro library. |
* |
* 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 3 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 program. If not, see http://www.gnu.org/licenses/ |
******************************************************************************/ |
/**************************************************************************//** |
* \file digital_io__test.c |
******************************************************************************/ |
/****************************************************************************** |
* Header file inclusions. |
******************************************************************************/ |
#include "../digital_io.h" |
#include <avr/io.h> |
#include <util/delay.h> |
/****************************************************************************** |
* Main function. |
******************************************************************************/ |
/**************************************************************************//** |
* \fn int main(void) |
* |
* \brief Main function. |
******************************************************************************/ |
int |
main |
( |
void |
){ |
// Declare pin. |
digital_io__pin_position_t pin = DIGITAL_IO__PORT_B | DIGITAL_IO__PIN_5; |
// Configure pin as output. |
digital_io__configure_pin(pin, DIGITAL_IO__DIRECTION__OUTPUT); |
while (1) |
{ |
// Set pin level. |
digital_io__set_pin_level(pin, DIGITAL_IO__LEVEL__HIGH); |
_delay_ms(1000); |
// Reset pin level. |
digital_io__set_pin_level(pin, DIGITAL_IO__LEVEL__LOW); |
_delay_ms(1000); |
} |
return 0; |
} |
/trunk/libraries/digital_io/test/SConscript |
---|
0,0 → 1,28 |
# Import environment set for target. |
Import('env_target', 'env_name', 'DEVICE') |
# Set target name. |
TARGET = 'digital_io__test' |
# Set source file. |
sources = [ |
'digital_io__test.c' |
] |
# Build program. |
env_target.Program(target = TARGET + '.elf', source = sources) |
# Create hex binary file. |
env_target.Command( |
TARGET + '.hex', |
TARGET + '.elf', |
env_target['OBJCOPY'] + ' -O ihex $SOURCE $TARGET' |
) |
# Compute memory usage. |
env_target.Command( |
None, |
TARGET + '.elf', |
env_target['SIZE'] + ' -C --mcu=' + DEVICE + ' $SOURCE' |
) |
/trunk/libraries/digital_io/.sconsign.dblite |
---|
/trunk/libraries/digital_io/.sconsign.dblite |
---|
Modification de propriétés sur libraries/digital_io/.sconsign.dblite |
___________________________________________________________________ |
Added: svn:mime-type |
## -0,0 +1 ## |
+application/octet-stream |
\ No newline at end of property |
/trunk/libraries/digital_io/demo/.sconsign.dblite |
---|
/trunk/libraries/digital_io/demo/.sconsign.dblite |
---|
Modification de propriétés sur libraries/digital_io/demo/.sconsign.dblite |
___________________________________________________________________ |
Added: svn:mime-type |
## -0,0 +1 ## |
+application/octet-stream |
\ No newline at end of property |
/trunk/libraries/digital_io/demo/SConscript |
---|
0,0 → 1,28 |
# Import environment set for target. |
Import('env_target', 'env_name', 'DEVICE') |
# Set target name. |
TARGET = 'digital_io__demo' |
# Set source file. |
sources = [ |
'digital_io__demo.c' |
] |
# Build program. |
env_target.Program(target = TARGET + '.elf', source = sources) |
# Create hex binary file. |
env_target.Command( |
TARGET + '.hex', |
TARGET + '.elf', |
env_target['OBJCOPY'] + ' -O ihex $SOURCE $TARGET' |
) |
# Compute memory usage. |
env_target.Command( |
None, |
TARGET + '.elf', |
env_target['SIZE'] + ' -C --mcu=' + DEVICE + ' $SOURCE' |
) |
/trunk/libraries/digital_io/demo/digital_io__demo.c |
---|
0,0 → 1,68 |
/**************************************************************************//** |
* \brief Digital I/O library - Demonstration program |
* \author Copyright (C) 2011 Julien Le Sech - www.idreammicro.com |
* \version 1.0 |
* \date 20090314 |
* |
* This file is part of the iDreamMicro library. |
* |
* 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 3 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 program. If not, see http://www.gnu.org/licenses/ |
******************************************************************************/ |
/**************************************************************************//** |
* \file digital_io__demo.c |
******************************************************************************/ |
/****************************************************************************** |
* Header file inclusions. |
******************************************************************************/ |
#include "../digital_io.h" |
#include <avr/io.h> |
#include <util/delay.h> |
/****************************************************************************** |
* Main function. |
******************************************************************************/ |
/**************************************************************************//** |
* \fn int main(void) |
* |
* \brief Main function. |
******************************************************************************/ |
int |
main |
( |
void |
){ |
// Declare pin. |
digital_io__pin_position_t pin = DIGITAL_IO__PORT_B | DIGITAL_IO__PIN_5; |
// Configure pin as output. |
digital_io__configure_pin(pin, DIGITAL_IO__DIRECTION__OUTPUT); |
while (1) |
{ |
// Set pin level. |
digital_io__set_pin_level(pin, DIGITAL_IO__LEVEL__HIGH); |
_delay_ms(1000); |
// Reset pin level. |
digital_io__set_pin_level(pin, DIGITAL_IO__LEVEL__LOW); |
_delay_ms(1000); |
} |
return 0; |
} |
/trunk/libraries/digital_io/src/digital_io.c |
---|
0,0 → 1,355 |
/**************************************************************************//** |
* \brief Digital I/O library - Implementation |
* \author Copyright (C) 2009 Julien Le Sech - www.idreammicro.com |
* \version 1.0 |
* \date 20090314 |
* |
* This file is part of the iDreamMicro library. |
* |
* 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 3 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 program. If not, see http://www.gnu.org/licenses/ |
******************************************************************************/ |
/**************************************************************************//** |
* \file digital_io.c |
******************************************************************************/ |
/****************************************************************************** |
* Header file inclusions. |
******************************************************************************/ |
#include <digital_io/digital_io.h> |
#include <useful/bits.h> |
#include <avr/io.h> |
#include <stdint.h> |
/****************************************************************************** |
* Private macro definitions. |
******************************************************************************/ |
/**************************************************************************//** |
* \def DIGITAL_IO__PORT_DIRECTION__INPUT |
* \brief |
******************************************************************************/ |
#define DIGITAL_IO__PORT_DIRECTION__INPUT 0x00 |
/**************************************************************************//** |
* \def DIGITAL_IO__PORT_DIRECTION__OUTPUT |
* \brief |
******************************************************************************/ |
#define DIGITAL_IO__PORT_DIRECTION__OUTPUT 0xFF |
/**************************************************************************//** |
* \def digital_io__get_index(port) |
* \brief |
******************************************************************************/ |
#define digital_io__get_index(port) ((port) >> 4) |
/****************************************************************************** |
* Private types. |
******************************************************************************/ |
/**************************************************************************//** |
* \typedef digital_io__register_t |
* \brief Digital IO registers (input, output, direction). |
******************************************************************************/ |
typedef struct digital_io__register |
{ |
const uint8_t volatile * const p_input; |
uint8_t volatile * const p_output; |
uint8_t volatile * const p_direction; |
} digital_io__register_t; |
/****************************************************************************** |
* Private variable definitions. |
******************************************************************************/ |
static const digital_io__register_t ports[] = |
{ |
#ifdef PORTA |
[digital_io__get_index(DIGITAL_IO__PORT_A)] |
{ // PORT A. |
.p_input = &PINA, |
.p_output = &PORTA, |
.p_direction = &DDRA |
}, |
#endif |
#ifdef PORTB |
[digital_io__get_index(DIGITAL_IO__PORT_B)] |
{ // PORT B. |
.p_input = &PINB, |
.p_output = &PORTB, |
.p_direction = &DDRB |
}, |
#endif |
#ifdef PORTC |
[digital_io__get_index(DIGITAL_IO__PORT_C)] |
{ // PORT C. |
.p_input = &PINC, |
.p_output = &PORTC, |
.p_direction = &DDRC |
}, |
#endif |
#ifdef PORTD |
[digital_io__get_index(DIGITAL_IO__PORT_D)] |
{ // PORT D. |
.p_input = &PIND, |
.p_output = &PORTD, |
.p_direction = &DDRD |
}, |
#endif |
#ifdef PORTE |
[digital_io__get_index(DIGITAL_IO__PORT_E)] |
{ // PORT E. |
.p_input = &PINE, |
.p_output = &PORTE, |
.p_direction = &DDRE |
}, |
#endif |
#ifdef PORTF |
[digital_io__get_index(DIGITAL_IO__PORT_F)] |
{ // PORT F. |
.p_input = &PINF, |
.p_output = &PORTF, |
.p_direction = &DDRF |
}, |
#endif |
#ifdef PORTG |
[digital_io__get_index(DIGITAL_IO__PORT_G)] |
{ // PORT G. |
.p_input = &PING, |
.p_output = &PORTG, |
.p_direction = &DDRG |
}, |
#endif |
#ifdef PORTH |
[digital_io__get_index(DIGITAL_IO__PORT_H)] |
{ // PORT H. |
.p_input = &PINH, |
.p_output = &PORTH, |
.p_direction = &DDRH |
}, |
#endif |
#ifdef PORTJ |
[digital_io__get_index(DIGITAL_IO__PORT_J)] |
{ // PORT J. |
.p_input = &PINJ, |
.p_output = &PORTJ, |
.p_direction = &DDRJ |
}, |
#endif |
#ifdef PORTK |
[digital_io__get_index(DIGITAL_IO__PORT_K)] = |
{ // PORT K. |
.p_input = &PINK, |
.p_output = &PORTK, |
.p_direction = &DDRK |
}, |
#endif |
#ifdef PORTL |
[digital_io__get_index(DIGITAL_IO__PORT_L)] |
{ // PORT L. |
.p_input = &PINL, |
.p_output = &PORTL, |
.p_direction = &DDRL |
} |
#endif |
}; |
/****************************************************************************** |
* Public function definitions. |
******************************************************************************/ |
/**************************************************************************//** |
* \fn void digital_io__configure_pin( |
* digital_io__pin_position_t pin_position, |
* digital_io__direction_t direction) |
* |
* \brief Configure a pin. |
* |
* \param[in] pin_position pin position to configure |
* \param direction pin direction |
******************************************************************************/ |
void |
digital_io__configure_pin |
( |
digital_io__pin_position_t pin_position, |
digital_io__direction_t direction |
){ |
// Alias. |
digital_io__register_t const* p_register = |
&(ports[digital_io__get_port(pin_position)]); |
if (DIGITAL_IO__DIRECTION__INPUT == direction) |
{ |
BIT__RST(*(p_register->p_direction), digital_io__get_pin(pin_position)); |
} |
else |
{ |
BIT__SET(*(p_register->p_direction), digital_io__get_pin(pin_position)); |
} |
} |
/**************************************************************************//** |
* \fn digital_io__level_t digital_io__get_pin_level( |
* digital_io__pin_position_t pin_position) |
* |
* \brief Get the level of a pin. |
* |
* \param pin_position pin position to get level |
* |
* \return digital io level |
******************************************************************************/ |
digital_io__level_t |
digital_io__get_pin_level |
( |
digital_io__pin_position_t pin_position |
){ |
// Alias. |
digital_io__register_t const* p_register = |
&(ports[digital_io__get_port(pin_position)]); |
digital_io__level_t level = |
BIT__TST(*(p_register->p_input), digital_io__get_pin(pin_position)) ? |
DIGITAL_IO__LEVEL__HIGH : DIGITAL_IO__LEVEL__LOW; |
return level; |
} |
/**************************************************************************//** |
* \fn void digital_io__set_pin_level( |
* digital_io__pin_position_t pin_position, |
* digital_io__level_t level) |
* |
* \brief Set the level of a pin. |
* |
* \param[in] pin_position pin position to set level |
* \param level level to set |
******************************************************************************/ |
void |
digital_io__set_pin_level |
( |
digital_io__pin_position_t pin_position, |
digital_io__level_t level |
){ |
// Alias. |
digital_io__register_t const* p_register = |
&(ports[digital_io__get_port(pin_position)]); |
if (DIGITAL_IO__LEVEL__LOW == level) |
{ |
BIT__RST(*(p_register->p_output), digital_io__get_pin(pin_position)); |
} |
else |
{ |
BIT__SET(*(p_register->p_output), digital_io__get_pin(pin_position)); |
} |
} |
/**************************************************************************//** |
* \fn void digital_io__toggle_pin_level( |
* digital_io__pin_position_t pin_position) |
* |
* \brief Toggle the level of a pin. |
* |
* \param pin_position pin position to toggle level |
******************************************************************************/ |
void |
digital_io__toggle_pin_level |
( |
digital_io__pin_position_t pin_position |
){ |
// Alias. |
digital_io__register_t const* p_register = |
&(ports[digital_io__get_port(pin_position)]); |
BIT__TGL(*(p_register->p_output), digital_io__get_pin(pin_position)); |
} |
/**************************************************************************//** |
* \fn void digital_io__configure_port( |
* digital_io__port_t port, |
* digital_io__direction_t direction) |
* |
* \brief Configure a port. |
* |
* \param port port to configure |
* \param direction port direction to configure |
******************************************************************************/ |
void |
digital_io__configure_port |
( |
digital_io__port_t port, |
digital_io__direction_t direction |
){ |
// Alias. |
digital_io__register_t const* p_register = |
&(ports[digital_io__get_port(port)]); |
if (DIGITAL_IO__DIRECTION__INPUT == direction) |
{ |
*(p_register->p_direction) = DIGITAL_IO__PORT_DIRECTION__INPUT; |
} |
else |
{ |
*(p_register->p_direction) = DIGITAL_IO__PORT_DIRECTION__OUTPUT; |
} |
} |
/**************************************************************************//** |
* \fn uint8_t digital_io__get_port_value(digital_io__port_t port) |
* |
* \brief Get the value of a port. |
* |
* \param port port to get value |
* |
* \return port value |
******************************************************************************/ |
digital_io__port_value_t |
digital_io__get_port_value |
( |
digital_io__port_t port |
){ |
// Alias. |
digital_io__register_t const* p_register = |
&(ports[digital_io__get_port(port)]); |
uint8_t value = *(p_register->p_input); |
return value; |
} |
/**************************************************************************//** |
* \fn void digital_io__set_port_value( |
* digital_io__port_t port, |
* digital_io__port_value_t value) |
* |
* \brief Set the value of a port. |
* |
* \param port port to set value |
* \param value port value to set |
******************************************************************************/ |
void |
digital_io__set_port_value |
( |
digital_io__port_t port, |
digital_io__port_value_t value |
){ |
// Alias. |
digital_io__register_t const* p_register = |
&(ports[digital_io__get_port(port)]); |
*(p_register->p_output) = value; |
} |
/trunk/libraries/digital_io/src/SConscript |
---|
0,0 → 1,18 |
# Import environment set for target. |
Import('env_target', 'env_name', 'DEVICE') |
# Define target name. |
TARGET = 'digital_io' |
# Define source files. |
sources = [ |
'digital_io.c' |
] |
# Build static library. |
env_target.StaticLibrary(target = TARGET, source = sources) |
# Append LIBPATH and LIBS. |
env_target.Append(LIBPATH = [ '#build/' + env_name + '/libraries/' + TARGET + '/src']) |
env_target.Append(LIBS = [ TARGET ]) |
/trunk/libraries/digital_io/SConstruct |
---|
0,0 → 1,54 |
# Create and initialize the environment. |
env = Environment() |
# Set environment for AVR-GCC. |
env['CC'] = 'avr-gcc' |
env['CPPPATH'] = '/usr/lib/avr/include' |
env['OBJCOPY'] = 'avr-objcopy' |
env['SIZE'] = 'avr-size' |
env['AR'] = 'avr-ar' |
env['RANLIB'] = 'avr-ranlib' |
env.Append(CCFLAGS = '-Os') |
# Declare some variables about microcontroller. |
# Microcontroller type. |
DEVICE = 'atmega328p' |
# Microcontroller frequency. |
CPU_FREQUENCY = '16000000UL' # Hz |
# Set environment for an Atmel AVR ATmega328p microcontroller. |
env.Append(CCFLAGS = '-mmcu=' + DEVICE) |
env.Append(LINKFLAGS = '-mmcu=' + DEVICE) |
env.Append(CPPDEFINES = 'F_CPU=' + CPU_FREQUENCY) |
# Append CPPPATH. |
env.Append(CPPPATH = [ '#../' ]) |
# Build library. |
SConscript( |
'src/SConscript', |
variant_dir = '#build/lib/', |
exports = { 'env_target' : env, 'env_name' : 'env_arduino_uno', 'DEVICE' : DEVICE }, |
duplicate = 0 |
) |
# Append LIBPATH and LIBS. |
env.Append(LIBPATH = [ '#build/lib/']) |
env.Append(LIBS = [ 'digital_io' ]) |
# Build demonstration program. |
SConscript( |
'demo/SConscript', |
variant_dir = '#build/demo/', |
exports = { 'env_target' : env, 'env_name' : 'env_arduino_uno', 'DEVICE' : DEVICE }, |
duplicate = 0 |
) |
# Build test program. |
SConscript( |
'test/SConscript', |
variant_dir = '#build/test/', |
exports = { 'env_target' : env, 'env_name' : 'env_arduino_uno', 'DEVICE' : DEVICE }, |
duplicate = 0 |
) |
/trunk/libraries/digital_io/SConscript |
---|
0,0 → 1,16 |
# Import environment set for target. |
Import('env_target', 'env_name', 'DEVICE') |
# Define directories to process. |
directories = [ |
'src/' |
] |
# Process directories. |
for directory in directories: |
SConscript( |
directory + 'SConscript', |
variant_dir = '#build/' + env_name + '/libraries/digital_io/' + directory, |
exports = { 'env_target' : env_target, 'env_name' : env_name }, |
duplicate = 0 |
) |
/trunk/libraries/digital_io/digital_io.h |
---|
0,0 → 1,354 |
/**************************************************************************//** |
* \brief Digital I/O library - API |
* \author Copyright (C) 2009 Julien Le Sech - www.idreammicro.com |
* \version 1.0 |
* \date 20090314 |
* |
* This file is part of the iDreamMicro library. |
* |
* 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 3 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 program. If not, see http://www.gnu.org/licenses/ |
******************************************************************************/ |
/**************************************************************************//** |
* \headerfile digital_io.h |
* |
* \brief |
* |
* \see |
******************************************************************************/ |
#ifndef H__IDREAMMICRO__DIGITAL_IO__H |
#define H__IDREAMMICRO__DIGITAL_IO__H |
#ifdef _cplusplus |
extern "C"{ |
#endif |
/****************************************************************************** |
* Header file inclusions. |
******************************************************************************/ |
#include <avr/io.h> |
#include <stdint.h> |
/****************************************************************************** |
* Public macro definitions. |
******************************************************************************/ |
/**************************************************************************//** |
* \def digital_io__get_port(pin_position) |
* \brief Get port from pin position. |
******************************************************************************/ |
#define digital_io__get_port(pin_position) ((pin_position) >> 4) |
/**************************************************************************//** |
* \def digital_io__get_pin(pin_position) |
* \brief Get pin form pin position. |
******************************************************************************/ |
#define digital_io__get_pin(pin_position) ((pin_position) & 0x0F) |
/**************************************************************************//** |
* \def DIGITAL_IO__PORT_A |
* \brief Port A. |
******************************************************************************/ |
#define DIGITAL_IO__PORT_A 0x00 |
/**************************************************************************//** |
* \def DIGITAL_IO__PORT_B |
* \brief Port B. |
******************************************************************************/ |
#define DIGITAL_IO__PORT_B 0x10 |
/**************************************************************************//** |
* \def DIGITAL_IO__PORT_C |
* \brief Port C. |
******************************************************************************/ |
#define DIGITAL_IO__PORT_C 0x20 |
/**************************************************************************//** |
* \def DIGITAL_IO__PORT_D |
* \brief Port D. |
******************************************************************************/ |
#define DIGITAL_IO__PORT_D 0x30 |
/**************************************************************************//** |
* \def DIGITAL_IO__PORT_E |
* \brief Port E. |
******************************************************************************/ |
#define DIGITAL_IO__PORT_E 0x40 |
/**************************************************************************//** |
* \def DIGITAL_IO__PORT_F |
* \brief Port F. |
******************************************************************************/ |
#define DIGITAL_IO__PORT_F 0x50 |
/**************************************************************************//** |
* \def DIGITAL_IO__PORT_G |
* \brief Port G. |
******************************************************************************/ |
#define DIGITAL_IO__PORT_G 0x60 |
/**************************************************************************//** |
* \def DIGITAL_IO__PORT_H |
* \brief port H. |
******************************************************************************/ |
#define DIGITAL_IO__PORT_H 0x70 |
/**************************************************************************//** |
* \def DIGITAL_IO__PORT_J |
* \brief Port J. |
******************************************************************************/ |
#define DIGITAL_IO__PORT_J 0x80 |
/**************************************************************************//** |
* \def DIGITAL_IO__PORT_K |
* \brief Port K. |
******************************************************************************/ |
#define DIGITAL_IO__PORT_K 0x90 |
/**************************************************************************//** |
* \def DIGITAL_IO__PORT_L |
* \brief Port L. |
******************************************************************************/ |
#define DIGITAL_IO__PORT_L 0xA0 |
/**************************************************************************//** |
* \def DIGITAL_IO__PIN_0 |
* \brief Pin 0. |
******************************************************************************/ |
#define DIGITAL_IO__PIN_0 0 |
/**************************************************************************//** |
* \def DIGITAL_IO__PIN_1 |
* \brief Pin 1. |
******************************************************************************/ |
#define DIGITAL_IO__PIN_1 1 |
/**************************************************************************//** |
* \def DIGITAL_IO__PIN_2 |
* \brief Pin 2. |
******************************************************************************/ |
#define DIGITAL_IO__PIN_2 2 |
/**************************************************************************//** |
* \def DIGITAL_IO__PIN_3 |
* \brief Pin 3. |
******************************************************************************/ |
#define DIGITAL_IO__PIN_3 3 |
/**************************************************************************//** |
* \def DIGITAL_IO__PIN_4 |
* \brief Pin 4. |
******************************************************************************/ |
#define DIGITAL_IO__PIN_4 4 |
/**************************************************************************//** |
* \def DIGITAL_IO__PIN_5 |
* \brief Pin 5. |
******************************************************************************/ |
#define DIGITAL_IO__PIN_5 5 |
/**************************************************************************//** |
* \def DIGITAL_IO__PIN_6 |
* \brief Pin 6. |
******************************************************************************/ |
#define DIGITAL_IO__PIN_6 6 |
/**************************************************************************//** |
* \def DIGITAL_IO__PIN_7 |
* \brief Pin 7. |
******************************************************************************/ |
#define DIGITAL_IO__PIN_7 7 |
/****************************************************************************** |
* Public types. |
******************************************************************************/ |
/**************************************************************************//** |
* \typedef digital_io__port_t |
* \brief |
******************************************************************************/ |
typedef uint8_t digital_io__port_t; |
/**************************************************************************//** |
* \typedef digital_io__pin_t |
* \brief |
******************************************************************************/ |
typedef uint8_t digital_io__pin_t; |
/**************************************************************************//** |
* \typedef digital_io__pin_position_t |
* \brief Digital IO pin position. |
* High nibble is used for the port, low nibble is used for the pin. |
* digital_io__pin_position_t pin = DIGITAL_IO__PORT_B | DIGITAL_IO__PIN_5; |
******************************************************************************/ |
typedef uint8_t digital_io__pin_position_t; |
/**************************************************************************//** |
* \enum digital_io__directions |
* \brief Digital IO directions. |
* |
* \typedef digital_io__direction_t |
* \brief Digital IO direction. |
******************************************************************************/ |
typedef enum digital_io__directions |
{ |
DIGITAL_IO__DIRECTION__INPUT, /*!< Input. */ |
DIGITAL_IO__DIRECTION__OUTPUT /*!< Output. */ |
} digital_io__direction_t; |
/**************************************************************************//** |
* \enum digital_io__levels |
* \brief Digital IO levels. |
* |
* \typedef digital_io__level_t |
* \brief Digital IO level. |
******************************************************************************/ |
typedef enum digital_io__levels |
{ |
DIGITAL_IO__LEVEL__LOW, /*!< Low level. */ |
DIGITAL_IO__LEVEL__HIGH /*!< High level. */ |
} digital_io__level_t; |
/**************************************************************************//** |
* \typedef digital_io__port_value_t |
* \brief Port value. |
******************************************************************************/ |
typedef uint8_t digital_io__port_value_t; |
/****************************************************************************** |
* Public function prototypes. |
******************************************************************************/ |
/**************************************************************************//** |
* \fn void digital_io__configure_pin( |
* digital_io__pin_position_t pin_position, |
* digital_io__direction_t direction) |
* |
* \brief Configure a pin. |
* |
* \param pin_position pin position to configure |
* \param direction pin direction to set |
******************************************************************************/ |
void |
digital_io__configure_pin |
( |
digital_io__pin_position_t pin_position, |
digital_io__direction_t direction |
); |
/**************************************************************************//** |
* \fn digital_io__level_t digital_io__get_pin_level( |
* digital_io__pin_position_t pin_position) |
* |
* \brief Get the level of a pin. |
* |
* \param pin_position pin position to get level |
* |
* \return digital io level |
******************************************************************************/ |
digital_io__level_t |
digital_io__get_pin_level |
( |
digital_io__pin_position_t pin_position |
); |
/**************************************************************************//** |
* \fn void digital_io__set_pin_level( |
* digital_io__pin_position_t pin_position, |
* digital_io__level_t level) |
* |
* \brief Set the level of a pin. |
* |
* \param pin_position pin position to set level |
* \param level level to set |
******************************************************************************/ |
void |
digital_io__set_pin_level |
( |
digital_io__pin_position_t pin_position, |
digital_io__level_t level |
); |
/**************************************************************************//** |
* \fn void digital_io__toggle_pin_level( |
* digital_io__pin_position_t pin_position) |
* |
* \brief Toggle the level of a pin. |
* |
* \param pin_position pin position to toggle level |
******************************************************************************/ |
void |
digital_io__toggle_pin_level |
( |
digital_io__pin_position_t pin_position |
); |
/**************************************************************************//** |
* \fn void digital_io__configure_port( |
* digital_io__port_t port, |
* digital_io__direction_t direction) |
* |
* \brief Configure a port. |
* |
* \param port port to configure |
* \param direction port direction to configure |
******************************************************************************/ |
void |
digital_io__configure_port |
( |
digital_io__port_t port, |
digital_io__direction_t direction |
); |
/**************************************************************************//** |
* \fn uint8_t digital_io__get_port_value(digital_io__port_t port) |
* |
* \brief Get the value of a port. |
* |
* \param port port to get value |
* |
* \return Port value |
******************************************************************************/ |
digital_io__port_value_t |
digital_io__get_port_value |
( |
digital_io__port_t port |
); |
/**************************************************************************//** |
* \fn void digital_io__set_port_value( |
* digital_io__port_t port, |
* digital_io__port_value_t value) |
* |
* \brief Set the value of a port. |
* |
* \param port port to set value |
* \param value port value to set |
******************************************************************************/ |
void |
digital_io__set_port_value |
( |
digital_io__port_t port, |
digital_io__port_value_t value |
); |
#ifdef _cplusplus |
} |
#endif |
#endif /* H__IDREAMMICRO__DIGITAL_IO__H */ |
/trunk/helloworld.c |
---|
0,0 → 1,46 |
/**************************************************************************//** |
* \file helloworld.c |
******************************************************************************/ |
/****************************************************************************** |
* Header file inclusions. |
******************************************************************************/ |
#include <digital_io/digital_io.h> |
#include <avr/io.h> |
#include <util/delay.h> |
/****************************************************************************** |
* Public function definitions. |
******************************************************************************/ |
/**************************************************************************//** |
* \fn int main(void) |
* |
* \brief Main function. |
******************************************************************************/ |
int |
main |
( |
void |
){ |
// Declare pin. |
digital_io__pin_position_t pin = DIGITAL_IO__PORT_B | DIGITAL_IO__PIN_5; |
// Configure pin as output. |
digital_io__configure_pin(pin, DIGITAL_IO__DIRECTION__OUTPUT); |
while (1) |
{ |
// Set pin level. |
digital_io__set_pin_level(pin, DIGITAL_IO__LEVEL__HIGH); |
_delay_ms(1000); |
// Reset pin level. |
digital_io__set_pin_level(pin, DIGITAL_IO__LEVEL__LOW); |
_delay_ms(1000); |
} |
return 0; |
} |