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

This commit is contained in:
gdisirio 2009-12-08 07:42:49 +00:00
parent 348922bb1c
commit 3b4b79d9bb
11 changed files with 331 additions and 9 deletions

View File

@ -5,6 +5,7 @@ HALSRC = ${CHIBIOS}/os/hal/src/hal.c \
${CHIBIOS}/os/hal/src/can.c \ ${CHIBIOS}/os/hal/src/can.c \
${CHIBIOS}/os/hal/src/mac.c \ ${CHIBIOS}/os/hal/src/mac.c \
${CHIBIOS}/os/hal/src/pal.c \ ${CHIBIOS}/os/hal/src/pal.c \
${CHIBIOS}/os/hal/src/pwm.c \
${CHIBIOS}/os/hal/src/serial.c \ ${CHIBIOS}/os/hal/src/serial.c \
${CHIBIOS}/os/hal/src/spi.c \ ${CHIBIOS}/os/hal/src/spi.c \
${CHIBIOS}/os/hal/src/mmc_spi.c ${CHIBIOS}/os/hal/src/mmc_spi.c

View File

@ -36,6 +36,7 @@
#include "adc.h" #include "adc.h"
#include "can.h" #include "can.h"
#include "mac.h" #include "mac.h"
#include "pwm.h"
#include "serial.h" #include "serial.h"
#include "spi.h" #include "spi.h"
#include "mmc_spi.h" #include "mmc_spi.h"

View File

@ -3,6 +3,7 @@ PLATFORMSRC = ${CHIBIOS}/os/hal/platforms/STM32/hal_lld.c \
${CHIBIOS}/os/hal/platforms/STM32/adc_lld.c \ ${CHIBIOS}/os/hal/platforms/STM32/adc_lld.c \
${CHIBIOS}/os/hal/platforms/STM32/can_lld.c \ ${CHIBIOS}/os/hal/platforms/STM32/can_lld.c \
${CHIBIOS}/os/hal/platforms/STM32/pal_lld.c \ ${CHIBIOS}/os/hal/platforms/STM32/pal_lld.c \
${CHIBIOS}/os/hal/platforms/STM32/pwm_lld.c \
${CHIBIOS}/os/hal/platforms/STM32/serial_lld.c \ ${CHIBIOS}/os/hal/platforms/STM32/serial_lld.c \
${CHIBIOS}/os/hal/platforms/STM32/spi_lld.c \ ${CHIBIOS}/os/hal/platforms/STM32/spi_lld.c \
${CHIBIOS}/os/hal/platforms/STM32/stm32_dma.c ${CHIBIOS}/os/hal/platforms/STM32/stm32_dma.c

View File

@ -0,0 +1,133 @@
/*
ChibiOS/RT - Copyright (C) 2006-2007 Giovanni Di Sirio.
This file is part of ChibiOS/RT.
ChibiOS/RT is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
ChibiOS/RT 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 General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/**
* @file templates/pwm_lld.c
* @brief PWM Driver subsystem low level driver source template
* @addtogroup PWM_LLD
* @{
*/
#include "ch.h"
#include "hal.h"
/*===========================================================================*/
/* Low Level Driver exported variables. */
/*===========================================================================*/
/*===========================================================================*/
/* Low Level Driver local variables. */
/*===========================================================================*/
/*===========================================================================*/
/* Low Level Driver local functions. */
/*===========================================================================*/
/*===========================================================================*/
/* Low Level Driver interrupt handlers. */
/*===========================================================================*/
/*===========================================================================*/
/* Low Level Driver exported functions. */
/*===========================================================================*/
/**
* @brief Low level PWM driver initialization.
*/
void pwm_lld_init(void) {
}
/**
* @brief Configures and activates the PWM peripheral.
*
* @param[in] pwmp pointer to the @p PWMDriver object
*/
void pwm_lld_start(PWMDriver *pwmp) {
if (pwmp->pd_state == PWM_STOP) {
/* Clock activation.*/
}
/* Configuration.*/
}
/**
* @brief Deactivates the PWM peripheral.
*
* @param[in] pwmp pointer to the @p PWMDriver object
*/
void pwm_lld_stop(PWMDriver *pwmp) {
}
/**
* @brief Determines whatever the PWM channel is already enabled.
*
* @param[in] pwmp pointer to the @p PWMDriver object
* @param[in] channel PWM channel identifier
*
* @return The PWM channel status.
* @retval FALSE the channel is not enabled.
* @retval TRUE the channel is enabled.
*/
bool_t pwm_lld_is_enabled(PWMDriver *pwmp, pwmchannel_t channel) {
return FALSE;
}
/**
* @brief Enables a callback mode for the specified PWM channel.
* @details The callback mode must be set before starting a PWM channel.
*
* @param[in] pwmp pointer to the @p PWMDriver object
* @param[in] channel PWM channel identifier
* @param[in] edge output edge mode
* @param[in] callback the callback function
*/
void pwm_lld_set_callback(PWMDriver *pwmp, pwmchannel_t channel,
pwmedge_t edge, pwmcallback_t callback) {
}
/**
* @brief Enables a PWM channel.
*
* @param[in] pwmp pointer to the @p PWMDriver object
* @param[in] channel PWM channel identifier
* @param[in] width PWM pulse width as clock pulses number
*/
void pwm_lld_enable_channel(PWMDriver *pwmp,
pwmchannel_t channel,
pwmcnt_t width) {
}
/**
* @brief Disables a PWM channel.
* @details The channel is disabled and its output line returned to the
* idle state.
*
* @param[in] pwmp pointer to the @p PWMDriver object
* @param[in] channel PWM channel identifier
*/
void pwm_lld_disable_channel(PWMDriver *pwmp, pwmchannel_t channel) {
}
/** @} */

View File

@ -0,0 +1,105 @@
/*
ChibiOS/RT - Copyright (C) 2006-2007 Giovanni Di Sirio.
This file is part of ChibiOS/RT.
ChibiOS/RT is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
ChibiOS/RT 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 General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/**
* @file templates/pwm_lld.h
* @brief PWM Driver subsystem low level driver header template
* @addtogroup PWM_LLD
* @{
*/
#ifndef _PWM_LLD_H_
#define _PWM_LLD_H_
/*===========================================================================*/
/* Driver constants. */
/*===========================================================================*/
/*===========================================================================*/
/* Driver pre-compile time settings. */
/*===========================================================================*/
/**
* @brief Number of PWM channels per PWM driver.
*/
#if !defined(PWM_CHANNELS) || defined(__DOXYGEN__)
#define PWM_CHANNELS 1
#endif
/*===========================================================================*/
/* Driver data structures and types. */
/*===========================================================================*/
/**
* @brief PWM channel type.
*/
typedef uint8_t pwmchannel_t;
/**
* @brief PWM counter type.
*/
typedef uint16_t pwmcnt_t;
/**
* @brief Driver configuration structure.
* @note It could be empty on some architectures.
*/
typedef struct {
} PWMConfig;
/**
* @brief Structure representing an PWM driver.
*/
typedef struct {
/**
* @brief Driver state.
*/
pwmstate_t pd_state;
/**
* @brief Current configuration data.
*/
const PWMConfig *pd_config;
/* End of the mandatory fields.*/
} PWMDriver;
/*===========================================================================*/
/* External declarations. */
/*===========================================================================*/
#ifdef __cplusplus
extern "C" {
#endif
void pwm_lld_init(void);
void pwm_lld_start(PWMDriver *pwmp);
void pwm_lld_stop(PWMDriver *pwmp);
bool_t pwm_lld_is_enabled(PWMDriver *pwmp, pwmchannel_t channel);
void pwm_lld_set_callback(PWMDriver *pwmp, pwmchannel_t channel,
pwmedge_t edge, pwmcallback_t callback);
void pwm_lld_enable_channel(PWMDriver *pwmp,
pwmchannel_t channel,
pwmcnt_t width);
void pwm_lld_disable_channel(PWMDriver *pwmp, pwmchannel_t channel);
#ifdef __cplusplus
}
#endif
#endif /* _PWM_LLD_H_ */
/** @} */

View File

@ -43,7 +43,7 @@ void pwmInit(void) {
void pwmObjectInit(PWMDriver *pwmp) { void pwmObjectInit(PWMDriver *pwmp) {
pwmp->pd_state = PWM_STOP; pwmp->pd_state = PWM_STOP;
pwmp->pwm_config = NULL; pwmp->pd_config = NULL;
} }
/** /**
@ -130,7 +130,8 @@ void pwmEnableChannel(PWMDriver *pwmp,
/** /**
* @brief Disables a PWM channel. * @brief Disables a PWM channel.
* @details The channel output line is returned to its idle state and disabled. * @details The channel is disabled and its output line returned to the
* idle state.
* *
* @param[in] pwmp pointer to the @p PWMDriver object * @param[in] pwmp pointer to the @p PWMDriver object
* @param[in] channel PWM channel identifier * @param[in] channel PWM channel identifier

View File

@ -24,6 +24,14 @@
* @{ * @{
*/ */
/*
* HAL configuration file, this file allows to enable or disable the various
* device drivers from your application. You may also use this file in order
* to change the device drivers settings found in the low level drivers
* headers, just define here the new settings and those will override the
* defaults defined in the LLD headers.
*/
#ifndef _HALCONF_H_ #ifndef _HALCONF_H_
#define _HALCONF_H_ #define _HALCONF_H_

View File

@ -61,7 +61,7 @@ void pwm_lld_init(void) {
*/ */
void pwm_lld_start(PWMDriver *pwmp) { void pwm_lld_start(PWMDriver *pwmp) {
if (pwmp->pwm_state == PWM_STOP) { if (pwmp->pd_state == PWM_STOP) {
/* Clock activation.*/ /* Clock activation.*/
} }
/* Configuration.*/ /* Configuration.*/
@ -76,4 +76,58 @@ void pwm_lld_stop(PWMDriver *pwmp) {
} }
/**
* @brief Determines whatever the PWM channel is already enabled.
*
* @param[in] pwmp pointer to the @p PWMDriver object
* @param[in] channel PWM channel identifier
*
* @return The PWM channel status.
* @retval FALSE the channel is not enabled.
* @retval TRUE the channel is enabled.
*/
bool_t pwm_lld_is_enabled(PWMDriver *pwmp, pwmchannel_t channel) {
return FALSE;
}
/**
* @brief Enables a callback mode for the specified PWM channel.
* @details The callback mode must be set before starting a PWM channel.
*
* @param[in] pwmp pointer to the @p PWMDriver object
* @param[in] channel PWM channel identifier
* @param[in] edge output edge mode
* @param[in] callback the callback function
*/
void pwm_lld_set_callback(PWMDriver *pwmp, pwmchannel_t channel,
pwmedge_t edge, pwmcallback_t callback) {
}
/**
* @brief Enables a PWM channel.
*
* @param[in] pwmp pointer to the @p PWMDriver object
* @param[in] channel PWM channel identifier
* @param[in] width PWM pulse width as clock pulses number
*/
void pwm_lld_enable_channel(PWMDriver *pwmp,
pwmchannel_t channel,
pwmcnt_t width) {
}
/**
* @brief Disables a PWM channel.
* @details The channel is disabled and its output line returned to the
* idle state.
*
* @param[in] pwmp pointer to the @p PWMDriver object
* @param[in] channel PWM channel identifier
*/
void pwm_lld_disable_channel(PWMDriver *pwmp, pwmchannel_t channel) {
}
/** @} */ /** @} */

View File

@ -44,10 +44,12 @@
* @brief Round robin interval. * @brief Round robin interval.
* @details This constant is the number of system ticks allowed for the * @details This constant is the number of system ticks allowed for the
* threads before preemption occurs. Setting this value to zero * threads before preemption occurs. Setting this value to zero
* disables the round robin mechanism. * disables the preemption for threads with equal priority and the
* round robin becomes cooperative. Note that higher priority
* threads can still preempt, the kernel is always preemptive.
* *
* @note Disabling round robin makes the kernel more compact and generally * @note Disabling the round robin preemption makes the kernel more compact
* faster but forbids multiple threads at the same priority level. * and generally faster.
*/ */
#if !defined(CH_TIME_QUANTUM) || defined(__DOXYGEN__) #if !defined(CH_TIME_QUANTUM) || defined(__DOXYGEN__)
#define CH_TIME_QUANTUM 20 #define CH_TIME_QUANTUM 20

View File

@ -8,6 +8,7 @@
driver. The single drivers can be enabled or disabled from a HAL driver. The single drivers can be enabled or disabled from a HAL
configuration file halconf.h. configuration file halconf.h.
- NEW: New CAN driver model. - NEW: New CAN driver model.
- NEW: New PWM driver model.
- NEW: STM32 ADC driver implementation with DMA support. - NEW: STM32 ADC driver implementation with DMA support.
- NEW: STM32 CAN driver implementation. - NEW: STM32 CAN driver implementation.
- NEW: Added AT91SAM7S support and support for all the memory sizes in - NEW: Added AT91SAM7S support and support for all the memory sizes in

View File

@ -20,15 +20,23 @@
/** /**
* @file templates/halconf.h * @file templates/halconf.h
* @brief HAL configuration header. * @brief HAL configuration header.
* @addtogroup HAL * @addtogroup HAL_CONF
* @{ * @{
*/ */
/*
* HAL configuration file, this file allows to enable or disable the various
* device drivers from your application. You may also use this file in order
* to change the device drivers settings found in the low level drivers
* headers, just define here the new settings and those will override the
* defaults defined in the LLD headers.
*/
#ifndef _HALCONF_H_ #ifndef _HALCONF_H_
#define _HALCONF_H_ #define _HALCONF_H_
/** /**
* @brief Enables the PAL subsystem. * @brief Enables the PAL subsystem.
*/ */
#if !defined(CH_HAL_USE_PAL) || defined(__DOXYGEN__) #if !defined(CH_HAL_USE_PAL) || defined(__DOXYGEN__)
#define CH_HAL_USE_PAL TRUE #define CH_HAL_USE_PAL TRUE
@ -55,6 +63,13 @@
#define CH_HAL_USE_MAC FALSE #define CH_HAL_USE_MAC FALSE
#endif #endif
/**
* @brief Enables the PWM subsystem.
*/
#if !defined(CH_HAL_USE_PWM) || defined(__DOXYGEN__)
#define CH_HAL_USE_PWM TRUE
#endif
/** /**
* @brief Enables the SERIAL subsystem. * @brief Enables the SERIAL subsystem.
*/ */
@ -73,7 +88,7 @@
* @brief Enables the MMC_SPI subsystem. * @brief Enables the MMC_SPI subsystem.
*/ */
#if !defined(CH_HAL_USE_MMC_SPI) || defined(__DOXYGEN__) #if !defined(CH_HAL_USE_MMC_SPI) || defined(__DOXYGEN__)
#define CH_HAL_USE_MMC_SPI FALSE #define CH_HAL_USE_MMC_SPI TRUE
#endif #endif
#endif /* _HALCONF_H_ */ #endif /* _HALCONF_H_ */