📄 can1sendmessage.c
字号:
#include <ecan.h>
#ifdef _C1TXIF
/******************************************************************************
* Function Name : CAN1SendMessage
* Description : This function writes the message identifiers (SID & EID),
writes the data to be transmitted into the Transmit buffer
* and sets the corresponding Transmit request bit.
* Parameters : unsigned char: *data
* unsigned int: datalen
* unsigned long: txIdentifier (Send 29 bit identifier < SID<10:0> : EID<17:0> > in case of Extended Message)
(Send 11 bit identifier < SID<10:0> > in case of Standard Message)
* unsigned char: ide
* unsigned char: remoteTransmit
* unsigned int: *dmaBaseAddress
* unsigned char: MsgFlag
* Return Value : None
*******************************************************************************/
void CAN1SendMessage(unsigned char *data, unsigned int datalen, unsigned long txIdentifier,\
unsigned char ide, unsigned char remoteTransmit, unsigned int *dmaBaseAddress, unsigned char MsgFlag){
unsigned int i;
unsigned long word1 = (txIdentifier>>6) & 0x7F;
unsigned long word2, word0;
char *ptr;
switch(remoteTransmit)
{
case 0:
word0 = (((txIdentifier>>18) & 0x7FF) << 2) | ide;
word2 = (((txIdentifier & 0x3F) << 10) & 0xFFF0) + datalen;
break;
case 1:
word0 = (((txIdentifier>>18) & 0x7FF) << 2) | ide | 0x2;
word2 = ((txIdentifier & 0x3F) << 10) | 0x0200;
break;
default:
word0 = (((txIdentifier>>18) & 0x7FF) << 2) | ide;
word2 = (((txIdentifier & 0x3F) << 10) & 0xFFF0) + datalen;
break;
}
// Obtain the Address of Transmit Buffer in DMA RAM for a given Transmit Buffer number
dmaBaseAddress[0] = word0;
dmaBaseAddress[1] = word1;
dmaBaseAddress[2] = word2;
ptr=(char *)&dmaBaseAddress[3];
for(i = 0;i < datalen;i++)
{
*ptr++ = data[i];
}
/* Msg send request */
switch(MsgFlag)
{
case 0:
C1TR01CONbits.TXREQ0 = 1;
break;
case 1:
C1TR01CONbits.TXREQ1 = 1;
break;
case 2:
C1TR23CONbits.TXREQ2 = 1;
break;
case 3:
C1TR23CONbits.TXREQ3 = 1;
break;
case 4:
C1TR45CONbits.TXREQ4 = 1;
break;
case 5:
C1TR45CONbits.TXREQ5 = 1;
break;
case 6:
C1TR67CONbits.TXREQ6 = 1;
break;
case 7:
C1TR67CONbits.TXREQ7 = 1;
break;
default:
C1TR01CONbits.TXREQ0 = 1;
break;
}
}
#else
#warning "Does not build on this target"
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -