|
![](static/image/common/ico_lz.png)
楼主 |
发表于 2009-11-12 13:49:49
|
显示全部楼层
意思也就是这段代码编译时Option中设置成Application,那样就可以发送CAN数据帧,而设置成Bootloader时则不断复位,无法发送CAN数据帧。具体代码(一些接口函数没有贴出来)如下:
void main(void)
{
int temp;
int i;
int LastFrmLen;
int LastFrmLenMask=8;
char tempRst;
CanFrameDataType2 SendDataBuf,RcvDataBuf;
//CanFrameDataType2 *tempBuf;
unsigned char packNO = 1;
int bufferPoint = 0;
InitPort();
TCCR0 = 0x00; //stop tmr0
UCSR0B = 0x00; //disable usart0 while setting baud rate
UCSR1B = 0x00; //disable usart1 while setting baud rate
Refresh_SFR(); //重置功能寄存器
GPS_USART_INIT(9600);
tempRst=0xFF;
GPS_USART_TX_BYTE(tempRst);
CanControllerInit(); //can控制器初始化
SendDataBuf.head.FrameInfo=FI_EFF|CAN_FRM_LEN;
SendDataBuf.head.FrameSn=0x00;
SendDataBuf.head.RxNodeId=BZQ_CAN_ID;
SendDataBuf.head.TxNodeId=GPS_MACHINE_CAN_ID;
SendDataBuf.head.Type_Cnt=0x00; //贞类型
SendDataBuf.cmd=TOBZQ_START;
RcvDataBuf.cmd=0x00; //初始化接收帧命令
for( i=0;i<6;i++){
SendDataBuf.Data='c'; //初始化发送第一帧数据
}
temp=crc8(SendDataBuf.Data,7);
SendDataBuf.crc8=temp;
//发送触发数据帧
//CanWriteData((uint8 *)&SendDataBuf);
while(1){
tempRst=MCUCSR;
MCUCSR = 0x00;
GPS_USART_TX_BYTE(tempRst); //通过串口对MCUSR寄存器进行监视,查看复位原因
while(QueryCanTxCondition()==0); //CAN通过检测
//delay_ms(10);
CanWriteData((uint8 *)&SendDataBuf); //发送CAN帧
tempRst=MCUCSR;
delay_ms(10);
GPS_USART_TX_BYTE(tempRst);
}
// START_FMQ_OUT(); //蜂鸣器响
//CanErrorProcess(); //can错误处理
asm("jmp 0x0000\n"); //跳转到Flash的0x0000处,执行用户的应用程序
}
程序刷入,在应用区可以发送出CAN帧,在BOOT区就没有CAN帧送出。
串口检测结果为:
FF 07 00 00 FF 00 00 00 FF 00 00 00 FF 00 00 00 FF 00 00 00 FF 00 00 00 FF 00 00 00 FF 00 00 00 FF 00 00 00 FF 00 00 00 FF 00 00 00 FF 00 00 00 FF 00 00 00 FF 00 00 00 FF 00 00 00 FF 00 00 00 FF 00 00 00 FF 00 00 00 FF 00 00 00 FF 00 00 00 FF 00 00 00 FF 00 00 00 FF 00 00 00 FF 00 00 00 FF 00 00 00 FF 00 00 00 FF 00 00 00 FF 00 00 00 FF 00 00 00 FF 00 00 00 FF 00 00 00 FF 00 00 00 FF 00 00 00 FF 00 00 00 FF 00 00 00 FF 00 00 00 FF 00 00 00 FF 00 00 00 FF 00 00 00 FF 00 00 00 |
|