?? app_rkerlt.c
字號:
/*******************************************************************************/
/**
Copyright (c) 2007 Freescale Semiconductor
\file app_rkeRlt.c
\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 + -