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

📄 lpc2000_can_driver.c

📁 在lpc2468上使用
💻 C
📖 第 1 页 / 共 4 页
字号:
***Demo Function: Press 1 - simple communication ( GLOBAL ACC FILTER Bypass )\n\r\
***               Press 2 - communication with GLOBAL ACC FILTER\n\r\
***               Press 3 - communication with FULLCAN GLOBAL ACC FILTER\n\r\
\n\r";


																	 
const UInt8 Demo_Sent_Choice[]="\n\r\
***The Acceptance Filter is configured, you can try transmitting a message using an external CAN analyzer \n\r";

/****Enter your choice: 1 for ACC Bypass, 2 for ACC On\n\r";*/

const UInt8 Demo_Sent_Data[] = "\n\r\
***Total 88 bytes data (using 11 frames) will be transmitted by CAN1 to CAN BUS\n\r\
***Frame1: Data - 01,02,03,04,05,06,07,08 with Standard 11bits ID:0x020;\n\r\
***Frame2: Data - 11,12,13,14,15,16,17,18 with Standard 11bits ID:0x1BC;\n\r\
***Frame3: Data - 21,22,23,24,25,26,27,28 with Standard 11bits ID:0x255;\n\r\
***Frame4: Data - 31,32,33,34,35,36,37,38 with Standard 11bits ID:0x26F;\n\r\
***Frame5: Data - 41,42,43,44,45,46,47,48 with Standard 11bits ID:0x010;\n\r\
***Frame6: Data - 51,52,53,54,55,56,57,58 with Standard 11bits ID:0x1AC;\n\r\
***Frame7: Data - 61,62,63,64,65,66,67,68 with Standard 11bits ID:0x245;\n\r\
***Frame8: Data - 71,72,73,74,75,76,77,78 with Standard 11bits ID:0x25F;\n\r\
***Frame9: Data - 81,82,83,84,85,86,87,88 with Standard 11bits ID:0x310;\n\r\
***Frame10: Data - 91,92,93,94,95,96,97,98 with Extended 29bits ID:0x18EF101E ;\n\r\
***Frame11: Data - 11,22,33,44,55,66,77,88 with Extended 29bits ID:0x18EF1E10;\n\r\
\n\r";

const UInt8 Data_Sent_Start_or_Not[] = "\
***Start transmit now? Press y or Y - start\n\r\
***                    Press n or N - Not start\
\n\r";


const UInt8 Rcv_Data_OK[] = "\n\r\
*** Communication Successful!  data Rcved OK!   From CAN BUS by CAN2: \
\n\r";

const UInt8 Acceptance_Filter_Tables[] = "\
*** Acceptance_Filter_Tables:\n\r\
*** LPC2000_CANDRIVER_SCC_2=1\n\r\
*** Idx  Table      SCC#    Dis/En  ID\n\r\
*** 0    Standard    2        0     0010H\n\r\
*** 1    Standard    2        0     01ACH\n\r\
*** 2    Standard    2        0     0245H\n\r\
*** 3    Standard    2        0     025FH\n\r\
*** 4    Std.Group   2        0     0300H-037FH\n\r\
*** 5    Std.Group   2        0     0400H-047FH\n\r\
*** 6    Extended    2        0     18EF101EH\n\r\
*** 7    Extended    2        0     18EF1E10H\n\r\
*** 8    Extended    2        0     18EFFF10H\n\r\
*** 9    Extended    2        0     18EFFFC2H\n\r\
*** 10   Ext.Group   2        0     00007700H-000077FFH\n\r\
*** 11   Ext.Group   2        0     000085F7H-00008802H\n\r\
\n\r";

const UInt8 FULLCAN_Acceptance_Filter_Tables[] = "\
*** Acceptance_Filter_Tables:\n\r\
*** LPC2000_CANDRIVER_SCC_2=1\n\r\
*** Idx  Table      SCC#  Dis/En  ID\n\r\
*** 0    FULLCAN     2      0     0020H\n\r\
*** 1    FULLCAN     2      0     01BCH\n\r\
*** 2    FULLCAN     2      0     0255H\n\r\
*** 3    FULLCAN     2      0     026FH\n\r\
*** 4    Standard    2      0     0010H\n\r\
*** 5    Standard    2      0     01ACH\n\r\
*** 6    Standard    2      0     0245H\n\r\
*** 7    Standard    2      0     025FH\n\r\
*** 8    Std.Group   2      0     0300H-037FH\n\r\
*** 9    Std.Group   2      0     0400H-047FH\n\r\
*** 10   Extended    2      0     18EF101EH\n\r\
*** 11   Extended    2      0     18EF1E10H\n\r\
*** 12   Extended    2      0     18EFFF10H\n\r\
*** 13   Extended    2      0     18EFFFC2H\n\r\
*** 14   Ext.Group   2      0     00007700H-000077FFH\n\r\
*** 15   Ext.Group   2      0     000085F7H-00008802H\n\r\
\n\r";




// **************************************************************************
// Local Functions Prototypes                                                
// **************************************************************************

// **************************************************************************
//                                                                           
// Implementation                                                            
//                                                                           
// **************************************************************************


// **************************************************************************
// FUNCTION:    lpc2000CANdriver_CANInit                                          
//                                                                           
// DESCRIPTION: Initialises the CAN Controller for channel 1,2,3,4          
//              - Enter the Reset Mode of the selected CAN Controller Unit   
//              - CAN Bit Timing                                             
//              - Enter Normal Operating Mode of the CAN Controller          
//                                                                           
// GLOBAL VARIABLES USED:                                                    
//                                                                           
// PARAMETERS:  canChannel: 1,2,3,4                                     
//              canBitrate: Register value, see also global.h for defines    
//                                                                           
// RETURN:      CanStatusCode: Status of operation                           
//                                                                           
//              LPC2000_CANDRIVER_OK - successful                                 
//                                                                           
// **************************************************************************




CanStatusCode
lpc2000CANdriver_CANInit ( UInt32   canChannel,
                      UInt32   canBitrate )
{

   switch (canChannel)  // CAN Channel 
   {
      case 1: // Enter Reset Mode 
      		PCONP |= (1 << 13);	// Enable clock to CAN1
	  	CAN1MOD = CAN_RESET_MODE;
	  	CAN1IER = 0;	// Disable Receive Interrupt
      		CAN1GSR = 0;	// Reset error counter when CANxMOD is in reset
	  	CAN1BTR = canBitrate;
              // Enter Operating Mode 
	  	CAN1MOD = CAN_OPERATING_MODE;
       break;
      case 2: // Enter Reset Mode 
	 	
		PCONP |= (1 << 14);	// Enable clock to CAN2 
	  	//CAN operation is disabled, and writable registers can be written.
	  	CAN2MOD = CAN_RESET_MODE;
	  	CAN2IER = 0;	// Disable Receive Interrupt
	  	CAN2GSR = 0;	// Reset error counter when CANxMOD is in reset
	  	CAN2BTR = canBitrate;
      		// Enter Operating Mode 
	        CAN2MOD = CAN_OPERATING_MODE;
      break;

      
              
              
#ifdef LPC2000_CAN3
      case 3: // Enter Reset Mode 
			  C3MOD = CAN_RESET_MODE;
              // Write into Bus Timing Register 
			  C3BTR = canBitrate;
              // Enter Operating Mode 
			  C3MOD = CAN_OPERATING_MODE;
              break;
#endif
#ifdef LPC2000_CAN4
      case 4: // Enter Reset Mode 
			  C4MOD = CAN_RESET_MODE;
              // Write into Bus Timing Register 
			  C4BTR = canBitrate;
              // Enter Operating Mode 
 			  C4MOD = CAN_OPERATING_MODE;
              break;
#endif
      default:// wrong channel number 
              return (LPC2000_CANDRIVER_ERR_WRONG_CAN_CHANNEL_NUMBER);

   }

   return (LPC2000_CANDRIVER_OK);


} // lpc2000CANdriver_CANInit () 




// **************************************************************************
// FUNCTION:    lpc2000CANdriver_SetACFMode                                       
//                                                                           
// DESCRIPTION: This function sets the Acceptance Filter mode                
//                                                                           
// GLOBAL VARIABLES USED: - -                                                
//                                                                           
// PARAMETERS:  ACFMode:  0 = Acceptance Filter On                           
//                        1 = Acceptance Filter Off  (reset status)                        
//                        3 = Acceptance Filter Bypass                       
//                        4 = Acceptance Filter On + FullCAN Mode enabled    
//                                                                           
// RETURN:      CanStatusCode: Status of operation                           
//                                                                           
//              LPC2000_CANDRIVER_OK     - successful                             
//                                                                           
//              LPC2000_CANDRIVER_ERR    - this mode is not supported             
//                                                                           
// **************************************************************************

CanStatusCode
lpc2000CANdriver_SetACFMode( UInt8    ACFMode )
{

   switch (ACFMode)
   {
      case 0: // Acceptance Filter On 
			  CAN_AFMR = 0x00000000;
			 //   CAN_AFMR = 0x00000002;
              break;
      case 1: // Acceptance Filter Off 
			  CAN_AFMR = 0x00000001;
              break;
      case 3: // Acceptance Filter Bypass 
 			  CAN_AFMR = 0x00000003;
              break;
      case 4: // Acceptance Filter FullCAN 
			  CAN_AFMR = 0x00000004;
             // CAN_AFMR = 0x00000006;
			  break;

      default:// Not supported 
              return (LPC2000_CANDRIVER_ERR);

   }
   return (LPC2000_CANDRIVER_OK);

} // lpc2000CANdriver_SetACFMode() 

// **************************************************************************
// FUNCTION:    lpc2000CANdriver_SetCANMode                                       
//                                                                           
// DESCRIPTION: This function sets the CAN Controller mode                   
//                                                                           
// GLOBAL VARIABLES USED:                                                    
//                                                                           
// PARAMETERS:  canChannel: 1,2,3,4                                      
//              CANMode   : 0 = Operating Mode                               
//                          1 = Reset Mode                                   
//                          2 = Listen Only Mode                             
//                          4 = Self Test Mode                               
//                                                                           
// RETURN:      CanStatusCode: Status of operation                           
//                                                                           
//              LPC2000_CANDRIVER_OK       - successful                           
//                                                                           
//              LPC2000_CANDRIVER_ERR      - this mode is not supported           
//                                                                           
// **************************************************************************

CanStatusCode
lpc2000CANdriver_SetCANMode(UInt32   canChannel,
                       UInt8    CANMode )
{
   UInt32 offset;

   offset = (canChannel-1) * 0x00004000;    //SCC0 match can1
										  //SCC=CAN-1
   if ( (canChannel==0) || (canChannel>4))
   {
      return (LPC2000_CANDRIVER_ERR_WRONG_CAN_CHANNEL_NUMBER);
   }

   switch (CANMode)
   {
      case 0: // Operating Mode 
              OUTW((UInt32)&CAN1MOD + offset, CAN_OPERATING_MODE);
              break;
      case 1: // Reset Mode 
              OUTW((UInt32)&CAN1MOD + offset, CAN_RESET_MODE);
              break;
      case 2: // Listen Only Mode 
              OUTW((UInt32)&CAN1MOD + offset, CAN_RESET_MODE);
              OUTW((UInt32)&CAN1MOD + offset, CAN_LISTENONLY_MODE);
              break;
      case 4: // Self Test Mode 
              OUTW((UInt32)&CAN1MOD + offset, CAN_RESET_MODE);
              OUTW((UInt32)&CAN1MOD + offset, CAN_SELFTEST_MODE);
              break;

      default:// Not supported 
              return (LPC2000_CANDRIVER_ERR);

   }
   return (LPC2000_CANDRIVER_OK);

} // lpc2000CANdriver_SetACFMode() 



// **************************************************************************
// FUNCTION:    lpc2000CANdriver_PrepareTransmitMessage                           
//                                                                           
// DESCRIPTION: This function loads a certain Transmit Buffer with message   
//              data                                                         
//                                                                           
// GLOBAL VARIABLES USED:                                                    
//                                                                           
// PARAMETERS:                                                               
//                                                                           
// RETURN:      CanStatusCode: Status of operation                           
//                                                                           
//              LPC2000_CANDRIVER_OK        - successful                          
//                                                                           
//              LPC2000_CANDRIVER_ERR       - transmit buffer not free            
//                                          - wrong channel                       
//                                                                           
// **************************************************************************

CanStatusCode
lpc2000CANdriver_CertainTxBufTransmitMessage (UInt32                 canChannel,
                                         plpc2000CANdriver_TXObj_t   pTransmitBuf,
                                         UInt32                      txbuffer)
{
   UInt32   TransmitBufferStatus;
   UInt32   Address_TFI_ID_DATA;
   UInt32   Address_CMR;
   UInt32   Address_GSR;
   UInt32   TXB_Offset;
   UInt32   TransmitBufferFree;
   UInt8    Transmit_TxBuf_Start;
   Print_Chars_to_Screen(LiuJiaju_Send1);
//   UInt32   Temp_Transmit;
//   pUInt32  pTemp_Transmit;

   // Calculate address offset depending on selected tx buffer 
   TXB_Offset = ((txbuffer-1) * 0x10);
   
   // Transmit start command for different txbuffer
   switch (txbuffer)
   {
      case 1: 
	          Transmit_TxBuf_Start = 0x21;   // Transmit by Tx1, mornal mode
//			  Transmit_TxBuf_Start = 0x23;	 // Single transmit in spite of successful
//			  Transmit_TxBuf_Start = 0x30;	 // Self-Testing mode, CAN1MOD:STM should be "1" 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -