📄 doorlock.c.contrib
字号:
/******************************************************************************
*
* Copyright (C) 2006 Freescale Semiconductor, Inc.
* All Rights Reserved
*
* Filename: Door Lock ADC.h
*
* Functions: includes compiler predefines for the Master Node
*
* Description:
*
* Notes:
*
******************************************************************************/
/*****************************************************************************/
#include "DoorLock.h"
#include "spi.h"
/*****************************************************************************/
/* Global Variables */
/*****************************************************************************/
Bool StateOfMEchanism = FALSE;
extern Byte fm_task; //actual fm window
/******************************************************************************
* Module : void void DoorOverCurent (void);
* Description : convert analog overcurent output from H-Bridge
* Global Data : none
* Static Global Data: none
* Returns : state
* Arguments : none
* Special Issues : none
******************************************************************************/
char DoorOverCurent (void){
unsigned int door1, door2;
//DoorLock nr. 1
ATD0CTL5 = ATD0CTL5_DJM_MASK | ATD0CTL5_CB_MASK | ATD0CTL5_CA_MASK; // ATD03 , right justif., ch1 starts
while(!ATD0STAT0_SCF); // wait till conversion is completed + clear scf flag when set
door1 = ATD0DR0; // read data => clear conversion complete flags // read data => clear conversion complete flags
//DoorLock nr. 2
ATD1CTL5 = ATD1CTL5_DJM_MASK | ATD1CTL5_CA_MASK | ATD1CTL5_CB_MASK; // ATD11 , right justif., ch1 starts
while(!ATD1STAT0_SCF); // wait till conversion is completed + clear scf flag when set
door2 = ATD1DR0; // read data => clear conversion complete flags
if(((door1<CRITICALVALUE)&&(door1!=0)/**/)||((door2<CRITICALVALUE)&&(door2!=0)/**/)){ // if overcurrent value is lower than CRITICALVALUE
DOORLock1_Input1 = DOORLock1_Input2 = CLOSE;
DOORLock2_Input1 = DOORLock2_Input2 = CLOSE;
return(0);
}
else return (2);
}
/******************************************************************************
* Module : void doorOpen(void);
* Description : Open relevant DoorLock mechanism
* Global Data : none
* Static Global Data: none
* Returns : state
* Arguments : char OpenClose
* Special Issues : none
******************************************************************************/
char DoorOpen(void){
SPI24 temp24;
char state, i=0;
RESET_HBRIDGE(); // RESET_HBRIDGE;
DOOR1_OPEN(); //DoorLock nr. 1 CLOSE
DOOR2_OPEN(); //DoorLock nr. 2 CLOSE
CSB_U404 = 0; /* find position of DoorLock, on MSDI */
temp24.comm = U404_SWITCH_STATUS;
temp24.data.w = U404_ZERO;
temp24 = ReadWriteSPI24bit(temp24);
CSB_U404 = 1;
if(temp24.comm & U404_TEST_SP3_SET){ /*OPEN DoorLock*/
//delaytime
for(i=0;i<3;i++){
asm {
LDD #0xFF00 ;
loop2: DBNE D, loop2 ;
};
}
DISABLE_OUPUTS();
return (state = FALSE);
}else{
return state = 2/*DoorOverCurent()*/;
}
}
/******************************************************************************
* Module : void doorClose(void);
* Description : Close relevant DoorLock mechanism
* Global Data : none
* Static Global Data: none
* Returns : state
* Arguments : char OpenClose
* Special Issues : none
******************************************************************************/
char DoorClose(void){
SPI24 temp24;
char state, i=0;
RESET_HBRIDGE(); // RESET_HBRIDGE;
DOOR1_CLOSE(); //DoorLock nr. 1 CLOSE
DOOR2_CLOSE(); //DoorLock nr. 2 CLOSE
CSB_U404 = 0; /* find position of DoorLock, on MSDI */
temp24.comm = U404_SWITCH_STATUS;
temp24.data.w = U404_ZERO;
temp24 = ReadWriteSPI24bit(temp24);
CSB_U404 = 1;
if(temp24.comm & U404_TEST_SP2_SET){ /*OPEN DoorLock*/
//delaytime
for(i=0;i<3;i++){
asm {
LDD #0xFF00 ;
loop2: DBNE D, loop2 ;
};
}
DISABLE_OUPUTS();
return (state = FALSE);
}else{
return state = 2/*DoorOverCurent()*/;
}
}
/******************************************************************************
* Module : void FollowMasterDoorLock();
* Description : Open or Close slave DoorLock mechanism
* Global Data : none
* Static Global Data: none
* Returns : none
* Arguments : none
* Special Issues : not implemented into task control
******************************************************************************/
void FollowMasterDoorLock(void){
SPI24 temp24;
char temporary;
if (fm_task==DOOR_LOCK)return; /*disabled if controlled from second source*/
CSB_U404 = 0; /* find position of DoorLock, on MSDI */
temp24.comm = U404_SWITCH_STATUS;
temp24.data.w = U404_ZERO;
temp24 = ReadWriteSPI24bit(temp24);
CSB_U404 = 1;
temporary = DoorOverCurent();
if((temp24.comm & U404_TEST_SP3_SET)&&(!StateOfMEchanism)){ /*opened DoorLock*/
StateOfMEchanism = TRUE;
DOORLock1_Disable = DISABLE; /*DoorLock nr. 2 OPEN or CLOSE*/
DOORLock1_Enable = ENABLE;
DOORLock1_Input1 = StateOfMEchanism;
DOORLock1_Input2 =~ (Bool)StateOfMEchanism;
//DoorOverCurent();
} else if((temp24.comm & U404_TEST_SP2_SET)&&(StateOfMEchanism)){ /*closed DoorLock*/
StateOfMEchanism = FALSE;
DOORLock1_Disable = DISABLE; /*DoorLock nr. 2 OPEN or CLOSE*/
DOORLock1_Enable = ENABLE;
DOORLock1_Input1 = StateOfMEchanism;
DOORLock1_Input2 =~ (Bool)StateOfMEchanism;
//DoorOverCurent();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -