git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@3443 35acf78f-673a-0410-8e92-d51de3d6d3f4

This commit is contained in:
gdisirio 2011-10-15 07:10:47 +00:00
parent 3ce8ccb68a
commit ade734b003
5 changed files with 93 additions and 10 deletions

View File

@ -44,6 +44,12 @@ const PALConfig pal_default_config =
#if defined(PORTE) #if defined(PORTE)
{VAL_PORTE, VAL_DDRE}, {VAL_PORTE, VAL_DDRE},
#endif #endif
#if defined(PORTF)
{VAL_PORTF, VAL_DDRF},
#endif
#if defined(PORTG)
{VAL_PORTG, VAL_DDRG},
#endif
}; };
#endif /* HAL_USE_PAL */ #endif /* HAL_USE_PAL */

View File

@ -44,6 +44,12 @@ const PALConfig pal_default_config =
#if defined(PORTE) #if defined(PORTE)
{VAL_PORTE, VAL_DDRE}, {VAL_PORTE, VAL_DDRE},
#endif #endif
#if defined(PORTF)
{VAL_PORTF, VAL_DDRF},
#endif
#if defined(PORTG)
{VAL_PORTG, VAL_DDRG},
#endif
}; };
#endif /* HAL_USE_PAL */ #endif /* HAL_USE_PAL */

View File

@ -85,6 +85,16 @@ void _pal_lld_init(const PALConfig *config) {
PORTE = config->porte.out; PORTE = config->porte.out;
DDRE = config->porte.dir; DDRE = config->porte.dir;
#endif #endif
#if defined(PORTF) || defined(__DOXYGEN__)
PORTF = config->portf.out;
DDRF = config->portf.dir;
#endif
#if defined(PORTG) || defined(__DOXYGEN__)
PORTG = config->portg.out;
DDRG = config->portg.dir;
#endif
} }
/** /**

View File

@ -43,24 +43,30 @@
/*===========================================================================*/ /*===========================================================================*/
/** /**
* @brief Width, in bits, of an I/O port. * @brief Width, in bits, of an I/O port.
*/ */
#define PAL_IOPORTS_WIDTH 8 #define PAL_IOPORTS_WIDTH 8
/** /**
* @brief Whole port mask. * @brief Whole port mask.
* @brief This macro specifies all the valid bits into a port. * @details This macro specifies all the valid bits into a port.
*/ */
#define PAL_WHOLE_PORT ((ioportmask_t)0xFF) #define PAL_WHOLE_PORT ((ioportmask_t)0xFF)
/** /**
* @brief AVR setup registers. * @brief AVR setup registers.
*/ */
typedef struct { typedef struct {
uint8_t out; uint8_t out;
uint8_t dir; uint8_t dir;
} avr_gpio_setup_t; } avr_gpio_setup_t;
/**
* @brief AVR registers block.
* @note On some devices registers do not follow this layout on some
* ports, the ports with abnormal layout cannot be used through
* the PAL driver. Example: PORT F on Mega128.
*/
typedef struct { typedef struct {
volatile uint8_t in; volatile uint8_t in;
volatile uint8_t dir; volatile uint8_t dir;
@ -90,6 +96,12 @@ typedef struct {
#if defined(PORTE) || defined(__DOXYGEN__) #if defined(PORTE) || defined(__DOXYGEN__)
avr_gpio_setup_t porte; avr_gpio_setup_t porte;
#endif #endif
#if defined(PORTF) || defined(__DOXYGEN__)
avr_gpio_setup_t portf;
#endif
#if defined(PORTG) || defined(__DOXYGEN__)
avr_gpio_setup_t portg;
#endif
} PALConfig; } PALConfig;
/** /**
@ -149,6 +161,20 @@ typedef avr_gpio_registers_t *ioportid_t;
#define IOPORT5 ((volatile avr_gpio_registers_t *)&PINE) #define IOPORT5 ((volatile avr_gpio_registers_t *)&PINE)
#endif #endif
#if defined(PORTF) || defined(__DOXYGEN__)
/**
* @brief GPIO port F identifier.
*/
#define IOPORT6 ((volatile avr_gpio_registers_t *)&PINF)
#endif
#if defined(PORTG) || defined(__DOXYGEN__)
/**
* @brief GPIO port G identifier.
*/
#define IOPORT7 ((volatile avr_gpio_registers_t *)&PING)
#endif
/*===========================================================================*/ /*===========================================================================*/
/* Implementation, some of the following macros could be implemented as */ /* Implementation, some of the following macros could be implemented as */
/* functions, if so please put them in pal_lld.c. */ /* functions, if so please put them in pal_lld.c. */

View File

@ -37,14 +37,49 @@
/** /**
* @defgroup AVR_PAL AVR PAL Support * @defgroup AVR_PAL AVR PAL Support
* @details The AVR PAL driver uses the GPIO peripherals. * @details The AVR PAL driver uses the PORT peripherals.
* *
* @section avr_pal_1 Supported HW resources * @section avr_pal_1 Supported HW resources
* - GPIOA. * - PORTA.
* - GPIOB. * - PORTB.
* - GPIOC. * - PORTC.
* - GPIOD. * - PORTD.
* - GPIOE. * - PORTE.
* - PORTF.
* - PORTG.
* .
* @section avr_pal_2 AVR PAL driver implementation features
* The AVR PAL driver implementation fully supports the following hardware
* capabilities:
* - 8 bits wide ports.
* - Atomic set/reset functions.
* - Output latched regardless of the pad setting.
* - Direct read of input pads regardless of the pad setting.
* .
* @section avr_pal_3 Supported PAL setup modes
* The AVR PAL driver supports the following I/O modes:
* - @p PAL_MODE_RESET.
* - @p PAL_MODE_UNCONNECTED.
* - @p PAL_MODE_INPUT.
* - @p PAL_MODE_INPUT_PULLUP.
* - @p PAL_MODE_INPUT_ANALOG.
* - @p PAL_MODE_OUTPUT_PUSHPULL.
* .
* Any attempt to setup an invalid mode is ignored.
*
* @section avr_pal_4 Suboptimal behavior
* The AVR PORT is less than optimal in several areas, the limitations
* should be taken in account while using the PAL driver:
* - Pad/port toggling operations are not atomic.
* - Pad/group mode setup is not atomic.
* - Group set+reset function is not atomic.
* - Writing on pads/groups/ports programmed as input with pull-up
* resistor changes the resistor setting because the output latch is
* used for resistor selection.
* - The PORT registers layout on some devices is not regular (it does
* not have contiguous PIN, DDR, PORT registers in this order), such
* ports cannot be accessed using the PAL driver. For example, PORT F
* on ATmega128. Verify the user manual of your device.
* . * .
* @ingroup AVR_DRIVERS * @ingroup AVR_DRIVERS
*/ */