⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 can1sendmessage.c

📁 Mplab C30编译器
💻 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 + -