HS550/ECU_BOOT/boot_main.c

235 lines
7.3 KiB
C
Raw Normal View History

2024-05-22 23:21:15 +08:00
/***********************************************************************************************************************
* DISCLAIMER
* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products.
* No other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all
* applicable laws, including copyright laws.
* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIESREGARDING THIS SOFTWARE, WHETHER EXPRESS, IMPLIED
* OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY
* LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE FOR ANY DIRECT,
* INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR
* ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability
* of this software. By using this software, you agree to the additional terms and conditions found by accessing the
* following link:
* http://www.renesas.com/disclaimer
*
* Copyright (C) 2012, 2015 Renesas Electronics Corporation. All rights reserved.
***********************************************************************************************************************/
/***********************************************************************************************************************
* File Name : r_main.c
* Version : CodeGenerator for RL78/F13 V2.02.01.03 [30 Jan 2015]
* Device(s) : R5F10BLG
* Tool-Chain : CA78K0R
* Description : This file implements main function.
* Creation Date: 2017/7/4
***********************************************************************************************************************/
/***********************************************************************************************************************
Pragma directive
***********************************************************************************************************************/
/* Start user code for pragma. Do not edit comment generated here */
/* End user code. Do not edit comment generated here */
/***********************************************************************************************************************
Includes
***********************************************************************************************************************/
#include "boot_macrodriver.h"
#include "boot_cgc.h"
#include "boot_port.h"
#include "boot_timer.h"
#include "boot_wdt.h"
/* Start user code for include. Do not edit comment generated here */
#include "r_rl78_can_drv.h"
#include "r_rl78_can_sfr.h"
#include "RL78_RCAN.h"
#include "boot_can_user.h"
#include "api.h"
#include "Dcm_extern.h"
#include "pfdl_user.h"
#include "CanTp.h"
#include "ftable.h"
#include "boot_adc.h"
#include "Dcm_App.h"
/* End user code. Do not edit comment generated here */
#include "boot_userdefine.h"
#include "CanTp_Cfg.h"
/***********************************************************************************************************************
Global variables and functions
***********************************************************************************************************************/
/* Start user code for global. Do not edit comment generated here */
#pragma section @@DATA KAM_SEG
KamData_t KamData;
#pragma section @@DATA @@DATA
#pragma section @@DATA FslSeg
uint8_t fsl_code_buf[0x480];
#pragma section @@DATA @@DATA
uint16 ADval_Power;
uint16 AdcSample(uint8 ch) ;
void AdScan(void);
/* End user code. Do not edit comment generated here */
void Boot_MAIN_UserInit(void);
void IGN_Scan(void);
extern unsigned char flag_100ms;
unsigned char time,IGN_State;
#define CAN_STB P1.2
/***********************************************************************************************************************
* Function Name: main
* Description : This function implements main function.
* Arguments : None
* Return Value : None
***********************************************************************************************************************/
void boot_main(void)
{
uint8 i;
Boot_MAIN_UserInit();
/* Start user code. Do not edit comment generated here */
Boot_TAU0_Channel4_Start();
R_ADC_Start();
R_ADC_Set_OperationOn();
//P3.0 = 1; // <20><><EFBFBD><EFBFBD>AD_Bat
CAN_STB = 0;
if(KamData.boot_enable != RPRGRM_REQ_VALID)
{
if((GetAppValid() == APP_VALID)&&(GetAppEndValid() == APP_VALID))
{
DI();
Boot_TAU0_Channel4_Stop();
KamData.boot_enable = 0;
KamData.RunAir = RUN_IN_APP;
while(1)
{
((__far void(*)(void))(*(__far unsigned long *)(FLASH_TABLE)))();
}
}
else
{
KamData.RunAir = RUN_IN_BOOT;
InitCanTp_Parameter();
InitDcm_Parameter();
Boot_CAN_Pin_init();
CanUserInit();
BootDefaultSessionDeal();
}
}
else
{
KamData.RunAir = RUN_IN_BOOT;
InitCanTp_Parameter();
InitDcm_Parameter();
Boot_CAN_Pin_init();
CanUserInit();
BootProgramSessionDeal();
}
#if 0
if(KamData.boot_enable == RPRGRM_REQ_VALID)
{
SetCanTp_TxBuffer(KamData.RspData[0],&KamData.RspData[1]);
}
#endif
if(KamData.AckReq == ACK_REQ)
{
TransmitCAN_Message(CANTP_RESP_CANID,8,&KamData.RspData[0]);
KamData.AckReq = 0;
}
while (1U)
{
Boot_WDT_Restart();
MngDcm_1ms_Sever();
i++;
if(i>100)
{
AdScan();
IGN_Scan();
i=0;
}
}
/* End user code. Do not edit comment generated here */
}
/***********************************************************************************************************************
* Function Name: Boot_MAIN_UserInit
* Description : This function adds user code before implementing main function.
* Arguments : None
* Return Value : None
***********************************************************************************************************************/
void Boot_MAIN_UserInit(void)
{
/* Start user code. Do not edit comment generated here */
KamData.RstSrc = RESF;
if(KamData.RstSrc != WDT_RST)
{
KamData.boot_enable = 0;
KamData.RunAir = RUN_IN_BOOT;
KamData.AckReq = 0;
}
EI();
/* End user code. Do not edit comment generated here */
}
/* Start user code for adding. Do not edit comment generated here */
void Boot_CAN_Pin_init(void)
{
PM1.0 = 0;
P1.0 = 1;
PM1.1 = 1;
//PM1.3 = 0;//OUTPUT
CAN_STB = 0;
}
uint16 AdcSample(uint8 ch)
{
uint16 u2Temp;
ADS = ch; //ģ<><C4A3>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD>
ADCS = 1; // A/Dת<44><D7AA><EFBFBD><EFBFBD><EFBFBD>еĿ<D0B5><C4BF>ƣ<EFBFBD><31><CEAA><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
while(!ADIF); //<2F>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־
u2Temp = ADCR>>6; //10 λ A/D ת<><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD>
ADCS = 0;
ADIF = 0;
return u2Temp;
}
void AdScan(void)
{
static uint8 FilterCounter;
static uint16 AD_temp[5];
uint8 i;
uint16 AD_cal=0;
AD_temp[FilterCounter] = AdcSample(0);
FilterCounter++;
if(FilterCounter >= 5)FilterCounter=0;
for(i=0;i<5;i++)
{
AD_cal += AD_temp[i];
}
//ADval_Power = AD_cal/5;
ADval_Power = 350;
}
void IGN_Scan(void)
{
/*
if(P1.7 == 1)
{
IGN_State = 0;
}
else
{
IGN_State = 1;
}
*/
IGN_State = 1;
}
/* End user code. Do not edit comment generated here */