#include
#include
#define MSCOMM_BUFFER_LENGTH 255
#define LED1_OFF() (PORTC |= 0x10)
#define LED1_ON() (PORTC &= ~0x10)
#define LED2_OFF() (PORTC |= 0x08)
#define LED2_ON() (PORTC &= ~0x08)
#define LED3_OFF() (PORTC |= 0x04)
#define LED3_ON() (PORTC &= ~0x04)
#define LED4_OFF() (PORTC |= 0x02)
#define LED4_ON() (PORTC &= ~0x02)
#define LED5_OFF() (PORTC |= 0x01)
#define LED5_ON() (PORTC &= ~0x01)
#define CS1_ON() (PORTC &= ~0x80)
#define CS1_OFF() (PORTC |= 0x80)
#define CS2_ON() (PORTC &= ~0x40)
#define CS2_OFF() (PORTC |= 0x40)
#define TJA1040_ENABLE() PORTD &= ~0x10
#define TJA1040_DISABLE() PORTD |= 0x10
enum InterruptERROR {
enum_AERG_ERROR,
enum_FERG_ERROR,
enum_CERG_ERROR,
enum_SERG_ERROR,
enum_BX_OK_ERROR,
enum_OVRTIM_ERROR,
enum_BOFFIT_ERROR
};
typedef char int8;
typedef unsigned char uint8;
typedef int int16;
typedef unsigned int uint16;
typedef long int32;
typedef unsigned long uint32;
typedef unsigned char BOOL;
#define MOB_MAX 15
#define MOBNB 4
#define NB_DATA_MAX 8
#define FALSE 0
#define TRUE 1
#define CAN_SOFT_RESET() (CANGCON = (1 << SWRES)) // RESET CAN InterFace
#define CAN_START() (CANGCON |= 0x02)
#define OS_ENTER_CRITICAL() CLI()
#define OS_EXIT_CRITICAL() SEI()
typedef enum {
CHANNEL_0, CHANNEL_1, CHANNEL_2, CHANNEL_3 ,
CHANNEL_4, CHANNEL_5 ,CHANNEL_6 , CHANNEL_7 ,
CHANNEL_8, CHANNEL_9 , CHANNEL_10, CHANNEL_11,
CHANNEL_12, CHANNEL_13, CHANNEL_14
}MOB_CHANNEL;
typedef enum {
CONF_DLC_0, CONF_DLC_1, CONF_DLC_2, CONF_DLC_3,
CONF_DLC_4, CONF_DLC_5, CONF_DLC_6, CONF_DLC_7,
CONF_DLC_8
} MOB_DLC;
#ifdef _MAIN_H
extern uint8 rec_Buf[16];
#endif
#ifdef _CAN_H
extern uint8 volatile CHA;
extern BOOL LED[5];
extern uint8 USART1_send_buffer[MSCOMM_BUFFER_LENGTH];
#endif
#ifdef _USART1_H
#endif
void CHA_Init(void);
void USART1_Init(void);
uint8 DISPLAY_CODE(uint8 ptr);
void DISPLAY_Init(int16 num);
void CAN_Init(void);
void CAN_Send(void);
void USART1_Begin_Send(void);
/* flag = CANGIT;
if (flag & (1 << BOFFIT)) // 《CANBUS 脱网》错误中断
{
LED_Init(enum_BOFFIT_ERROR);
CANGIT &= ~(1 << BOFFIT);
CAN_Init();
}
if (flag & (1 << OVRTIM)) // 《CAN定时器溢出》错误中断
{
LED_Init(enum_OVRTIM_ERROR);
CANGIT &= ~(1 << OVRTIM);
}
if (flag & (1 << BXOK))
{
LED_Init(enum_BX_OK_ERROR);
CANGIT &= ~(1 << BXOK);
}
if (flag & (1 << SERG)) // 《填充错误》错误中断
{
LED_Init(enum_SERG_ERROR);
CANGIT &= ~(1 << SERG);
}
if (flag & (1 << CERG)) // 《CRC错误》错误中断
{
LED_Init(enum_CERG_ERROR);
CANGIT &= ~(1 << CERG);
}
if (flag & (1 << FERG)) // 《帧格式错误》错误中断
{
LED_Init(enum_FERG_ERROR);
CANGIT &= ~(1 << FERG);
}
if (flag & (1 << AERG)) // 《应答错误》错误中断
{
LED_Init(enum_AREG_ERROR);
CANGIT &= ~(1 << AERG);
}
void LED_Init(unsigned char Error_code)
{
switch (Error_code)
{
case enum_AREG_ERROR:
LED[0] = TRUE;
break;
case enum_FERG_ERROR:
LED[0] = TRUE;
break;
case enum_CERG_ERROR:
LED[1] = TRUE;
break;
case enum_BX_OK_ERROR:
LED[2] = TRUE;
break;
case enum_OVRTIM_ERROR:
LED[3] = TRUE;
break;
case enum_BOFFIT_ERROR:
LED[4] = TRUE;
break;
}
}
///////////////////////////////////////////////////////////////////////////////////////
//CANGCON=CAN通用控制寄存器
// ABRQ OVRQ TTC SYNTTC LISTEN TEST ENA/STB SWRES
// bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0
///////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////
//CANPAGE=CAN 邮箱(MOB)寄存器
//bit7~bit4=邮箱号(0~14)
//bit3=AINC:自动递增FIFO CAN数据缓冲区索引号
// 0=自动递增索引号
// 1=不自动递增索引号
//bit2~bit0:CAN FIFO数据缓冲区索引号
///////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////
//CANSTMOB=邮箱状态寄存器
// DLCW TXOK RXOK BERR SERR CERR FERR AERR
// bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0
//-------------------------------------------------------------------------------------
// bit7=DLCW
// bit6=TXOK:Transmit OK
// bit5=RXOK:Receive OK
// bit4=BERR:Bit Error(Only in Transmission)
// bit3=SERR: Stuff Error
// bit2=CERR: CRC Error
// bit1=FERR:Form Error
// bit0=AERR: Acknowledgment Error
///////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////
//CANCDMOB=邮箱控制和数据长度码寄存器
// bit7:6=
// 00=禁止
// 01=允许传输
// 10=允许接收
// 11=
// bit5=
// bit4=IDE:Identifier Extension
// 0=CAN Standard rev 2.0A (identifier length = 11 bits)
// 1=CAN Standard rev 2.0B (identifier length = 29 bits)
// bit3:0=DLC:消息中数据字段的字节数
///////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////
//CANIDT1,CANIDT2,CANIDT3,CANIDT4=CAN标识码寄存器(CAN 2.0A)
//bit31:21=IDT10:0:Identifier Tag
///////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////
//CANIDM1,CANIDM2,CANIDM3,CANIDM4=CAN标识码屏蔽寄存器(CAN 2.0A)
//bit31:21=IDT10:0:Identifier Tag
///////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////
//CANGIE=CAN通用中断使能寄存器
// ENIT ENBOFF ENRX ENTX ENERR ENBX ENERG ENOVRT
//-------------------------------------------------------------------------------------
// bit7=ENIT:全局允许
// bit6=ENBOFF:BUS OFF允许
// bit5=ENRX:接收允许
// bit4=ENTX:发送允许
// bit3=ENERR:邮箱错误允许
// bit2=ENBX: 数据缓冲帧允许
// bit1=ENERG:通用错误允许
// bit0=ENOVRT:CAN定时器重启允许
///////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////
//CANEN1=邮箱使能寄存器
//-------------------------------------------------------------------------------------
// bit14:0=Enable MOB
// 0=MOB available for a new transmission or reception.
// 1=MOB in use.
// bit15 =Reserved Bit
///////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////
//CANIE1=邮箱中断使能寄存器
//-------------------------------------------------------------------------------------
// bit14:0=Interrupt Enable by MOB
// 0=interrupt disabled.
// 1=MOB interrupt enabled.
// bit15 =Reserved Bit
///////////////////////////////////////////////////////////////////////////////////////
//--------------------------------------------------------------------
// GROUP1
//--------------------------------------------------------------------
// (1)、邮箱缓冲区14-邮箱缓冲区0(MOB14-MOB0)
// (2)、CAN数据缓冲区
//--------------------------------------------------------------------
// GROUP2
//--------------------------------------------------------------------
// (3)、CAN控制寄存器
// (4)、CAN状态寄存器
// (5)、CAN标识码寄存器
// (6)、CAN标识�
- 1
- 2
- 3
- 4
- 5
前往页