多谢yunfeng,我查了以前的帖子,看到前人发的这个例程,还是有一点不明白: 既然3个发送缓冲区的地址是一个,那是不是发送缓冲区的寄存器也是唯一的呢? 如果是,那下面程序中为什么设有TB0***,TB1***, TB2*** 三个寄存器呢? 如果寄存器不是唯一的,又是在什么地方设定、如何设定呢?
还有,程序中的TBxDSRz与Foreground Transmit Buffer (CANTXFGz)是什么关系?
恳请赐教,感激不尽!
void CANTrans(void)
{ unsigned char BufferEmpty=0; BufferEmpty=CTFLG; if(BufferEmpty&1) { TB0IDR0=0x61; TB0IDR1=0x60; //ECU1_CC ID. TB0DLR=8; //data length=8. TB0DSR0=ADResult[0]; TB0DSR1=ADResult[1]; TB0DSR2=ADResult[2]; TB0DSR3=ADResult[3]; TB0DSR4=ADResult[4]; TB0DSR5=ADResult[5]; TB0DSR6=0; TB0DSR7=0; //confirm data segment. TB0TBPR=1; //confirm data buffer priority. CTFLG=0x01; //buffer0 starts transmission. } else if(BufferEmpty&2) { TB1IDR0=0x61; TB1IDR1=0x60; //ECU1_CC ID. TB1DLR=8; //data length=8. TB1DSR0=ADResult[0]; TB1DSR1=ADResult[1]; TB1DSR2=ADResult[2]; TB1DSR3=ADResult[3]; TB1DSR4=ADResult[4]; TB1DSR5=ADResult[5]; TB1DSR6=0; TB1DSR7=0; //confirm data segment. TB1TBPR=1; //confirm data buffer priority. CTFLG=0x02; //buffer1 starts transmission. } else if(BufferEmpty&4) { TB2IDR0=0x61; TB2IDR1=0x60; //ECU1_CC ID. TB2DLR=8; //data length=8. TB2DSR0=ADResult[0]; TB2DSR1=ADResult[1]; TB2DSR2=ADResult[2]; TB2DSR3=ADResult[3]; TB2DSR4=ADResult[4]; TB2DSR5=ADResult[5]; TB2DSR6=0; TB2DSR7=0; //confirm data segment. TB2TBPR=1; //confirm data buffer priority. CTFLG=0x04; //buffer2 starts transmission. }
} [此贴子已经被作者于2006-5-16 12:03:34编辑过]
[此贴子已经被作者于2006-5-16 12:12:11编辑过] |