📄 main.c
字号:
Uart_Printf("TXB0D0=%d \n",temp);
break;
case 6:
Uart_Printf("TXB0D1=%d \n",temp);
break;
case 7:
Uart_Printf("TXB0D2=%d \n",temp);
break;
case 8:
Uart_Printf("TXB0D3=%d \n",temp);
break;
case 9:
Uart_Printf("TXB0D4=%d \n",temp);
break;
case 10:
Uart_Printf("TXB0D5=%d \n",temp);
break;
case 11:
Uart_Printf("TXB0D6=%d \n",temp);
break;
case 12:
Uart_Printf("TXB0D7=%d \n",temp);
break;
default:
Uart_Printf("Error \n");
break;
}
}
}
void ReadAndDisplayRXBnSIDH(unsigned char Register_RXBnSIDH,unsigned char Message_RXBnSIDH[13])
{
unsigned char i=0;
Uart_Printf("\n");
for(i=0;i<13;i++)
{
Message_RXBnSIDH[i]=ReadByte(Register_RXBnSIDH);
Register_RXBnSIDH++;
switch(i)
{
case 0:
Uart_Printf("RXB0SIDH=%d \n",Message_RXBnSIDH[i]);
break;
case 1:
Uart_Printf("RXB0SIDL=%d \n",Message_RXBnSIDH[i]);
break;
case 2:
Uart_Printf("RXB0EID8=%d \n",Message_RXBnSIDH[i]);
break;
case 3:
Uart_Printf("RXB0EID0=%d \n",Message_RXBnSIDH[i]);
break;
case 4:
Uart_Printf("RXB0DLC=%d \n",Message_RXBnSIDH[i]);
break;
case 5:
Uart_Printf("RXB0D0=%d \n",Message_RXBnSIDH[i]);
break;
case 6:
Uart_Printf("RXB0D1=%d \n",Message_RXBnSIDH[i]);
break;
case 7:
Uart_Printf("RXB0D2=%d \n",Message_RXBnSIDH[i]);
break;
case 8:
Uart_Printf("RXB0D3=%d \n",Message_RXBnSIDH[i]);
break;
case 9:
Uart_Printf("RXB0D4=%d \n",Message_RXBnSIDH[i]);
break;
case 10:
Uart_Printf("RXB0D5=%d \n",Message_RXBnSIDH[i]);
break;
case 11:
Uart_Printf("RXB0D6=%d \n",Message_RXBnSIDH[i]);
break;
case 12:
Uart_Printf("RXB0D7=%d \n",Message_RXBnSIDH[i]);
break;
default:
Uart_Printf("Error \n");
break;
}
}
}
void MCP2515_Init(void)
{
unsigned char temp=0;
//reset MCP2515
ResetMCP2515();//reset MCP2515 all register
Uart_Printf("\nCANCTRL=%d \n",ReadByte(REGISTER_CANCTRL));
Uart_Printf("\nCANSTAT=%d \n",ReadByte(REGISTER_CANSTAT));
WriteByte(REGISTER_CANCTRL,MCP2515_MODE_CNFIG); //configure mode,abort disable, OSM diable, clkout enable, 1/8 distribute
while(ReadByte(REGISTER_CANCTRL)!=MCP2515_MODE_CNFIG)
{
WriteByte(REGISTER_CANCTRL,MCP2515_MODE_CNFIG);
}
BitModify(REGISTER_CANCTRL,0X03,0X01);//1/2 distribute
//set the CAN baudrate=125KHz
WriteByte(REGISTER_CNF1,0x03);//SJW=1TQ, BRP=3, Tbit=2(BRP+1)/Fosc=500ns; Fosc=16MHz
WriteByte(REGISTER_CNF2,0xb1);//PS2 is determinate by PS22:PS20 of CNF3, sample one time, PS1=7TQ, PROGSEG=2TQ
WriteByte(REGISTER_CNF3,0x05);//SOF disable, wake filter disable, PS2=6TQ
//disable all interrupt and clear all interrupt flags
WriteByte(REGISTER_CANINTE,0X00);//MCP2515 disable all interrupt
WriteByte(REGISTER_CANINTF,0X00);//clear all interrupt flags
//initialize the relative registers of transmition and reception
TXB012Init();
RXB01Init();
Marker01Init();
Filter012345Init();
//MCP2515 tangle to loop-back mode
WriteByte(REGISTER_CANCTRL,MCP2515_MODE_LOOPBACK);//MCP2515 tangle to loopback mode
while(ReadByte(REGISTER_CANCTRL)!=MCP2515_MODE_LOOPBACK)
{
WriteByte(REGISTER_CANCTRL,MCP2515_MODE_LOOPBACK);
}
//enable all interrupt
WriteByte(REGISTER_CANINTE,0XFF);
}
void SendFrameTXB0SIDH(unsigned char Register_TXB0SIDH,unsigned char Message_TXB0SIDH[13])
{
unsigned char i=0;
unsigned char status=0;
for(i=0;i<13;i++)
{
WriteByte(Register_TXB0SIDH,Message_TXB0SIDH[i]);
Register_TXB0SIDH++;
}
Uart_Printf("\n\nnow transmiting TXB0:");
DisplayTXBnSIDH(REGISTER_TXB0SIDH);
BitModify(REGISTER_TXB0CTRL,BIT_TX0REQ,BIT_TX0REQ);//set the TX0REQ
while(!(ReadByte(REGISTER_CANINTF)&BIT_TX0IF))
{
status=ReadByte(REGISTER_CANINTF);
Uart_Printf("\n");
Uart_Printf("waiting the transmit operation to finish \n");
Uart_Printf("CANINTF=%d \n",status);
Uart_Printf("CANINTF&BIT_RX0IF=%d \n",status&BIT_RX0IF);
Uart_Printf("CANINTF&BIT_RX1IF=%d \n",status&BIT_RX1IF);
Uart_Printf("CANINTF&BIT_TX0IF=%d \n",status&BIT_TX0IF);
Uart_Printf("CANINTF&BIT_TX1IF=%d \n",status&BIT_TX1IF);
Uart_Printf("CANINTF&BIT_TX2IF=%d \n",status&BIT_TX2IF);
Uart_Printf("CANINTF&BIT_ERRIF=%d \n",status&BIT_ERRIF);
Uart_Printf("CANINTF&BIT_WAKIF=%d \n",status&BIT_WAKIF);
Uart_Printf("CANINTF&BIT_MERIF=%d \n",status&BIT_MERIF);
if(status&BIT_ERRIF)
{
status=ReadByte(REGISTER_EFLG);
Uart_Printf("EFLG=%d \n",status);
Uart_Printf("EFLG&BIT_RX1OVER=%d \n",status&BIT_RX1OVER);
Uart_Printf("EFLG&BIT_RX0OVER=%d \n",status&BIT_RX0OVER);
Uart_Printf("EFLG&BIT_BUSOFF=%d \n",status&BIT_BUSOFF);
Uart_Printf("EFLG&BIT_TXERRP=%d \n",status&BIT_TXERRP);
Uart_Printf("EFLG&BIT_RXERRP=%d \n",status&BIT_RXERRP);
Uart_Printf("EFLG&BIT_TXWARN=%d \n",status&BIT_TXWARN);
Uart_Printf("EFLG&BIT_RXWARN=%d \n",status&BIT_RXWARN);
Uart_Printf("EFLG&BIT_ERWARN=%d \n",status&BIT_ERWARN);
Uart_Printf("transmit error counter:TEC=%d \n",ReadByte(REGISTER_TEC));
Uart_Printf("recevie error counter:REC=%d \n",ReadByte(REGISTER_REC));
}
}
status=ReadByte(REGISTER_CANINTF);
Uart_Printf("\n");
Uart_Printf("CANINTF=%d \n",status);
Uart_Printf("CANINTF&BIT_RX0IF=%d \n",status&BIT_RX0IF);
Uart_Printf("CANINTF&BIT_RX1IF=%d \n",status&BIT_RX1IF);
Uart_Printf("CANINTF&BIT_TX0IF=%d \n",status&BIT_TX0IF);
Uart_Printf("CANINTF&BIT_TX1IF=%d \n",status&BIT_TX1IF);
Uart_Printf("CANINTF&BIT_TX2IF=%d \n",status&BIT_TX2IF);
Uart_Printf("CANINTF&BIT_ERRIF=%d \n",status&BIT_ERRIF);
Uart_Printf("CANINTF&BIT_WAKIF=%d \n",status&BIT_WAKIF);
Uart_Printf("CANINTF&BIT_MERIF=%d \n",status&BIT_MERIF);
BitModify(REGISTER_CANINTF,BIT_TX0IF,~BIT_TX0IF);//clear the TX0IF flag
//BitModify(REGISTER_TXB0CTRL,BIT_TX0REQ,~BIT_TX0REQ);//clear the TX0REQ(TX0REQ auto tangle to zero)
if(ReadByte(REGISTER_CANINTF)&BIT_RX0IF)
{
Uart_Printf("\n\nnow recepting RXB0:");
ReadAndDisplayRXBnSIDH(REGISTER_RXB0SIDH,Message_RXB0SIDH);
BitModify(REGISTER_CANINTF,BIT_RX0IF,~BIT_RX0IF);//clear the RX0IF flag
}
if(ReadByte(REGISTER_CANINTF)&BIT_ERRIF)
{
status=ReadByte(REGISTER_EFLG);
Uart_Printf("\n");
Uart_Printf("EFLG=%d \n",status);
Uart_Printf("EFLG&BIT_RX1OVER=%d \n",status&BIT_RX1OVER);
Uart_Printf("EFLG&BIT_RX0OVER=%d \n",status&BIT_RX0OVER);
Uart_Printf("EFLG&BIT_BUSOFF=%d \n",status&BIT_BUSOFF);
Uart_Printf("EFLG&BIT_TXERRP=%d \n",status&BIT_TXERRP);
Uart_Printf("EFLG&BIT_RXERRP=%d \n",status&BIT_RXERRP);
Uart_Printf("EFLG&BIT_TXWARN=%d \n",status&BIT_TXWARN);
Uart_Printf("EFLG&BIT_RXWARN=%d \n",status&BIT_RXWARN);
Uart_Printf("EFLG&BIT_ERWARN=%d \n",status&BIT_ERWARN);
Uart_Printf("transmit error counter:TEC=%d \n",ReadByte(REGISTER_TEC));
Uart_Printf("recevie error counter:REC=%d \n",ReadByte(REGISTER_REC));
BitModify(REGISTER_CANINTF,BIT_ERRIF,~BIT_ERRIF);//clear the ERRIF flag
}
}
void Main(void)
{
unsigned char temp;
rSYSCFG=CACHECFG; // Using 8KB Cache//
Port_Init();
rPDATC|=BIT_LED1_LOOP;//turn on the LED1
rPDATC|=BIT_LED2_RTS_TXB0;//turn on the LED2
MCP2515_Disable();
Uart_Init(0,57600);//initalize UART0,baud=57600
Delay(10);
Uart_Select(0); //Select UART0
Uart_Printf("Enter Main program \n");
SIO_Init();
MCP2515_Init();
Uart_Printf("\nthe original TXB0:");
DisplayTXBnSIDH(REGISTER_TXB0SIDH);
Uart_Printf("\nthe original RXB0:");
ReadAndDisplayRXBnSIDH(REGISTER_RXB0SIDH,Message_RXB0SIDH);
while(1)
{
SendFrameTXB0SIDH(REGISTER_TXB0SIDH,Message_TXB0SIDH);
//SendMessageTXBnD0(INSTRUCTION_WRITE_TXB0D0);
//WriteTXBnSIDH(INSTRUCTION_WRITE_TXB0SIDH,Message_TXB0SIDH);
//DisplayTXBnSIDH(REGISTER_TXB0SIDH);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -