斑竹 <br />请帮忙 我快疯掉了 调了将近一个月了 CAN还没有调通 现在问题是CAN不能发送出去 也不知道问题出在什么地方 望指导 <br />以下是电路图和程序<br /><br />#ifndef CAN_C<br />#define CAN_C<br /><br />#include "can.h"<br />struct can_msg msg_send;<br /><br />/********************************************************************************************<br />function name : Can_Init<br />input parameters : none<br />output parameters : none<br />description : MSCAN Peripheral Initialization.<br />********************************************************************************************/<br />void Can_Init(void)<br />{ <br /> CANCTL1_CANE = 1; //can module is enabled <br /> <br /> if(!(CANCTL0 & 0x01)) //Active MSCAN initialization mode <br /> CANCTL0 = 0x01;<br /> while(!(CANCTL1 & 0x01)); //Wait until the MSCAN is in initialization mode <br /> <br /> CANCTL1_CLKSRC = 0; //MSCAN clock source is the oscillator clock<br /> <br /> CANBTR0 = 0x13; //Prescaler = 4<br /> CANBTR1 = 0x23; //125K<br /> <br /> CANIDAC_IDAM = 0x00; //Two 32-bit acceptance filters<br /> <br /> CANIDAR0 = 0x00;<br /> CANIDAR1 = 0x00;<br /> CANIDAR2 = 0x00;<br /> CANIDAR3 = 0x00;<br /> CANIDAR4 = 0x00;<br /> CANIDAR5 = 0x00;<br /> CANIDAR6 = 0x00;<br /> CANIDAR7 = 0x00;<br /><br /> CANIDMR0 = 0xFF;<br /> CANIDMR1 = 0xFF;<br /> CANIDMR2 = 0xFF;<br /> CANIDMR3 = 0xFF;<br /> CANIDMR4 = 0xFF;<br /> CANIDMR5 = 0xFF;<br /> CANIDMR6 = 0xFF;<br /> CANIDMR7 = 0xFF;<br /> <br /> CANRIER_RXFIE = 1;<br /> <br /> CANCTL0 = 0x00; //Active MSCAN Normal Operation<br /> while(CANCTL1 & 0x01); //Wait until the MSCAN operates normally<br /> <br /> while(!(CANCTL0 & 0x10)); //Wait until MSCAN is synchronized to the CAN bus <br />}<br /><br />/********************************************************************************************<br />function name : Can_SendMesg<br />input parameters : the data which would be transmited through can bus<br />output parameters : none<br />description : MSCAN Peripheral Initialization.<br />********************************************************************************************/<br />Bool Can_SendMesg(struct can_msg msg) <br />{<br /> unsigned char n_tx_buf,i;<br /><br /> if(msg.len > MAX_LEN) //Checks len validity<br /> return(FALSE);<br /> <br /> if(!(CANCTL0 & 0x10)) //Checks synchronization to CAN bus<br /> return(FALSE);<br /> <br /> n_tx_buf = 0;<br /> do<br /> {<br /> CANTBSEL = CANT**; //Looks for a free buffer<br /> n_tx_buf = CANTBSEL;<br /> }while(!n_tx_buf); <br /> <br /> CANTIDR0 = (unsigned char)(msg.id >> 3); //Write Identifier<br /> CANTIDR1 = (unsigned char)(msg.id << 5);<br /> <br /> if(msg.RTR)<br /> CANTIDR1 |= 0x10; //RTR=Recessive<br /> <br /> <br /> for(i = 0; i < msg.len; i++) //Write Data Segment<br /> *((&CANTDSR0)+i) = msg.data;<br /> <br /> <br /> CANTDLR = msg.len; //Write Data Length<br /> <br /> <br /> CANTTBPR = msg.prty; //Write Priority<br /> <br /> <br /> CANT** = n_tx_buf; //Clear TXx Flag (buffer ready to transmission)<br /> return(TRUE);<br />}<br /><br />interrupt 28 void Can_Receive_Interrupt(void) <br />{<br /> PTAD_PTAD4 = 0;<br /> CANR** = 0x01;<br />}<br />/********************************************************************************************<br />function name : Can_TransmitTest<br />input parameters : none<br />output parameters : none<br />description : can transmit routine<br />********************************************************************************************/<br />void Can_TransmitTest(void) <br />{<br /> msg_send.id = ID_TX;<br /> msg_send.data[0] = 0x7f;<br /> msg_send.data[1] = 0x33;<br /> msg_send.data[2] = 0x55;<br /> msg_send.data[3] = 0x00;<br /> msg_send.data[4] = 0x01;<br /> msg_send.data[5] = 0xfe;<br /> msg_send.data[6] = 0xfd;<br /> msg_send.data[7] = 0xfc;<br /> msg_send.len = 8;<br /> msg_send.RTR = FALSE;<br /> msg_send.prty = 0;<br /> <br /> (void)(Can_SendMesg(msg_send)) ;<br /> <br /> //PTAD = CANTDSR0;<br /> //PTAD = CANTDSR1;<br /> //PTAD = CANTDSR2;<br /> //PTAD = CANTDSR3;<br /> //PTAD = CANTDSR4;<br /> //PTAD = CANTDSR5;<br /> //PTAD = CANTDSR6;<br /> //PTAD = CANTDSR7; <br /> <br />}<br /><br />#endif电路图 |
|