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_two_kit/can_test_two_kit.c	Sun Mar 20 05:38:56 2011 +0000
@@ -0,0 +1,312 @@
+/***********************************************************************//**
+ * @file		can_test_two_kit.c
+ * @purpose		This example used to CAN operation in two board
+ * @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_two_kit	CAN_test_two_kit
+ * @ingroup CAN_Examples
+ * @{
+ */
+/************************** PRIVATE MACROS *************************/
+#define CAN_TRANSMIT				1
+#define CAN_RECEIVE					!CAN_TRANSMIT
+#define TX_BUFFER_SIZE				4
+#define RX_BUFFER_SIZE				2
+
+/************************** PRIVATE VARIABLES *************************/
+uint8_t menu[]=
+	"********************************************************************************\n\r"
+	"Hello NXP Semiconductors \n\r"
+	"CAN demo \n\r"
+	"\t - MCU: LPC17xx \n\r"
+	"\t - Core: ARM CORTEX-M3 \n\r"
+	"\t - Communicate via: UART0 - 115200 bps \n\r"
+	"Use 2 CAN peripherals on 2 boards to transfer data \n\r"
+	"********************************************************************************\n\r";
+
+/** CAN variable definition **/
+CAN_MSG_Type TXMsg, RXMsg; // messages for test Bypass mode
+CAN_MSG_Type AFTxMsg[TX_BUFFER_SIZE], AFRxMsg[RX_BUFFER_SIZE]; //messages for test Acceptance Filter mode
+uint32_t CANRxCount = 0, CANTxCount = 0;
+uint32_t CANErrCount = 0;
+
+/************************** PRIVATE FUNCTIONS *************************/
+void CAN_IRQHandler(void);
+
+void CAN_InitMessage(void);
+Bool CAN_VerifyMessage(CAN_MSG_Type Msg1, CAN_MSG_Type Msg2);
+CAN_ERROR CAN_SetupAFTable(void);
+void CAN_InitAFMessage(void);
+void PrintMessage(CAN_MSG_Type* msg);
+
+
+/*----------------- INTERRUPT SERVICE ROUTINES --------------------------*/
+/*********************************************************************//**
+ * @brief		CAN_IRQ Handler, control receive message operation
+ * param[in]	none
+ * @return 		none
+ **********************************************************************/
+void CAN_IRQHandler()
+{
+	uint8_t IntStatus;
+	/* 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_CAN1);
+	//check receive interrupt
+	if((IntStatus>>0)&0x01)
+	{
+		CAN_ReceiveMsg(LPC_CAN1, &AFRxMsg[CANRxCount]);
+		PrintMessage(&AFRxMsg[CANRxCount]);_DBG_("");
+		CANRxCount++;
+	}
+}
+
+/*-------------------------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		Setup Acceptance Filter Table
+ * @param[in]	none
+ * @return 		none
+ * Note: 		not use Group Standard Frame, just use for Explicit
+ * 				Standard and Extended Frame
+ **********************************************************************/
+CAN_ERROR CAN_SetupAFTable(void) {
+	uint32_t i = 0;
+	uint8_t result;
+	/* Set up Explicit Standard Frame Format Identifier Section
+	 * In this simple test, it has 16 entries ID
+	 */
+	for (i = 0; i < 16; i++) {
+		result = CAN_LoadExplicitEntry(LPC_CAN1, i + 1, STD_ID_FORMAT);
+	}
+	/* Set up Explicit Extended Frame Format Identifier Section
+	 * In this simple test, it has 16 entries ID
+	 */
+	for (i = 0; i < 16; i++) {
+		result = CAN_LoadExplicitEntry(LPC_CAN1, i << 11, EXT_ID_FORMAT);
+	}
+	return result;
+}
+
+/*********************************************************************//**
+ * @brief		Initialize transmit and receive message for testing AF
+ * 				operation
+ * @param[in]	none
+ * @return 		none
+ **********************************************************************/
+void CAN_InitAFMessage(void) {
+	/* 1st Message with 11-bit ID which exit in AF Look-up Table */
+	AFTxMsg[0].id = 0x08;
+	AFTxMsg[0].len = 0x08;
+	AFTxMsg[0].type = DATA_FRAME;
+	AFTxMsg[0].format = STD_ID_FORMAT;
+	AFTxMsg[0].dataA[0] = AFTxMsg[0].dataA[1] = AFTxMsg[0].dataA[2]= AFTxMsg[0].dataA[3]= 0x78;
+	AFTxMsg[0].dataB[0] = AFTxMsg[0].dataB[1] = AFTxMsg[0].dataB[2]= AFTxMsg[0].dataB[3]= 0x21;
+
+	/* 2nd Message with 11-bit ID which not exit in AF Look-up Table */
+	AFTxMsg[1].id = 0xA0;
+	AFTxMsg[1].len = 0x08;
+	AFTxMsg[1].type = DATA_FRAME;
+	AFTxMsg[1].format = STD_ID_FORMAT;
+	AFTxMsg[1].dataA[0] = AFTxMsg[1].dataA[1] = AFTxMsg[1].dataA[2]= AFTxMsg[1].dataA[3]= 0x23;
+	AFTxMsg[1].dataB[0] = AFTxMsg[1].dataB[1] = AFTxMsg[1].dataB[2]= AFTxMsg[1].dataB[3]= 0x45;
+
+	/* 3th Message with 29-bit ID which exit in AF Look-up Table */
+	AFTxMsg[2].id = (0x08 << 11);
+	AFTxMsg[2].len = 0x08;
+	AFTxMsg[2].type = DATA_FRAME;
+	AFTxMsg[2].format = EXT_ID_FORMAT;
+	AFTxMsg[2].dataA[0] = AFTxMsg[2].dataA[1] = AFTxMsg[2].dataA[2]= AFTxMsg[2].dataA[3]= 0x15;
+	AFTxMsg[2].dataB[0] = AFTxMsg[2].dataB[1] = AFTxMsg[2].dataB[2]= AFTxMsg[2].dataB[3]= 0x36;
+
+	/* 4th Message with 29-bit ID which not exit in AF Look-up Table */
+	AFTxMsg[3].id = (0xA0 << 11);
+	AFTxMsg[3].len = 0x08;
+	AFTxMsg[3].type = DATA_FRAME;
+	AFTxMsg[3].format = EXT_ID_FORMAT;
+	AFTxMsg[3].dataA[0] = AFTxMsg[3].dataA[1] = AFTxMsg[3].dataA[2]= AFTxMsg[3].dataA[3]= 0x78;
+	AFTxMsg[3].dataB[0] = AFTxMsg[3].dataB[1] = AFTxMsg[3].dataB[2]= AFTxMsg[3].dataB[3]= 0x21;
+
+	AFRxMsg[0].id = AFRxMsg[1].id = 0x00;
+	AFRxMsg[0].len = AFRxMsg[1].len = 0x00;
+	AFRxMsg[0].type = AFRxMsg[1].type = 0x00;
+	AFRxMsg[0].format = AFRxMsg[1].format = 0x00;
+	AFRxMsg[0].dataA[0] = AFRxMsg[1].dataA[0] = 0x00;
+	AFRxMsg[0].dataA[1] = AFRxMsg[1].dataA[1] = 0x00;
+	AFRxMsg[0].dataA[2] = AFRxMsg[1].dataA[2] = 0x00;
+	AFRxMsg[0].dataA[3] = AFRxMsg[1].dataA[3] = 0x00;
+	AFRxMsg[0].dataB[0] = AFRxMsg[1].dataB[0] = 0x00;
+	AFRxMsg[0].dataB[1] = AFRxMsg[1].dataB[1] = 0x00;
+	AFRxMsg[0].dataB[2] = AFRxMsg[1].dataB[2] = 0x00;
+	AFRxMsg[0].dataB[3] = AFRxMsg[1].dataB[3] = 0x00;
+}
+/*********************************************************************//**
+ * @brief		print menu
+ * @param[in]	none
+ * @return 		none
+ **********************************************************************/
+void print_menu(void)
+{
+	_DBG_(menu);
+}
+
+/*-------------------------MAIN FUNCTION------------------------------*/
+/*********************************************************************//**
+ * @brief		c_entry: Main CAN program body
+ * @param[in]	none
+ * @return 		int
+ **********************************************************************/
+int c_entry(void) { /* Main Program */
+	uint32_t result,i;
+	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
+	 */
+	PinCfg.Funcnum = 1;
+	PinCfg.OpenDrain = 0;
+	PinCfg.Pinmode = 0;
+	PinCfg.Pinnum = 0;
+	PinCfg.Portnum = 0;
+	PINSEL_ConfigPin(&PinCfg);
+	PinCfg.Pinnum = 1;
+	PINSEL_ConfigPin(&PinCfg);
+
+	//Initialize CAN1
+	CAN_Init(LPC_CAN1, 125000);
+#if CAN_RECEIVE
+	//Enable Interrupt
+	CAN_IRQCmd(LPC_CAN1, CANINT_RIE, ENABLE);
+
+	//Enable CAN Interrupt
+	NVIC_EnableIRQ(CAN_IRQn);
+	CAN_SetAFMode(LPC_CANAF, CAN_Normal);
+
+	/* Test Acceptance Filter with a simple AF Look-up Table. It just has two sections:
+	 * 		- Explicit Standard Frame Format Identifier Section
+	 * 		- Explicit Extended Frame Format Identifier Section
+	 * We use 4 Message:
+	 * 		- 1 Message with 11-bit ID which exit in AF Look-up Table
+	 *  	- 1 Message with 11-bit ID which not exit in AF Look-up Table
+	 *  	- 1 Message with 29-bit ID which exit in AF Look-up Table
+	 *  	- 1 Message with 29-bit ID which not exit in AF Look-up Table
+	 *  to check Acceptance filter operation of CAN
+	 */
+	_DBG_("Test Acceptance Filter function...");
+	CAN_SetAFMode(LPC_CANAF, CAN_Normal);
+	result = CAN_SetupAFTable(); /* setup AF Look-up Table */
+	if (result != CAN_OK) {
+		_DBG_("Setup AF: ERROR...");
+		while(1);
+	}
+	else _DBG_("Setup AF: SUCCESSFUL...");_DBG_("");
+	_DBG_("Recieving message...");
+#else
+	CAN_InitAFMessage(); /* initialize Transmit Message */
+	for (i = 0; i < TX_BUFFER_SIZE; i++)
+	{
+		CAN_SendMsg(LPC_CAN1, &AFTxMsg[i]);
+		PrintMessage(&AFTxMsg[i]);_DBG_("");
+		for(result=0;result<10000;result++);
+		CANTxCount++;
+	}
+	_DBG_("Sending finished !!!");
+#endif
+	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
+
+/*
+ * @}
+ */