These are the examples provided for [[/users/frank26080115/libraries/LPC1700CMSIS_Lib/]] Note, the entire "program" is not compilable!

Revision:
0:bf7b9fba3924
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/CAN/CAN_test_bypass_mode/can_test_bypass_mode.c	Sun Mar 20 05:38:56 2011 +0000
@@ -0,0 +1,251 @@
+/***********************************************************************//**
+ * @file		can_test_bypass_mode.c
+ * @purpose		This example used to test Bypass mode
+ * @version		2.0
+ * @date		21. May. 2010
+ * @author		NXP MCU SW Application Team
+ *---------------------------------------------------------------------
+ * Software that is described herein is for illustrative purposes only
+ * which provides customers with programming information regarding the
+ * products. This software is supplied "AS IS" without any warranties.
+ * NXP Semiconductors assumes no responsibility or liability for the
+ * use of the software, conveys no license or title under any patent,
+ * copyright, or mask work right to the product. NXP Semiconductors
+ * reserves the right to make changes in the software without
+ * notification. NXP Semiconductors also make no representation or
+ * warranty that such application will be suitable for the specified
+ * use without further testing or modification.
+ **********************************************************************/
+#include "lpc17xx_can.h"
+#include "lpc17xx_libcfg.h"
+#include "lpc17xx_pinsel.h"
+#include "debug_frmwrk.h"
+
+/* Example group ----------------------------------------------------------- */
+/** @defgroup CAN_test_bypass_mode	CAN_test_bypass_mode
+ * @ingroup CAN_Examples
+ * @{
+ */
+/************************** PRIVATE VARIABLES *************************/
+uint8_t menu[]=
+	"*******************************************************************************\n\r"
+	"Hello NXP Semiconductors \n\r"
+	"CAN bypass demo \n\r"
+	"\t - MCU: LPC17xx \n\r"
+	"\t - Core: ARM CORTEX-M3 \n\r"
+	"\t - Communicate via: UART0 - 115200 bps \n\r"
+	"Use two CAN peripherals: CAN1 and CAN2 to communicate\n\r"
+	"This example used to test Bypass mode\n\r"
+	"*******************************************************************************\n\r";
+
+/** CAN variable definition **/
+CAN_MSG_Type TXMsg, RXMsg; // messages for test Bypass mode
+uint32_t CANRxCount, CANTxCount = 0;
+
+/************************** PRIVATE FUNCTIONS *************************/
+void CAN_IRQHandler(void);
+
+void CAN_InitMessage(void);
+void PrintMessage(CAN_MSG_Type* msg);
+void print_menu();
+
+
+/*----------------- INTERRUPT SERVICE ROUTINES --------------------------*/
+/*********************************************************************//**
+ * @brief		CAN_IRQ Handler, control receive message operation
+ * param[in]	none
+ * @return 		none
+ **********************************************************************/
+void CAN_IRQHandler()
+{
+	uint8_t IntStatus;
+	uint32_t data1;
+	/* get interrupt status
+	 * Note that: Interrupt register CANICR will be reset after read.
+	 * So function "CAN_IntGetStatus" should be call only one time
+	 */
+	IntStatus = CAN_IntGetStatus(LPC_CAN2);
+	//check receive interrupt
+	if((IntStatus>>0)&0x01)
+	{
+		CAN_ReceiveMsg(LPC_CAN2,&RXMsg);
+		PrintMessage(&RXMsg);
+		CANRxCount++; //count success received message
+		//increase data for next TX Message
+		TXMsg.id ++;
+		data1 = (TXMsg.dataA[0])|(((TXMsg.dataA[1]))<<8)|((TXMsg.dataA[2])<<16)|((TXMsg.dataA[3])<<24);
+		if(data1 == 0xFFFFFFFF) data1 = 0;
+		else data1++;
+		*((uint8_t *) &TXMsg.dataA[0])= *((uint8_t *) &TXMsg.dataB[0])= data1 & 0x000000FF;
+		*((uint8_t *) &TXMsg.dataA[1])= *((uint8_t *) &TXMsg.dataB[1])=(data1 & 0x0000FF00)>>8;;
+		*((uint8_t *) &TXMsg.dataA[2])= *((uint8_t *) &TXMsg.dataB[2])=(data1 & 0x00FF0000)>>16;
+		*((uint8_t *) &TXMsg.dataA[3])= *((uint8_t *) &TXMsg.dataB[3])=(data1 & 0xFF000000)>>24;
+
+		CAN_SendMsg(LPC_CAN1, &TXMsg);
+	}
+}
+
+/*-------------------------PRIVATE FUNCTIONS----------------------------*/
+/*********************************************************************//**
+ * @brief		Print Message via COM1
+ * param[in]	msg: point to CAN_MSG_Type object that will be printed
+ * @return 		none
+ **********************************************************************/
+void PrintMessage(CAN_MSG_Type* CAN_Msg)
+{
+	uint32_t data;
+	_DBG("Message ID:     ");
+	_DBH32(CAN_Msg->id);_DBG_("");
+	_DBG("Message length: ");
+	_DBH32(CAN_Msg->len);_DBG_(" BYTES");
+	_DBG("Message type:   ");
+	if(CAN_Msg->type==DATA_FRAME)
+	{
+		_DBG_("DATA FRAME ");
+	}
+	else
+		_DBG_("REMOTE FRAME ");
+	_DBG("Message format: ");
+	if(CAN_Msg->format==STD_ID_FORMAT)
+	{
+		_DBG_("STANDARD ID FRAME FORMAT");
+	}
+	else
+		_DBG_("EXTENDED ID FRAME FORMAT");
+	_DBG("Message dataA:  ");
+	data = (CAN_Msg->dataA[0])|(CAN_Msg->dataA[1]<<8)|(CAN_Msg->dataA[2]<<16)|(CAN_Msg->dataA[3]<<24);
+	_DBH32(data);_DBG_("");
+	data = (CAN_Msg->dataB[0])|(CAN_Msg->dataB[1]<<8)|(CAN_Msg->dataB[2]<<16)|(CAN_Msg->dataB[3]<<24);
+	_DBG("Message dataB:  ");
+	_DBH32(data);_DBG_("");
+	_DBG_("");
+}
+
+/*********************************************************************//**
+ * @brief		Initialize transmit and receive message for Bypass operation
+ * @param[in]	none
+ * @return 		none
+ **********************************************************************/
+void CAN_InitMessage(void) {
+	TXMsg.format = EXT_ID_FORMAT;
+	TXMsg.id = 0x00001234;
+	TXMsg.len = 8;
+	TXMsg.type = DATA_FRAME;
+	TXMsg.dataA[0] = TXMsg.dataA[1] = TXMsg.dataA[2] = TXMsg.dataA[3] = 0x00000000;
+	TXMsg.dataB[0] = TXMsg.dataB[1] = TXMsg.dataB[2] = TXMsg.dataB[3] = 0x00000000;
+
+	RXMsg.format = 0x00;
+	RXMsg.id = 0x00;
+	RXMsg.len = 0x00;
+	RXMsg.type = 0x00;
+	RXMsg.dataA[0] = RXMsg.dataA[1] = RXMsg.dataA[2] = RXMsg.dataA[3] = 0x00000000;
+	RXMsg.dataB[0] = RXMsg.dataB[1] = RXMsg.dataB[2] = RXMsg.dataB[3] = 0x00000000;
+}
+
+/*********************************************************************//**
+ * @brief		print menu
+ * @param[in]	none
+ * @return 		none
+ **********************************************************************/
+void print_menu()
+{
+	_DBG_(menu);
+}
+
+/*-------------------------MAIN FUNCTION------------------------------*/
+/*********************************************************************//**
+ * @brief		c_entry: Main CAN program body
+ * @param[in]	none
+ * @return 		int
+ **********************************************************************/
+int c_entry(void) { /* Main Program */
+	PINSEL_CFG_Type PinCfg;
+
+	/* Initialize debug via UART0
+	 * – 115200bps
+	 * – 8 data bit
+	 * – No parity
+	 * – 1 stop bit
+	 * – No flow control
+	 */
+	debug_frmwrk_init();
+	print_menu();
+
+	/* Pin configuration
+	 * CAN1: select P0.0 as RD1. P0.1 as TD1
+	 * CAN2: select P2.7 as RD2, P2.8 as RD2
+	 */
+	PinCfg.Funcnum = 1;
+	PinCfg.OpenDrain = 0;
+	PinCfg.Pinmode = 0;
+	PinCfg.Pinnum = 0;
+	PinCfg.Portnum = 0;
+	PINSEL_ConfigPin(&PinCfg);
+	PinCfg.Pinnum = 1;
+	PINSEL_ConfigPin(&PinCfg);
+
+	PinCfg.Pinnum = 7;
+	PinCfg.Portnum = 2;
+	PINSEL_ConfigPin(&PinCfg);
+	PinCfg.Pinnum = 8;
+	PINSEL_ConfigPin(&PinCfg);
+
+	//Initialize CAN1 & CAN2
+	CAN_Init(LPC_CAN1, 125000);
+	CAN_Init(LPC_CAN2, 125000);
+
+	//Enable Interrupt
+	CAN_IRQCmd(LPC_CAN2, CANINT_RIE, ENABLE);
+
+	//Enable CAN Interrupt
+	NVIC_EnableIRQ(CAN_IRQn);
+
+	_DBG_("CAN test Bypass Mode function...");
+	_DBG_("Press '1' to initialize CAN message...");_DBG_("");
+	while(_DG !='1');
+	CAN_SetAFMode(LPC_CANAF,CAN_AccBP);
+	CAN_InitMessage();
+	PrintMessage(&TXMsg);
+	_DBG_("Message ID and data will be increased continuously...");
+
+	_DBG_("Press '2' to start CAN operation...");
+	while(_DG !='2');
+
+	/** To test Bypass Mode: we send infinite messages to CAN2 and check
+	 * receive process via COM1
+	 */
+	CAN_SendMsg(LPC_CAN1, &TXMsg);
+
+	while (1);
+}
+
+/* With ARM and GHS toolsets, the entry point is main() - this will
+ allow the linker to generate wrapper code to setup stacks, allocate
+ heap area, and initialize and copy code and data segments. For GNU
+ toolsets, the entry point is through __start() in the crt0_gnu.asm
+ file, and that startup code will setup stacks and data */
+int main(void) {
+	return c_entry();
+}
+
+#ifdef  DEBUG
+/*******************************************************************************
+ * @brief		Reports the name of the source file and the source line number
+ * 				where the CHECK_PARAM error has occurred.
+ * @param[in]	file Pointer to the source file name
+ * @param[in]    line assert_param error line source number
+ * @return		None
+ *******************************************************************************/
+void check_failed(uint8_t *file, uint32_t line) {
+	/* User can add his own implementation to report the file name and line number,
+	 ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
+
+	/* Infinite loop */
+	while (1)
+		;
+}
+#endif
+
+/*
+ * @}
+ */