⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 app_rkerlt.c

📁 BCM 控制demo源代码
💻 C
字号:
/*******************************************************************************/
/**
Copyright (c) 2007 Freescale Semiconductor
\file       app_rkeRlt.c
\brief      RKE related routines 
\author     Freescale Semiconductor
\author     rc574c
\version    0.1
\date       May/2007
*/
/*******************************************************************************/

#include "main.h"
#include "app_boardInit.h"
#include "app_rkeRlt.h"
#include "des_MC33742.h"
#include "des_MC33972.h"
#include "des_MC33887.h"
#include "des_MC33696.h"
#include "des_MC10XS3412.h"
#include "des_MC15XS3400.h"
#include "des_MC35XS3400.h"
#include "lle_GPIO.h"
#include "app_boardLowPower.h"
#include "app_boardDevCtrl.h"

#include "lle_TIME.h"

// RKE related 
UINT8 	echoMessage, lightCnt;

extern UINT8 lockStatus, sbcStat, delayCounter, pwmCtr1, pwmCtr2, pwmCtr3;

extern UINT8   PITflag;

/*******************************************************************************/
/**
* \brief    Wake-up on RKE message, open door locks, turn ON/OFF Turn lights twice  
* \author   rc574c
* \param    none
* \return   void
*/
void app_rkeWakeUp(void)
{	
    // Doors are locked
    lockStatus = LOCKED;
       
    // Open door locks 
    app_doorLockOPEN();     
 					
	// Load lightning period counter (timebase 50ms)
    lightCnt = 40;
	
	// Turn ON/OFF turn lights twice 
	do
	{	
	    if(PITflag == 1)             
    	{                    	
			PITflag = 0;
				
			// Clear MC33742 watchdog
			des_MC33742_ClearWDT(); 
			
			// Clear E-Switches Watchdog
      des_MC15XS3400_ClrWDT();
			des_MC35XS3400_ClrWDT();
			des_MC10XS3412_ClrWDT(); 
						
			switch (lightCnt)
			{
				case 36:
				{
					// Turn-OFF door lock H-bridge OUTs
					des_MC33887_IN1_L_IN2_L();
					break;
				}
				
				case 24:
				{
					// Turn-ON turn lights 
					app_lightTurnON();	      // 100ms lights ON 
					break;
				}
				case 22:
				{
					// Turn-OFF turn lights 
					app_lightTurnOFF();       // 500ms lights OFF
					break;
				}
				case 12:
				{
					// Turn-ON turn lights 
					app_lightTurnON();	      // 100ms lights ON
					break;
				}
				case 10:
				{
					// Turn-OFF turn lights   
					app_lightTurnOFF();		  // lights OFF
					break;
				}
			}
			
			// Decrement lightning period counter
			lightCnt--;
    	}
	}
	while (lightCnt != 0);				
}

/*******************************************************************************/
/**
* \brief    Main board  close door locks, turn ON/OFF Turn lights twice and 
            enters sleep mode on RKE message,  
* \author   rc574c
* \param    none
* \return   void
*/
void app_rkeSleep(void)
{    
    // Turn-OFF all lights 
    app_lightBrakeOFF();
    app_light55WOFF();
    app_lightTurnOFF(); 
    app_lightRearOFF();
    app_lightCabinOFF();
    app_lightInteriorOFF();
    app_lightDashboardOFF();
    app_msdiCurNon();
    
    // Cabin, turn and rear lights PWM set to default value 
    pwmCtr1 = 0;
    pwmCtr2 = 0;
    pwmCtr3 = 0;
    
    
    // Doors are unlocked
    lockStatus = UNLOCKED;
    
    // Open door locks 
    app_doorLockCLOSE();
 
	// Load lightning period counter (timebase 50ms) 
    lightCnt = 40;
	
	// Turn ON/OFF turn lights twice 
	do
	{	
	    if(PITflag == 1)              
    	{                    	
		    PITflag = 0;
	
			// Clear MC33742 watchdog
			des_MC33742_ClearWDT();
			
			// Clear E-Switches Watchdog
      des_MC15XS3400_ClrWDT();
			des_MC35XS3400_ClrWDT();
			des_MC10XS3412_ClrWDT();
						
			switch (lightCnt)
			{
				case 36:
				{
					// Turn-OFF dor lock H-bridge OUTs
					des_MC33887_IN1_L_IN2_L();
					break;
				}
				case 24:
				{
					// Turn-ON turn lights 
					app_lightTurnON();	      // 100ms lights ON	       
					break;
				}
				case 22:
				{
					// Turn-OFF turn lights 
					app_lightTurnOFF();       // 500ms lights OFF
					break;
				}
				case 12:
				{
					// Turn-ON turn lights 
					app_lightTurnON();	      // 100ms lights ON	      
					break;
				}
				case 10:
				{
					// Turn-OFF turn lights   
					app_lightTurnOFF();       // lights OFF
					break;
				}
			}
			
			// Decrement lightning period counter
			lightCnt--;
    	}
	}
	while (lightCnt != 0);
	
	// APD devices, MCU + MC33742 SLEEP mode enter
 	app_boardSleepMode();		
}

/*******************************************************************************/
/**
* \brief    Configure MC33696 -> FSK, 443.92 MHz band 
* \author   rc574c
* \param    none
* \return   void
*/
void app_rkeInit(void)
{ 
    // Main Board MCU controls the MC33696 SPI and CONFB pin
    MODE_MC33696 = 1;	
	
	Echo_Initialize();
	Echo_Enable();
	while(Echo_DriverStatus().Bits.EnableDelay == 1);
	
	// Configure MC33696 Rx/Tx frequencies 
	Echo_SetFreqNoFRM(0xA47, (0x948 - 7), (0x948 + 7));
	while(Echo_DriverStatus().Bits.Busy == 1);
	
    STROBE_MC33696 = 1; 
}

/*******************************************************************************/
/**
* \brief    This module selects an action based on RKE message data
* \author   rc574c
* \param    none
* \return   void
*/
void app_rkeRxTx(void)
{
  // New mesage received
	if (Echo_DriverStatus().Bits.MsgReady == 1) 
	{
	  // Check message checksum 
		if ((echoNextMessage[0] & ECHO_CHECKSUM_ERROR) == 0) 
		{
			// Message with correct ID and checksum received 
			echoMessage = echoNextMessage[2];

			// Select action 	
			switch(echoMessage)
			{
				case RKE_BOARD_SLEEP_MODE:	  // Main board sleep mode
				{
				  // Main Board in low power mode, MC33696 CONFB pin high
    			MODE_MC33696 = 0;
    			
    			// Main Board wake from sleep mode by MC33696 SCLK signal 
          if (sbcStat & 0x08)
				  {
				    // Main Board sleep mode enter
				    app_boardSleepMode();
				  }
				  else
				  {          				
					 /* Main board go-to-sleep function call 
					  (close locks, turn ON/OFF turn lights and put Main board in sleep mode) */
				  	app_rkeSleep();
					}
					break;
				}	
				case RKE_WKUP:          // Main board waked-up  
				{
          // Main Board wake from sleep mode by MC33696 SCLK signal
          if (sbcStat & 0x08)
          {
            // Open locks and turn ON/OFF turn lights 
				    app_rkeWakeUp();
				    
				    // Clear MC33742 variable reflecting the Main Board wake source  
				    sbcStat = 0;
				  }
					break;
				}
			}
		}
		/* Clear BUFFER_FULL flag to provide space in current position in echoRxBuffer for the next message */
		echoNextMessage[1] &= ~ECHO_BUFFER_FULL;
	}

  // Main Board wake from sleep mode by MC33696 SCLK signal,
  // but RF signal not generated by Remote Controller (noisy environment, e.c.t.) and
  // none RF message received last cca. 150ms.
  if ((sbcStat & 0x08) && (delayCounter))
  {
    // Main Board in low power mode, MC33696 CONFB pin high
    MODE_MC33696 = 0;
             
    // Main Board sleep mode enter
    app_boardSleepMode();
  }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -