OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [rtos/] [freertos-6.1.1/] [Demo/] [CORTEX_STM32F103_Primer_GCC/] [ST_Code/] [led.c] - Rev 615

Go to most recent revision | Compare with Previous | Blame | View Log

/********************* (C) COPYRIGHT 2007 RAISONANCE S.A.S. *******************/
/**
*
* @file     led.c
* @brief    LED management.
* @author   IB
* @date     07/2007
*
**/
/******************************************************************************/
 
/* Includes ------------------------------------------------------------------*/
#include "circle.h"
 
/// @cond Internal
 
/* Private variables ---------------------------------------------------------*/
 
int            GreenLED_Counter  = 0;
int            RedLED_Counter    = 0;
enum LED_mode  GreenLED_mode     = LED_UNDEF;
enum LED_mode  RedLED_mode       = LED_UNDEF;
enum LED_mode  GreenLED_newmode  = LED_OFF;
enum LED_mode  RedLED_newmode    = LED_OFF;
const int      HalfPeriod_LF     = 200;
const int      HalfPeriod_HF     = 50;
const int      Period_LF         = 200 * 2;
const int      Period_HF         = 50 * 2;
 
/* Public functions for CircleOS ---------------------------------------------*/
 
/*******************************************************************************
*
*                                LED_Init
*
*******************************************************************************/
/**
*
*  Initialization of the GPIOs for the LEDs
*
*  @note    Is called by CircleOS startup.
*
**/
/******************************************************************************/
void LED_Init( void )
   {
   GPIO_InitTypeDef GPIO_InitStructure;
 
   /* Enable LED GPIO clock */
   RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB, ENABLE );
 
   /* Configure LED pins as output push-pull */
   GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_8 | GPIO_Pin_9 ;
   GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_Out_PP;
   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
 
   GPIO_Init( GPIOB, &GPIO_InitStructure );
   }
 
/*******************************************************************************
*
*                                LED_Handler
*
*******************************************************************************/
/**
*
*  Called by the CircleOS scheduler to manage the states of the LEDs.
*  LEDs may be on, off or blinking according to their state.
*
**/
/******************************************************************************/
void LED_Handler( void )
   {
   LED_Handler_hw(LED_GREEN);
   LED_Handler_hw(LED_RED);
   }
 
/*******************************************************************************
*
*                                LED_Handler
*
*******************************************************************************/
/**
*
*  Called by the CircleOS scheduler to manage the states of the LEDs.
*  LEDs may be on, off or blinking according to their state.
*
*  @param[in]  id       A LED_id indicating the LED to take care of.
*
**/
/******************************************************************************/
void LED_Handler_hw( enum LED_id id )
   {
   int            counter;
   enum LED_mode  mode;
 
   // Choose the right LED parameters.
   if( id == LED_GREEN )
      {
      counter = GreenLED_Counter;
      mode    = GreenLED_newmode;
      }
   else
      {
      counter = RedLED_Counter;
      mode    = RedLED_newmode;
      }
 
   switch( mode )
      {
      case LED_OFF         :
      case LED_ON          :
         if( ( ( id == LED_GREEN ) && ( GreenLED_mode == mode ) ) ||
             ( ( id == LED_RED   ) && ( RedLED_mode   == mode ) ) )
            {
            return;
            }
 
         if( id == LED_GREEN )
            {
            GPIO_WriteBit( GPIOB, GPIO_Pin_8, ( mode == LED_OFF ) ? Bit_RESET : Bit_SET );
 
            GreenLED_mode = mode;
            }
         else if( id == LED_RED )
            {
            GPIO_WriteBit( GPIOB, GPIO_Pin_9, ( mode == LED_OFF ) ? Bit_RESET : Bit_SET );
 
            RedLED_mode = mode;
            }
 
         counter = -1;
         break;
 
      case LED_BLINKING_HF :
         counter++;
 
         if( counter == HalfPeriod_HF )
            {
            GPIO_WriteBit( GPIOB, ( id == LED_RED ) ? GPIO_Pin_9 : GPIO_Pin_8, Bit_SET );
            }
         else if( ( counter < 0 ) || ( counter >= Period_HF ) )
            {
            GPIO_WriteBit( GPIOB, ( id == LED_RED ) ? GPIO_Pin_9 : GPIO_Pin_8, Bit_RESET );
 
            counter = 0;
            }
         break;
 
      case LED_BLINKING_LF :
         counter++;
 
         if( counter == HalfPeriod_LF )
            {
            GPIO_WriteBit( GPIOB, ( id == LED_RED ) ? GPIO_Pin_9 : GPIO_Pin_8, Bit_SET );
            }
 
         else if( ( counter < 0 ) || ( counter >= Period_LF ) )
            {
            GPIO_WriteBit( GPIOB, ( id == LED_RED ) ? GPIO_Pin_9 : GPIO_Pin_8, Bit_RESET );
 
            counter = 0;
            }
         break;
 
      default              :
         break;
      }
 
   if( id == LED_GREEN )
      {
      GreenLED_Counter = counter;
      GreenLED_mode    = mode;
      }
   else
      {
      RedLED_Counter = counter;
      RedLED_mode    = mode;
      }
   }
 
/// @endcond
 
/* Public functions ----------------------------------------------------------*/
 
/*******************************************************************************
*
*                                LED_Set
*
*******************************************************************************/
/**
*
*  Set a specified LED in a specified mode.
*
*  @param[in]  id    A LED_id specifying the LED to change the mode.
*  @param[in]  mode  A LED_mode describing the new LED mode.
*
**/
/******************************************************************************/
void LED_Set( enum LED_id id, enum LED_mode mode )
   {
   if( id == LED_GREEN )
      {
      GreenLED_newmode = mode;
      }
   else if( id == LED_RED )
      {
      RedLED_newmode = mode;
      }
   }
 

Go to most recent revision | Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.