1982 lines
55 KiB
C
1982 lines
55 KiB
C
/******************** (C) COPYRIGHT 2008 STMicroelectronics ********************
|
||
* File Name : stm32f10x_it.c
|
||
* Author : MCD Application Team
|
||
* Version : V2.0.3
|
||
* Date : 09/22/2008
|
||
* Description : Main Interrupt Service Routines.
|
||
* This file provides template for all exceptions handler
|
||
* and peripherals interrupt service routine.
|
||
********************************************************************************
|
||
* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
|
||
* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
|
||
* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
|
||
* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
|
||
* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
|
||
* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
|
||
*******************************************************************************/
|
||
|
||
/* Includes ------------------------------------------------------------------*/
|
||
#include "stm32f10x_it.h"
|
||
#include "RTC_Time.h"
|
||
#define TIM2_CR1 (*(volatile unsigned long *)0x40000000)//控制寄存器1
|
||
#define ICx_FILTER (u8) 6 // 6<-> 670nsec
|
||
|
||
#define PERIPH_BASE ((u32)0x40000000)
|
||
#define APB2PERIPH_BASE (PERIPH_BASE + 0x10000)
|
||
#define GPIOA_BASE (APB2PERIPH_BASE + 0x0800)
|
||
/***********GPIOA外设寄存器地址映射********************/
|
||
#define GPIOA_CRL (*(volatile unsigned long *) (GPIOA_BASE + 0x00))
|
||
#define GPIOA_CRH (*(volatile unsigned long *) (GPIOA_BASE + 0x04))
|
||
#define GPIOA_IDR (*(volatile unsigned long *) (GPIOA_BASE + 0x08))
|
||
#define GPIOA_ODR (*(volatile unsigned long *) (GPIOA_BASE + 0x0C))
|
||
#define GPIOA_BSRR (*(volatile unsigned long *) (GPIOA_BASE + 0x10))
|
||
#define GPIOA_BRR (*(volatile unsigned long *) (GPIOA_BASE + 0x14))
|
||
#define GPIOA_LCKR (*(volatile unsigned long *) (GPIOA_BASE + 0x18))
|
||
|
||
extern TIM_OCInitTypeDef TIM_OCInitStructure;
|
||
extern TIM_ICInitTypeDef TIM_ICInitStructure;
|
||
extern GPIO_InitTypeDef GPIO_InitStructure;
|
||
/* Private typedef -----------------------------------------------------------*/
|
||
/* Private define ------------------------------------------------------------*/
|
||
/* Private macro -------------------------------------------------------------*/
|
||
/* Private variables ---------------------------------------------------------*/
|
||
extern TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
|
||
extern u8 v1[], v3[], u0en, u1en;
|
||
extern u8 TxBuffer1[];
|
||
extern u8 TxBuffer3[];
|
||
extern vu8 TxCounter1;
|
||
extern vu8 TxCounter3;
|
||
extern vu8 vk, vk3;
|
||
extern u8 Send1_Size;
|
||
extern u8 Send3_Size;
|
||
extern u8 ST_Scan3V;
|
||
|
||
extern u16 Data;
|
||
extern u16 C235P, cy;
|
||
extern u8 CX0P, CX1P, CX2P, CX3P, CX4P, CX5P, CX6P, CX7P;
|
||
extern u16 CXD[8];
|
||
extern long cth[56];
|
||
extern u8 C251P, CANP;
|
||
extern long C251CNT, pus_cnt0, pus_cnt1, pus0, pus1;
|
||
extern u8 C237P, C238P, C239P, C240P, C245P, C248P, C250P, dir0, dir1;
|
||
extern u16 sy237, sy238, sy239, sy240, sy248;
|
||
extern long C251TS[6];
|
||
extern u8 dhs_used[6], ytemp[80];
|
||
extern u8 CTX[6];
|
||
extern u16 CYM[6], CYMK[6];
|
||
extern unsigned char m[1536], m8000[256];
|
||
extern short int d[]; //<2F>D积存器
|
||
extern u8 s[1001];
|
||
extern u32 pusy0, pusy1;
|
||
extern long temps1, temps2, div_cps1, div_cps2;
|
||
extern u8 ps1, ps2, enix, down_lad, tscok, CMUT, u485;
|
||
extern unsigned int IPBI[50];
|
||
extern u16 IPBJ[50], x[];
|
||
extern unsigned char ipust;
|
||
|
||
extern struct tm time_now;
|
||
|
||
extern u8(*fuc_b[256])(u16);
|
||
extern u8(*fuc_f1[256])(u16);
|
||
extern u8(*fuc_f2[256])(u16);
|
||
extern u8(*fuc_f3[256])(u16);
|
||
extern const unsigned char lad[];
|
||
void TimingDelay_Decrement(void);
|
||
void write_m(unsigned int i, unsigned char data);
|
||
unsigned char read_m(unsigned int i);
|
||
void sety(unsigned int i);
|
||
void rsty(unsigned int i);
|
||
/* Private function prototypes -----------------------------------------------*/
|
||
/* Private functions ---------------------------------------------------------*/
|
||
|
||
/*******************************************************************************
|
||
* Function Name : NMIException
|
||
* Description : This function handles NMI exception.
|
||
* Input : None
|
||
* Output : None
|
||
* Return : None
|
||
*******************************************************************************/
|
||
void NMIException(void){}
|
||
|
||
/*******************************************************************************
|
||
* Function Name : HardFaultException
|
||
* Description : This function handles Hard Fault exception.
|
||
* Input : None
|
||
* Output : None
|
||
* Return : None
|
||
*******************************************************************************/
|
||
void HardFaultException(void)
|
||
{
|
||
/* Go to infinite loop when Hard Fault exception occurs */
|
||
while (1){}
|
||
}
|
||
|
||
/*******************************************************************************
|
||
* Function Name : MemManageException
|
||
* Description : This function handles Memory Manage exception.
|
||
* Input : None
|
||
* Output : None
|
||
* Return : None
|
||
*******************************************************************************/
|
||
void MemManageException(void)
|
||
{
|
||
/* Go to infinite loop when Memory Manage exception occurs */
|
||
while (1){}
|
||
}
|
||
|
||
/*******************************************************************************
|
||
* Function Name : BusFaultException
|
||
* Description : This function handles Bus Fault exception.
|
||
* Input : None
|
||
* Output : None
|
||
* Return : None
|
||
*******************************************************************************/
|
||
void BusFaultException(void)
|
||
{
|
||
/* Go to infinite loop when Bus Fault exception occurs */
|
||
while (1){}
|
||
}
|
||
|
||
/*******************************************************************************
|
||
* Function Name : UsageFaultException
|
||
* Description : This function handles Usage Fault exception.
|
||
* Input : None
|
||
* Output : None
|
||
* Return : None
|
||
*******************************************************************************/
|
||
void UsageFaultException(void)
|
||
{
|
||
/* Go to infinite loop when Usage Fault exception occurs */
|
||
while (1){}
|
||
}
|
||
|
||
/*******************************************************************************
|
||
* Function Name : DebugMonitor
|
||
* Description : This function handles Debug Monitor exception.
|
||
* Input : None
|
||
* Output : None
|
||
* Return : None
|
||
*******************************************************************************/
|
||
void DebugMonitor(void){}
|
||
|
||
/*******************************************************************************
|
||
* Function Name : SVCHandler
|
||
* Description : This function handles SVCall exception.
|
||
* Input : None
|
||
* Output : None
|
||
* Return : None
|
||
*******************************************************************************/
|
||
void SVCHandler(void){}
|
||
|
||
/*******************************************************************************
|
||
* Function Name : PendSVC
|
||
* Description : This function handles PendSVC exception.
|
||
* Input : None
|
||
* Output : None
|
||
* Return : None
|
||
*******************************************************************************/
|
||
void PendSVC(void){}
|
||
|
||
/*******************************************************************************
|
||
* Function Name : SysTickHandler
|
||
* Description : This function handles SysTick Handler.
|
||
* Input : None
|
||
* Output : None
|
||
* Return : None
|
||
*******************************************************************************/
|
||
void SysTickHandler(void)
|
||
{
|
||
TimingDelay_Decrement();
|
||
}
|
||
|
||
/*******************************************************************************
|
||
* Function Name : WWDG_IRQHandler
|
||
* Description : This function handles WWDG interrupt request.
|
||
* Input : None
|
||
* Output : None
|
||
* Return : None
|
||
*******************************************************************************/
|
||
void WWDG_IRQHandler(void){}
|
||
|
||
/*******************************************************************************
|
||
* Function Name : PVD_IRQHandler
|
||
* Description : This function handles PVD interrupt request.
|
||
* Input : None
|
||
* Output : None
|
||
* Return : None
|
||
*******************************************************************************/
|
||
void PVD_IRQHandler(void){}
|
||
|
||
/*******************************************************************************
|
||
* Function Name : TAMPER_IRQHandler
|
||
* Description : This function handles Tamper interrupt request.
|
||
* Input : None
|
||
* Output : None
|
||
* Return : None
|
||
*******************************************************************************/
|
||
void TAMPER_IRQHandler(void){}
|
||
|
||
/*******************************************************************************
|
||
* Function Name : RTC_IRQHandler
|
||
* Description : This function handles RTC global interrupt request.
|
||
* Input : None
|
||
* Output : None
|
||
* Return : None
|
||
*******************************************************************************/
|
||
void RTC_IRQHandler(void)
|
||
{
|
||
u8 set_clock = 0;
|
||
//struct tm time_now;
|
||
if (RTC_GetITStatus(RTC_IT_SEC) != RESET)
|
||
{
|
||
/* Clear the RTC Second interrupt */
|
||
RTC_ClearITPendingBit(RTC_IT_SEC);
|
||
|
||
/* Wait until last write operation on RTC registers has finished */
|
||
RTC_WaitForLastTask();
|
||
time_now = Time_GetCalendarTime();
|
||
d[6019] = time_now.tm_wday;
|
||
d[6018] = time_now.tm_year;
|
||
d[6017] = time_now.tm_mon;
|
||
d[6016] = time_now.tm_mday;
|
||
/* Compute hours */
|
||
d[6015] = time_now.tm_hour;
|
||
/* Compute minutes */
|
||
d[6014] = time_now.tm_min;
|
||
/* Compute seconds */
|
||
d[6013] = time_now.tm_sec;
|
||
d[6017]++;
|
||
switch (d[6017])
|
||
{
|
||
case 2:
|
||
if (d[6016] > 28)
|
||
if (((d[6018] - 1992) % 4) != 0)
|
||
{
|
||
d[6016] = 1;
|
||
d[6017]++;
|
||
set_clock = 1;
|
||
}
|
||
if (d[6016] > 29)
|
||
if (((d[6018] - 1992) % 4) == 0)
|
||
{
|
||
d[6016] = 1;
|
||
d[6017]++;
|
||
set_clock = 1;
|
||
}
|
||
break;
|
||
case 4:
|
||
if (d[6016] == 31)
|
||
{
|
||
d[6016] = 1;
|
||
d[6017]++;
|
||
set_clock = 1;
|
||
}
|
||
break;
|
||
case 6:
|
||
if (d[6016] == 31)
|
||
{
|
||
d[6016] = 1;
|
||
d[6017]++;
|
||
set_clock = 1;
|
||
}
|
||
break;
|
||
case 9:
|
||
if (d[6016] == 31)
|
||
{
|
||
d[6016] = 1;
|
||
d[6017]++;
|
||
set_clock = 1;
|
||
}
|
||
break;
|
||
case 11:
|
||
if (d[6016] == 31)
|
||
{
|
||
d[6016] = 1;
|
||
d[6017]++;
|
||
set_clock = 1;
|
||
}
|
||
break;
|
||
}
|
||
|
||
if (set_clock == 1)
|
||
{
|
||
time_now.tm_year = d[6018];
|
||
time_now.tm_mon = d[6017] - 1;
|
||
time_now.tm_mday = d[6016];
|
||
time_now.tm_hour = d[6015];
|
||
time_now.tm_min = d[6014];
|
||
time_now.tm_sec = d[6013];
|
||
Time_SetCalendarTime(time_now);
|
||
}
|
||
set_clock = 0;
|
||
|
||
// Reset RTC Counter when Time is 23:59:59
|
||
/* if (TimeVar >= 0x00015180)
|
||
{
|
||
RTC_SetCounter(0x0);
|
||
//Wait until last write operation on RTC registers has finished
|
||
RTC_WaitForLastTask();
|
||
|
||
}
|
||
*/
|
||
}
|
||
}
|
||
|
||
/*******************************************************************************
|
||
* Function Name : FLASH_IRQHandler
|
||
* Description : This function handles Flash interrupt request.
|
||
* Input : None
|
||
* Output : None
|
||
* Return : None
|
||
*******************************************************************************/
|
||
void FLASH_IRQHandler(void){}
|
||
|
||
/*******************************************************************************
|
||
* Function Name : RCC_IRQHandler
|
||
* Description : This function handles RCC interrupt request.
|
||
* Input : None
|
||
* Output : None
|
||
* Return : None
|
||
*******************************************************************************/
|
||
void RCC_IRQHandler(void){}
|
||
|
||
/*******************************************************************************
|
||
* Function Name : EXTI0_IRQHandler
|
||
* Description : This function handles External interrupt Line 0 request.
|
||
* Input : None
|
||
* Output : None
|
||
* Return : None
|
||
*******************************************************************************/
|
||
void EXTI0_IRQHandler(void)
|
||
{
|
||
u8 j;
|
||
u16 i;
|
||
|
||
if (EXTI_GetITStatus(EXTI_Line0) != RESET)
|
||
//判断中断发生来源
|
||
{
|
||
EXTI_ClearITPendingBit(EXTI_Line0);
|
||
if (m8000[50] == 0)
|
||
if (enix == 1)
|
||
if (tscok == 1)
|
||
for (j = 0; j < ipust; j++)
|
||
{
|
||
if (IPBJ[j] >= 0)
|
||
if (IPBJ[j] <= 1)
|
||
{
|
||
if (down_lad == 0)
|
||
if (x[79] == 0)
|
||
for (i = IPBI[j]; i < 16000; i = i + 2)
|
||
{
|
||
j = (*fuc_b[lad[i + 1]])(i);
|
||
if (j != 253)
|
||
{
|
||
i = i + j;
|
||
}
|
||
else
|
||
{
|
||
break;
|
||
}
|
||
}
|
||
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
/*******************************************************************************
|
||
* Function Name : EXTI1_IRQHandler
|
||
* Description : This function handles External interrupt Line 1 request.
|
||
* Input : None
|
||
* Output : None
|
||
* Return : None
|
||
*******************************************************************************/
|
||
void EXTI1_IRQHandler(void)
|
||
{
|
||
u8 j;
|
||
u16 i;
|
||
|
||
if (EXTI_GetITStatus(EXTI_Line1) != RESET)
|
||
//判断中断发生来源
|
||
{
|
||
EXTI_ClearITPendingBit(EXTI_Line1);
|
||
if (m8000[51] == 0)
|
||
if (enix == 1)
|
||
if (tscok == 1)
|
||
for (j = 0; j < ipust; j++)
|
||
{
|
||
if (IPBJ[j] >= 100)
|
||
if (IPBJ[j] <= 101)
|
||
{
|
||
if (down_lad == 0)
|
||
if (x[79] == 0)
|
||
for (i = IPBI[j]; i < 16000; i = i + 2)
|
||
{
|
||
j = (*fuc_b[lad[i + 1]])(i);
|
||
|
||
if (j != 253)
|
||
{
|
||
i = i + j;
|
||
}
|
||
else
|
||
{
|
||
break;
|
||
}
|
||
}
|
||
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
/*******************************************************************************
|
||
* Function Name : EXTI2_IRQHandler
|
||
* Description : This function handles External interrupt Line 2 request.
|
||
* Input : None
|
||
* Output : None
|
||
* Return : None
|
||
*******************************************************************************/
|
||
void EXTI2_IRQHandler(void){}
|
||
|
||
/*******************************************************************************
|
||
* Function Name : EXTI3_IRQHandler
|
||
* Description : This function handles External interrupt Line 3 request.
|
||
* Input : None
|
||
* Output : None
|
||
* Return : None
|
||
*******************************************************************************/
|
||
void EXTI3_IRQHandler(void){}
|
||
|
||
/*******************************************************************************
|
||
* Function Name : EXTI4_IRQHandler
|
||
* Description : This function handles External interrupt Line 4 request.
|
||
* Input : None
|
||
* Output : None
|
||
* Return : None
|
||
*******************************************************************************/
|
||
void EXTI4_IRQHandler(void)
|
||
{
|
||
u16 j, i, ityn = 0;
|
||
if (EXTI_GetITStatus(EXTI_Line4) != RESET)
|
||
//判断中断发生来源
|
||
{
|
||
EXTI_ClearITPendingBit(EXTI_Line4);
|
||
|
||
if ((m8000[55] == 0) && (enix == 1) && (tscok == 1))
|
||
for (j = 0; j < ipust; j++)
|
||
{
|
||
if (IPBJ[j] >= 500)
|
||
if (IPBJ[j] <= 501)
|
||
{
|
||
if (down_lad == 0)
|
||
if (x[79] == 0)
|
||
for (i = IPBI[j]; i < 16000; i = i + 2)
|
||
{
|
||
j = (*fuc_b[lad[i + 1]])(i);
|
||
|
||
if (j != 253)
|
||
{
|
||
i = i + j;
|
||
}
|
||
else
|
||
{
|
||
ityn = 1;
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
if (ityn == 0)
|
||
|
||
{
|
||
if (CX5P)
|
||
d[CXD[5] + 1]++;
|
||
if (C240P == 1)
|
||
{
|
||
if (read_m(8200+sy240) == 0)
|
||
cth[sy240]++;
|
||
else
|
||
cth[sy240]--;
|
||
|
||
for (j = 0; j < 6; j++)
|
||
{
|
||
if (dhs_used[j] == 1)
|
||
if (CTX[j] == 40)
|
||
if (C251TS[j] == cth[sy240])
|
||
{
|
||
switch (CYM[j])
|
||
{
|
||
case 0x00:
|
||
s[CYMK[j]] = 1;
|
||
break;
|
||
case 0x01:
|
||
s[CYMK[j]] = 1;
|
||
break;
|
||
case 0x02:
|
||
s[CYMK[j]] = 1;
|
||
break;
|
||
case 0x03:
|
||
s[CYMK[j]] = 1;
|
||
break;
|
||
case 0x05:
|
||
sety(CYMK[j]);
|
||
break;
|
||
case 0x08:
|
||
write_m(CYMK[j], 1);
|
||
break;
|
||
case 0x09:
|
||
write_m(CYMK[j], 1);
|
||
break;
|
||
case 0x0a:
|
||
write_m(CYMK[j], 1);
|
||
break;
|
||
case 0x0b:
|
||
write_m(CYMK[j], 1);
|
||
break;
|
||
case 0x0c:
|
||
write_m(CYMK[j], 1);
|
||
break;
|
||
case 0x0d:
|
||
write_m(CYMK[j], 1);
|
||
break;
|
||
case 0x0f:
|
||
write_m(CYMK[j], 1);
|
||
break;
|
||
|
||
case 0x10:
|
||
s[CYMK[j]] = 0;
|
||
break;
|
||
case 0x11:
|
||
s[CYMK[j]] = 0;
|
||
break;
|
||
case 0x12:
|
||
s[CYMK[j]] = 0;
|
||
break;
|
||
case 0x13:
|
||
s[CYMK[j]] = 0;
|
||
break;
|
||
case 0x15:
|
||
rsty(CYMK[j]);
|
||
break;
|
||
case 0x18:
|
||
write_m(CYMK[j], 0);
|
||
break;
|
||
case 0x19:
|
||
write_m(CYMK[j], 0);
|
||
break;
|
||
case 0x1a:
|
||
write_m(CYMK[j], 0);
|
||
break;
|
||
case 0x1b:
|
||
write_m(CYMK[j], 0);
|
||
break;
|
||
case 0x1c:
|
||
write_m(CYMK[j], 0);
|
||
break;
|
||
case 0x1d:
|
||
write_m(CYMK[j], 0);
|
||
break;
|
||
case 0x1f:
|
||
write_m(CYMK[j], 0);
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
/*******************************************************************************
|
||
* Function Name : DMA1_Channel1_IRQHandler
|
||
* Description : This function handles DMA1 Channel 1 interrupt request.
|
||
* Input : None
|
||
* Output : None
|
||
* Return : None
|
||
*******************************************************************************/
|
||
void DMA1_Channel1_IRQHandler(void){}
|
||
|
||
/*******************************************************************************
|
||
* Function Name : DMA1_Channel2_IRQHandler
|
||
* Description : This function handles DMA1 Channel 2 interrupt request.
|
||
* Input : None
|
||
* Output : None
|
||
* Return : None
|
||
*******************************************************************************/
|
||
void DMA1_Channel2_IRQHandler(void){}
|
||
|
||
/*******************************************************************************
|
||
* Function Name : DMA1_Channel3_IRQHandler
|
||
* Description : This function handles DMA1 Channel 3 interrupt request.
|
||
* Input : None
|
||
* Output : None
|
||
* Return : None
|
||
*******************************************************************************/
|
||
void DMA1_Channel3_IRQHandler(void){}
|
||
|
||
/*******************************************************************************
|
||
* Function Name : DMA1_Channel4_IRQHandler
|
||
* Description : This function handles DMA1 Channel 4 interrupt request.
|
||
* Input : None
|
||
* Output : None
|
||
* Return : None
|
||
*******************************************************************************/
|
||
void DMA1_Channel4_IRQHandler(void){}
|
||
|
||
/*******************************************************************************
|
||
* Function Name : DMA1_Channel5_IRQHandler
|
||
* Description : This function handles DMA1 Channel 5 interrupt request.
|
||
* Input : None
|
||
* Output : None
|
||
* Return : None
|
||
*******************************************************************************/
|
||
void DMA1_Channel5_IRQHandler(void){}
|
||
|
||
/*******************************************************************************
|
||
* Function Name : DMA1_Channel6_IRQHandler
|
||
* Description : This function handles DMA1 Channel 6 interrupt request.
|
||
* Input : None
|
||
* Output : None
|
||
* Return : None
|
||
*******************************************************************************/
|
||
void DMA1_Channel6_IRQHandler(void){}
|
||
|
||
/*******************************************************************************
|
||
* Function Name : DMA1_Channel7_IRQHandler
|
||
* Description : This function handles DMA1 Channel 7 interrupt request.
|
||
* Input : None
|
||
* Output : None
|
||
* Return : None
|
||
*******************************************************************************/
|
||
void DMA1_Channel7_IRQHandler(void){}
|
||
|
||
/*******************************************************************************
|
||
* Function Name : ADC1_2_IRQHandler
|
||
* Description : This function handles ADC1 and ADC2 global interrupts requests.
|
||
* Input : None
|
||
* Output : None
|
||
* Return : None
|
||
*******************************************************************************/
|
||
void ADC1_2_IRQHandler(void){}
|
||
|
||
/*******************************************************************************
|
||
* Function Name : USB_HP_CAN_TX_IRQHandler
|
||
* Description : This function handles USB High Priority or CAN TX interrupts
|
||
* requests.
|
||
* Input : None
|
||
* Output : None
|
||
* Return : None
|
||
*******************************************************************************/
|
||
void USB_HP_CAN_TX_IRQHandler(void){}
|
||
|
||
/*******************************************************************************
|
||
* Function Name : USB_LP_CAN_RX0_IRQHandler
|
||
* Description : This function handles USB Low Priority or CAN RX0 interrupts
|
||
* requests.
|
||
* Input : None
|
||
* Output : None
|
||
* Return : None
|
||
*******************************************************************************/
|
||
void USB_LP_CAN_RX0_IRQHandler(void)
|
||
{
|
||
u8 j;
|
||
u32 canbf;
|
||
// u8 TransmitMailbox=0;
|
||
CanRxMsg RxMessage;
|
||
CanTxMsg TxMessage;
|
||
|
||
RxMessage.StdId = 0x00;
|
||
RxMessage.ExtId = 0x00;
|
||
RxMessage.IDE = 0;
|
||
RxMessage.DLC = 0;
|
||
RxMessage.FMI = 0;
|
||
RxMessage.Data[0] = 0x00;
|
||
RxMessage.Data[1] = 0x00;
|
||
|
||
CAN_Receive(CAN_FIFO0, &RxMessage);
|
||
|
||
CANP = 0;
|
||
// if((RxMessage.ExtId==0x1230) && (RxMessage.IDE==CAN_ID_EXT)&& (RxMessage.DLC==8) )
|
||
if (d[6103] == 1)
|
||
//主机
|
||
{
|
||
canbf = RxMessage.StdId >> 4;
|
||
if (canbf <= 19)
|
||
{
|
||
for (j = 0; j < 8; j = j + 2)
|
||
d[2000+canbf * 50+(RxMessage.StdId &0x00000007) *4+j / 2] =
|
||
(RxMessage.Data[j] | (RxMessage.Data[j + 1] << 8));
|
||
}
|
||
|
||
}
|
||
else
|
||
//从机
|
||
{
|
||
for (j = 0; j < 8; j = j + 2)
|
||
d[2000+(RxMessage.StdId &0x00000007) *4+j / 2] = (RxMessage.Data[j] |
|
||
(RxMessage.Data[j + 1] << 8));
|
||
canbf = RxMessage.StdId &0x00000007;
|
||
TxMessage.StdId = RxMessage.StdId | 0x00000008;
|
||
// 发回主机的地址与发来的地址做个区别,第3位为1,发来的为0
|
||
TxMessage.ExtId = 0x0000;
|
||
TxMessage.IDE = CAN_ID_STD;
|
||
TxMessage.RTR = CAN_RTR_DATA;
|
||
TxMessage.DLC = 8;
|
||
for (j = 0; j < 8; j = j + 2)
|
||
{
|
||
TxMessage.Data[j] = d[1000+canbf * 4+j / 2];
|
||
TxMessage.Data[j + 1] = d[1000+canbf * 4+j / 2] / 256;
|
||
}
|
||
// TransmitMailbox = CAN_Transmit(&TxMessage);
|
||
CAN_Transmit(&TxMessage);
|
||
}
|
||
}
|
||
|
||
|
||
/*******************************************************************************
|
||
* Function Name : CAN_RX1_IRQHandler
|
||
* Description : This function handles CAN RX1 interrupt request.
|
||
* Input : None
|
||
* Output : None
|
||
* Return : None
|
||
*******************************************************************************/
|
||
void CAN_RX1_IRQHandler(void){}
|
||
|
||
/*******************************************************************************
|
||
* Function Name : CAN_SCE_IRQHandler
|
||
* Description : This function handles CAN SCE interrupt request.
|
||
* Input : None
|
||
* Output : None
|
||
* Return : None
|
||
*******************************************************************************/
|
||
void CAN_SCE_IRQHandler(void){}
|
||
|
||
/*******************************************************************************
|
||
* Function Name : EXTI9_5_IRQHandler
|
||
* Description : This function handles External lines 9 to 5 interrupt request.
|
||
* Input : None
|
||
* Output : None
|
||
* Return : None
|
||
*******************************************************************************/
|
||
void EXTI9_5_IRQHandler(void)
|
||
{
|
||
u16 j, i, ityn = 0;
|
||
if (EXTI_GetITStatus(EXTI_Line5) != RESET)
|
||
//判断中断发生来源
|
||
{
|
||
EXTI_ClearITPendingBit(EXTI_Line5);
|
||
if ((m8000[52] == 0) && (enix == 1) && (tscok == 1))
|
||
for (j = 0; j < ipust; j++)
|
||
{
|
||
if (IPBJ[j] >= 200)
|
||
if (IPBJ[j] <= 201)
|
||
{
|
||
if (down_lad == 0)
|
||
if (x[79] == 0)
|
||
for (i = IPBI[j]; i < 16000; i = i + 2)
|
||
{
|
||
j = (*fuc_b[lad[i + 1]])(i);
|
||
|
||
if (j != 253)
|
||
{
|
||
i = i + j;
|
||
}
|
||
else
|
||
{
|
||
ityn = 1;
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
if (ityn == 0)
|
||
{
|
||
if (CX2P)
|
||
d[CXD[2] + 1]++;
|
||
|
||
if (C237P == 1)
|
||
if ((sy237 != 45) || ((sy237 == 45) && (C245P == 1)))
|
||
{
|
||
if (read_m(8200+sy237) == 0)
|
||
cth[sy237]++;
|
||
else
|
||
cth[sy237]--;
|
||
|
||
for (j = 0; j < 6; j++)
|
||
{
|
||
if (dhs_used[j] == 1)
|
||
if (CTX[j] == 7)
|
||
if (C251TS[j] == cth[sy237])
|
||
{
|
||
switch (CYM[j])
|
||
{
|
||
case 0x00:
|
||
s[CYMK[j]] = 1;
|
||
break;
|
||
case 0x01:
|
||
s[CYMK[j]] = 1;
|
||
break;
|
||
case 0x02:
|
||
s[CYMK[j]] = 1;
|
||
break;
|
||
case 0x03:
|
||
s[CYMK[j]] = 1;
|
||
break;
|
||
case 0x05:
|
||
sety(CYMK[j]);
|
||
break;
|
||
case 0x08:
|
||
write_m(CYMK[j], 1);
|
||
break;
|
||
case 0x09:
|
||
write_m(CYMK[j], 1);
|
||
break;
|
||
case 0x0a:
|
||
write_m(CYMK[j], 1);
|
||
break;
|
||
case 0x0b:
|
||
write_m(CYMK[j], 1);
|
||
break;
|
||
case 0x0c:
|
||
write_m(CYMK[j], 1);
|
||
break;
|
||
case 0x0d:
|
||
write_m(CYMK[j], 1);
|
||
break;
|
||
case 0x0f:
|
||
write_m(CYMK[j], 1);
|
||
break;
|
||
|
||
case 0x10:
|
||
s[CYMK[j]] = 0;
|
||
break;
|
||
case 0x11:
|
||
s[CYMK[j]] = 0;
|
||
break;
|
||
case 0x12:
|
||
s[CYMK[j]] = 0;
|
||
break;
|
||
case 0x13:
|
||
s[CYMK[j]] = 0;
|
||
break;
|
||
case 0x15:
|
||
rsty(CYMK[j]);
|
||
break;
|
||
case 0x18:
|
||
write_m(CYMK[j], 0);
|
||
break;
|
||
case 0x19:
|
||
write_m(CYMK[j], 0);
|
||
break;
|
||
case 0x1a:
|
||
write_m(CYMK[j], 0);
|
||
break;
|
||
case 0x1b:
|
||
write_m(CYMK[j], 0);
|
||
break;
|
||
case 0x1c:
|
||
write_m(CYMK[j], 0);
|
||
break;
|
||
case 0x1d:
|
||
write_m(CYMK[j], 0);
|
||
break;
|
||
case 0x1f:
|
||
write_m(CYMK[j], 0);
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
ityn = 0;
|
||
if (EXTI_GetITStatus(EXTI_Line6) != RESET)
|
||
//判断中断发生来源
|
||
{
|
||
EXTI_ClearITPendingBit(EXTI_Line6);
|
||
if ((m8000[53] == 0) && (enix == 1) && (tscok == 1))
|
||
for (j = 0; j < ipust; j++)
|
||
{
|
||
if (IPBJ[j] >= 300)
|
||
if (IPBJ[j] <= 301)
|
||
{
|
||
if (down_lad == 0)
|
||
if (x[79] == 0)
|
||
for (i = IPBI[j]; i < 16000; i = i + 2)
|
||
{
|
||
j = (*fuc_b[lad[i + 1]])(i);
|
||
|
||
if (j != 253)
|
||
{
|
||
i = i + j;
|
||
}
|
||
else
|
||
{
|
||
ityn = 1;
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
if (ityn == 0)
|
||
{
|
||
if (CX3P)
|
||
d[CXD[3] + 1]++;
|
||
|
||
if (C238P == 1)
|
||
{
|
||
|
||
if (read_m(8200+sy238) == 0)
|
||
cth[sy238]++;
|
||
else
|
||
cth[sy238]--;
|
||
for (j = 0; j < 6; j++)
|
||
{
|
||
if (dhs_used[j] == 1)
|
||
if (CTX[j] == 38)
|
||
if (C251TS[j] == cth[sy238])
|
||
{
|
||
switch (CYM[j])
|
||
{
|
||
case 0x00:
|
||
s[CYMK[j]] = 1;
|
||
break;
|
||
case 0x01:
|
||
s[CYMK[j]] = 1;
|
||
break;
|
||
case 0x02:
|
||
s[CYMK[j]] = 1;
|
||
break;
|
||
case 0x03:
|
||
s[CYMK[j]] = 1;
|
||
break;
|
||
case 0x05:
|
||
sety(CYMK[j]);
|
||
break;
|
||
case 0x08:
|
||
write_m(CYMK[j], 1);
|
||
break;
|
||
case 0x09:
|
||
write_m(CYMK[j], 1);
|
||
break;
|
||
case 0x0a:
|
||
write_m(CYMK[j], 1);
|
||
break;
|
||
case 0x0b:
|
||
write_m(CYMK[j], 1);
|
||
break;
|
||
case 0x0c:
|
||
write_m(CYMK[j], 1);
|
||
break;
|
||
case 0x0d:
|
||
write_m(CYMK[j], 1);
|
||
break;
|
||
case 0x0f:
|
||
write_m(CYMK[j], 1);
|
||
break;
|
||
|
||
case 0x10:
|
||
s[CYMK[j]] = 0;
|
||
break;
|
||
case 0x11:
|
||
s[CYMK[j]] = 0;
|
||
break;
|
||
case 0x12:
|
||
s[CYMK[j]] = 0;
|
||
break;
|
||
case 0x13:
|
||
s[CYMK[j]] = 0;
|
||
break;
|
||
case 0x15:
|
||
rsty(CYMK[j]);
|
||
break;
|
||
case 0x18:
|
||
write_m(CYMK[j], 0);
|
||
break;
|
||
case 0x19:
|
||
write_m(CYMK[j], 0);
|
||
break;
|
||
case 0x1a:
|
||
write_m(CYMK[j], 0);
|
||
break;
|
||
case 0x1b:
|
||
write_m(CYMK[j], 0);
|
||
break;
|
||
case 0x1c:
|
||
write_m(CYMK[j], 0);
|
||
break;
|
||
case 0x1d:
|
||
write_m(CYMK[j], 0);
|
||
break;
|
||
case 0x1f:
|
||
write_m(CYMK[j], 0);
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
if (C248P == 1)
|
||
if ((sy248 == 48) || ((sy248 == 50) && (C250P == 1)))
|
||
{
|
||
cth[sy248]++;
|
||
for (j = 0; j < 6; j++)
|
||
{
|
||
if (dhs_used[j] == 1)
|
||
if (CTX[j] == 48)
|
||
if (C251TS[j] == cth[sy248])
|
||
{
|
||
switch (CYM[j])
|
||
{
|
||
case 0x00:
|
||
s[CYMK[j]] = 1;
|
||
break;
|
||
case 0x01:
|
||
s[CYMK[j]] = 1;
|
||
break;
|
||
case 0x02:
|
||
s[CYMK[j]] = 1;
|
||
break;
|
||
case 0x03:
|
||
s[CYMK[j]] = 1;
|
||
break;
|
||
case 0x05:
|
||
sety(CYMK[j]);
|
||
break;
|
||
case 0x08:
|
||
write_m(CYMK[j], 1);
|
||
break;
|
||
case 0x09:
|
||
write_m(CYMK[j], 1);
|
||
break;
|
||
case 0x0a:
|
||
write_m(CYMK[j], 1);
|
||
break;
|
||
case 0x0b:
|
||
write_m(CYMK[j], 1);
|
||
break;
|
||
case 0x0c:
|
||
write_m(CYMK[j], 1);
|
||
break;
|
||
case 0x0d:
|
||
write_m(CYMK[j], 1);
|
||
break;
|
||
case 0x0f:
|
||
write_m(CYMK[j], 1);
|
||
break;
|
||
|
||
case 0x10:
|
||
s[CYMK[j]] = 0;
|
||
break;
|
||
case 0x11:
|
||
s[CYMK[j]] = 0;
|
||
break;
|
||
case 0x12:
|
||
s[CYMK[j]] = 0;
|
||
break;
|
||
case 0x13:
|
||
s[CYMK[j]] = 0;
|
||
break;
|
||
case 0x15:
|
||
rsty(CYMK[j]);
|
||
break;
|
||
case 0x18:
|
||
write_m(CYMK[j], 0);
|
||
break;
|
||
case 0x19:
|
||
write_m(CYMK[j], 0);
|
||
break;
|
||
case 0x1a:
|
||
write_m(CYMK[j], 0);
|
||
break;
|
||
case 0x1b:
|
||
write_m(CYMK[j], 0);
|
||
break;
|
||
case 0x1c:
|
||
write_m(CYMK[j], 0);
|
||
break;
|
||
case 0x1d:
|
||
write_m(CYMK[j], 0);
|
||
break;
|
||
case 0x1f:
|
||
write_m(CYMK[j], 0);
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
ityn = 0;
|
||
|
||
if (EXTI_GetITStatus(EXTI_Line7) != RESET)
|
||
//判断中断发生来源
|
||
{
|
||
EXTI_ClearITPendingBit(EXTI_Line7);
|
||
if ((m8000[54] == 0) && (enix == 1) && (tscok == 1))
|
||
for (j = 0; j < ipust; j++)
|
||
{
|
||
if (IPBJ[j] >= 400)
|
||
if (IPBJ[j] <= 401)
|
||
{
|
||
if (down_lad == 0)
|
||
if (x[79] == 0)
|
||
for (i = IPBI[j]; i < 16000; i = i + 2)
|
||
{
|
||
j = (*fuc_b[lad[i + 1]])(i);
|
||
|
||
if (j != 253)
|
||
{
|
||
i = i + j;
|
||
}
|
||
else
|
||
{
|
||
ityn = 1;
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
if (ityn == 0)
|
||
{
|
||
if (CX4P)
|
||
d[CXD[4] + 1]++;
|
||
if (C239P == 1)
|
||
{
|
||
if (read_m(8200+sy239) == 0)
|
||
cth[sy239]++;
|
||
else
|
||
cth[sy239]--;
|
||
|
||
for (j = 0; j < 6; j++)
|
||
{
|
||
if (dhs_used[j] == 1)
|
||
if (CTX[j] == 39)
|
||
if (C251TS[j] == cth[sy239])
|
||
{
|
||
switch (CYM[j])
|
||
{
|
||
case 0x00:
|
||
s[CYMK[j]] = 1;
|
||
break;
|
||
case 0x01:
|
||
s[CYMK[j]] = 1;
|
||
break;
|
||
case 0x02:
|
||
s[CYMK[j]] = 1;
|
||
break;
|
||
case 0x03:
|
||
s[CYMK[j]] = 1;
|
||
break;
|
||
case 0x05:
|
||
sety(CYMK[j]);
|
||
break;
|
||
case 0x08:
|
||
write_m(CYMK[j], 1);
|
||
break;
|
||
case 0x09:
|
||
write_m(CYMK[j], 1);
|
||
break;
|
||
case 0x0a:
|
||
write_m(CYMK[j], 1);
|
||
break;
|
||
case 0x0b:
|
||
write_m(CYMK[j], 1);
|
||
break;
|
||
case 0x0c:
|
||
write_m(CYMK[j], 1);
|
||
break;
|
||
case 0x0d:
|
||
write_m(CYMK[j], 1);
|
||
break;
|
||
case 0x0f:
|
||
write_m(CYMK[j], 1);
|
||
break;
|
||
|
||
case 0x10:
|
||
s[CYMK[j]] = 0;
|
||
break;
|
||
case 0x11:
|
||
s[CYMK[j]] = 0;
|
||
break;
|
||
case 0x12:
|
||
s[CYMK[j]] = 0;
|
||
break;
|
||
case 0x13:
|
||
s[CYMK[j]] = 0;
|
||
break;
|
||
case 0x15:
|
||
rsty(CYMK[j]);
|
||
break;
|
||
case 0x18:
|
||
write_m(CYMK[j], 0);
|
||
break;
|
||
case 0x19:
|
||
write_m(CYMK[j], 0);
|
||
break;
|
||
case 0x1a:
|
||
write_m(CYMK[j], 0);
|
||
break;
|
||
case 0x1b:
|
||
write_m(CYMK[j], 0);
|
||
break;
|
||
case 0x1c:
|
||
write_m(CYMK[j], 0);
|
||
break;
|
||
case 0x1d:
|
||
write_m(CYMK[j], 0);
|
||
break;
|
||
case 0x1f:
|
||
write_m(CYMK[j], 0);
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
if (C248P == 1)
|
||
if ((sy248 == 48) || ((sy248 == 50) && (C250P == 1)))
|
||
{
|
||
cth[sy248]--;
|
||
for (j = 0; j < 6; j++)
|
||
{
|
||
if (dhs_used[j] == 1)
|
||
if (CTX[j] == 48)
|
||
if (C251TS[j] == cth[sy248])
|
||
{
|
||
switch (CYM[j])
|
||
{
|
||
case 0x00:
|
||
s[CYMK[j]] = 1;
|
||
break;
|
||
case 0x01:
|
||
s[CYMK[j]] = 1;
|
||
break;
|
||
case 0x02:
|
||
s[CYMK[j]] = 1;
|
||
break;
|
||
case 0x03:
|
||
s[CYMK[j]] = 1;
|
||
break;
|
||
case 0x05:
|
||
sety(CYMK[j]);
|
||
break;
|
||
case 0x08:
|
||
write_m(CYMK[j], 1);
|
||
break;
|
||
case 0x09:
|
||
write_m(CYMK[j], 1);
|
||
break;
|
||
case 0x0a:
|
||
write_m(CYMK[j], 1);
|
||
break;
|
||
case 0x0b:
|
||
write_m(CYMK[j], 1);
|
||
break;
|
||
case 0x0c:
|
||
write_m(CYMK[j], 1);
|
||
break;
|
||
case 0x0d:
|
||
write_m(CYMK[j], 1);
|
||
break;
|
||
case 0x0f:
|
||
write_m(CYMK[j], 1);
|
||
break;
|
||
|
||
case 0x10:
|
||
s[CYMK[j]] = 0;
|
||
break;
|
||
case 0x11:
|
||
s[CYMK[j]] = 0;
|
||
break;
|
||
case 0x12:
|
||
s[CYMK[j]] = 0;
|
||
break;
|
||
case 0x13:
|
||
s[CYMK[j]] = 0;
|
||
break;
|
||
case 0x15:
|
||
rsty(CYMK[j]);
|
||
break;
|
||
case 0x18:
|
||
write_m(CYMK[j], 0);
|
||
break;
|
||
case 0x19:
|
||
write_m(CYMK[j], 0);
|
||
break;
|
||
case 0x1a:
|
||
write_m(CYMK[j], 0);
|
||
break;
|
||
case 0x1b:
|
||
write_m(CYMK[j], 0);
|
||
break;
|
||
case 0x1c:
|
||
write_m(CYMK[j], 0);
|
||
break;
|
||
case 0x1d:
|
||
write_m(CYMK[j], 0);
|
||
break;
|
||
case 0x1f:
|
||
write_m(CYMK[j], 0);
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
/*******************************************************************************
|
||
* Function Name : TIM1_BRK_IRQHandler
|
||
* Description : This function handles TIM1 Break interrupt request.
|
||
* Input : None
|
||
* Output : None
|
||
* Return : None
|
||
*******************************************************************************/
|
||
void TIM1_BRK_IRQHandler(void){}
|
||
|
||
/*******************************************************************************
|
||
* Function Name : TIM1_UP_IRQHandler
|
||
* Description : This function handles TIM1 overflow and update interrupt
|
||
* request.
|
||
* Input : None
|
||
* Output : None
|
||
* Return : None
|
||
*******************************************************************************/
|
||
void TIM1_UP_IRQHandler(void){}
|
||
|
||
/*******************************************************************************
|
||
* Function Name : TIM1_TRG_COM_IRQHandler
|
||
* Description : This function handles TIM1 Trigger and commutation interrupts
|
||
* requests.
|
||
* Input : None
|
||
* Output : None
|
||
* Return : None
|
||
*******************************************************************************/
|
||
void TIM1_TRG_COM_IRQHandler(void){}
|
||
|
||
/*******************************************************************************
|
||
* Function Name : TIM1_CC_IRQHandler
|
||
* Description : This function handles TIM1 capture compare interrupt request.
|
||
* Input : None
|
||
* Output : None
|
||
* Return : None
|
||
*******************************************************************************/
|
||
void TIM1_CC_IRQHandler(void){}
|
||
|
||
/*******************************************************************************
|
||
* Function Name : TIM2_IRQHandler
|
||
* Description : This function handles TIM2 global interrupt request.
|
||
* Input : None
|
||
* Output : None
|
||
* Return : None
|
||
*******************************************************************************/
|
||
void TIM2_IRQHandler(void){
|
||
|
||
}
|
||
|
||
/*******************************************************************************
|
||
* Function Name : TIM3_IRQHandler
|
||
* Description : This function handles TIM3 global interrupt request.
|
||
* Input : None
|
||
* Output : None
|
||
* Return : None
|
||
*******************************************************************************/
|
||
void TIM3_IRQHandler(void)
|
||
{
|
||
/* Clear the interrupt pending flag */
|
||
if (pus_cnt0 > 65536)
|
||
{
|
||
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
|
||
pus_cnt0 = pus_cnt0 - 65536;
|
||
//if(pus_cnt0>0)
|
||
//{
|
||
if (pus_cnt0 > 65535)
|
||
TIM_TimeBaseStructure.TIM_Period = 0xffff;
|
||
else
|
||
TIM_TimeBaseStructure.TIM_Period = pus_cnt0;
|
||
TIM_TimeBaseStructure.TIM_Prescaler = 0x00;
|
||
TIM_TimeBaseStructure.TIM_ClockDivision = 0x0;
|
||
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
|
||
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); // Time base configuration
|
||
|
||
TIM_ETRClockMode2Config(TIM3, TIM_ExtTRGPSC_OFF,
|
||
TIM_ExtTRGPolarity_NonInverted, 0);
|
||
|
||
TIM_SetCounter(TIM3, 0);
|
||
TIM_ClearFlag(TIM3, TIM_FLAG_Update);
|
||
TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE);
|
||
TIM_Cmd(TIM3, ENABLE);
|
||
}
|
||
//}
|
||
else
|
||
{
|
||
TIM_ClearFlag(TIM3, TIM_FLAG_Update);
|
||
TIM_Cmd(TIM5, DISABLE);
|
||
TIM_Cmd(TIM3, DISABLE);
|
||
|
||
//GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
|
||
//GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
|
||
//GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
|
||
//GPIO_Init(GPIOA, &GPIO_InitStructure);
|
||
//GPIOA->BSRR = GPIO_Pin_2;
|
||
|
||
m8000[29] = 1;
|
||
u0en = 0;
|
||
write_m(8147, 0);
|
||
|
||
switch (dir0)
|
||
{
|
||
case 0:
|
||
ytemp[0] = 0;
|
||
break;
|
||
case 1:
|
||
ytemp[1] = 0;
|
||
break;
|
||
case 2:
|
||
ytemp[2] = 0;
|
||
break;
|
||
case 3:
|
||
ytemp[3] = 0;
|
||
break;
|
||
case 4:
|
||
ytemp[4] = 0;
|
||
break;
|
||
|
||
case 5:
|
||
ytemp[5] = 0;
|
||
break;
|
||
case 6:
|
||
ytemp[6] = 0;
|
||
break;
|
||
|
||
case 7:
|
||
ytemp[7] = 0;
|
||
break;
|
||
|
||
case 8:
|
||
ytemp[8] = 0;
|
||
break;
|
||
|
||
case 9:
|
||
ytemp[9] = 0;
|
||
break;
|
||
|
||
case 10:
|
||
ytemp[10] = 0;
|
||
break;
|
||
case 11:
|
||
ytemp[11] = 0;
|
||
break;
|
||
}
|
||
|
||
}
|
||
}
|
||
|
||
/*******************************************************************************
|
||
* Function Name : TIM4_IRQHandler
|
||
* Description : This function handles TIM4 global interrupt request.
|
||
* Input : None
|
||
* Output : None
|
||
* Return : None
|
||
*******************************************************************************/
|
||
void TIM4_IRQHandler(void)
|
||
{
|
||
|
||
if (pus_cnt1 > 65536)
|
||
{
|
||
// TIM4 clock source enable ETR MODE
|
||
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);
|
||
pus_cnt1 = pus_cnt1 - 65536;
|
||
if (pus_cnt1 > 65535)
|
||
TIM_TimeBaseStructure.TIM_Period = 0xffff;
|
||
else
|
||
TIM_TimeBaseStructure.TIM_Period = pus_cnt1;
|
||
|
||
TIM_TimeBaseStructure.TIM_Prescaler = 0x00;
|
||
TIM_TimeBaseStructure.TIM_ClockDivision = 0x0;
|
||
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
|
||
TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure); // Time base configuration
|
||
|
||
TIM_ETRClockMode2Config(TIM4, TIM_ExtTRGPSC_OFF,
|
||
TIM_ExtTRGPolarity_NonInverted, 0);
|
||
|
||
TIM_SetCounter(TIM4, 0);
|
||
TIM_ClearFlag(TIM4, TIM_FLAG_Update);
|
||
TIM_ITConfig(TIM4, TIM_IT_Update, ENABLE);
|
||
TIM_Cmd(TIM4, ENABLE);
|
||
}
|
||
else
|
||
{
|
||
TIM_ClearFlag(TIM4, TIM_FLAG_Update);
|
||
TIM_Cmd(TIM8, DISABLE);
|
||
TIM_Cmd(TIM4, DISABLE);
|
||
m8000[29] = 1;
|
||
u1en = 0;
|
||
write_m(8148, 0);
|
||
|
||
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
|
||
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
|
||
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
|
||
GPIO_Init(GPIOC, &GPIO_InitStructure);
|
||
GPIOC->BSRR = GPIO_Pin_8;
|
||
|
||
|
||
switch (dir1)
|
||
{
|
||
case 0:
|
||
ytemp[0] = 0;
|
||
break;
|
||
case 1:
|
||
ytemp[1] = 0;
|
||
break;
|
||
case 2:
|
||
ytemp[2] = 0;
|
||
break;
|
||
case 3:
|
||
ytemp[3] = 0;
|
||
break;
|
||
case 4:
|
||
ytemp[4] = 0;
|
||
break;
|
||
|
||
case 5:
|
||
ytemp[5] = 0;
|
||
break;
|
||
case 6:
|
||
ytemp[6] = 0;
|
||
break;
|
||
|
||
case 7:
|
||
ytemp[7] = 0;
|
||
break;
|
||
|
||
case 8:
|
||
ytemp[8] = 0;
|
||
break;
|
||
|
||
case 9:
|
||
ytemp[9] = 0;
|
||
break;
|
||
|
||
case 10:
|
||
ytemp[10] = 0;
|
||
break;
|
||
case 11:
|
||
ytemp[11] = 0;
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
|
||
/*******************************************************************************
|
||
* Function Name : I2C1_EV_IRQHandler
|
||
* Description : This function handles I2C1 Event interrupt request.
|
||
* Input : None
|
||
* Output : None
|
||
* Return : None
|
||
*******************************************************************************/
|
||
void I2C1_EV_IRQHandler(void){}
|
||
|
||
/*******************************************************************************
|
||
* Function Name : I2C1_ER_IRQHandler
|
||
* Description : This function handles I2C1 Error interrupt request.
|
||
* Input : None
|
||
* Output : None
|
||
* Return : None
|
||
*******************************************************************************/
|
||
void I2C1_ER_IRQHandler(void){}
|
||
|
||
/*******************************************************************************
|
||
* Function Name : I2C2_EV_IRQHandler
|
||
* Description : This function handles I2C2 Event interrupt request.
|
||
* Input : None
|
||
* Output : None
|
||
* Return : None
|
||
*******************************************************************************/
|
||
void I2C2_EV_IRQHandler(void){}
|
||
|
||
/*******************************************************************************
|
||
* Function Name : I2C2_ER_IRQHandler
|
||
* Description : This function handles I2C2 Error interrupt request.
|
||
* Input : None
|
||
* Output : None
|
||
* Return : None
|
||
*******************************************************************************/
|
||
void I2C2_ER_IRQHandler(void){}
|
||
|
||
/*******************************************************************************
|
||
* Function Name : SPI1_IRQHandler
|
||
* Description : This function handles SPI1 global interrupt request.
|
||
* Input : None
|
||
* Output : None
|
||
* Return : None
|
||
*******************************************************************************/
|
||
void SPI1_IRQHandler(void){}
|
||
|
||
/*******************************************************************************
|
||
* Function Name : SPI2_IRQHandler
|
||
* Description : This function handles SPI2 global interrupt request.
|
||
* Input : None
|
||
* Output : None
|
||
* Return : None
|
||
*******************************************************************************/
|
||
void SPI2_IRQHandler(void){}
|
||
|
||
/*******************************************************************************
|
||
* Function Name : USART1_IRQHandler
|
||
* Description : This function handles USART1 global interrupt request.
|
||
* Input : None
|
||
* Output : None
|
||
* Return : None
|
||
*******************************************************************************/
|
||
void USART1_IRQHandler(void){}
|
||
|
||
/*******************************************************************************
|
||
* Function Name : USART2_IRQHandler
|
||
* Description : This function handles USART2 global interrupt request.
|
||
* Input : None
|
||
* Output : None
|
||
* Return : None
|
||
*******************************************************************************/
|
||
void USART2_IRQHandler(void){
|
||
|
||
}
|
||
|
||
/*******************************************************************************
|
||
* Function Name : USART3_IRQHandler
|
||
* Description : This function handles USART3 global interrupt request.
|
||
* Input : None
|
||
* Output : None
|
||
* Return : None
|
||
*******************************************************************************/
|
||
void USART3_IRQHandler(void)
|
||
{
|
||
u8 P2, i;
|
||
if (USART_GetITStatus(USART3, USART_IT_RXNE) != RESET)
|
||
{
|
||
/* Read one byte from the receive data register */
|
||
//RxBuffer1[RxCounter1++] = 0x7f&(USART_ReceiveData(USART1));
|
||
if ((m8000[80] == 0) || (down_lad == 1))
|
||
{
|
||
P2 = 0x7f &(USART_ReceiveData(USART3));
|
||
if (P2 == 0X05)
|
||
{
|
||
//RE1;
|
||
TxBuffer3[0] = 0X06;
|
||
Send3_Size = 1;
|
||
TxCounter3 = 0;
|
||
u485 = 5;
|
||
} //固定协议
|
||
|
||
if (P2 == 0X02)
|
||
{
|
||
vk3 = 1;
|
||
for (i = 1; i < 150; i++)
|
||
v3[i] = 0;
|
||
}
|
||
if (P2 != 0X02)
|
||
if (P2 != 0X05)
|
||
{
|
||
if (vk3 > 195)
|
||
vk3 = 0;
|
||
v3[vk3] = P2;
|
||
vk3++; //02
|
||
if (vk3 >= 3)
|
||
if (v3[vk3 - 3] == 0x03)
|
||
ST_Scan3V = 1;
|
||
//download ladder code
|
||
}
|
||
}
|
||
else
|
||
{
|
||
CMUT = 0;
|
||
v3[vk3] = USART_ReceiveData(USART3);
|
||
vk3++;
|
||
if (vk3 > 10)
|
||
vk3 = 0;
|
||
}
|
||
|
||
}
|
||
if (USART_GetITStatus(USART3, USART_IT_TXE) != RESET)
|
||
{
|
||
/* Write one byte to the transmit data register */
|
||
USART_SendData(USART3, TxBuffer3[TxCounter3++]);
|
||
|
||
if (TxCounter3 == Send3_Size)
|
||
{
|
||
/* Disable the USART1 Transmit interrupt */
|
||
USART_ITConfig(USART3, USART_IT_TXE, DISABLE);
|
||
u485 = 10;
|
||
}
|
||
}
|
||
}
|
||
|
||
/*******************************************************************************
|
||
* Function Name : EXTI15_10_IRQHandler
|
||
* Description : This function handles External lines 15 to 10 interrupt request.
|
||
* Input : None
|
||
* Output : None
|
||
* Return : None
|
||
*******************************************************************************/
|
||
void EXTI15_10_IRQHandler(void){}
|
||
|
||
/*******************************************************************************
|
||
* Function Name : RTCAlarm_IRQHandler
|
||
* Description : This function handles RTC Alarm interrupt request.
|
||
* Input : None
|
||
* Output : None
|
||
* Return : None
|
||
*******************************************************************************/
|
||
void RTCAlarm_IRQHandler(void){}
|
||
|
||
/*******************************************************************************
|
||
* Function Name : USBWakeUp_IRQHandler
|
||
* Description : This function handles USB WakeUp interrupt request.
|
||
* Input : None
|
||
* Output : None
|
||
* Return : None
|
||
*******************************************************************************/
|
||
void USBWakeUp_IRQHandler(void){}
|
||
|
||
/*******************************************************************************
|
||
* Function Name : TIM8_BRK_IRQHandler
|
||
* Description : This function handles TIM8 Break interrupt request.
|
||
* Input : None
|
||
* Output : None
|
||
* Return : None
|
||
*******************************************************************************/
|
||
void TIM8_BRK_IRQHandler(void){}
|
||
|
||
/*******************************************************************************
|
||
* Function Name : TIM8_UP_IRQHandler
|
||
* Description : This function handles TIM8 overflow and update interrupt
|
||
* request.
|
||
* Input : None
|
||
* Output : None
|
||
* Return : None
|
||
*******************************************************************************/
|
||
void TIM8_UP_IRQHandler(void){}
|
||
|
||
/*******************************************************************************
|
||
* Function Name : TIM8_TRG_COM_IRQHandler
|
||
* Description : This function handles TIM8 Trigger and commutation interrupts
|
||
* requests.
|
||
* Input : None
|
||
* Output : None
|
||
* Return : None
|
||
*******************************************************************************/
|
||
void TIM8_TRG_COM_IRQHandler(void){}
|
||
|
||
/*******************************************************************************
|
||
* Function Name : TIM8_CC_IRQHandler
|
||
* Description : This function handles TIM8 capture compare interrupt request.
|
||
* Input : None
|
||
* Output : None
|
||
* Return : None
|
||
*******************************************************************************/
|
||
void TIM8_CC_IRQHandler(void)
|
||
{
|
||
TIM8->SR &= ~2; // 清除中断标志(不做判断提高效率)
|
||
if (pus1 == 1)
|
||
{
|
||
TIM_Cmd(TIM8, DISABLE);
|
||
m8000[29] = 1;
|
||
u1en = 0;
|
||
write_m(8148, 0);
|
||
}
|
||
else
|
||
if (ps2 == 1)
|
||
{
|
||
ps2 = 0;
|
||
|
||
TIM_TimeBaseStructure.TIM_Prescaler = div_cps2;
|
||
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
|
||
TIM_TimeBaseStructure.TIM_Period = temps2;
|
||
|
||
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
|
||
TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;
|
||
|
||
TIM_TimeBaseInit(TIM8, &TIM_TimeBaseStructure);
|
||
temps2 = (temps2 + 1) / 2;
|
||
// Channel 1, 2,3 and 4 Configuration in PWM mode
|
||
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;
|
||
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
|
||
TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Disable;
|
||
TIM_OCInitStructure.TIM_Pulse = temps2;
|
||
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
|
||
//TIM_OCPolarity_Low;
|
||
TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_High;
|
||
TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set;
|
||
//TIM_OCIdleState_Set;
|
||
TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCIdleState_Reset;
|
||
|
||
TIM_OC3Init(TIM8, &TIM_OCInitStructure);
|
||
|
||
}
|
||
//TIM8->DIER = 0x00;
|
||
}
|
||
|
||
/*******************************************************************************
|
||
* Function Name : ADC3_IRQHandler
|
||
* Description : This function handles ADC3 global interrupt request.
|
||
* Input : None
|
||
* Output : None
|
||
* Return : None
|
||
*******************************************************************************/
|
||
void ADC3_IRQHandler(void){}
|
||
|
||
/*******************************************************************************
|
||
* Function Name : FSMC_IRQHandler
|
||
* Description : This function handles FSMC global interrupt request.
|
||
* Input : None
|
||
* Output : None
|
||
* Return : None
|
||
*******************************************************************************/
|
||
void FSMC_IRQHandler(void){}
|
||
|
||
/*******************************************************************************
|
||
* Function Name : SDIO_IRQHandler
|
||
* Description : This function handles SDIO global interrupt request.
|
||
* Input : None
|
||
* Output : None
|
||
* Return : None
|
||
*******************************************************************************/
|
||
void SDIO_IRQHandler(void){}
|
||
|
||
/*******************************************************************************
|
||
* Function Name : TIM5_IRQHandler
|
||
* Description : This function handles TIM5 global interrupt request.
|
||
* Input : None
|
||
* Output : None
|
||
* Return : None
|
||
*******************************************************************************/
|
||
void TIM5_IRQHandler(void)
|
||
{
|
||
TIM_ClearITPendingBit(TIM5, TIM_IT_CC2);
|
||
|
||
if (pus0 == 1)
|
||
{
|
||
TIM_Cmd(TIM5, DISABLE);
|
||
TIM_DeInit(TIM5);
|
||
m8000[29] = 1;
|
||
u0en = 0;
|
||
write_m(8147, 0);
|
||
}
|
||
else
|
||
{
|
||
if (ps1 == 1)
|
||
{
|
||
ps1 = 0;
|
||
TIM_TimeBaseStructure.TIM_Period = temps1;
|
||
TIM_TimeBaseStructure.TIM_Prescaler = div_cps1;
|
||
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
|
||
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Down;
|
||
|
||
TIM_TimeBaseInit(TIM5, &TIM_TimeBaseStructure);
|
||
|
||
// PWM1 Mode configuration: Channel3
|
||
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
|
||
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
|
||
TIM_OCInitStructure.TIM_Pulse = temps1 / 2;
|
||
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
|
||
|
||
TIM_OC3Init(TIM5, &TIM_OCInitStructure);
|
||
|
||
TIM_OC3PreloadConfig(TIM5, TIM_OCPreload_Enable);
|
||
|
||
|
||
}
|
||
}
|
||
|
||
TIM_ITConfig(TIM5, TIM_IT_CC2, DISABLE);
|
||
}
|
||
|
||
/*******************************************************************************
|
||
* Function Name : SPI3_IRQHandler
|
||
* Description : This function handles SPI3 global interrupt request.
|
||
* Input : None
|
||
* Output : None
|
||
* Return : None
|
||
*******************************************************************************/
|
||
void SPI3_IRQHandler(void){}
|
||
|
||
/*******************************************************************************
|
||
* Function Name : UART4_IRQHandler
|
||
* Description : This function handles UART4 global interrupt request.
|
||
* Input : None
|
||
* Output : None
|
||
* Return : None
|
||
*******************************************************************************/
|
||
void UART4_IRQHandler(void){}
|
||
|
||
/*******************************************************************************
|
||
* Function Name : UART5_IRQHandler
|
||
* Description : This function handles UART5 global interrupt request.
|
||
* Input : None
|
||
* Output : None
|
||
* Return : None
|
||
*******************************************************************************/
|
||
void UART5_IRQHandler(void){}
|
||
|
||
/*******************************************************************************
|
||
* Function Name : TIM6_IRQHandler
|
||
* Description : This function handles TIM6 global interrupt request.
|
||
* Input : None
|
||
* Output : None
|
||
* Return : None
|
||
*******************************************************************************/
|
||
void TIM6_IRQHandler(void){}
|
||
|
||
/*******************************************************************************
|
||
* Function Name : TIM7_IRQHandler
|
||
* Description : This function handles TIM7 global interrupt request.
|
||
* Input : None
|
||
* Output : None
|
||
* Return : None
|
||
*******************************************************************************/
|
||
void TIM7_IRQHandler(void){}
|
||
|
||
/*******************************************************************************
|
||
* Function Name : DMA2_Channel1_IRQHandler
|
||
* Description : This function handles DMA2 Channel 1 interrupt request.
|
||
* Input : None
|
||
* Output : None
|
||
* Return : None
|
||
*******************************************************************************/
|
||
void DMA2_Channel1_IRQHandler(void){}
|
||
|
||
/*******************************************************************************
|
||
* Function Name : DMA2_Channel2_IRQHandler
|
||
* Description : This function handles DMA2 Channel 2 interrupt request.
|
||
* Input : None
|
||
* Output : None
|
||
* Return : None
|
||
*******************************************************************************/
|
||
void DMA2_Channel2_IRQHandler(void){}
|
||
|
||
/*******************************************************************************
|
||
* Function Name : DMA2_Channel3_IRQHandler
|
||
* Description : This function handles DMA2 Channel 3 interrupt request.
|
||
* Input : None
|
||
* Output : None
|
||
* Return : None
|
||
*******************************************************************************/
|
||
void DMA2_Channel3_IRQHandler(void){}
|
||
|
||
/*******************************************************************************
|
||
* Function Name : DMA2_Channel4_5_IRQHandler
|
||
* Description : This function handles DMA2 Channel 4 and DMA2 Channel 5
|
||
* interrupt request.
|
||
* Input : None
|
||
* Output : None
|
||
* Return : None
|
||
*******************************************************************************/
|
||
void DMA2_Channel4_5_IRQHandler(void){}
|
||
|
||
/******************* (C) COPYRIGHT 2008 STMicroelectronics *****END OF
|
||
FILE****/
|