mirror of https://github.com/rusefi/ChibiOS.git
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@1383 35acf78f-673a-0410-8e92-d51de3d6d3f4
This commit is contained in:
parent
348922bb1c
commit
3b4b79d9bb
|
@ -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
|
||||||
|
|
|
@ -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"
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @} */
|
|
@ -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_ */
|
||||||
|
|
||||||
|
/** @} */
|
|
@ -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
|
||||||
|
|
|
@ -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_
|
||||||
|
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
/** @} */
|
/** @} */
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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_ */
|
||||||
|
|
Loading…
Reference in New Issue