FreeScale MC9S08DZ32 CAN问题

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

本版积分规则

1

主题

2

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部