Пример #1
0
void TIMER0_IRQHandler(void)
{
static signed int comodin = 10;       //Se usa comodin para dar el valor inicial
									  //ya que se debe asignar un valor fijo al momento de
									  //compilación.-


static signed int valor_relativo = 0; //Almacenará el valor del timer capturado cuando interrumpe
static signed int valor_absoluto = 0; //Almacenará el valor en useg acumulados entre flancos
static signed int cero = 0;           //Es el cero que tomará el valor final del nivel anterior




if (habilitacion==TRUE){              //Estoy habilitado para operar?

	if (comodin==10){ cero = TIM_GetCaptureValue(LPC_TIM0,0); //Es la primera vez?
					  comodin=20;                             //Cambio el valor para no volver
					}

	valor_relativo=TIM_GetCaptureValue(LPC_TIM0,0);	//Copio el valor del timer capturado
	valor_absoluto=valor_relativo-cero; //Me quedo con el valor absolito de tiempo en useg

	if (valor_absoluto>MAX_FULL_BIT) //Me fijo si ese valor está fuera del valor máximo según norma
		{							 //Si era mayor es un error. Acá puede caer, si por ejemplo
		sys = 0;					 //habilito la medición y decodificación y justo cae en medio
		cmd = 0;                     //de un código.
		}

	if (GPIO_ReadValue(0) & (1<<24)) // Chequeo el GPIO P0.24 para ver que tipo de flanco es
		{
		if (sys == 0) // Es el primer pulso?
			{
			low_time = HALF_BIT_TIME; // Asumo tiempo corto en nivel bajo
			high_time = HALF_BIT_TIME; // Asumo tiempo corto en nivel alto
			half_bit = 1; // Asumo que es la mitad de un bit
			cmd = 0x02; // = 00000010, Preparo el byte del comando
			}
		else
		{
			low_time = valor_absoluto; // Es flanco positivo, copio valor bajo
		}
		RC5_Decode();
		}
	else
		high_time = valor_absoluto; //Sino en flanco negativo, copio valor alto

	cero=valor_relativo; //El valor del final del nivel (alto o bajo) será mi nuevo cero
	TIM_ClearIntCapturePending(LPC_TIM0,0); //Reseteo la interrupción
}

if (habilitacion==FALSE){ //Si estoy acá, estoy en el tiempo donde no habilito la ,
						  //edición y decodificación. Lo hago para que no detecte muchos pulsos
					      //en un pulsado.

	valor_relativo=TIM_GetCaptureValue(LPC_TIM0,0); //Analizo cuanto tiempo pasó desde el último
	valor_absoluto=valor_relativo-cero;				//flanco.
	if (valor_absoluto>RETARDO) //Si es mayor a RETARDO useg
	{
		habilitacion=TRUE;  //Ya pasó el tiempo de resguardo
		cero=valor_relativo; //Actualizo el cero
		TIM_ClearIntCapturePending(LPC_TIM0,0); //Reseteo interrupción
	}
	else TIM_ClearIntCapturePending(LPC_TIM0,0); //Si no pasó el tiempo sólo reseteo interrupción

}

}
Пример #2
0
/**
  * @brief  RCR receiver demo exec.
  * @param  None
  * @retval None
  */
void Menu_RC5Decode_Func(void)
{
  TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
  TIM_OCInitTypeDef  TIM_OCInitStructure;
  
  /* Disable the TIM15, LED Toggling  */
  TIM_Cmd(TIM15, DISABLE);
  
  /* Disable the JoyStick interrupt */
  Demo_IntExtOnOffCmd(DISABLE);
  
  while (Menu_ReadKey() != NOKEY)
  {}
  /* Clear the LCD */ 
  LCD_Clear(LCD_COLOR_WHITE);   
  
  /* Display Image */
  LCD_SetDisplayWindow(120, 192, 64, 64);
  Storage_OpenReadFile(120, 192, "STFILES/TV.BMP");  
  LCD_WindowModeDisable();
  
  
  /* Set the LCD Back Color */
  LCD_SetBackColor(LCD_COLOR_BLUE);
  /* Set the LCD Text Color */
  LCD_SetTextColor(LCD_COLOR_WHITE);
  LCD_DisplayStringLine(LCD_LINE_9, "  To exit press UP  ");
  
  /* Initialize the InfraRed application: RC5 */
  RFDemoStatus = RC5DEMO; 
  RC5_Init();
  
  while(Menu_ReadKey() != UP)
  {   
    /* Decode the RC5 frame */
    RC5_Decode(&RC5_FRAME);
  }
  
  LCD_Clear(LCD_COLOR_WHITE);
  
  TIM_DeInit(TIM2);
  /* Time Base configuration 100ms*/
  TIM_TimeBaseStructInit(&TIM_TimeBaseStructure);
  TIM_TimeBaseStructure.TIM_Prescaler = 1000;
  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
  TIM_TimeBaseStructure.TIM_Period = 0x0C80;
  TIM_TimeBaseStructure.TIM_ClockDivision = 0x0;
  TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
  
  /* Channel 1, 2, 3 and 4 Configuration in Timing mode */
  TIM_OCStructInit(&TIM_OCInitStructure);
  TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Timing;
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
  TIM_OCInitStructure.TIM_Pulse = 0x0;  
  TIM_OC1Init(TIM2, &TIM_OCInitStructure);
 
  Demo_LedShow(ENABLE);
  
  /* Exit the RF5 demo */
  RFDemoStatus = 0;
  
  /* Enable the JoyStick interrupt */
  Demo_IntExtOnOffCmd(ENABLE);
  
  /* Display menu */
  Menu_DisplayMenu();
}