📄 can.c
字号:
//****************************************************************************
// @Module CAN
// @Filename CAN.C
// @Project
//----------------------------------------------------------------------------
// @Controller Infineon C505C-2R
//
// @Compiler Keil
//
// @Codegenerator DAvE 2-0-0
//
// @Description This file contains all functions that use the CAN peripheral
//
//
//----------------------------------------------------------------------------
// @Date 2001-2-24 12:51:13
//****************************************************************************
///////////////////////////////////////////////////////////////////////////////
// Author:Li An Chuan //
// All copyrights for this routine are reserved;Unauthorized down loading or //
// other kinds of copying prohibited! //
///////////////////////////////////////////////////////////////////////////////
//Project includes
#include "MAIN.H"
#include "CAN.H"
#include "PER.H"
//***************************************************************************
// @Global Variables
//***************************************************************************
////////////////////初始化函数/////////////////////////////////////////////////
//****************************************************************************
// @Function void CAN_vInit(void)
//
//----------------------------------------------------------------------------
// @Description This function initializes the CAN component. It effects
// all necessary configurations of the SFR, depending on
// the selected operating mode. The configuration determines
// whether the CAN interrupts are to be released and the
// priority of the released interrupt.
//
//----------------------------------------------------------------------------
// @Returnvalue none
//
//----------------------------------------------------------------------------
// @Parameters none
//
//----------------------------------------------------------------------------
// @Date 01-2-24 12:51:13
//
//****************************************************************************
void CAN_vInit(void) reentrant
{
// ------------ CAN Control/Status Register --------------
// start the initialization of the CAN Modul
CR = 0x41; // set INIT and CCE
/// ------------ Bit Timing Register ---------------------
/// baudrate = 250.000 KBaud
/// there are 5 time quanta before sample point
/// there are 4 time quanta after sample point
/// the (re)synchronization jump width is 2 time quanta
BTR1 = 0x49; // set Bit Timing Register
BTR0 = 0x42;
GMS1 = 0x00; // set Global Mask Short Register 1
GMS0 = 0x00; // set Global Mask Short Register 0
UGML1 = 0xFF; // set Upper Global Mask Long Register 1
UGML0 = 0xFF; // set Upper Global Mask Long Register 0
LGML1 = 0xFF; // set Lower Global Mask Long Register 1
LGML0 = 0xFF; // set Lower Global Mask Long Register 0
UMLM1 = 0xFF; //set last message object Mask Register
UMLM0 = 0xFF;
LMLM1 = 0xFF;
LMLM0 = 0xFF;
// ------------------------------------------------------------------------
/// ----------------- Configure Message Object 1 ---------------------------
// ------------------------------------------------------------------------
/// Message object 1 is valid.
/// disable transmit interrupt
///ID=0x01;CVN-101M
CAN_OBJ[0].MCR1 = 0x55; // set Message Control Register 1
CAN_OBJ[0].MCR0 = 0x95; // set Message Control Register 0;
// enable MSGVAL and TXIE
/// message direction is transmit
/// standard 11-bit identifier
/// 8 valid data bytes
CAN_OBJ[0].MCFG = 0x88; // set Message Configuration Register
//data length 8;transmit direction
//ID=01;
CAN_OBJ[0].UAR1 = 0x20; // set Upper Arbitration Register 1
CAN_OBJ[0].UAR0 = 0x00; // set Upper Arbitration Register 0
CAN_OBJ[0].LAR1 = 0x00; // set Lower Arbitration Register 1
CAN_OBJ[0].LAR0 = 0x00; // set Lower Arbitration Register 0
CAN_OBJ[0].Data[0] = 0x00; // set data byte 0
CAN_OBJ[0].Data[1] = 0x00; // set data byte 1
CAN_OBJ[0].Data[2] = 0x00; // set data byte 2
CAN_OBJ[0].Data[3] = 0x00; // set data byte 3
CAN_OBJ[0].Data[4] = 0x00; // set data byte 4
CAN_OBJ[0].Data[5] = 0x00; // set data byte 5
CAN_OBJ[0].Data[6] = 0x00; // set data byte 6
CAN_OBJ[0].Data[7] = 0x00; // set data byte 7
// ------------------------------------------------------------------------
/// ----------------- Configure Message Object 2 ---------------------------
// ------------------------------------------------------------------------
/// Message object 2 is valid
/// enable receive interrupt
CAN_OBJ[1].MCR1 = 0x55; // set Message Control Register 1
CAN_OBJ[1].MCR0 = 0x99; // set Message Control Register 0
// enable MSGVAL and RXIE
/// message direction is receive
/// standard 11-bit identifier
CAN_OBJ[1].MCFG = 0x00; // set Message Configuration Register
CAN_OBJ[1].UAR1 = 0x40; // set Upper Arbitration Register 1
CAN_OBJ[1].UAR0 = 0x00; // set Upper Arbitration Register 0
CAN_OBJ[1].LAR1 = 0x00; // set Lower Arbitration Register 1
CAN_OBJ[1].LAR0 = 0x00; // set Lower Arbitration Register 0
//ID=0x02.
// ------------------------------------------------------------------------
/// ----------------- Configure Message Object 3 ---------------------------
/// message object 3 is not valid
CAN_OBJ[2].MCR1 = 0x55; // set Message Control Register 1
CAN_OBJ[2].MCR0 = 0x95; // set Message Control Register 0;
// enable MSGVAL and TXIE
/// message direction is transmit
/// standard 11-bit identifier
/// 8 valid data bytes
CAN_OBJ[2].MCFG = 0x88; // set Message Configuration Register
//data length 8;transmit direction
//ID=03;
CAN_OBJ[2].UAR1 = 0x60; // set Upper Arbitration Register 1
CAN_OBJ[2].UAR0 = 0x00; // set Upper Arbitration Register 0
CAN_OBJ[2].LAR1 = 0x00; // set Lower Arbitration Register 1
CAN_OBJ[2].LAR0 = 0x00; // set Lower Arbitration Register 0
CAN_OBJ[2].Data[0] = 0x00; // set data byte 0
CAN_OBJ[2].Data[1] = 0x00; // set data byte 1
CAN_OBJ[2].Data[2] = 0x00; // set data byte 2
CAN_OBJ[2].Data[3] = 0x00; // set data byte 3
CAN_OBJ[2].Data[4] = 0x00; // set data byte 4
CAN_OBJ[2].Data[5] = 0x00; // set data byte 5
CAN_OBJ[2].Data[6] = 0x00; // set data byte 6
CAN_OBJ[2].Data[7] = 0x00; // set data byte 7
// ------------------------------------------------------------------------
/// ----------------- Configure Message Object 4 ---------------------------
// ------------------------------------------------------------------------
/// message object 4 is not valid
CAN_OBJ[3].MCR1 = 0x55; // set Message Control Register 1
CAN_OBJ[3].MCR0 = 0x95; // set Message Control Register 0;
// enable MSGVAL and TXIE
/// message direction is transmit
/// standard 11-bit identifier
/// 8 valid data bytes
CAN_OBJ[3].MCFG = 0x88; // set Message Configuration Register
//data length 8;transmit direction
//ID=04;
CAN_OBJ[3].UAR1 = 0x80; // set Upper Arbitration Register 1
CAN_OBJ[3].UAR0 = 0x00; // set Upper Arbitration Register 0
CAN_OBJ[3].LAR1 = 0x00; // set Lower Arbitration Register 1
CAN_OBJ[3].LAR0 = 0x00; // set Lower Arbitration Register 0
CAN_OBJ[3].Data[0] = 0x00; // set data byte 0
CAN_OBJ[3].Data[1] = 0x00; // set data byte 1
CAN_OBJ[3].Data[2] = 0x00; // set data byte 2
CAN_OBJ[3].Data[3] = 0x00; // set data byte 3
CAN_OBJ[3].Data[4] = 0x00; // set data byte 4
CAN_OBJ[3].Data[5] = 0x00; // set data byte 5
CAN_OBJ[3].Data[6] = 0x00; // set data byte 6
CAN_OBJ[3].Data[7] = 0x00; // set data byte 7
// ------------------------------------------------------------------------
/// ----------------- Configure Message Object 5 ---------------------------
// ------------------------------------------------------------------------
/// message object 5 is not valid
CAN_OBJ[4].MCR1 = 0x55; // set Message Control Register 1
CAN_OBJ[4].MCR0 = 0x95; // set Message Control Register 0;
// enable MSGVAL and TXIE
/// message direction is transmit
/// standard 11-bit identifier
/// 8 valid data bytes
CAN_OBJ[4].MCFG = 0x88; // set Message Configuration Register
//data length 8;transmit direction
//ID=05;
CAN_OBJ[4].UAR1 = 0xa0; // set Upper Arbitration Register 1
CAN_OBJ[4].UAR0 = 0x00; // set Upper Arbitration Register 0
CAN_OBJ[4].LAR1 = 0x00; // set Lower Arbitration Register 1
CAN_OBJ[4].LAR0 = 0x00; // set Lower Arbitration Register 0
CAN_OBJ[4].Data[0] = 0x00; // set data byte 0
CAN_OBJ[4].Data[1] = 0x00; // set data byte 1
CAN_OBJ[4].Data[2] = 0x00; // set data byte 2
CAN_OBJ[4].Data[3] = 0x00; // set data byte 3
CAN_OBJ[4].Data[4] = 0x00; // set data byte 4
CAN_OBJ[4].Data[5] = 0x00; // set data byte 5
CAN_OBJ[4].Data[6] = 0x00; // set data byte 6
CAN_OBJ[4].Data[7] = 0x00; // set data byte 7
// ------------------------------------------------------------------------
/// ----------------- Configure Message Object 6 ---------------------------
// ------------------------------------------------------------------------
/// message object 5 is not valid
CAN_OBJ[5].MCR1 = 0x55; // set Message Control Register 1
CAN_OBJ[5].MCR0 = 0x95; // set Message Control Register 0;
// enable MSGVAL and TXIE
/// message direction is transmit
/// standard 11-bit identifier
/// 8 valid data bytes
CAN_OBJ[5].MCFG = 0x88; // set Message Configuration Register
//data length 8;transmit direction
//ID=05;
CAN_OBJ[5].UAR1 = 0xc0; // set Upper Arbitration Register 1
CAN_OBJ[5].UAR0 = 0x00; // set Upper Arbitration Register 0
CAN_OBJ[5].LAR1 = 0x00; // set Lower Arbitration Register 1
CAN_OBJ[5].LAR0 = 0x00; // set Lower Arbitration Register 0
CAN_OBJ[5].Data[0] = 0x00; // set data byte 0
CAN_OBJ[5].Data[1] = 0x00; // set data byte 1
CAN_OBJ[5].Data[2] = 0x00; // set data byte 2
CAN_OBJ[5].Data[3] = 0x00; // set data byte 3
CAN_OBJ[5].Data[4] = 0x00; // set data byte 4
CAN_OBJ[5].Data[5] = 0x00; // set data byte 5
CAN_OBJ[5].Data[6] = 0x00; // set data byte 6
CAN_OBJ[5].Data[7] = 0x00; // set data byte 7
// ------------------------------------------------------------------------
/// ----------------- Configure Message Object 7 ---------------------------
/// message object 7 is not valid
CAN_OBJ[6].MCR1 = 0x55; // set Message Control Register 1
CAN_OBJ[6].MCR0 = 0x55; // set Message Control Register 0
// ------------------------------------------------------------------------
/// ----------------- Configure Message Object 8 ---------------------------
// ------------------------------------------------------------------------
/// message object 8 is not valid
CAN_OBJ[7].MCR1 = 0x55; // set Message Control Register 1
CAN_OBJ[7].MCR0 = 0x55; // set Message Control Register 0
// ------------------------------------------------------------------------
/// ----------------- Configure Message Object 9 ---------------------------
// ------------------------------------------------------------------------
/// message object 9 is not valid
CAN_OBJ[8].MCR1 = 0x55; // set Message Control Register 1
CAN_OBJ[8].MCR0 = 0x55; // set Message Control Register 0
// ------------------------------------------------------------------------
/// ----------------- Configure Message Object 10 ---------------------------
// ------------------------------------------------------------------------
/// message object 10 is not valid
CAN_OBJ[9].MCR1 = 0x55; // set Message Control Register 1
CAN_OBJ[9].MCR0 = 0x55; // set Message Control Register 0
// ------------------------------------------------------------------------
/// ----------------- Configure Message Object 11 ---------------------------
// ------------------------------------------------------------------------
/// message object 11 is not valid
CAN_OBJ[10].MCR1 = 0x55; // set Message Control Register 1
CAN_OBJ[10].MCR0 = 0x55; // set Message Control Register 0
// ------------------------------------------------------------------------
/// ----------------- Configure Message Object 12 ---------------------------
// ------------------------------------------------------------------------
/// message object 12 is not valid
CAN_OBJ[11].MCR1 = 0x55; // set Message Control Register 1
CAN_OBJ[11].MCR0 = 0x55; // set Message Control Register 0
// ------------------------------------------------------------------------
/// ----------------- Configure Message Object 13 ---------------------------
// ------------------------------------------------------------------------
/// message object 13 is not valid
CAN_OBJ[12].MCR1 = 0x55; // set Message Control Register 1
CAN_OBJ[12].MCR0 = 0x55; // set Message Control Register 0
// ------------------------------------------------------------------------
/// ----------------- Configure Message Object 14 ---------------------------
// ------------------------------------------------------------------------
/// message object 14 is not valid
CAN_OBJ[13].MCR1 = 0x55; // set Message Control Register 1
CAN_OBJ[13].MCR0 = 0x55; // set Message Control Register 0
// ------------------------------------------------------------------------
/// ----------------- Configure Message Object 15 ---------------------------
// ------------------------------------------------------------------------
/// message object 15 is not valid
CAN_OBJ[14].MCR1 = 0x55; // set Message Control Register 1
CAN_OBJ[14].MCR0 = 0x55; // set Message Control Register 0
/// ------------ CAN Control Register ---------------------
// reset CCE and INIT
CR = 0x0a;//set IE of the Control Register.
//TEST=0;CCE=0;EIE=0;SIE=0;IE=1;INIT=0.
// CR =0x02; // IE=1;
}
////////////////////////与接收有关的函数/////////////////////////////////////////
//****************************************************************************
// @Function bit CAN_bNewData(unsigned char ObjNr)
//
//----------------------------------------------------------------------------
// @Description This function checks whether the selected RECEIVE OBJECT has
// received a new message. If so the function returns the
// value "1".
//
//----------------------------------------------------------------------------
// @Returnvalue 1 the message object has received a new message, else 0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -