1、接线图


PTB13 — INT 接收数据中断引脚
PTB14 — CLK 时钟
PTB15 — MISO 接收
PTB16 — MOSI 发送
PTB17 — CSN 片选
2、软件SPI
2.1、GPIO口配置

鼠标放在如下位置右击选择Pin Functional Properities,进入引脚属性配置

PTB13引脚配置如下:

PTB14引脚配置如下:

PTB15引脚配置如下:

PTB16引脚配置如下:

PTB17引脚配置如下:

2.2、参考代码
2.2.1、mcp2515.c
#include "Cpu.h"
#include "mcp2515.h"
#include "delay.h"//MCP2515波特率预分频
#define CAN_10Kbps 0x31
#define CAN_25Kbps 0x13
#define CAN_50Kbps 0x09
#define CAN_100Kbps 0x04
#define CAN_125Kbps 0x03
#define CAN_250Kbps 0x01
#define CAN_500Kbps 0x00#define MCP2515_CS(x) PINS_DRV_WritePin(PTB,17,x)
#define MCP2515_CLK(x) PINS_DRV_WritePin(PTB,14,x)
#define MCP2515_MISO ((PINS_DRV_ReadPins(PTB)>>15)&0x01)
#define MCP2515_MOSI(x) PINS_DRV_WritePin(PTB,16,x)unsigned char SPI_ReadByte(void)
{unsigned char i,rByte=0;MCP2515_CLK(0);for(i=0;i<8;i++){MCP2515_CLK(1);rByte<<=1;rByte|=MCP2515_MISO;MCP2515_CLK(0);}return rByte;
}
void SPI_SendByte(unsigned char dt)
{unsigned char i;for(i=0;i<8;i++){MCP2515_CLK(0);if((dt<<i)&0x80)MCP2515_MOSI(1);elseMCP2515_MOSI(0);MCP2515_CLK(1);}MCP2515_CLK(0);
}
void MCP2515_WriteByte(unsigned char addr,unsigned char dat)
{MCP2515_CS(0); //置MCP2515的CS为低电平SPI_SendByte(CAN_WRITE); //发送写命令SPI_SendByte(addr); //发送地址SPI_SendByte(dat); //写入数据MCP2515_CS(1); //置MCP2515的CS为高电平
}
unsigned char MCP2515_ReadByte(unsigned char addr)
{unsigned char rByte;MCP2515_CS(0); //置MCP2515的CS为低电平SPI_SendByte(CAN_READ); //发送读命令SPI_SendByte(addr); //发送地址rByte=SPI_ReadByte(); //读取数据MCP2515_CS(1); //置MCP2515的CS为高电平return rByte; //返回读到的一个字节数据
}
void MCP2515_Reset(void)
{MCP2515_CS(0); //置MCP2515的CS为低电平SPI_SendByte(CAN_RESET); //发送寄存器复位命令delay_ms(100);MCP2515_CS(1); //置MCP2515的CS为高电平
}
void MCP2515_Init(void)
{unsigned char temp=0;MCP2515_Reset(); //发送复位指令软件复位MCP2515delay_ms(1); //通过软件延时约nms(不准确)//设置波特率为125Kbps//set CNF1,SJW=00,长度为1TQ,BRP=49,TQ=[2*(BRP+1)]/Fsoc=2*50/8M=12.5usMCP2515_WriteByte(CNF1,CAN_500Kbps);//set CNF2,SAM=0,在采样点对总线进行一次采样,PHSEG1=(2+1)TQ=3TQ,PRSEG=(0+1)TQ=1TQMCP2515_WriteByte(CNF2,0x80|PHSEG1_3TQ|PRSEG_1TQ);//set CNF3,PHSEG2=(2+1)TQ=3TQ,同时当CANCTRL.CLKEN=1时设定CLKOUT引脚为时间输出使能位MCP2515_WriteByte(CNF3,PHSEG2_3TQ);// MCP2515_WriteByte(TXB0SIDH,0xFF);//发送缓冲器0标准标识符高位
// MCP2515_WriteByte(TXB0SIDL,0xE0);//发送缓冲器0标准标识符低位MCP2515_WriteByte(RXB0SIDH,0x00);//清空接收缓冲器0的标准标识符高位MCP2515_WriteByte(RXB0SIDL,0x00);//清空接收缓冲器0的标准标识符低位MCP2515_WriteByte(RXB0CTRL,0x20);//仅仅接收标准标识符的有效信息MCP2515_WriteByte(RXB0DLC,DLC_8);//设置接收数据的长度为8个字节MCP2515_WriteByte(RXF0SIDH,0x00);//配置验收滤波寄存器n标准标识符高位MCP2515_WriteByte(RXF0SIDL,0x00);//配置验收滤波寄存器n标准标识符低位MCP2515_WriteByte(RXM0SIDH,0x00);//配置验收屏蔽寄存器n标准标识符高位MCP2515_WriteByte(RXM0SIDL,0x00);//配置验收屏蔽寄存器n标准标识符低位
/*MCP2515_WriteByte(RXF0SIDH,0xFF);//配置验收滤波寄存器n标准标识符高位MCP2515_WriteByte(RXF0SIDL,0xE0);//配置验收滤波寄存器n标准标识符低位MCP2515_WriteByte(RXM0SIDH,0xFF);//配置验收屏蔽寄存器n标准标识符高位MCP2515_WriteByte(RXM0SIDL,0xE0);//配置验收屏蔽寄存器n标准标识符低位
*/MCP2515_WriteByte(CANINTF,0x00);//清空CAN中断标志寄存器的所有位(必须由MCU清空)MCP2515_WriteByte(CANINTE,0x01);//配置CAN中断使能寄存器的接收缓冲器0满中断使能,其它位禁止中断MCP2515_WriteByte(CANCTRL,REQOP_NORMAL|CLKOUT_ENABLED);//将MCP2515设置为正常模式,退出配置模式temp=MCP2515_ReadByte(CANSTAT);//读取CAN状态寄存器的值if(OPMODE_NORMAL!=(temp&&0xE0))//判断MCP2515是否已经进入正常模式{MCP2515_WriteByte(CANCTRL,REQOP_NORMAL|CLKOUT_ENABLED);//再次将MCP2515设置为正常模式,退出配置模式}
}/*******************************************************************************
* 函数名 : CAN_Send_Buffer
* 描述 : CAN发送指定长度的数据
* 输入 : *CAN_TX_Buf(待发送数据缓冲区指针),len(待发送数据长度)
* 输出 : 无
* 返回值 : 无
* 说明 : 无
*******************************************************************************/
void CAN_Send_Buffer(unsigned char *CAN_TX_Buf,unsigned char len)
{unsigned char j,dly,count;count=0;while(count<len){dly=0;while((MCP2515_ReadByte(TXB0CTRL)&0x08) && (dly<50))//快速读某些状态指令,等待TXREQ标志清零{delay_ms(1);//通过软件延时约nms(不准确)dly++;}for(j=0;j<8;){MCP2515_WriteByte(TXB0D0+j,CAN_TX_Buf[count++]);//将待发送的数据写入发送缓冲寄存器j++;if(count>=len) break;}MCP2515_WriteByte(TXB0DLC,j);//将本帧待发送的数据长度写入发送缓冲器0的发送长度寄存器MCP2515_CS(0);MCP2515_WriteByte(TXB0CTRL,0x08);//请求发送报文MCP2515_CS(1);}
}void CANSendData(unsigned int id,unsigned char *CAN_TX_Buf,unsigned char len)
{unsigned char j,dly,count;count=0;while(count<len){dly=0;while((MCP2515_ReadByte(TXB0CTRL)&0x08) && (dly<50))//快速读某些状态指令,等待TXREQ标志清零{delay_ms(1);//通过软件延时约nms(不准确)dly++;}unsigned char DH = (unsigned char)(id >> 3);unsigned char DL = (unsigned char)((id & 0x07) << 5);MCP2515_WriteByte(TXB0SIDH,DH);//发送缓冲器0标准标识符高位MCP2515_WriteByte(TXB0SIDL,DL);//发送缓冲器0标准标识符低位for(j=0;j<8;){MCP2515_WriteByte(TXB0D0+j,CAN_TX_Buf[count++]);//将待发送的数据写入发送缓冲寄存器j++;if(count>=len) break;}MCP2515_WriteByte(TXB0DLC,j);//将本帧待发送的数据长度写入发送缓冲器0的发送长度寄存器MCP2515_CS(0);MCP2515_WriteByte(TXB0CTRL,0x08);//请求发送报文MCP2515_CS(1);}
}unsigned char CAN_Receive_Buffer(unsigned char *CAN_RX_Buf)
{unsigned char i=0,len=0,temp=0;temp = MCP2515_ReadByte(CANINTF);if(temp & 0x01){len=MCP2515_ReadByte(RXB0DLC);//读取接收缓冲器0接收到的数据长度(0~8个字节)while(i<len){CAN_RX_Buf[i]=MCP2515_ReadByte(RXB0D0+i);//把CAN接收到的数据放入指定缓冲区i++;}}MCP2515_WriteByte(CANINTF,0);//清除中断标志位(中断标志寄存器必须由MCU清零)return len;
}static unsigned int get_standar_id(void)
{unsigned char id_dh = 0,id_dl = 0;unsigned int return_value = 0,id = 0;id_dh = MCP2515_ReadByte(RXB0SIDH);id_dl = MCP2515_ReadByte(RXB0SIDL);id = (id_dh << 3);id = id + (id_dl >> 5);return_value = id;return (return_value);
}unsigned char CANReceiveBuffer(unsigned int *id,unsigned char *CAN_RX_Buf)
{unsigned char i=0,len=0,temp=0;temp = MCP2515_ReadByte(CANINTF);if(temp & 0x01){*id = get_standar_id();len=MCP2515_ReadByte(RXB0DLC);//读取接收缓冲器0接收到的数据长度(0~8个字节)while(i<len){CAN_RX_Buf[i]=MCP2515_ReadByte(RXB0D0+i);//把CAN接收到的数据放入指定缓冲区i++;}}MCP2515_WriteByte(CANINTF,0);//清除中断标志位(中断标志寄存器必须由MCU清零)return len;
}
2.2.2、mcp2515.h
#ifndef __MCP2515_H_
#define __MCP2515_H_/* Configuration Registers */
#define CANSTAT 0x0E
#define CANCTRL 0x0F
#define BFPCTRL 0x0C
#define TEC 0x1C
#define REC 0x1D
#define CNF3 0x28
#define CNF2 0x29
#define CNF1 0x2A
#define CANINTE 0x2B
#define CANINTF 0x2C
#define EFLG 0x2D
#define TXRTSCTRL 0x0D/* Recieve Filters */
#define RXF0SIDH 0x00
#define RXF0SIDL 0x01
#define RXF0EID8 0x02
#define RXF0EID0 0x03
#define RXF1SIDH 0x04
#define RXF1SIDL 0x05
#define RXF1EID8 0x06
#define RXF1EID0 0x07
#define RXF2SIDH 0x08
#define RXF2SIDL 0x09
#define RXF2EID8 0x0A
#define RXF2EID0 0x0B
#define RXF3SIDH 0x10
#define RXF3SIDL 0x11
#define RXF3EID8 0x12
#define RXF3EID0 0x13
#define RXF4SIDH 0x14
#define RXF4SIDL 0x15
#define RXF4EID8 0x16
#define RXF4EID0 0x17
#define RXF5SIDH 0x18
#define RXF5SIDL 0x19
#define RXF5EID8 0x1A
#define RXF5EID0 0x1B/* Receive Masks */
#define RXM0SIDH 0x20
#define RXM0SIDL 0x21
#define RXM0EID8 0x22
#define RXM0EID0 0x23
#define RXM1SIDH 0x24
#define RXM1SIDL 0x25
#define RXM1EID8 0x26
#define RXM1EID0 0x27/* Tx Buffer 0 */
#define TXB0CTRL 0x30
#define TXB0SIDH 0x31
#define TXB0SIDL 0x32
#define TXB0EID8 0x33
#define TXB0EID0 0x34
#define TXB0DLC 0x35
#define TXB0D0 0x36
#define TXB0D1 0x37
#define TXB0D2 0x38
#define TXB0D3 0x39
#define TXB0D4 0x3A
#define TXB0D5 0x3B
#define TXB0D6 0x3C
#define TXB0D7 0x3D/* Tx Buffer 1 */
#define TXB1CTRL 0x40
#define TXB1SIDH 0x41
#define TXB1SIDL 0x42
#define TXB1EID8 0x43
#define TXB1EID0 0x44
#define TXB1DLC 0x45
#define TXB1D0 0x46
#define TXB1D1 0x47
#define TXB1D2 0x48
#define TXB1D3 0x49
#define TXB1D4 0x4A
#define TXB1D5 0x4B
#define TXB1D6 0x4C
#define TXB1D7 0x4D/* Tx Buffer 2 */
#define TXB2CTRL 0x50
#define TXB2SIDH 0x51
#define TXB2SIDL 0x52
#define TXB2EID8 0x53
#define TXB2EID0 0x54
#define TXB2DLC 0x55
#define TXB2D0 0x56
#define TXB2D1 0x57
#define TXB2D2 0x58
#define TXB2D3 0x59
#define TXB2D4 0x5A
#define TXB2D5 0x5B
#define TXB2D6 0x5C
#define TXB2D7 0x5D/* Rx Buffer 0 */
#define RXB0CTRL 0x60
#define RXB0SIDH 0x61
#define RXB0SIDL 0x62
#define RXB0EID8 0x63
#define RXB0EID0 0x64
#define RXB0DLC 0x65
#define RXB0D0 0x66
#define RXB0D1 0x67
#define RXB0D2 0x68
#define RXB0D3 0x69
#define RXB0D4 0x6A
#define RXB0D5 0x6B
#define RXB0D6 0x6C
#define RXB0D7 0x6D/* Rx Buffer 1 */
#define RXB1CTRL 0x70
#define RXB1SIDH 0x71
#define RXB1SIDL 0x72
#define RXB1EID8 0x73
#define RXB1EID0 0x74
#define RXB1DLC 0x75
#define RXB1D0 0x76
#define RXB1D1 0x77
#define RXB1D2 0x78
#define RXB1D3 0x79
#define RXB1D4 0x7A
#define RXB1D5 0x7B
#define RXB1D6 0x7C
#define RXB1D7 0x7D/******************************************************************** Bit register masks ********************************************************************//* TXBnCTRL */
#define TXREQ 0x08
#define TXP 0x03/* RXBnCTRL */
#define RXM 0x60
#define BUKT 0x04/* CANCTRL */
#define REQOP 0xE0
#define ABAT 0x10
#define OSM 0x08
#define CLKEN 0x04
#define CLKPRE 0x03/* CANSTAT */
#define REQOP 0xE0
#define ICOD 0x0E/* CANINTE */
#define RX0IE 0x01
#define RX1IE 0x02
#define TX0IE 0x04
#define TX1IE 0x80
#define TX2IE 0x10
#define ERRIE 0x20
#define WAKIE 0x40
#define MERRE 0x80/* CANINTF */
#define RX0IF 0x01
#define RX1IF 0x02
#define TX0IF 0x04
#define TX1IF 0x80
#define TX2IF 0x10
#define ERRIF 0x20
#define WAKIF 0x40
#define MERRF 0x80/* BFPCTRL */
#define B1BFS 0x20
#define B0BFS 0x10
#define B1BFE 0x08
#define B0BFE 0x04
#define B1BFM 0x02
#define B0BFM 0x01/* CNF1 Masks */
#define SJW 0xC0
#define BRP 0x3F/* CNF2 Masks */
#define BTLMODE 0x80
#define SAM 0x40
#define PHSEG1 0x38
#define PRSEG 0x07/* CNF3 Masks */
#define WAKFIL 0x40
#define PHSEG2 0x07/* TXRTSCTRL Masks */
#define TXB2RTS 0x04
#define TXB1RTS 0x02
#define TXB0RTS 0x01/******************************************************************** Bit Timing Configuration ********************************************************************//* CNF1 */
#define SJW_1TQ 0x40
#define SJW_2TQ 0x80
#define SJW_3TQ 0x90
#define SJW_4TQ 0xC0/* CNF2 */
#define BTLMODE_CNF3 0x80
#define BTLMODE_PH1_IPT 0x00#define SMPL_3X 0x40
#define SMPL_1X 0x00#define PHSEG1_8TQ 0x38
#define PHSEG1_7TQ 0x30
#define PHSEG1_6TQ 0x28
#define PHSEG1_5TQ 0x20
#define PHSEG1_4TQ 0x18
#define PHSEG1_3TQ 0x10
#define PHSEG1_2TQ 0x08
#define PHSEG1_1TQ 0x00#define PRSEG_8TQ 0x07
#define PRSEG_7TQ 0x06
#define PRSEG_6TQ 0x05
#define PRSEG_5TQ 0x04
#define PRSEG_4TQ 0x03
#define PRSEG_3TQ 0x02
#define PRSEG_2TQ 0x01
#define PRSEG_1TQ 0x00/* CNF3 */
#define PHSEG2_8TQ 0x07
#define PHSEG2_7TQ 0x06
#define PHSEG2_6TQ 0x05
#define PHSEG2_5TQ 0x04
#define PHSEG2_4TQ 0x03
#define PHSEG2_3TQ 0x02
#define PHSEG2_2TQ 0x01
#define PHSEG2_1TQ 0x00#define SOF_ENABLED 0x80
#define WAKFIL_ENABLED 0x40
#define WAKFIL_DISABLED 0x00/******************************************************************** Control/Configuration Registers ********************************************************************//* CANINTE */
#define RX0IE_ENABLED 0x01
#define RX0IE_DISABLED 0x00
#define RX1IE_ENABLED 0x02
#define RX1IE_DISABLED 0x00
#define G_RXIE_ENABLED 0x03
#define G_RXIE_DISABLED 0x00#define TX0IE_ENABLED 0x04
#define TX0IE_DISABLED 0x00
#define TX1IE_ENABLED 0x08
#define TX2IE_DISABLED 0x00
#define TX2IE_ENABLED 0x10
#define TX2IE_DISABLED 0x00
#define G_TXIE_ENABLED 0x1C
#define G_TXIE_DISABLED 0x00#define ERRIE_ENABLED 0x20
#define ERRIE_DISABLED 0x00
#define WAKIE_ENABLED 0x40
#define WAKIE_DISABLED 0x00
#define IVRE_ENABLED 0x80
#define IVRE_DISABLED 0x00/* CANINTF */
#define RX0IF_SET 0x01
#define RX0IF_RESET 0x00
#define RX1IF_SET 0x02
#define RX1IF_RESET 0x00
#define TX0IF_SET 0x04
#define TX0IF_RESET 0x00
#define TX1IF_SET 0x08
#define TX2IF_RESET 0x00
#define TX2IF_SET 0x10
#define TX2IF_RESET 0x00
#define ERRIF_SET 0x20
#define ERRIF_RESET 0x00
#define WAKIF_SET 0x40
#define WAKIF_RESET 0x00
#define IVRF_SET 0x80
#define IVRF_RESET 0x00/* CANCTRL */
#define REQOP_CONFIG 0x80
#define REQOP_LISTEN 0x60
#define REQOP_LOOPBACK 0x40
#define REQOP_SLEEP 0x20
#define REQOP_NORMAL 0x00#define ABORT 0x10#define OSM_ENABLED 0x08#define CLKOUT_ENABLED 0x04
#define CLKOUT_DISABLED 0x00
#define CLKOUT_PRE_8 0x03
#define CLKOUT_PRE_4 0x02
#define CLKOUT_PRE_2 0x01
#define CLKOUT_PRE_1 0x00/* CANSTAT */
#define OPMODE_CONFIG 0x80
#define OPMODE_LISTEN 0x60
#define OPMODE_LOOPBACK 0x40
#define OPMODE_SLEEP 0x20
#define OPMODE_NORMAL 0x00/* RXBnCTRL */
#define RXM_RCV_ALL 0x60
#define RXM_VALID_EXT 0x40
#define RXM_VALID_STD 0x20
#define RXM_VALID_ALL 0x00#define RXRTR_REMOTE 0x08
#define RXRTR_NO_REMOTE 0x00#define BUKT_ROLLOVER 0x04
#define BUKT_NO_ROLLOVER 0x00#define FILHIT0_FLTR_1 0x01
#define FILHIT0_FLTR_0 0x00#define FILHIT1_FLTR_5 0x05
#define FILHIT1_FLTR_4 0x04
#define FILHIT1_FLTR_3 0x03
#define FILHIT1_FLTR_2 0x02
#define FILHIT1_FLTR_1 0x01
#define FILHIT1_FLTR_0 0x00/* TXBnCTRL */
#define TXREQ_SET 0x08
#define TXREQ_CLEAR 0x00#define TXP_HIGHEST 0x03
#define TXP_INTER_HIGH 0x02
#define TXP_INTER_LOW 0x01
#define TXP_LOWEST 0x00/******************************************************************** Register Bit Masks ********************************************************************/#define DLC_0 0x00#define DLC_1 0x01#define DLC_2 0x02#define DLC_3 0x03#define DLC_4 0x04#define DLC_5 0x05#define DLC_6 0x06#define DLC_7 0x07#define DLC_8 0x08/******************************************************************** CAN SPI commands ********************************************************************/#define CAN_RESET 0xC0
#define CAN_READ 0x03
#define CAN_WRITE 0x02
#define CAN_RTS 0x80
#define CAN_RTS_TXB0 0x81
#define CAN_RTS_TXB1 0x82
#define CAN_RTS_TXB2 0x84
#define CAN_RD_STATUS 0xA0
#define CAN_BIT_MODIFY 0x05
#define CAN_RX_STATUS 0xB0
#define CAN_RD_RX_BUFF 0x90
#define CAN_LOAD_TX 0X40/******************************************************************** Miscellaneous ********************************************************************/#define DUMMY_BYTE 0x00
#define TXB0 0x31
#define TXB1 0x41
#define TXB2 0x51
#define RXB0 0x61
#define RXB1 0x71
#define EXIDE_SET 0x08
#define EXIDE_RESET 0x00void MCP2515_Init(void);
void CAN_Send_Buffer(unsigned char *CAN_TX_Buf,unsigned char len);
unsigned char CAN_Receive_Buffer(unsigned char *CAN_RX_Buf);
void CANSendData(unsigned int id,unsigned char *CAN_TX_Buf,unsigned char len);
unsigned char CANReceiveBuffer(unsigned int *id,unsigned char *CAN_RX_Buf);
#endif
2.2.3、main.c
#include "Cpu.h"
#include "delay.h"
#include "mcp2515.h"volatile int exit_code = 0;/* User includes (#include below this line is not maintained by Processor Expert) *//*! \brief The main function for the project.\details The startup initialization sequence is the following:* - startup asm routine* - main()
*/
unsigned char debug_flag = 0;
void MCP2515_RECEIVE_IRQ(void)
{uint32_t receive = PINS_DRV_GetPortIntFlag(PORTB) & ( 1 << 13 ); //获取中断标志位状态/*检测中断*/if(receive != 0){if( ((receive >> 13) & 0x01) == 1 ){debug_flag = 1;}}PINS_DRV_ClearPortIntFlagCmd(PORTB);
}
int main(void)
{/* Write your local variable definition here *//*** Processor Expert internal initialization. DON'T REMOVE THIS CODE!!! ***/#ifdef PEX_RTOS_INITPEX_RTOS_INIT(); /* Initialization of the selected RTOS. Macro is defined by the RTOS component. */#endif/*** End of Processor Expert internal initialization. ***//* Write your code here *//* For example: for(;;) { } */CLOCK_SYS_Init(g_clockManConfigsArr, CLOCK_MANAGER_CONFIG_CNT,g_clockManCallbacksArr, CLOCK_MANAGER_CALLBACK_CNT);CLOCK_SYS_UpdateConfiguration(0U, CLOCK_MANAGER_POLICY_AGREEMENT);PINS_DRV_Init(NUM_OF_CONFIGURED_PINS, g_pin_mux_InitConfigArr); //初始化IO/*设置中断触发条件*/PINS_DRV_SetPinIntSel(PORTB,13,PORT_INT_FALLING_EDGE); //设置下降沿触发中断/*设置并使能中断函数*/INT_SYS_InstallHandler(PORTB_IRQn,&MCP2515_RECEIVE_IRQ,NULL);//安装函数名称为 PTC_EXT_IRQ 的中断函数INT_SYS_EnableIRQ(PORTB_IRQn);MCP2515_Init();unsigned char CAN_R_Buffer[8]; //CAN接收数据保存缓冲区for(;;){if(debug_flag == 1){debug_flag = 0;unsigned char len;unsigned int id;len = CANReceiveBuffer(&id,CAN_R_Buffer);unsigned char buffer[8];buffer[0] = CAN_R_Buffer[0];buffer[1] = CAN_R_Buffer[1];buffer[2] = CAN_R_Buffer[2];buffer[3] = CAN_R_Buffer[3];buffer[4] = CAN_R_Buffer[4];buffer[5] = CAN_R_Buffer[5];buffer[6] = CAN_R_Buffer[6];buffer[7] = CAN_R_Buffer[7];CANSendData(id,buffer,8);}}/*** Don't write any code pass this line, or it will be deleted during code generation. ***//*** RTOS startup code. Macro PEX_RTOS_START is defined by the RTOS component. DON'T MODIFY THIS CODE!!! ***/#ifdef PEX_RTOS_STARTPEX_RTOS_START(); /* Startup of the selected RTOS. Macro is defined by the RTOS component. */#endif/*** End of RTOS startup code. ***//*** Processor Expert end of main routine. DON'T MODIFY THIS CODE!!! ***/for(;;) {if(exit_code != 0) {break;}}return exit_code;/*** Processor Expert end of main routine. DON'T WRITE CODE BELOW!!! ***/
} /*** End of main routine. DO NOT MODIFY THIS TEXT!!! ***/















