Commit 74bd21fb authored by 时昊's avatar 时昊

首次上传

parents
/LE21/bin
/LE21/LE21_Data
/.vscode
OPEN source 0 0 53 99
Source < attributes TOOLTIP on,TOOLTIP_FORMAT signed,TOOLTIP_MODE details,FREEZE off,MARKS off
OPEN assembly 60 0 40 31
Assembly < attributes ADR on,CODE off,ABSADR on,SYMB off,FORMAT Auto,FREEZE off,TOPPC 0xC000
OPEN procedure 24 24 60 37
Procedure < attributes VALUES on,TYPES off
OPEN register 60 31 40 25
Register < attributes FORMAT AUTO,COMPLEMENT None
OPEN memory 60 56 40 22
Memory < attributes FORMAT hex,COMPLEMENT None,WORD 1,ASC on,ADR on,MODE automatic,UPDATERATE 10,SHOW_ADDRESSSPACE 0,ADDRESS 0x80
OPEN data 54 0 46 100
Data:1 < attributes SCOPE global,COMPLEMENT None,FORMAT Symb,MODE periodical,SORT NotSort,UPDATERATE 1,NAMEWIDTH 16
OPEN data 43 18 60 22
Data:2 < attributes SCOPE local,COMPLEMENT None,FORMAT Symb,MODE automatic,SORT NotSort,UPDATERATE 10,NAMEWIDTH 16
OPEN command 60 78 40 22
Command < attributes CACHESIZE 1000
bckcolor 50331647
font 'Courier New' 9 BLACK
AUTOSIZE on
ACTIVATE "Command" "Register" "Assembly" "Memory" "Data:2" "Procedure" "Source" "Data:1"
This diff is collapsed.
Data:1 < ADDXPR ONLY_ADD_IF_NEW "PageInfor"
Data:1 < ADDXPR ONLY_ADD_IF_NEW "PageInfor"
#ifndef LED_DRIVER_H__
#define LED_DRIVER_H__
#include "Simulated_IIC_2_Master.h"
#include "Include.h"
/*
说明:
该LDE驱动仅支持AW21036。 V1.5
*/
#define LED_DRIVER_PLATFORM_16BIT 0U
#define LED_DRIVER_PLATFORM_32BIT 1U
#define LED_DRIVER_PLATFORM_SELECT LED_DRIVER_PLATFORM_32BIT
#if (LED_DRIVER_PLATFORM_SELECT == LED_DRIVER_PLATFORM_16BIT)
typedef unsigned char LED_Driver_uint8_t;
typedef unsigned int LED_Driver_uint16_t;
typedef unsigned long LED_Driver_uint32_t;
#define LED_DRIVER_INT_SIZE 2U
#define LED_DRIVER_ENUM_SIZE 2U
#elif (LED_DRIVER_PLATFORM_SELECT == LED_DRIVER_PLATFORM_32BIT)
typedef unsigned char LED_Driver_uint8_t;
typedef unsigned short LED_Driver_uint16_t;
typedef unsigned int LED_Driver_uint32_t;
#define LED_DRIVER_INT_SIZE 4U
#define LED_DRIVER_ENUM_SIZE 4U
#else
#error platform select error!!!
#endif
/*-------------------------------------------------------------------------------------------*/
typedef void (*LEDDriver_ShutdownPin_Set)(LED_Driver_uint8_t u8Level);
typedef void (*LEDDriver_Feed_Dog)(void);
typedef void (*LEDDriver_Delay_10us)(LED_Driver_uint16_t u16Count);
typedef struct
{
/*芯片数量*/
LED_Driver_uint8_t u8LEDDriverChipNum;
/*shutdown 引脚控制函数*/
LEDDriver_ShutdownPin_Set pfnLEDDriverShutdownPinSetCallBack;
/*喂狗函数*/
LEDDriver_Feed_Dog pfnLEDDriverFeedDogCallBack;
/*10us 延时函数*/
LEDDriver_Delay_10us pfnLEDDriverDelay10usCallBack;
/*3236芯片地址数组*/
const LED_Driver_uint8_t *pu8IS31ChipAddress;
/*21036芯片地址数组*/
const LED_Driver_uint8_t *pu8AW21036ChipAddress;
/*open threshold 0:0.1V 1:0.2V other :forbid */
LED_Driver_uint8_t u8LEDDriverOpenThreshold;
/*short threshold 0:VDD-1V 1:VDD-0.5V other :forbid */
LED_Driver_uint8_t u8LEDDriverShortThreshold;
} LED_Driver_Par_st_t;
/*-------------------------------------------------------------------------------------------*/
/*芯片数量*/
#define LED_DRIVER_CHIP_NUM 2U
#define LED_DRIVER_FIXED_PART_LEN 40U
#define LED_DRIVER_VARIABLE_PART_LEN 36U
#define LED_DRIVER_RAM_LEN (LED_DRIVER_CHIP_NUM * (LED_DRIVER_VARIABLE_PART_LEN + 5U) * 2U + LED_DRIVER_FIXED_PART_LEN)
/*21036 芯片地址 */
#define AW21036_CHIP1_ADDRESS 0X68U /* AD_PIN~GND*/
#define AW21036_CHIP2_ADDRESS 0X6AU /* AD_PIN~VDD*/
#define AW21036_CHIP3_ADDRESS 0X6CU /* AD_PIN~SCL*/
#define AW21036_CHIP4_ADDRESS 0X6EU /* AD_PIN~SDA*/
/*3236 芯片地址 */
#define IS31_CHIP1_ADDRESS 0X78U /* AD_PIN~GND*/
#define IS31_CHIP2_ADDRESS 0X7EU /* AD_PIN~VDD*/
#define IS31_CHIP3_ADDRESS 0X7AU /* AD_PIN~SCL*/
#define IS31_CHIP4_ADDRESS 0X7CU /* AD_PIN~SDA*/
/*-------------------------------------------------------------------------------------------*/
/*--------------------------------------------------------------------------------------*/
/*-------------以下为提供的接口函数--------------------------------------*/
/*上30电调用,唤醒时调用*/
extern void LED_Driver_Init_KL30(LED_Driver_uint8_t *pu8LEDDriverRamData, LED_Driver_Par_st_t *pstLEDInitPar);
/*休眠时调用*/
extern void LED_Driver_Init_Sleep(void);
/*主函数内实时调用*/
extern void LED_Driver_Service(void);
/*50ms调用一次*/
extern void LED_Driver_Scan_Refresh(void);
/*需要立即执行完成时调用,初始化完之后调用*/
extern void LED_Driver_Service_Immediate(void);
/*初始建议1S调用一次。如发生故障时恢复较慢,可更改为500ms,200ms,100ms均可。不建议更低*/
extern void LED_Driver_Work_Check(void);
/*具体操作函数,亮度设置
u8Chip:选择操作的芯片 0~~(LED_DRIVER_CHIP_NUM-1U)
u8Channel: 选择操作的通道 0~~35
u8Brightness:选择亮度 0:熄灭 , 255:最亮 。(根据具体灯选择一个合适的数值)
*/
extern void LED_Driver_Channel_Set(LED_Driver_uint8_t u8Chip, LED_Driver_uint8_t u8Channel, LED_Driver_uint8_t u8Brightness);
/*获取亮度,参数同上*/
extern LED_Driver_uint8_t LED_Driver_Channel_Get(LED_Driver_uint8_t u8Chip, LED_Driver_uint8_t u8Channel);
/*获取通道故障检测结果
u8Chip:读取哪个芯片
u8ChannelGroup:8个通道为一组。
0:通道1--通道8
1:通道9--通道16
2:通道17--通道24
3:通道25--通道32
4:通道33--通道36
u8FaultType:读取哪种故障类型。0:短路 1:开路
返回值:每个bit表示一个通道,数值0表示对应故障未发生,1表示对应故障已发生。
*/
extern LED_Driver_uint8_t LED_Driver_Channel_Fault_Get(LED_Driver_uint8_t u8Chip, LED_Driver_uint8_t u8ChannelGroup, LED_Driver_uint8_t u8FaultType);
/*获取芯片当前状态 1表示已经进入休眠状态,0还没进入*/
extern LED_Driver_uint8_t LED_Driver_Status_Get(void);
/*-----------------------------------------------------------*/
extern LED_Driver_uint8_t u8LEDDriverRamData[LED_DRIVER_RAM_LEN];
extern const LED_Driver_uint8_t u8IS31ChipAddress[LED_DRIVER_CHIP_NUM];
extern const LED_Driver_uint8_t u8AW21036ChipAddress[LED_DRIVER_CHIP_NUM];
extern INT8U LedDriveCheck_Timer;
extern void LED_Driver_WorkCheck( void );
#endif
#include "LED_Driver.h"
#include "GPIO.h"
#include "Include.h"
/*如果条件允许将u8LEDDriverRamData定义在休眠唤醒后不会被清空的RAM区域*/
LED_Driver_uint8_t u8LEDDriverRamData[LED_DRIVER_RAM_LEN];
INT8U LedDriveCheck_Timer;
const LED_Driver_uint8_t u8AW21036ChipAddress[LED_DRIVER_CHIP_NUM] = {
#if (LED_DRIVER_CHIP_NUM >= 1U)
AW21036_CHIP1_ADDRESS,
#endif
#if (LED_DRIVER_CHIP_NUM >= 2U)
AW21036_CHIP2_ADDRESS,
#endif
#if (LED_DRIVER_CHIP_NUM >= 3U)
AW21036_CHIP3_ADDRESS,
#endif
#if (LED_DRIVER_CHIP_NUM >= 4U)
AW21036_CHIP4_ADDRESS,
#endif
};
const LED_Driver_uint8_t u8IS31ChipAddress[LED_DRIVER_CHIP_NUM] = {
#if (LED_DRIVER_CHIP_NUM >= 1U)
IS31_CHIP1_ADDRESS,
#endif
#if (LED_DRIVER_CHIP_NUM >= 2U)
IS31_CHIP2_ADDRESS,
#endif
#if (LED_DRIVER_CHIP_NUM >= 3U)
IS31_CHIP3_ADDRESS,
#endif
#if (LED_DRIVER_CHIP_NUM >= 4U)
IS31_CHIP4_ADDRESS,
#endif
};
/*设置shutdown引脚*/
void LED_Driver_Shutdown_Pin_Set(LED_Driver_uint8_t u8Level)
{
SDB_LED_DRIVER = u8Level;
}
/****************初始化函数调用示例*************/
void LED_Driver_Init_Example(void)
{
LED_Driver_Par_st_t stLEDDriverParInit;
/*芯片数量*/
stLEDDriverParInit.u8LEDDriverChipNum = LED_DRIVER_CHIP_NUM;
/*shutdown 引脚控制函数*/
stLEDDriverParInit.pfnLEDDriverShutdownPinSetCallBack = LED_Driver_Shutdown_Pin_Set;
/*喂狗函数*/
stLEDDriverParInit.pfnLEDDriverFeedDogCallBack = WDT_Reset_Service; /*根据项目需调整*/
/*10us 延时函数*/
stLEDDriverParInit.pfnLEDDriverDelay10usCallBack = Delay_10US; /*根据项目需调整*/
/*3236芯片地址数组*/
stLEDDriverParInit.pu8IS31ChipAddress = u8IS31ChipAddress;
/*21036芯片地址数组*/
stLEDDriverParInit.pu8AW21036ChipAddress = u8AW21036ChipAddress;
stLEDDriverParInit.u8LEDDriverOpenThreshold = 0;
stLEDDriverParInit.u8LEDDriverShortThreshold = 0;
LED_Driver_Init_KL30(u8LEDDriverRamData, &stLEDDriverParInit);
/*唤醒初始化同样*/
}
void LED_Driver_WorkCheck( void )
{
if(LedDriveCheck_Timer < 10)
{
LedDriveCheck_Timer++ ;
}
else
{
LED_Driver_Work_Check();
LedDriveCheck_Timer = 0 ;
}
}
\ No newline at end of file
#ifndef LED_DRIVER_INTERFACE_H__
#define LED_DRIVER_INTERFACE_H__
/*-----------------------------------------------------------*/
extern void LED_Driver_Init_Example(void);
#endif
/******************************************************************************
文 件 名:Simulated_IIC_Master.c
功能描述:IO端口模拟的IIC(I2C)主机函数库文件
作 者:张暄
版 本:V1.0
日 期:2016.12.21
******************************************************************************/
#include "Include.h"
#include "Simulated_IIC_2_Master.h"
//#include "AC78xx_System.h"
uint8_t u8SimulatedIIC2ReceivedACK;
/******************************************************************************
函数名:IIC_Init
功 能:初始化IIC总线
参 数:无
返回值:无
******************************************************************************/
void Simulated_IIC_2_Init(void)
{
SIMULATED_IIC_2_SCL_DIR = 0; //SCL被设置为输入,IO口为高阻状态,总线上SCL信号由上拉电阻拉高,此时SCL = 1
Simulated_IIC_2_Delay();
Simulated_IIC_2_Delay();
SIMULATED_IIC_2_SDA_DIR = 0; //SDA被设置为输入,IO口为高阻状态,总线上SDA信号由上拉电阻拉高,此时SDA = 1
Simulated_IIC_2_Delay();
Simulated_IIC_2_Delay();
u8SimulatedIIC2ReceivedACK = SIMULATED_IIC_2_INVALID_ACK;
}
/******************************************************************************
函数名:IIC_Start
功 能:在IIC总线上发送起始信号,发起一次IIC通信
参 数:无
返回值:无
******************************************************************************/
void Simulated_IIC_2_Start(void)
{
u8SimulatedIIC2ReceivedACK = SIMULATED_IIC_2_INVALID_ACK;
SIMULATED_IIC_2_SDA_DIR = 0; //SDA被设置为输入,IO口为高阻状态,总线上SDA信号由上拉电阻拉高,此时SDA = 1
Simulated_IIC_2_Delay();
Simulated_IIC_2_Delay();
SIMULATED_IIC_2_SCL_DIR = 0; //SCL被设置为输入,IO口为高阻状态,总线上SCL信号由上拉电阻拉高,此时SCL = 1
Simulated_IIC_2_Delay();
Simulated_IIC_2_Delay();
SIMULATED_IIC_2_SDA_DIR = 1; //SDA输出0,此时SDA = 0
SIMULATED_IIC_2_OUT_SDA = 0;
Simulated_IIC_2_Delay();
Simulated_IIC_2_Delay();
SIMULATED_IIC_2_SCL_DIR = 1; //SCL输出0,此时SCL = 0
SIMULATED_IIC_2_SCL = 0;
Simulated_IIC_2_Delay();
}
/******************************************************************************
函数名:IIC_Stop
功 能:在IIC总线上发送停止信号,终止当前IIC通信
参 数:无
返回值:无
******************************************************************************/
void Simulated_IIC_2_Stop(void)
{
u8SimulatedIIC2ReceivedACK = SIMULATED_IIC_2_INVALID_ACK;
SIMULATED_IIC_2_SDA_DIR = 1; //SDA输出0,此时SDA = 0
SIMULATED_IIC_2_OUT_SDA = 0;
Simulated_IIC_2_Delay();
Simulated_IIC_2_Delay();
SIMULATED_IIC_2_SCL_DIR = 0; //SCL被设置为输入,IO口为高阻状态,总线上SCL信号由上拉电阻拉高,此时SCL = 1
Simulated_IIC_2_Delay();
Simulated_IIC_2_Delay();
SIMULATED_IIC_2_SDA_DIR = 0; //SDA被设置为输入,IO口为高阻状态,总线上SDA信号由上拉电阻拉高,此时SDA = 1
Simulated_IIC_2_Delay();
Simulated_IIC_2_Delay();
}
/******************************************************************************
函数名:IIC_Transmit_Data
功 能:向IIC总线上发送1字节数据
参 数:Data:发送的数据
返回值:总线上器件的确认(ACK) 0 - ACK 1 - NAK
******************************************************************************/
void Simulated_IIC_2_Transmit_Data(uint8_t Data)
{
uint8_t i;
u8SimulatedIIC2ReceivedACK = SIMULATED_IIC_2_INVALID_ACK;
for (i = 0; i < 8; i++)
{
if (Data & 0x80)
SIMULATED_IIC_2_SDA_DIR = 0; //SDA被设置为输入,IO口为高阻状态,总线上SDA信号由上拉电阻拉高,此时SDA = 1
else
{
SIMULATED_IIC_2_SDA_DIR = 1; //SDA输出0,此时SDA = 0
SIMULATED_IIC_2_OUT_SDA = 0;
}
Simulated_IIC_2_Delay();
Simulated_IIC_2_Delay();
SIMULATED_IIC_2_SCL_DIR = 0; //SCL被设置为输入,IO口为高阻状态,总线上SCL信号由上拉电阻拉高,此时SCL = 1
Simulated_IIC_2_Delay();
Simulated_IIC_2_Delay();
SIMULATED_IIC_2_SCL_DIR = 1; //SCL输出0,此时SCL = 0
SIMULATED_IIC_2_SCL = 0;
Simulated_IIC_2_Delay();
Data <<= 1;
}
SIMULATED_IIC_2_SDA_DIR = 0; //设置SDA为输入状态
Simulated_IIC_2_Delay();
Simulated_IIC_2_Delay();
SIMULATED_IIC_2_SCL_DIR = 0; //SCL被设置为输入,IO口为高阻状态,总线上SCL信号由上拉电阻拉高,此时SCL = 1
Simulated_IIC_2_Delay();
Simulated_IIC_2_Delay();
u8SimulatedIIC2ReceivedACK = SIMULATED_IIC_2_IN_SDA;
SIMULATED_IIC_2_SCL_DIR = 1; //SCL输出0,此时SCL = 0
SIMULATED_IIC_2_SCL = 0;
Simulated_IIC_2_Delay();
}
/******************************************************************************
函数名:IIC_Receive_Data
功 能:从IIC总线上接收1字节数据
参 数:无
返回值:接收到的数据
******************************************************************************/
uint8_t Simulated_IIC_2_Receive_Data(void)
{
uint8_t i;
uint8_t Data;
Data = 0;
SIMULATED_IIC_2_SDA_DIR = 0; //设置SDA为输入状态
Simulated_IIC_2_Delay();
Simulated_IIC_2_Delay();
for (i = 0; i < 8; i++)
{
Data <<= 1;
SIMULATED_IIC_2_SCL_DIR = 0; //SCL被设置为输入,IO口为高阻状态,总线上SCL信号由上拉电阻拉高,此时SCL = 1
Simulated_IIC_2_Delay();
Simulated_IIC_2_Delay();
Simulated_IIC_2_Delay();
Data |= SIMULATED_IIC_2_IN_SDA;
SIMULATED_IIC_2_SCL_DIR = 1; //SCL输出0,此时SCL = 0
SIMULATED_IIC_2_SCL = 0;
Simulated_IIC_2_Delay();
Simulated_IIC_2_Delay();
}
return Data;
}
/******************************************************************************
函数名:IIC_Transmit_ACK
功 能:向IIC总线上发送确认信号
参 数:ACK:确认信号的类型: SIMULATED_IIC_2_ACK 肯定应答
IIC_NAK 否定应答
返回值:无
******************************************************************************/
void Simulated_IIC_2_Transmit_ACK(uint8_t ACK)
{
u8SimulatedIIC2ReceivedACK = SIMULATED_IIC_2_INVALID_ACK;
if (ACK > SIMULATED_IIC_2_NAK)
return;
if (ACK)
SIMULATED_IIC_2_SDA_DIR = 0; //SDA被设置为输入,IO口为高阻状态,总线上SDA信号由上拉电阻拉高,此时SDA = 1
else
{
SIMULATED_IIC_2_SDA_DIR = 1; //SDA输出0,此时SDA = 0
SIMULATED_IIC_2_OUT_SDA = 0;
}
Simulated_IIC_2_Delay();
SIMULATED_IIC_2_SCL_DIR = 0; //SCL被设置为输入,IO口为高阻状态,总线上SCL信号由上拉电阻拉高,此时SCL = 1
Simulated_IIC_2_Delay();
Simulated_IIC_2_Delay();
SIMULATED_IIC_2_SCL_DIR = 1; //SCL输出0,此时SCL = 0
SIMULATED_IIC_2_SCL = 0;
Simulated_IIC_2_Delay();
}
/******************************************************************************
函数名:IIC_Receive_ACK
功 能:获取从总线上接收到的确认信号
参 数:无
返回值:总线上器件的确认信号类型:Simulated_IIC_ACK 肯定应答
SIMULATED_IIC_2_NAK 否定应答
IIC_INVALID_ACK 无效的应答信号(应答信号还未收到)
******************************************************************************/
uint8_t Simulated_IIC_2_Receive_ACK(void)
{
uint8_t ACK;
ACK = u8SimulatedIIC2ReceivedACK;
u8SimulatedIIC2ReceivedACK = SIMULATED_IIC_2_INVALID_ACK;
return ACK;
}
/******************************************************************************
函数名:IIC_Delay
功 能:延时5us,用于收发过程中的时序控制
注意:必须调整IIC_5us_DELAY_CALIBRATION参数校准延时时间在5us左右
参 数:ACK:确认信号的类型 0 - ACK 1 - NAK
返回值:无
******************************************************************************/
void Simulated_IIC_2_Delay(void)
{
uint8_t i;
for (i = 0; i < SIMULATED_IIC_2_FREQ_CALIBRATION; i++)
nop();
}
/*
uint8_t u8SimulatedIIC2Slave = 0U;
void Simulated_IIC_2_Slave_Service(void)
{
if (u8SimulatedIIC2Slave == 0U)
{
if (stIS31Ctr.u8IS31Refresh >= 1U)
{
u8SimulatedIIC2Slave = 1U;
}
else if ((stPCF85063Ctr.u8PCF85063Read == 1U) || (stPCF85063Ctr.u8PCF85063Write == 1U))
{
u8SimulatedIIC2Slave = 2U;
}
}
if (u8SimulatedIIC2Slave == 1U)
{
IS31_Service();
if (stIS31Ctr.u8IS31Refresh == 0U)
{
u8SimulatedIIC2Slave = 0U;
}
}
else if (u8SimulatedIIC2Slave == 2U)
{
PCF85063_Service();
if ((stPCF85063Ctr.u8PCF85063Read == 0U) && (stPCF85063Ctr.u8PCF85063Write == 0U))
{
u8SimulatedIIC2Slave = 0U;
}
}
}
*/
/******************************************************************************
文 件 名:Simulated_IIC_Master.h
功能描述:IO端口模拟的IIC(I2C)主机函数库头文件
作 者:张暄
版 本:V1.0
日 期:2016.12.21
******************************************************************************/
#ifndef SIMULATED_IIC_2_MASTER_H__
#define SIMULATED_IIC_2_MASTER_H__
//#include <stdint.h>
//#include "GPIO.h"
typedef unsigned char uint8_t;
typedef unsigned int uint16_t;
typedef unsigned long uint32_t;
/******************************************************************************
1us延时校准
******************************************************************************/
#define SIMULATED_IIC_2_FREQ_CALIBRATION 6U
/******************************************************************************
确认信号
******************************************************************************/
#define SIMULATED_IIC_2_ACK 0U //肯定应答
#define SIMULATED_IIC_2_NAK 1U //否定应答
#define SIMULATED_IIC_2_INVALID_ACK 2U //无效的应答信号(应答信号还未收到)
/******************************************************************************
引脚定义
******************************************************************************/
#define SIMULATED_IIC_2_SCL PIN_47_P //SCL�ź�
#define SIMULATED_IIC_2_SCL_DIR PIN_47_D //SCL����
#define SIMULATED_IIC_2_OUT_SDA PIN_50_P //SDA�ź�
#define SIMULATED_IIC_2_IN_SDA PIN_50_P //?
#define SIMULATED_IIC_2_SDA_DIR PIN_50_D //SDA����
#define SDB_LED_DRIVER PIN_48_P
/******************************************************************************
函数声明
******************************************************************************/
void Simulated_IIC_2_Init(void);
void Simulated_IIC_2_Start(void);
void Simulated_IIC_2_Stop(void);
void Simulated_IIC_2_Transmit_Data(uint8_t Data);
uint8_t Simulated_IIC_2_Receive_Data(void);
void Simulated_IIC_2_Transmit_ACK(uint8_t ACK);
uint8_t Simulated_IIC_2_Receive_ACK(void);
void Simulated_IIC_2_Delay(void);
/*void Simulated_IIC_2_Slave_Service(void);*/
#endif
\ No newline at end of file
/*
* MOTOR.h
*
* Created on: Apr 21, 2019
* Author: qitiancun
*/
#ifndef MOTOR_H_
#define MOTOR_H_
typedef unsigned char uint8_t;
typedef unsigned int uint16_t;
typedef unsigned long uint32_t;
typedef enum
{
direction_1 = 0,
direction_2,
}MoveDirection_t;
typedef enum
{
Motor_1 = 0,
Motor_2,
Motor_3,
Motor_4,
}MotorIndex_t;
typedef enum
{
Normal = 0,
MinReset,
MaxReset,
MaxStep,
MaxStepKeep,
MinStep
}workMode_t;
extern uint8_t* bsp_MotorGetVersion(void); /* ��ȡ�汾�� */
extern void bsp_MotorMove_50us_main(void); /* ������ VectorNumber_Vmctimovf �ж��е��ã���ʼ�����Ĭ��ʹ���ж� */
extern uint8_t bsp_set_meterCfg(uint8_t motorIndex,MoveDirection_t motorDir,uint16_t MaxAngle,uint16_t One_Step_Damp);
/* One_Step_Damp �ƽ�Ŀ��������ٶ�,��ֵԽ��Խ�� */
extern void bsp_SetMotorMode(uint8_t index,workMode_t Mode); /* ���õ������ģʽ */
extern workMode_t bsp_GetMotorState(uint8_t index); /* ��ȡ�������ģʽ */
extern void bsp_SetOneStepDamp(uint8_t motorIndex,uint32_t One_Step_Damp); /* ����ÿһ������ʱ�� */
extern void MotorDriveOff(void);
extern void bsp_SetMaxSpeed(uint8_t motorIndex,uint32_t speed); /* ���õ������ٶȣ���ֵԽ��Խ�� */
extern void bsp_SetMotorStep(uint8_t Index, uint16_t Step); /* ���õ��Ŀ�경(ֻ����Nomalģʽ�²ſ�������) */
extern uint16_t bsp_GetMotorStep(uint8_t Index); /* ��ȡ�����ǰ�� */
#endif /* MOTOR_H_ */
#include "Motor.h"
#include "Motor_interface.h"
\ No newline at end of file
/*
*********************************************************************
* Includes
*********************************************************************
*/
#include "Include.h"
#include "Motor.h"
/*
*********************************************************************
* defines
*********************************************************************
*/
/*
*********************************************************************
* variable
*********************************************************************
*/
/*
*********************************************************************
* function
*********************************************************************
*/
/*-------------------------------------------------------------------------
* Function Name : bsp_motorTestMode
* Description : �������ģʽ
* Input : None
* Output : None
* Return : None
* onther :
--------------------------------------------------------------------------*/
void bsp_motorTestMode(void)
{
}
/*-------------------------------------------------------------------------
* Function Name : bsp_MeterConfig
* Description : ���ñ�ͷ
* Input : None
* Output : None
* Return : None
* onther :
--------------------------------------------------------------------------*/
void bsp_MeterConfig1(void)
{
(void)bsp_set_meterCfg(Motor_1,direction_1,MeterInfo[Motor_1].MicroStep[MeterInfo[Motor_1].Parameter_Num - 1],2800);
(void)bsp_set_meterCfg(Motor_2,direction_1,MeterInfo[Motor_2].MicroStep[MeterInfo[Motor_2].Parameter_Num - 1],2800);
(void)bsp_set_meterCfg(Motor_3,direction_1,MeterInfo[Motor_3].MicroStep[MeterInfo[Motor_3].Parameter_Num - 1],2800);
(void)bsp_set_meterCfg(Motor_4,direction_1,MeterInfo[Motor_4].MicroStep[MeterInfo[Motor_4].Parameter_Num - 1],2800);
}
/*
* MOTOR.h
*
* Created on: Apr 21, 2019
* Author: qitiancun
*/
#include "Motor.h"
#ifndef MOTOR_INTERFACE_H_
#define MOTOR_INTERFACE_H_
extern void bsp_MeterConfig1(void);
extern void bsp_motorTestMode(void);
#endif /* MOTOR_INTERFACE_H_ */
\ No newline at end of file
/**********************************************************************************************************
* Copyright(C) 2017, HeiLongJiang TYW Co.,Ltd.
*
* @Filename: NM_Buf.c
*
* @Description: 网络管理报文缓存区
*
* @Functions List:
*
*
* @History: Version: V0.0.1
Date: 2018-05-17 17:05:00
Author: myliu
Modification: creat
**********************************************************************************************************/
/**********************************************************************************************************
* Include
*/
#include "Include.h"
#include "NM_Buf.h"
/**********************************************************************************************************
* Constants and defines
*/
/**********************************************************************************************************
* Local variables
*/
static unsigned char CanNmDataRxEnable = 1u;
static unsigned char CanNmDataTxEnable = 1u;
/**********************************************************************************************************
* Local functions
*/
/**********************************************************************************************************
* Global variables
*/
/**********************************************************************************************************
* Global functions
*/
/**********************************************************************************************************
*@Function: CanNm_Data_State
*@Description: 打开/关闭链路层数据.
*@Input: CanNmDataType -- 数据链路的类型,1:RX,2:TX.
* State -- 链路状态,使能/禁止
*@Output: none.
*@Calls: none.
*@Return: none.
*@Note: 一般由诊断进行调用.
**********************************************************************************************************/
void CanNm_Data_State ( unsigned char CanNmDataType, unsigned char State )
{
switch ( CanNmDataType )
{
case 1:
if ( State )
{
CanNmDataRxEnable = 1u;
}
else
{
CanNmDataRxEnable = 0u;
}
break;
case 2:
if ( State )
{
CanNmDataTxEnable = 1u;
}
else
{
CanNmDataTxEnable = 0u;
}
break;
default:
break;
}
}
/**********************************************************************************************************
*@Function: CanNm_Data_Indication
*@Description: 接收到网络管理报文,将其保存在回环存储区
*@Input: uint16_t Identifier -- 网络管理报文ID.
* unsigned char DLC -- 报文数据长度.
* unsigned char *Data -- 报文数据内容.
*@Output: none.
*@Calls: none.
*@Return: none.
*@Note: none.
**********************************************************************************************************/
void CanNm_Data_Indication ( unsigned long Identifier, unsigned char DLC, unsigned char Data[] )
{
unsigned char i = 0u;
unsigned char CanNmMsg[8];
if ( !CanNmDataRxEnable )
{
}
else
{
if ( DLC == 8u )
{
if ( ( Identifier >= NM_ECU_ADDR_START ) && ( Identifier <= NM_ECU_ADDR_END ) )
{
for ( i = 0u; i < DLC; i++ )
{
CanNmMsg[i] = Data[i];
}
CanNm_RecvNMPDUInd ( CanNmMsg );
}
}
}
}
/**********************************************************************************************************
*@Function: CanNm_Data_Request
*@Description: 请求发送网络管理报文,一般网络管理报文优先级较高,设置为0
*@Input: unsigned char WakeupReason -- 网络唤醒的原因,包括KL15或者网络管理报文唤醒.
*@Output: none.
*@Calls: none.
*@Return: none.
*@Note: none.
**********************************************************************************************************/
void CanNm_Data_Request ( NM_Wakeup_Reasons_t WakeupReason, Network_Request_Reasons_t StayawakeReson )
{
unsigned char i = 0u;
CANNmMsg_t CanNmMsg;
NM_Mode_t CanNmMode = Bus_Sleep_Mode;
/*_CAN_Msg m_Msg;*/
NetworkMode_State_t NetworkModeState = Repeat_Message_State;
if (!CanNmDataTxEnable)
{
}
else
{
if (NM_GetBusSt())
{
}
else
{
for ( i = 0u; i < sizeof ( CanNmMsg.Msg ); i++ )
{
CanNmMsg.Msg[i] = 0u;
}
CanNmMsg.Sig.ICU_Address0 = 0x17u;
/*Slave node, Repeat Message State is equal 0*/
CanNmMsg.Sig.ICU_RMR0 = 0u;
/*Wakeup Reason*/
if ( WakeupReason == NM_KL15 )
{
CanNmMsg.Sig.ICU_AWB0 = 1u;
CanNmMsg.Sig.ICU_Wakeup_reasons = 1u;
}
else
{
CanNmMsg.Sig.ICU_AWB0 = 0u;
CanNmMsg.Sig.ICU_Wakeup_reasons = 2u;
}
/*Network Manage state*/
CanNmMode = CanNm_GetMode();
NetworkModeState = CanNm_GetState();
if ( ( CanNmMode == Network_Mode ) && ( NetworkModeState == Normal_Operation_State ) )
{
CanNmMsg.Sig.ICU_NMSts0 = 1u;
if ( StayawakeReson == NM_REQ_KL15_ON )
{
CanNmMsg.Sig.ICU_Stayawake_KL15 = 1u;
}
else if ( StayawakeReson == NM_REQ_DIAG_RECVD )
{
CanNmMsg.Sig.ICU_Stayawake_Diag = 1u;
}
else
{
}
}
else
{
CanNmMsg.Sig.ICU_NMSts0 = 0u;
}
/*网络管理报文,优先级比较高,暂时固定设置为0*/
if(AnalogKL30Voltage <= 9000)
{
return;
}
else
{
Bsp_Can_Send(NM_FRAME_ID, 8, CanNmMsg.Msg, 0);
}
}
}
}
/**********************************************************************************************************
*@Function: CanNm_Data_Confirm
*@Description: 提示网络管理,已经成功发送网路管理报文,一般由链路层调用.
*@Input: uint16_t Identifier -- 报文ID.
* unsigned char TransferStatus -- 报文发送状态,完成or未完成
*@Output: none.
*@Calls: none.
*@Return: none..
*@Note: none.
**********************************************************************************************************/
void CanNm_Data_Confirm ( unsigned long Identifier, unsigned char TransferStatus )
{
if ( ( Identifier < NM_ECU_ADDR_START ) || ( Identifier > NM_ECU_ADDR_END ) )
{
}
else
{
if ( TransferStatus == COMPLETE )
{
CanNm_TransNMPDUInd();
}
else
{
}
}
}
/**********************************************************************************************************
* Copyright(C) 2017, HeiLongJiang TYW Co.,Ltd.
*
* @Filename: NM_Buf.h
*
* @Description: 网络管理协议帧格式
*
* @Functions List:
*
*
* @History: Version: V0.0.1
Date: 2018-05-17 16:54:00
Author: myliu
Modification: creat
**********************************************************************************************************/
#ifndef __NM_BUF_H__
#define __NM_BUF_H__
/**********************************************************************************************************
* Include
*/
#include "NM_Include.h"
//#define NM_FRAME_ID 0x18FFFA17
//#define NM_ECU_ADDR_START 0x00 // 0x18FFFA00
//#define NM_ECU_ADDR_END 0xFF // 0x18FFFA00
//#define NM_CONTROL_FRAME_BASE_ADDR 18FFFA00
#define NM_ECU_ADDR_START 0x18FFFA00
#define NM_ECU_ADDR_END 0x18FFFAFF
typedef union
{
struct
{
uint8_t ICU_Address0 : 8; //Bit 0-7 : ECU Address
uint8_t ICU_RMR0 : 1; //Bit Repeat Message Request重复报文请求
uint8_t : 3;
uint8_t ICU_AWB0 : 1; //Active Wakeup Bit主动唤醒位 WB
uint8_t : 3;
uint8_t ICU_Wakeup_reasons : 8; //Bit 16-23 :唤醒原因
uint8_t ICU_NMSts0 : 1; //示当前NM处于重复报文请求状态还是其他状态
uint8_t : 7;
uint8_t : 1;
uint8_t ICU_Stayawake_KL15 : 1; //Bit 32-63 : ICU_Stayawake_reasons 保持唤醒原因
uint8_t : 4; //Bit 32-63 : ICU_Stayawake_reasons
uint8_t ICU_Stayawake_Diag : 1; //Bit 32-63 : ICU_Stayawake_reasons
uint8_t : 1; //Bit 32-63 : ICU_Stayawake_reasons
uint8_t : 8; //Bit 32-63 : ICU_Stayawake_reasons
uint8_t : 8; //Bit 32-63 : ICU_Stayawake_reasons
uint8_t : 8; //Bit 32-63 : ICU_Stayawake_reasons
} Sig;
uint8_t Msg[8];
} CANNmMsg_t;
/**********************************************************************************************************
* Global functions
*/
/**********************************************************************************************************
*@Function: CanNm_Data_State
*@Description: 打开/关闭链路层数据.
*@Input: CanNmDataType -- 数据链路的类型,1:RX,2:TX.
* State -- 链路状态,使能/禁止
*@Output: none.
*@Calls: none.
*@Return: none.
*@Note: 一般由诊断进行调用.
**********************************************************************************************************/
void CanNm_Data_State ( unsigned char CanNmDataType, unsigned char State );
/**********************************************************************************************************
*@Function: CanNm_Data_Indication
*@Description: 接收到网络管理报文,将其保存在回环存储区
*@Input: uint16_t Identifier -- 网络管理报文ID.
* unsigned char DLC -- 报文数据长度.
* unsigned char *Data -- 报文数据内容.
*@Output: none.
*@Calls: none.
*@Return: none.
*@Note: none.
**********************************************************************************************************/
void CanNm_Data_Indication ( unsigned long Identifier, unsigned char DLC, unsigned char Data[] );
/**********************************************************************************************************
*@Function: CanNm_Data_Request
*@Description: 请求发送网络管理报文,一般网络管理报文优先级较高,设置为0
*@Input: unsigned char WakeupReason -- 网络唤醒的原因,包括KL15或者网络管理报文唤醒.
*@Output: none.
*@Calls: none.
*@Return: none.
*@Note: none.
**********************************************************************************************************/
void CanNm_Data_Request ( NM_Wakeup_Reasons_t WakeupReason, Network_Request_Reasons_t StayawakeReson );
/**********************************************************************************************************
*@Function: CanNm_Data_Confirm
*@Description: 提示网络管理,已经成功发送网路管理报文,一般由链路层调用.
*@Input: uint16_t Identifier -- 报文ID.
* unsigned char TransferStatus -- 报文发送状态,完成or未完成
*@Output: none.
*@Calls: none.
*@Return: none..
*@Note: none.
**********************************************************************************************************/
void CanNm_Data_Confirm ( unsigned long Identifier, unsigned char TransferStatus );
#endif
#include "include.h"
#include "NM_CallBack.h"
INT8U Can_Flag_Flg;
/**********************************************************************************************************
*@Function: D_Online
*@Description: ʹ��Ӧ�ò�ͨ��.
*@Input: none.
*@Output: none.
*@Calls: Com_RxStart / Com_TxStart.
*@Return: none..
*@Note: none.
**********************************************************************************************************/
void D_Online ( void )
{
Com_RxStart();
Can_Flag_Flg = 1;
Com_TxStart();
}
/**********************************************************************************************************
*@Function: D_Offline
*@Description: ��ֹӦ�ò�ͨ��.
*@Input: none.
*@Output: none.
*@Calls: Com_RxStop / Com_TxStop.
*@Return: none..
*@Note: none.
**********************************************************************************************************/
void D_Offline ( void )
{
Com_RxStop();
Can_Flag_Flg = 0;
Com_TxStop();
}
/**********************************************************************************************************
*@Function: D_Init
*@Description: Can���߳�ʼ������.
*@Input: none.
*@Output: none.
*@Calls: none.
*@Return: none..
*@Note: none.
**********************************************************************************************************/
void D_Init ( D_Init_Routine_t InitRoutine )
{
switch(InitRoutine)
{
case BusInit:
MSCAN0_Init();
//CoCAN_Init();//shican
break;
case BusSleep:
MSCAN0_Enter_Low_Power_Mode();
break;
case BusAwake:
MSCAN0_Exit_Low_Power_Mode();
MSCAN0_Init();
break;
default:
break;
}
}
/**********************************************************************************************************
**********************************************************************************************************/
void Bsp_Can_Send(unsigned long id,unsigned char dlc,unsigned char Msg[],unsigned char pro)
{
CAN0_TX_BUF_Set((unsigned char *)&Msg[0], id, dlc);
}
/*
��ȡcan����״̬
0-����״̬����
1-����busoff
*/
unsigned char NM_GetBusSt(void)
{
if(GetBusOffState())
{
return 1;
}
else
{
return 0;
}
}
void NM_Init_AppTimer ( void )
{
//CAN_APP_TX_Time_Reset();
}
\ No newline at end of file
#ifndef __NM_CallBack_H__
#define __NM_CallBack_H__
#include "Platform_Types.h"
extern INT8U Can_Flag_Flg ;
void D_Init ( D_Init_Routine_t InitRoutine );
void D_Online ( void );
void D_Offline ( void );
void NM_Init_AppTimer ( void );
void Bsp_Can_Send(unsigned long id,unsigned char dlc,unsigned char Msg[],unsigned char pro);
unsigned char NM_GetBusSt(void);
#endif
\ No newline at end of file
#ifndef __NM_INCLUDE_H__
#define __NM_INCLUDE_H__
#include "Platform_Types.h"
#include "NM_CallBack.h"
#include "NM_Protocol.h"
#include "NM_Buf.h"
#endif
\ No newline at end of file
This diff is collapsed.
/**********************************************************************************************************
* Copyright(C) 2017, HeiLongJiang TYW Co.,Ltd.
*
* @Filename: NM_Protocol.c
*
* @Description: 网络管理协议帧格式
*
* @Functions List:
*
*
* @History: Version: V0.0.1
Date: 2018-05-17 16:54:00
Author: myliu
Modification: creat
**********************************************************************************************************/
#ifndef __NM_PROTOCOL_H__
#define __NM_PROTOCOL_H__
/**********************************************************************************************************
* Include
*/
#include "NM_Include.h"
/**********************************************************************************************************
* Constants and defines
*/
/*NM ADDR*/
/**********************************************************************************************************
* Local variables
*/
/**********************************************************************************************************
* Local functions
*/
/**********************************************************************************************************
* Global variables
*/
/**********************************************************************************************************
* Global functions
*/
/**********************************************************************************************************
*@Function: NM_Timer_Service
*@Description: 网络管理中定时器服务,判断使能的定时器是否超时.
*@Input: none.
*@Output: none.
*@Calls: none.
*@Return: none.
*@Note: 在中断API_ISR中调用.
**********************************************************************************************************/
void CanNm_Timer_Service ( unsigned long API_Cycle );
/**********************************************************************************************************
*@Function: NMStartTimer
*@Description: 启动网路管理的定时器.
*@Input: NMTimerName_t TimerName -- 启动定时器的名称.
*@Output: none.
*@Calls: none.
*@Return: none.
*@Note: none.
**********************************************************************************************************/
void NMReStartTimer ( NM_Timer_Name_t NMTimerName );
/**********************************************************************************************************
*@Function: NMStopTimer
*@Description: 取消网路管理的定时器.
*@Input: NMTimerName_t TimerName -- 启动定时器的名称.
*@Output: none.
*@Calls: none.
*@Return: none.
*@Note: none.
**********************************************************************************************************/
void NMStopTimer ( NM_Timer_Name_t NMTimerName );
/**********************************************************************************************************
*@Function: IsNMTimerOut
*@Description: 查询NM定时器是否超时.
*@Input: NMTimerName_t TimerName -- 启动定时器的名称.
*@Output: none.
*@Calls: none.
*@Return: none.
*@Note: none.
**********************************************************************************************************/
unsigned char IsNMTimerOut ( NM_Timer_Name_t NMTimerName );
/**********************************************************************************************************
*@Function: CanNm_Init
*@Description: 初始化链路层,关闭应用通信,设置初始状态为睡眠.
*@Input: none.
*@Output: none.
*@Calls: D_Init / D_Offline.
*@Return: none..
*@Note: 在中断中调用.
**********************************************************************************************************/
void CanNm_Init ( void );
/**********************************************************************************************************
*@Function: CanNm_NetworkRequest
*@Description: 请求网络通信,一般由应用层调用.
*@Input: none.
*@Output: none.
*@Calls: none.
*@Return: none..
*@Note: none.
**********************************************************************************************************/
void CanNm_NetworkRequest ( Network_Request_Reasons_t StayawakeReason );
/**********************************************************************************************************
*@Function: CanNm_NetworkRelease
*@Description: 释放网络,同意网络进入睡眠,一般在IGN_OFF情况且无报警情况下调用.
*@Input: none.
*@Output: none.
*@Calls: none.
*@Return: none..
*@Note: none.
**********************************************************************************************************/
void CanNm_NetworkRelease ( Network_Release_Reasons_t ReleaseReason );
/**********************************************************************************************************
*@Function: CanNm_RecvNMPDUInd
*@Description: 提示网络管理,收到了网路管理报文,一般由链路层调用.
*@Input: CANMsg402_t *pCanNmMsg -- 网络管理报文.
*@Output: none.
*@Calls: none.
*@Return: none..
*@Note: none.
**********************************************************************************************************/
void CanNm_RecvNMPDUInd ( unsigned char m_CanNmMsg[ ] );
/**********************************************************************************************************
*@Function: CanNm_TransNMPDUInd
*@Description: 提示网络管理,已经成功发送网路管理报文,一般由链路层调用.
*@Input: none.
*@Output: none.
*@Calls: none.
*@Return: none..
*@Note: none.
**********************************************************************************************************/
void CanNm_TransNMPDUInd ( void );
/**********************************************************************************************************
*@Function: CanNm_RepeatMessageRequest
*@Description: 进入重复状态请求,一般主节点使用,仪表属于从节点,一般不适用.
*@Input: none.
*@Output: none.
*@Calls: none.
*@Return: none..
*@Note: none.
**********************************************************************************************************/
void CanNm_RepeatMessageRequest ( void );
/**********************************************************************************************************
*@Function: CanNm_TimeroutRequest
*@Description: 网络管理定时器,请求网络超时事件.
*@Input: none.
*@Output: none.
*@Calls: none.
*@Return: none..
*@Note: 由网络管理定时器调用.
**********************************************************************************************************/
void CanNm_TimeroutRequest ( NM_Timer_Name_t NMTimerName );
/**********************************************************************************************************
*@Function: CanNm_GetStatus
*@Description: 获取网络管理当前的主要模式,睡眠,唤醒,睡前准备
*@Input: none.
*@Output: none.
*@Calls: none.
*@Return: NM_Mode_t Mode -- 网络当前模式.
*@Note: 一般由电源管理调用,当网络管理处于睡眠状态后,电源可以进入低功耗模式.
**********************************************************************************************************/
NM_Mode_t CanNm_GetMode ( void );
/**********************************************************************************************************
*@Function: CanNm_GetState
*@Description: 获取网络管理当前的状态,主要是休眠还是唤醒.
*@Input: none.
*@Output: none.
*@Calls: none.
*@Return: NetworkMode_State_t Mode -- 网络当前状态.
*@Note: 发送报文时,需要此状态.
**********************************************************************************************************/
NetworkMode_State_t CanNm_GetState ( void );
/**********************************************************************************************************
*@Function: CanNm_Service
*@Description: 网络管理服务,进行状态切换.
*@Input: none.
*@Output: none.
*@Calls: CanNm_NetworkMode_Service.
*@Return: none..
*@Note: 一般1ms调用一次,由于网络管理均有时间要求,所以此函数要求在中断调用.
**********************************************************************************************************/
void CanNm_Service ( void );
/*获取当前库版本版本号*/
unsigned long CanNM_Read_Verison(void);
/**********************************************************************************************************
**********************************************************************************************************/
#endif
/* BEGIN_FILE_HDR
********************************************************************************
* NOTICE
* This software is the property of HiRain Technologies. Any information
* contained in this doc should not be reproduced, or used, or disclosed
* without the written authorization from HiRain Technologies.
********************************************************************************
* File Name : Platform_Types.h
********************************************************************************
* Project/Product : Common
* Title : Platform_Types.h
* Author : ning.chen
********************************************************************************
* Description : platform related types
*
********************************************************************************
* Limitations : only used for Freescale S12X
*
********************************************************************************
*
********************************************************************************
* Revision History:
*
* Version Date Initials CR# Descriptions
* --------- ---------- ------------ ---------- ---------------
* 01.00.00 13/06/2013 ning.chen N/A Original
* 01.00.01 17/07/2013 ning.chen N/A DPN_COMMON_130717_01
* 01.00.02 15/08/2013 ning.chen N/A D10_COMMON51_130815_01
* 01.00.03 08/01/2014 ning.chen N/A D10_COMMON51_140108_01
********************************************************************************
* END_FILE_HDR*/
#ifndef _PLATFORM_TYPES_H_
#define _PLATFORM_TYPES_H_
/*******************************************************************************
* Includes
*******************************************************************************/
/*#include "stdint.h"*/
/*******************************************************************************
* Macro
*******************************************************************************/
#define CPU_TYPE_8 (8u)
#define CPU_TYPE_16 (16u)
#define CPU_TYPE_32 (32u)
#define MSB_FIRST (0u) /* big endian bit ordering */
#define LSB_FIRST (1u) /* little endian bit ordering */
#define HIGH_BYTE_FIRST (0u) /* big endian byte ordering */
#define LOW_BYTE_FIRST (1u) /* little endian byte ordering */
/*#ifndef TRUE
#define TRUE (1u)
#endif
#ifndef FALSE
#define FALSE (0u)
#endif
*/
#define CPU_TYPE CPU_TYPE_16
#define CPU_BIT_ORDER LSB_FIRST
#define CPU_BYTE_ORDER HIGH_BYTE_FIRST
/*******************************************************************************
* Typedef
*******************************************************************************/
typedef unsigned char boolean;
typedef signed char sint8;
typedef unsigned char uint8;
typedef signed short sint16;
typedef unsigned short uint16;
typedef signed long sint32;
typedef unsigned long uint32;
typedef signed char sint8_least;
typedef unsigned char uint8_least;
typedef signed short sint16_least;
typedef unsigned short uint16_least;
typedef signed long sint32_least;
typedef unsigned long uint32_least;
typedef float float32;
typedef double float64;
#define NM_FRAME_ID 0x18FFFA17u
#define COMPLETE 1u
#define NO_COMPLETE 0u
typedef enum
{
BusInit,
BusSleep,
BusAwake,
} D_Init_Routine_t;
typedef enum
{
NM_Default = 0x00u,
NM_KL15 = 0x01u,
NM_PDU_Received = 0x02u,
} NM_Wakeup_Reasons_t;
typedef enum
{
NM_NOT_AWAKE,
NM_REQ_KL15_ON,
NM_REQ_DIAG_RECVD,
} Network_Request_Reasons_t;
typedef enum
{
NM_REQ_KL15_OFF = 1u,
NM_REQ_DIAG_TIMEOUT,
} Network_Release_Reasons_t;
typedef enum
{
Bus_Sleep_Mode,
Pre_Bus_Sleep_Mode,
Network_Mode,
} NM_Mode_t;
typedef enum
{
Repeat_Message_State,
Normal_Operation_State,
Ready_Sleep_State,
} NetworkMode_State_t;
typedef enum
{
NM_Trms_Timer,
NM_Tnm_Timer,
NM_Twbs_Timer,
NM_Ticyc_Timer,
NM_Tcyc_Timer,
NM_Tdiag_Timer,
} NM_Timer_Name_t;
typedef struct
{
unsigned char NM_Trms_Enable : 1u;
unsigned char NM_Tnm_Enable : 1u;
unsigned char NM_Twbs_Enable : 1u;
unsigned char NM_Ticyc_Enable : 1u;
unsigned char NM_Tcyc_Enable : 1u;
unsigned char NM_Tdiag_Enable : 1u;
unsigned char NM_Trms_Timeout : 1u;
unsigned char NM_Tnm_Timeout : 1u;
unsigned char NM_Twbs_Timeout : 1u;
unsigned char NM_Ticyc_Timeout : 1u;
unsigned char NM_Tcyc_Timeout : 1u;
unsigned char NM_Tdiag_Timeout : 1u;
} NM_Timer_State_t;
typedef union
{
unsigned int Words;
struct
{
unsigned int Network_Requested : 1u; /*Condition 1:Network Requested, as +KL15 or diagnostic*/
unsigned int Succ_Recv_NMPDU : 1u; /*Condition 2:Successfully Received NM PDU*/
unsigned int Succ_Trans_NMPDU : 1u; /*Condition 3:Successfully Transmit NM PDU*/
unsigned int NM_Trms_Timeout : 1u; /*Condition 4:T_REPEAT_MESSAGE timer has expired*/
unsigned int Network_Released : 1u; /*Condition 5:Network Released, in IGN_OFF*/
unsigned int NM_Tnm_Timeout : 1u; /*Condition 6:T_NM_TIMEROUT has expired*/
unsigned int Repeat_Msg_Bit_Recv : 1u; /*Condition 7:Repeat Message Bit Received*/
unsigned int NM_Twbs_Timeout : 1u; /*Condition 8:T_WAIT_BUS_SLEEP timer has expired*/
unsigned int NM_Repeat_Msg_Req : 1u; /*Condition 9:NM Repeat Message Request*/
unsigned int NM_Ticyc_Timeout : 1u; /*Condition 10:T_NM_ImmediateCycTime timer has expired*/
unsigned int NM_Tcyc_Timeout : 1u; /*Condition 11:T_NM_MessageCycle timer has expired*/
unsigned int : 5u; /*Save*/
} Bits;
} NM_Event_List_t;
/**********************************************************************************************************
* Defines
*/
#define T_REPEAT_MESSAGE 1700ul*1000ul /*Timer for a node becomes visible to the other nodes on the network(这个参数最满足要求,否则可能造成多一帧少一帧)*/
#define T_NM_TIMEOUT 2000ul*1000ul /*As long as the node enter the network mode and start this timer. When the timer is expired, the node will enter the Prepare Bus Sleep Mode*/
#define T_WAIT_BUS_SLEEP 2000ul*1000ul /*The timer is to ensure that all nodes have time to stop their network activity*/
#define T_START_NM_TX 20ul*1000ul /*The time describes all sent NM message behaviour that the NM node enters network mode from Prepare Bus Sleep Mode, Normal Operation State or Ready Sleep State and start to transmit the first NM PDU.*/
#define T_STARTx_AppFrame 20ul*1000ul /*The maximum interval time starts sending application message after send the first NM-PDU successfully*/
#define T_NM_ImmediateCycleTime 20ul*1000ul /*In generally, network request of node should be trigger the immediate transmission mechanism and NM-PDU will be transmitted with this periodic in Repeat Message State.*/
#define T_NM_MessageCycle 500ul*1000ul /*The interval time is every two NM frames which are transmitted in Network Mode except Ready Sleep State*/
#define T_Wake_Up 100ul*1000ul /*The value is max time that the node from the Sleep Mode to Network Mode and send the first NM PDU, generally transmit in Repeat Message State*/
#define T_DIAG_TIMEOUT 5010ul*1000ul
#define N_ImmediateNM_TIMES 10u
/*#define API_Cycle 1000ul*/
/**********************************************************************************************************
* Constants and defines
*/
#endif /* _PLATFORM_TYPES_H_ */
/**************************************************************************/ /**
* \file ADC.h
* \brief ADC driver header file
* \details
* \author Zhang Xuan
* \version V1.0.0
* \date 18-Sep-2018
* \par History:
* V1.0.0 Initial release
* \par Copyright:
* (c) Heilongjiang TYW Electronics co., LTD
******************************************************************************/
//
#ifndef _ADC_H_
#define _ADC_H_
/* Includes ------------------------------------------------------------------*/
#include "stdint.h"
#include <mc9s12xhy256.h>
/* C binding of definitions if building with C++ compiler */
#ifdef __cplusplus
extern
{
#endif
/* Exported types ------------------------------------------------------------*/
/* Exported constants --------------------------------------------------------*/
/* Exported macro ------------------------------------------------------------*/
#define ADC_RESOLUTION (1023U) /* 10bit ADC */
/* Exported functions ------------------------------------------------------- */
extern void ADC_Init(const uint8_t *pu8ChList, uint8_t u8ChNum);
extern void ADC_DeInit(void);
extern void ADC_Start_Conversion(void);
extern void ADC_Stop_Conversion(void);
extern uint8_t ADC_Get_Conversion_Status(void);
extern void ADC_Get_Conversion_Result(uint16_t * pu16Data, uint8_t u8ChNum);
/*
立刻获取某一路通道的AD结果。
仅允许在睡眠模式下调用。
内部有强制等待AD完成。
输入要转化的AD通道序号,
输出转化的结果。输出0xFFFF表示错误
*/
extern INT16U ADC_Get_Conversion_Result_Immediately(uint8_t u8ChIndex);
extern const uint8_t u8ADCChList[];
//放在PRM中
//VECTOR ADDRESS 0xFFD2 AD_Conversion
#ifdef __cplusplus
}
#endif
#endif /* _ADC_H_ */
/************************************************ ******************************
�� �� ����API.c
����������API���ƺ������ļ�
�� �ߣ�����
�� ����V1.0
�� �ڣ�2016.11.3
******************************************************************************/
#include "Include.h"
//#include "API.h"
APImsTimerStruct APImsTimer;
volatile uint16_t APIRollingCounter;
volatile uint16_t TX_timer;
/******************************************************************************
��������API_Start
�� �ܣ�����API
APIÿ��API_INT_CYCLE���ڻᷢ��һ���ж�,ϵͳ�Ը��ж�Ϊʱ����������
API_INT_CYCLE��ҪԤ����API.h�ж���
�� ������
����ֵ����
******************************************************************************/
void API_Start(void)
{
VREGAPICL_APICLK = 1; //Bus Clock ��ΪAPI��ʱ��Դ
VREGAPIR = (uint16_t)((BUSCLK / 1000000 ) * API_INT_CYCLE/ 2); //����API�����
VREGAPICL_APIE = 1; //��API�ж�
VREGAPICL_APIFE = 1; //ʹ��API,����ʼ��ʱ
APImsTimer.Cnt = 0;
APImsTimer.Flag = 0;
APIRollingCounter = 0;
EEPROM_Delay=0;
TX_timer = 0 ;
}
/******************************************************************************
��������API_Stop
�� �ܣ��ر�API
�� ������
����ֵ����
******************************************************************************/
void API_Stop(void)
{
VREGAPICL_APIE = 0; //����API
VREGAPICL_APIFE = 0; //��ֹAPI�жϹ���
}
/******************************************************************************
��������API_1ms_Timer_Update
�� �ܣ���ȡ���붨ʱ���±�־
����ָʾһ��1ms��ʱ���
�� ������
����ֵ��1 - 1ms��ʱ���
0 - 1ms��ʱδ���
******************************************************************************/
uint8_t API_1ms_Timer_Update(void)
{
if (APImsTimer.Flag)
{
APImsTimer.Flag = 0;
return 1;
}
else
return 0;
}
/******************************************************************************
�жϺ���
******************************************************************************/
#pragma CODE_SEG __NEAR_SEG NON_BANKED //���жϺ�������FLASH�ķǷ�ҳ��
void interrupt NONUSE1_ISR(void)
{
}
void interrupt NONUSE2_ISR(void)
{
}
void interrupt NONUSE3_ISR(void)
{
}
void interrupt NONUSE4_ISR(void)
{
}
/******************************************************************************
��������interrupt API_ISR
�� �ܣ�API�жϷ�����
�� ������
����ֵ����
******************************************************************************/
void interrupt API_ISR(void)
{
APImsTimer.Cnt++;
if ( APImsTimer.Cnt >= API_MS_CNT_TOP )
{
APImsTimer.Cnt = 0;
APImsTimer.Flag = 1;
}
if(EEPROM_Delay<65535)
{
EEPROM_Delay++;
}
CanNm_Service();
CanNm_Timer_Service(50);
APIRollingCounter++;
TX_timer ++ ;
if(TX_timer > 40 )
{
//CAN_Tx_Service();
Buzzer_Play_Time_Count(2);
TX_timer = 0 ;
}
Drive_Info_Speed_Plus_Conversion_ISR();
BL_PWM_Duty_Cycle_Capture_ISR();
UDS_50us_Service();
DoCAN_Timer_Update(API_INT_CYCLE);
VREGAPICL_APIF = 1; //ͨ��д1��0�жϱ�־
}
#pragma CODE_SEG DEFAULT
\ No newline at end of file
/******************************************************************************
文 件 名:API.h
功能描述:API控制函数头文件
作 者:张暄
版 本:V1.0
日 期:2016.11.3
******************************************************************************/
#ifndef _API_H_
#define _API_H_
// #include "CRG.h"
/******************************************************************************
API中断周期,单位us
******************************************************************************/
#define API_INT_CYCLE 50//64
#define API_ROLLING_COUNTER APIRollingCounter
/******************************************************************************
1毫秒定时器计数上限
******************************************************************************/
#if (1000 % API_INT_CYCLE)
#define API_MS_CNT_TOP (1000 / API_INT_CYCLE + 1)
#else
#define API_MS_CNT_TOP (1000 / API_INT_CYCLE)
#endif
/******************************************************************************
10毫秒定时器计数上限
******************************************************************************/
#if (10000 % API_INT_CYCLE)
#define API_10MS_CNT_TOP (10000 / API_INT_CYCLE + 1)
#else
#define API_10MS_CNT_TOP (10000 / API_INT_CYCLE)
#endif
/******************************************************************************
2毫秒定时器计数上限
******************************************************************************/
#if (2000 % API_INT_CYCLE)
#define API_2MS_CNT_TOP (2000 / API_INT_CYCLE + 1)
#else
#define API_2MS_CNT_TOP (2000 / API_INT_CYCLE)
#endif
/******************************************************************************
1毫秒定时器结构声明
******************************************************************************/
typedef struct
{
uint8_t Cnt;
uint8_t Flag;
}APImsTimerStruct;
extern APImsTimerStruct APImsTimer;
extern volatile uint16_t APIRollingCounter;
//EXTERN uint16_t Time2ms;
/******************************************************************************
函数声明
******************************************************************************/
void API_Start(void);
void API_Stop(void);
uint8_t API_1ms_Timer_Update(void);
#endif
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
/**************************************************************************//**
* \file Analog_Signals.h
* \brief Analog signal processing
* \attention
*
* This file is automatically generated by analog signals configuration tool.
* Date : 2022/11/30 10:31:26
* Cfg Tool Ver : 1.1.0
* Engineer : YZHD
* (c) Heilongjiang TYW electronics co., LTD
*
******************************************************************************/
#ifndef _ANALOG_SIGNALS_H_
#define _ANALOG_SIGNALS_H_
/* Includes -----------------------------------------------------------------*/
#include "ADC.h"
#include "Analog_Circuits.h"
/* C binding of definitions if building with C++ compiler */
#ifdef __cplusplus
extern {
#endif
/*! @{ */
/* Exported types ------------------------------------------------------------*/
enum ADCChName
{
ADC_CH_KL30_V = 0,
ADC_CH_KL15_V,
ADC_CH_AIR_PRESSURE_1,
ADC_CH_AIR_PRESSURE_2,
ADC_CH_FUEL1_R,
ADC_CH_KEY_R,
ADC_CH_CH3_R,
};
/* Exported macro ------------------------------------------------------------*/
#define ADC_TOTAL_CH_NUMBER (7U)
#define ADC_SIGNAL_CH_NUMBER ADC_TOTAL_CH_NUMBER
#define ADC_REF_VOLTAGE u16ADCRefVoltage
/* Exported variables --------------------------------------------------------*/
extern volatile uint16_t u16ADCRefVoltage;
/* Exported functions --------------------------------------------------------*/
extern void Analog_Signal_Conv_Init(void);
extern void Analog_Signal_Conv_Stop(void);
extern void Analog_Signal_Conv_Service(void);
extern uint16_t ADC_Read_Signal(uint8_t u8ADCCh);
extern uint8_t ADC_Read_Signal_Valid(uint8_t u8ADCCh);
uint16_t ADC_Conv_Single_Channel(uint8_t u8ADCCh);
/*! @} */
#ifdef __cplusplus
}
#endif
#endif /* _ANALOG_SIGNALS_H_ */
\ No newline at end of file
This diff is collapsed.
#ifndef _CAN_XHY_H_
#define _CAN_XHY_H_
#include "mc9s12xhy256.h"
#define CANMsg_Export_100_CYCLE 49//100 //100MS //49*2.048 =100.352
typedef unsigned char INT8U;
typedef unsigned int INT16U;
typedef unsigned long INT32U;
//CAN���÷���ʱ���ص�״̬ö��
typedef enum
{
CAN_Set_Complete = 0,
CAN_Set_ERROR_BUSOFF,
CAN_Set_ERROR_OverMaxLen,
CAN_Set_ERROR_OverFlow,
} _CAN_SetState;
typedef struct
{
INT8U BUFF[8];
INT8U Len;
INT32U SendID; //����/����ID
} _CAN_TX_BUF_TYPE;
//////////////////////�̶�����///////////////////////////////////////////////////////////
////////////////////////��������/////////////////////////////////////////////////////////
//CAN0��ʼ��
extern void MSCAN0_Init(void);
//CAN0����,����
extern void CAN0_TX_DATA_BUF(void);
//CAN0 buf �д����͵���������
extern void CAN0_TX_BUF_Clear(void);
//���÷�������
extern _CAN_SetState CAN0_TX_BUF_Set(INT8U *pdata, INT32U ID, INT8U Len);
//��ȡ��ǰ�Ƿ�BUSOFF //1�Ѿ�busoff��//0 û��
extern unsigned char GetBusOffState(void);
//CAN0 ���з���ȡ��
extern void AbortAllCan0Tx(void);
//CAN0����͹���ģʽ
extern void MSCAN0_Enter_Low_Power_Mode(void);
//CAN0�˳��͹���ģʽ
extern void MSCAN0_Exit_Low_Power_Mode(void);
//��ȡCAN0 ��׼֡ID
extern INT16U MSCAN0_GET_Stand_ID(void);
//��ȡCAN0 ��չ֡ID
extern INT32U MSCAN0_GET_Extended_ID(void);
//��ȡCAN0 ��չ֡PNG
extern INT32U MSCAN0_GET_Extended_PNG(INT32U ID);
extern INT8U MSCAN0_Get_Wake_Up_Flag(void);
extern INT8U MSCAN0_Is_Exist_Frame(void);
extern INT8U MSCAN0_Set_Exist_Frame(void);
////////////////�ⲿ�ӿ��ṩ////////////////////////////////////////////////////////////////////////////////////////////////////////
extern void MSCAN0_TJA1042_STB_SET(INT8U ON_OFF);
extern INT8U MSCAN0_TJA1042_STB_GET(void);
////////////////////////////////////////////////////////////////////////////////////////
//extern void CAN_APP_TX_Time_Reset(void);
//extern void CAN_Tx_Service(void);
void NM_D_BusOff_Recover(void);
//extern void CAN_TX_Data_K30_Init(void );
extern void BusoffRecover(void);
#endif
\ No newline at end of file
This diff is collapsed.
#include "Include.h"
uint8_t Sleep_Timer_100ms = 0;
uint8_t CAN_Timer_100ms = 0;
void WDT_Init(void)
{
wdt_reset();
COPCTL = WDT_PERIOD;
PLLCTL_PCE = 1;
}
void WDT_Reset_Service(void)
{
wdt_reset();
}
void bsp_Clk_Init(void)
{
INT32U dwTime = 0;
MODE = 0x80; //QTC 2016-11-16
CLKSEL_PLLSEL = 0;
PLLCTL_PLLON = 0;
SYNR = 0x43; //?????
REFDV = 0x80; //?????? 2??
POSTDIV = 0x00; //??????
PLLCTL_PLLON = 1;
while(!CRGFLG_LOCK) ; //??????
//{
// dwTime++;
//
// if(dwTime > 15000)
// {
// break;
// }
//}
if (FCLKDIV == 0)
FCLKDIV = 0x07; //FCLK = OSCCLK / 7 = 8M / 7 = 1.1238MHz
DFPROT = 0xFF; //Disable any protection set on DFlash
COPCTL = 0x47; //?????
PLLCTL_PRE = 1; //1 RTI continues running during Pseudo Stop Mode.
PLLCTL_PCE = 1; //1 COP continues running during Pseudo Stop Mode
PLLCTL_SCME = 0; //QTC 2016-11-6
PLLCTL_CME = 1; //QTC 2016-11-6
//PLLCTL_FM = 3; //4%
CLKSEL_PLLSEL = 1; //1 System clocks are derived from PLLCLK (fBUS = fPLL / 2).
CLKSEL_PSTP = 1; //???????????
CLKSEL_RTIWAI = 0; //RTI WAIT??????
CLKSEL_COPWAI = 0; //0 COP keeps running in Wait Mode.
CLKSEL_PLLWAI = 0; //0 IPLL keeps running in Wait Mode.
VREGHTCL = 0; //??????
//??
CRGINT_SCMIE = 0; //Osc
CRGINT_LOCKIE = 0; //Lock
//RTI
RTICTL_RTDEC = 1; //???
RTICTL_RTR = 0x5F; //200*10^3 4M:0x53;
// CRGINT_RTIE = 1; //RTI
VREGCTRL_LVIE = 0; //LV
IRQCR = 0; //IRQ
}
//
void Clock_Init(void) // INT8U onoff if(onoff==0) return;
{
bsp_Clk_Init();
/*
return;
//????OSCCLK??????
CLKSEL = 0x00;
//?????????
PLLCTL_SCME = 0;
PLLCTL_CME = 1;
// (SYNDIV+1)
//fVCO=2*fOSC*-----------
// (REFDIV+1)
// fVCO
//fPLL=-------------
// 2*POSTDIV
//fBUS=fPLL/2=32MHz
#if (OSCCLK == 4000000)
SYNR = 0x47;
REFDV = 0x40;
POSTDIV = 0x00;
#else
SYNR = 0x43;
REFDV = 0x80;
POSTDIV = 0x00;
#endif
while (!CRGFLG_LOCK); //?? fVCO ????
CLKSEL_PLLSEL = 1; //??PLLCLK??????
while (!FSTAT_CCIF); //wait for FTM reset to complete/
#if (OSCCLK == 4000000)
if (FCLKDIV == 0)
FCLKDIV = 0x03; //FCLK = OSCCLK / 3 = 4M / 3 = 1.333MHz
#else
if (FCLKDIV == 0)
FCLKDIV = 0x07; //FCLK = OSCCLK / 7 = 8M / 7 = 1.1238MHz
#endif
DFPROT = 0xFF; //Disable any protection set on DFlash
CLKSEL_PSTP = 1; //Oscillator?Stop???????(Pseudo Stop)
COPCTL = 0x47; //?????WDT_Init();
PLLCTL_PCE = 1; //????Pseudo Stop???????
PLLCTL_PRE=1; // 1 RTI continues running during Pseudo Stop Mode.
*/
}
void CheckOSC(void)
{
//��������ڲ�RC�𵴣��������³�ʼ��ʱ��
if((_CRGFLG.Bits.SCM == 1) || (CLKSEL_PLLSEL == 0))
{
DisableInterrupts;
Clock_Init();
EnableInterrupts;
}
}
/******************************************************************************
???:Enter_Stop_Mode
? ?:??????
? ?:?
???:?
******************************************************************************/
void Enter_Stop_Mode(void)
{
asm ANDCC #0x7F;
asm STOP;
}
/******************************************************************************
��������
�� �ܣ���ʼ��RTI
�� ������
����ֵ����
******************************************************************************/
void RTI_Init(void)
{
RealTimeClock.RollingCounter = 0;
RealTimeClock.BackupCounter = 0;
RealTimeClock.Year = RTC_DEFAULT_YEAR;
RealTimeClock.BackupYear = RTC_DEFAULT_YEAR;
RealTimeClock.Month = RTC_DEFAULT_MONTH;
RealTimeClock.Date = RTC_DEFAULT_DATE;
RealTimeClock.Hour = RTC_DEFAULT_HOUR;
RealTimeClock.Minute = RTC_DEFAULT_MINUTE;
RealTimeClock.Second = RTC_DEFAULT_SECOND;
RealTimeClock.LeapYear = Determine_Leap_Year(RealTimeClock.Year);
PLLCTL_PRE = 1; //1 RTI continues running during Pseudo Stop Mode.
//Real Time ʱ��Ƶ������
RTICTL = 0xDF; //Real Time = 8M / 800000 = 10HZ (100MS)
CRGINT_RTIE = 1;
}
/******************************************************************************
��������
�� �ܣ�RTIʵʱ��ʱ����
�� ������
����ֵ����
*******************************************************************************
ע �⣺�÷���������ÿ100ms������һ��
******************************************************************************/
void RTI_Timing_Service(void)
{
uint16_t Counter;
uint16_t SecInc;
if (RealTimeClock.Year != RealTimeClock.BackupYear)
{
RealTimeClock.LeapYear = Determine_Leap_Year(RealTimeClock.Year);
RealTimeClock.BackupYear = RealTimeClock.Year;
}
Counter = RealTimeClock.RollingCounter;
if (Counter - RealTimeClock.BackupCounter >= 10)
{
SecInc = (Counter - RealTimeClock.BackupCounter) / 10;
RealTimeClock.BackupCounter += SecInc * 10;
RealTimeClock.Second += (uint8_t)(SecInc % 60);
RealTimeClock.Minute += (uint8_t)(SecInc / 60);
if (RealTimeClock.Second >= 60)
{
RealTimeClock.Minute += RealTimeClock.Second / 60;
RealTimeClock.Second = RealTimeClock.Second % 60;
}
if (RealTimeClock.Minute >= 60)
{
RealTimeClock.Hour += RealTimeClock.Minute / 60;
RealTimeClock.Minute = RealTimeClock.Minute % 60;
}
if (RealTimeClock.Hour >= 24)
{
RealTimeClock.Date += RealTimeClock.Hour / 24;
RealTimeClock.Hour = RealTimeClock.Hour % 24;
}
switch (RealTimeClock.Month)
{
case 1 :
case 3 :
case 5 :
case 7 :
case 8 :
case 10 :
case 12 : if (RealTimeClock.Date > 31)
{
RealTimeClock.Date = 1;
RealTimeClock.Month++;
}
break;
case 4 :
case 6 :
case 9 :
case 11 : if (RealTimeClock.Date > 30)
{
RealTimeClock.Date = 1;
RealTimeClock.Month++;
}
break;
case 2 : if (RealTimeClock.LeapYear)
{
if (RealTimeClock.Date > 29)
{
RealTimeClock.Date = 1;
RealTimeClock.Month++;
}
}
else
{
if (RealTimeClock.Date > 28)
{
RealTimeClock.Date = 1;
RealTimeClock.Month++;
}
}
break;
}
if (RealTimeClock.Month > 12)
{
RealTimeClock.Month = 1;
RealTimeClock.Year++;
RealTimeClock.LeapYear = Determine_Leap_Year(RealTimeClock.Year);
RealTimeClock.BackupYear = RealTimeClock.Year;
}
}
}
/******************************************************************************
��������
�� �ܣ�������
�� ����Year����
����ֵ��1 - ������ 0 -��������
******************************************************************************/
uint8_t Determine_Leap_Year(uint16_t Year)
{
if (Year % 4 == 0)
{
if (Year % 100 != 0)
return 1;
else if (Year % 400 == 0)
return 1;
}
return 0;
}
// uint8_t Timer5sFlag;
// extern uint8_t DiagnosticReceived;
#pragma CODE_SEG __NEAR_SEG NON_BANKED
/******************************************************************************
��������
�� �ܣ�RTI�жϷ�����
RTIÿ100ms�����жϺ�,��������������Զ���1
RTI�жϻ����Խ���������˯���л���
�� ������
����ֵ���� 2017��5��27��16:47:20
******************************************************************************/
void interrupt RTI_ISR(void)
{
CAN_Timer_100ms = 1;
Sleep_Timer_100ms = 1;
RealTimeClock.RollingCounter++;
TIME_100MS = 1;
//PowerDN_Time_Add();
Data_Mileage_Rolling_Counter_Update_ISR();
CRGFLG_RTIF = 1;
}
#pragma CODE_SEG DEFAULT
/******************************************************************************
�� �� ����CLOCK.h
����������ʱ��ϵͳ���ü���ʼ��ͷ�ļ�
�� �ߣ�����
�� ����V1.0
�� �ڣ�2016.11.2
******************************************************************************/
#ifndef _CRG_H_
#define _CRG_H_
/******************************************************************************
ʱ��Ƶ��
******************************************************************************/
#define OSCCLK 8000000 /* ����Ƶ�� */
#define BUSCLK 32000000 /* ����Ƶ�� */
#define PLLCLK BUSCLK * 2 /* PLL Ƶ�� */
/******************************************************************************
αͣ��(Pseudo Stop)ģʽʹ��
******************************************************************************/
#define CRG_USE_PSEUDO_STOP_MODE 1
/******************************************************************************
ͣ��״̬��־
******************************************************************************/
//EXTERN volatile uint8_t CRGStopMode;
//#define CRG_STOP_MODE CRGStopMode
/******************************************************************************
���Ź���ʱ����ѡ��
******************************************************************************/
#define WDT_PERIOD WDT_PERIOD_4194304xTosc
/******************************************************************************
���Ź���ʱ����
******************************************************************************/
#define WDT_PERIOD_INVALID 0x00 /* ��Ч����,�ر� WDT */
#define WDT_PERIOD_16384xTosc 0x01 /* 2^14 ��OSCCLK���� */
#define WDT_PERIOD_65536xTosc 0x02 /* 2^16 ��OSCCLK���� */
#define WDT_PERIOD_262144xTosc 0x03 /* 2^18 ��OSCCLK���� */
#define WDT_PERIOD_1048576xTosc 0x04 /* 2^20 ��OSCCLK���� */
#define WDT_PERIOD_4194304xTosc 0x05 /* 2^22 ��OSCCLK���� */
#define WDT_PERIOD_8388608xTosc 0x06 /* 2^23 ��OSCCLK���� */
#define WDT_PERIOD_16777216xTosc 0x07 /* 2^24 ��OSCCLK���� */
/******************************************************************************
ʱ��Ƶ��������,��оƬ�ͺŶ���
******************************************************************************/
//����Ƶ��������
#define OSCCLK_MIN 4000000
#define OSCCLK_MAX 16000000
//PLL�ο�Ƶ��������
#define REFCLK_MIN 1000000
#define REFCLK_MAX 40000000
//PLLѹ������Ƶ��������
#define VCOCLK_MIN 32000000
#define VCOCLK_MAX 120000000
/******************************************************************************
���Ź���λ�궨��
******************************************************************************/
#define wdt_reset() __RESET_WATCHDOG()
/******************************************************************************
RTI��ʱ�ṹ
******************************************************************************/
typedef struct
{
uint16_t RollingCounter;
uint16_t BackupCounter;
uint16_t Year;
uint16_t BackupYear;
uint8_t Month;
uint8_t Date;
uint8_t Hour;
uint8_t Minute;
uint8_t Second;
uint8_t LeapYear;
}RTITimingStruct;
#define RTC_ROLLING_COUNTER RealTimeClock.RollingCounter
#define RTC_YEAR RealTimeClock.Year
#define RTC_MONTH RealTimeClock.Month
#define RTC_DATE RealTimeClock.Date
#define RTC_HOUR RealTimeClock.Hour
#define RTC_MINUTE RealTimeClock.Minute
#define RTC_SECOND RealTimeClock.Second
#define RTC_LEAP_YEAR RealTimeClock.LeapYear
/******************************************************************************
ʱ��Ĭ��ʱ��
******************************************************************************/
#define RTC_DEFAULT_YEAR 1985
#define RTC_DEFAULT_MONTH 1
#define RTC_DEFAULT_DATE 1
#define RTC_DEFAULT_HOUR 0
#define RTC_DEFAULT_MINUTE 0
#define RTC_DEFAULT_SECOND 0
EXTERN volatile RTITimingStruct RealTimeClock;
EXTERN uint8_t TIME_100MS;
/******************************************************************************
��������
******************************************************************************/
void WDT_Init(void);
void Clock_Init(void);
void CheckOSC(void);
void Enter_Stop_Mode(void);
void RTI_Init(void);
void RTI_Timing_Service(void);
uint8_t Determine_Leap_Year(uint16_t Year);
void WDT_Reset_Service(void);
#endif
#include "Common.h"
///////////////////////////////////////////////////////////////////
void App_SwapWord(INT32U *pData1,INT32U *pData2)
{
INT32U psw;
if((*pData1) > (*pData2))
{
psw = (*pData2);
(*pData2) = (*pData1);
(*pData1) = psw;
}
}
void App_SortNWord(INT32U *SortData,INT8U len)
{
INT8U n=0,m;
for(;n < len-1;n++)
{
for(m = n+1;m < len;m++)
{
App_SwapWord((SortData + n),(SortData + m));
}
}
}
void App_SwapWord16(INT16U *pData1,INT16U *pData2)
{
INT16U psw;
if((*pData1) > (*pData2))
{
psw = (*pData2);
(*pData2) = (*pData1);
(*pData1) = psw;
}
}
void App_SortNWord16(INT16U *SortData,INT8U len)
{
INT8U n=0,m;
for(;n < len-1;n++)
{
for(m = n+1;m < len;m++)
{
App_SwapWord16((SortData + n),(SortData + m));
}
}
}
void App_SwapWord08(INT8U *pData1,INT8U *pData2)
{
INT8U psw;
if((*pData1) > (*pData2))
{
psw = (*pData2);
(*pData2) = (*pData1);
(*pData1) = psw;
}
}
void App_SortNWord08(INT8U *SortData,INT8U len)
{
INT8U n=0,m;
for(;n < len-1;n++)
{
for(m = n+1;m < len;m++)
{
App_SwapWord08((SortData + n),(SortData + m));
}
}
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#ifndef _COMMON_H_
#define _COMMON_H_
typedef unsigned char INT8U;
typedef unsigned int INT16U;
typedef unsigned long INT32U;
///////////////////////////////////////////////////////////////////////////////////////////////////////
extern void App_SortNWord(INT32U *SortData,INT8U len);
extern void App_SortNWord16(INT16U *SortData,INT8U len);
extern void App_SortNWord08(INT8U *SortData,INT8U len);
///////////////////////////////////////////////////////////////////////////////////////////////////////
#endif
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
#include "Filter.h"
#include "Include.h"
#define Resistance_MAX 10000 //���������Ч��ֵ//0.1ŷ����
#define Resistance_Threshold 60 //0.1ŷ����
#define FilterCount_MAX 8 //���ö��ٴ�֮��ʼ�仯
unsigned int FuelResist = 0; //���˺����ֵ
unsigned char FuelResistanceDir = 0; //��ֵ�仯����
unsigned char FuelFilterCount = 0; //���˼�������
//����0.1ŷΪ��λ�ĵ���
//���0.1ŷΪ��λ�ĵ���//���0xFFFF�DZ�ʾ��Ч
//10ms����һ��
unsigned int Resistance_Filter_Update(unsigned int Resistance_IN)
{
/*if (Resistance_IN > Resistance_MAX)
{
FuelResist = 0xFFFF;
FuelFilterCount = 0;
FuelResistanceDir = 0;
}
else
{
if ((Resistance_IN > (FuelResist + Resistance_Threshold)) || (FuelResist > (Resistance_IN + Resistance_Threshold)))
{
FuelResist = Resistance_IN;
FuelFilterCount = 0;
}
else
{
if (Resistance_IN > FuelResist)
{
if (1 != FuelResistanceDir)
{
FuelResistanceDir = 1;
FuelFilterCount = 0;
}
else
{
FuelFilterCount++;
if (FuelFilterCount > FilterCount_MAX)
{
FuelFilterCount = 0;
FuelResist++;
}
}
}
else if (FuelResist > Resistance_IN)
{
if (2 != FuelResistanceDir)
{
FuelResistanceDir = 2;
FuelFilterCount = 0;
}
else
{
FuelFilterCount++;
if (FuelFilterCount > FilterCount_MAX)
{
FuelFilterCount = 0;
FuelResist--;
}
}
}
}
}*/
return FuelResist;
}
/////////��ʱ������////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//���������ģ�������µ���Ӧ������
void Analog_Update(void)
{
if(ADC_Read_Signal_Valid(0))
{
AnalogKL30Voltage = ADC_Read_Signal(0);
}
else
{
AnalogKL30Voltage = 0xFFFF;
}
//��˯��״̬ʱ��ȡ
if(_IGN_Sleep!=g_PowerIGN)
{
if(ADC_Read_Signal_Valid(1))
{
AnalogKL15Voltage = ADC_Read_Signal(1);
}
else
{
AnalogKL15Voltage = 0xFFFF;
}
}
//��ѹǰ��
if(ADC_Read_Signal_Valid(ADC_CH_AIR_PRESSURE_1))
{
AirPress_Front.u8_Analog_Valid = 1;
AirPress_Front.u16Analog_Volt = ADC_Read_Signal(ADC_CH_AIR_PRESSURE_1);
}
else
{
AirPress_Front.u8_Analog_Valid = 0;
AirPress_Front.u16Analog_Volt = 0xFFFF;
}
//��ѹ����
if(ADC_Read_Signal_Valid(ADC_CH_AIR_PRESSURE_2))
{
AirPress_Rear.u8_Analog_Valid = 1;
AirPress_Rear.u16Analog_Volt = ADC_Read_Signal(ADC_CH_AIR_PRESSURE_2);
}
else
{
AirPress_Rear.u8_Analog_Valid = 0;
AirPress_Rear.u16Analog_Volt = 0xFFFF;
}
//4����
//ȼ��
/* if(ADC_Read_Signal_Valid(ADC_CH_FUEL1_R))
{
AnalogFuelSensorRes = ADC_Read_Signal(ADC_CH_FUEL1_R);
}
else
{
AnalogFuelSensorRes = 0xFFFF;
}
*/
//���ذ���
/* if(ADC_Read_Signal_Valid(5))
{
Analog_Keys = ADC_Read_Signal(5);
}
else
{
Analog_Keys = 0xFFFF;
} */
}
#ifndef _FILTER_H_
#define _FILTER_H_
extern unsigned int FuelResist ; //˺ֵ
extern unsigned int Resistance_Filter_Update(unsigned int Resistance_IN);
extern void Analog_Update(void);
#endif
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
#ifndef _TIME0_H_
#define _TIME0_H_
void bsp_TIMER0_Init(void );
void bsp_TIMER1_Init(void );
void bsp_TIMER_Stop(void);
#endif
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
#ifndef COM_CAN_H
#define COM_CAN_H
//#include "Common_Interface.h"
#include "TYW_stdint.h"
void COM_CAN_Init(void);
void COM_RX_Process(void);
void COM_TX_Process(void);
void TXCANKL15Init(void);
void TXCANKL30WakeupInit(void);
extern uint8_t SingleOrDouble_CAN;
#endif
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment