summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDominik Sliwa <dominik.sliwa@toradex.com>2016-06-29 14:03:46 +0200
committerDominik Sliwa <dominik.sliwa@toradex.com>2016-06-29 15:23:34 +0200
commit1abaa36b489794929e6ee8bc06e3fb396ec72d87 (patch)
treebea8170dcde29a38d60c9b924bbb69a27570a7ee
parent7292d8eea8ceff8ef33b65bb348e7e722a5f3423 (diff)
freertos: Move CAN test to a thread
-rw-r--r--board/pin_mux.c4
-rw-r--r--source/main.c552
2 files changed, 302 insertions, 254 deletions
diff --git a/board/pin_mux.c b/board/pin_mux.c
index 842ce5c..6824e96 100644
--- a/board/pin_mux.c
+++ b/board/pin_mux.c
@@ -102,9 +102,9 @@ void BOARD_InitPins(void)
od_config.passiveFilterEnable = kPORT_PassiveFilterDisable;
od_config.driveStrength = kPORT_LowDriveStrength;
od_config.lockRegister = kPORT_UnlockRegister;
- GPIO_PinInit(GPIOA, 16u, &gpio_out_config);
+ GPIO_PinInit(GPIOA, 16u, &gpio_out_hi_config);
PORT_SetPinConfig(PORTA, 16u, &od_config); /* MCU_INT1 */
- GPIO_PinInit(GPIOA, 29u, &gpio_out_hi_config);
+ GPIO_PinInit(GPIOA, 29u, &gpio_out_config);
PORT_SetPinConfig(PORTA, 29u, &od_config); /* MCU_INT2 */
GPIO_PinInit(GPIOB, 8u, &gpio_out_config);
PORT_SetPinConfig(PORTB, 8u, &od_config); /* MCU_INT3 */
diff --git a/source/main.c b/source/main.c
index d7e10e4..80d5ed5 100644
--- a/source/main.c
+++ b/source/main.c
@@ -64,56 +64,59 @@
#define hello_task_PRIORITY (configMAX_PRIORITIES - 1)
#define USB_HOST_INTERRUPT_PRIORITY (5U)
+/* Task handles */
+TaskHandle_t can_task_handle;
+TaskHandle_t usb_task_handle;
+TaskHandle_t hello_task_handle;
+
/*!
* @brief Task responsible for printing of "Hello world." message.
*/
static void hello_task(void *pvParameters) {
- for (;;) {
- PRINTF("Hello world.\r\n");
- /* Add your code here */
- vTaskDelay(5000);
- }
+ for (;;) {
+ PRINTF("Hello world.\r\n");
+ /* Add your code here */
+ vTaskDelay(5000);
+ }
}
usb_host_handle g_HostHandle;
static usb_status_t USB_HostEvent(usb_device_handle deviceHandle,
- usb_host_configuration_handle configurationHandle,
- uint32_t eventCode)
+ usb_host_configuration_handle configurationHandle,
+ uint32_t eventCode)
{
- usb_status_t status = kStatus_USB_Success;
- uint32_t infoValue;
-
- switch (eventCode)
- {
- case kUSB_HostEventAttach:
- usb_echo("device attached.\r\n");
- // status = USB_HostMsdEvent(deviceHandle, configurationHandle, eventCode);
- break;
-
- case kUSB_HostEventNotSupported:
- usb_echo("device not supported.\r\n");
- break;
-
- case kUSB_HostEventEnumerationDone:
- usb_echo("device enumerated.\r\n");
- USB_HostHelperGetPeripheralInformation(deviceHandle, kUSB_HostGetDevicePID, &infoValue);
- usb_echo("PID = 0x%x ", infoValue);
- USB_HostHelperGetPeripheralInformation(deviceHandle, kUSB_HostGetDeviceVID, &infoValue);
- usb_echo("VID = 0x%x \r\n", infoValue);
- // status = USB_HostMsdEvent(deviceHandle, configurationHandle, eventCode);
- break;
-
- case kUSB_HostEventDetach:
- usb_echo("device removed.\r\n");
- USB_HostCloseDeviceInterface(deviceHandle, NULL);
- // status = USB_HostMsdEvent(deviceHandle, configurationHandle, eventCode);
- break;
-
- default:
- break;
- }
- return status;
+ usb_status_t status = kStatus_USB_Success;
+ uint32_t infoValue;
+
+ switch (eventCode)
+ {
+ case kUSB_HostEventAttach:
+ usb_echo("device attached.\r\n");
+ break;
+
+ case kUSB_HostEventNotSupported:
+ usb_echo("device not supported.\r\n");
+ break;
+
+ case kUSB_HostEventEnumerationDone:
+ usb_echo("device enumerated.\r\n");
+ USB_HostHelperGetPeripheralInformation(deviceHandle, kUSB_HostGetDevicePID, &infoValue);
+ usb_echo("PID = 0x%x ", infoValue);
+ USB_HostHelperGetPeripheralInformation(deviceHandle, kUSB_HostGetDeviceVID, &infoValue);
+ usb_echo("VID = 0x%x \r\n", infoValue);
+ vTaskResume(can_task_handle);
+ break;
+
+ case kUSB_HostEventDetach:
+ usb_echo("device removed.\r\n");
+ USB_HostCloseDeviceInterface(deviceHandle, NULL);
+ break;
+
+ default:
+ break;
+ }
+ return status;
}
/*!
@@ -122,60 +125,60 @@ static usb_status_t USB_HostEvent(usb_device_handle deviceHandle,
#if ((defined USB_HOST_CONFIG_KHCI) && (USB_HOST_CONFIG_KHCI))
void USB0_IRQHandler(void)
{
- USB_HostKhciIsrFunction(g_HostHandle);
+ USB_HostKhciIsrFunction(g_HostHandle);
}
#endif /* USB_HOST_CONFIG_KHCI */
#if ((defined USB_HOST_CONFIG_EHCI) && (USB_HOST_CONFIG_EHCI))
void USBHS_IRQHandler(void)
{
- USB_HostEhciIsrFunction(g_HostHandle);
+ USB_HostEhciIsrFunction(g_HostHandle);
}
#endif /* USB_HOST_CONFIG_EHCI */
static void USB_HostApplicationInit(void)
{
- usb_status_t status = kStatus_USB_Success;
+ usb_status_t status = kStatus_USB_Success;
#if ((defined USB_HOST_CONFIG_KHCI) && (USB_HOST_CONFIG_KHCI))
- #if (defined(FSL_FEATURE_SOC_SCG_COUNT) && (FSL_FEATURE_SOC_SCG_COUNT > 0U))
- CLOCK_EnableUsbfs0Clock(kCLOCK_IpSrcFircAsync, CLOCK_GetFreq(kCLOCK_ScgFircAsyncDiv1Clk));
- #else
- CLOCK_EnableUsbfs0Clock(kCLOCK_UsbSrcPll0, CLOCK_GetFreq(kCLOCK_PllFllSelClk));
- #endif
+#if (defined(FSL_FEATURE_SOC_SCG_COUNT) && (FSL_FEATURE_SOC_SCG_COUNT > 0U))
+ CLOCK_EnableUsbfs0Clock(kCLOCK_IpSrcFircAsync, CLOCK_GetFreq(kCLOCK_ScgFircAsyncDiv1Clk));
+#else
+ CLOCK_EnableUsbfs0Clock(kCLOCK_UsbSrcPll0, CLOCK_GetFreq(kCLOCK_PllFllSelClk));
+#endif
#endif /* USB_HOST_CONFIG_KHCI */
#if ((defined USB_HOST_CONFIG_EHCI) && (USB_HOST_CONFIG_EHCI))
- IRQn_Type usbHsIrqs[] = USBHS_IRQS;
- usbIrq = usbHsIrqs[CONTROLLER_ID - kUSB_ControllerEhci0];
- CLOCK_EnableUsbhs0Clock(kCLOCK_UsbSrcPll0, CLOCK_GetFreq(kCLOCK_PllFllSelClk));
- USB_EhciPhyInit(CONTROLLER_ID, BOARD_XTAL0_CLK_HZ);
+ IRQn_Type usbHsIrqs[] = USBHS_IRQS;
+ usbIrq = usbHsIrqs[CONTROLLER_ID - kUSB_ControllerEhci0];
+ CLOCK_EnableUsbhs0Clock(kCLOCK_UsbSrcPll0, CLOCK_GetFreq(kCLOCK_PllFllSelClk));
+ USB_EhciPhyInit(CONTROLLER_ID, BOARD_XTAL0_CLK_HZ);
#endif /* USB_HOST_CONFIG_EHCI */
#if ((defined FSL_FEATURE_SOC_MPU_COUNT) && (FSL_FEATURE_SOC_MPU_COUNT))
- MPU_Enable(MPU, 0);
+ MPU_Enable(MPU, 0);
#endif /* FSL_FEATURE_SOC_MPU_COUNT */
- status = USB_HostInit(CONTROLLER_ID, &g_HostHandle, USB_HostEvent);
- if (status != kStatus_USB_Success)
- {
- usb_echo("host init error\r\n");
- return;
- }
- NVIC_SetPriority(USB0_IRQn, USB_HOST_INTERRUPT_PRIORITY);
- NVIC_EnableIRQ(USB0_IRQn);
+ status = USB_HostInit(CONTROLLER_ID, &g_HostHandle, USB_HostEvent);
+ if (status != kStatus_USB_Success)
+ {
+ usb_echo("host init error\r\n");
+ return;
+ }
+ NVIC_SetPriority(USB0_IRQn, USB_HOST_INTERRUPT_PRIORITY);
+ NVIC_EnableIRQ(USB0_IRQn);
- usb_echo("host init done\r\n");
+ usb_echo("host init done\r\n");
}
static void USB_HostTask(void *param)
{
- while (1)
- {
+ while (1)
+ {
#if ((defined USB_HOST_CONFIG_KHCI) && (USB_HOST_CONFIG_KHCI))
- USB_HostKhciTaskFunction(param);
+ USB_HostKhciTaskFunction(param);
#endif /* USB_HOST_CONFIG_KHCI */
#if ((defined USB_HOST_CONFIG_EHCI) && (USB_HOST_CONFIG_EHCI))
- USB_HostEhciTaskFunction(param);
+ USB_HostEhciTaskFunction(param);
#endif /* USB_HOST_CONFIG_EHCI */
- }
+ }
}
@@ -190,207 +193,252 @@ uint32_t rxIdentifier[2];
volatile bool txComplete[2] = {false, false};
volatile bool rxComplete[2] = {false, false};
+typedef struct _callback_message_t
+{
+ status_t async_status;
+ SemaphoreHandle_t sem;
+} callback_message_t;
+
static void flexcan_callback0(CAN_Type *base, flexcan_handle_t *handle, status_t status, uint32_t result, void *userData)
{
- switch (status)
- {
- case kStatus_FLEXCAN_RxIdle:
- if (RX_MESSAGE_BUFFER_NUM == result)
- {
- rxComplete[0] = true;
- }
- break;
-
- case kStatus_FLEXCAN_TxIdle:
- if (TX_MESSAGE_BUFFER_NUM == result)
- {
- txComplete[0] = true;
- }
- break;
-
- default:
- break;
- }
+ callback_message_t * cb = (callback_message_t*) userData;
+ BaseType_t reschedule = pdFALSE;
+
+ switch (status)
+ {
+ case kStatus_FLEXCAN_RxIdle:
+ if (RX_MESSAGE_BUFFER_NUM == result)
+ {
+ xSemaphoreGiveFromISR(cb->sem, &reschedule);
+ }
+ break;
+
+ case kStatus_FLEXCAN_TxIdle:
+ if (TX_MESSAGE_BUFFER_NUM == result)
+ {
+ }
+ break;
+
+ default:
+ break;
+ }
+ portYIELD_FROM_ISR(reschedule);
}
static void flexcan_callback1(CAN_Type *base, flexcan_handle_t *handle, status_t status, uint32_t result, void *userData)
{
- switch (status)
- {
- case kStatus_FLEXCAN_RxIdle:
- if (RX_MESSAGE_BUFFER_NUM1 == result)
- {
- rxComplete[1] = true;
- }
- break;
-
- case kStatus_FLEXCAN_TxIdle:
- if (TX_MESSAGE_BUFFER_NUM1 == result)
- {
- txComplete[1] = true;
- }
- break;
-
- default:
- break;
- }
+ callback_message_t * cb = (callback_message_t*) userData;
+ BaseType_t reschedule = pdFALSE;
+
+ switch (status)
+ {
+ case kStatus_FLEXCAN_RxIdle:
+ if (RX_MESSAGE_BUFFER_NUM1 == result)
+ {
+ xSemaphoreGiveFromISR(cb->sem, &reschedule);
+ }
+ break;
+
+ case kStatus_FLEXCAN_TxIdle:
+ if (TX_MESSAGE_BUFFER_NUM1 == result)
+ {
+ }
+ break;
+
+ default:
+ break;
+ }
+ portYIELD_FROM_ISR(reschedule);
}
void CAN_Init()
{
- flexcan_config_t flexcanConfig;
- flexcan_rx_mb_config_t mbConfig;
-
- txIdentifier[0] = 0x321;
- rxIdentifier[0] = 0x123;
- txIdentifier[1] = 0x123;
- rxIdentifier[1] = 0x321;
-
- /* Get FlexCAN module default Configuration. */
- /*
- * flexcanConfig.clkSrc = kFLEXCAN_ClkSrcOsc;
- * flexcanConfig.baudRate = 125000U;
- * flexcanConfig.maxMbNum = 16;
- * flexcanConfig.enableLoopBack = false;
- * flexcanConfig.enableSelfWakeup = false;
- * flexcanConfig.enableIndividMask = false;
- * flexcanConfig.enableDoze = false;
- */
- FLEXCAN_GetDefaultConfig(&flexcanConfig);
-
- /* Init FlexCAN module. */
- flexcanConfig.clkSrc = kFLEXCAN_ClkSrcPeri;
- FLEXCAN_Init(CAN0, &flexcanConfig, CLOCK_GetFreq(kCLOCK_BusClk));
-
- /* Create FlexCAN handle structure and set call back function. */
- FLEXCAN_TransferCreateHandle(CAN0, &flexcanHandle[0], flexcan_callback0, NULL);
-
- /* Set Rx Masking mechanism. */
- FLEXCAN_SetRxMbGlobalMask(CAN0, FLEXCAN_RX_MB_STD_MASK(rxIdentifier[0], 0, 0));
-
- /* Setup Rx Message Buffer. */
- mbConfig.format = kFLEXCAN_FrameFormatStandard;
- mbConfig.type = kFLEXCAN_FrameTypeData;
- mbConfig.id = FLEXCAN_ID_STD(rxIdentifier[0]);
- FLEXCAN_SetRxMbConfig(CAN0, RX_MESSAGE_BUFFER_NUM, &mbConfig, true);
-
- /* Setup Tx Message Buffer. */
- FLEXCAN_SetTxMbConfig(CAN0, TX_MESSAGE_BUFFER_NUM, true);
-
- /* Get FlexCAN module default Configuration. */
- /*
- * flexcanConfig.clkSrc = kFLEXCAN_ClkSrcOsc;
- * flexcanConfig.baudRate = 125000U;
- * flexcanConfig.maxMbNum = 16;
- * flexcanConfig.enableLoopBack = false;
- * flexcanConfig.enableSelfWakeup = false;
- * flexcanConfig.enableIndividMask = false;
- * flexcanConfig.enableDoze = false;
- */
- FLEXCAN_GetDefaultConfig(&flexcanConfig);
-
- /* Init FlexCAN module. */
- flexcanConfig.clkSrc = kFLEXCAN_ClkSrcPeri;
- FLEXCAN_Init(CAN1, &flexcanConfig, CLOCK_GetFreq(kCLOCK_BusClk));
-
- /* Create FlexCAN handle structure and set call back function. */
- FLEXCAN_TransferCreateHandle(CAN1, &flexcanHandle[1], flexcan_callback1, NULL);
-
- /* Set Rx Masking mechanism. */
- FLEXCAN_SetRxMbGlobalMask(CAN1, FLEXCAN_RX_MB_STD_MASK(rxIdentifier[1], 0, 0));
-
- /* Setup Rx Message Buffer. */
- mbConfig.format = kFLEXCAN_FrameFormatStandard;
- mbConfig.type = kFLEXCAN_FrameTypeData;
- mbConfig.id = FLEXCAN_ID_STD(rxIdentifier[1]);
- FLEXCAN_SetRxMbConfig(CAN1, RX_MESSAGE_BUFFER_NUM1, &mbConfig, true);
-
- /* Setup Tx Message Buffer. */
- FLEXCAN_SetTxMbConfig(CAN1, TX_MESSAGE_BUFFER_NUM1, true);
- PRINTF("CAN init done \r\n");
+ flexcan_config_t flexcanConfig;
+ flexcan_rx_mb_config_t mbConfig;
+
+ txIdentifier[0] = 0x321;
+ rxIdentifier[0] = 0x123;
+ txIdentifier[1] = 0x123;
+ rxIdentifier[1] = 0x321;
+
+ /* Get FlexCAN module default Configuration. */
+ /*
+ * flexcanConfig.clkSrc = kFLEXCAN_ClkSrcOsc;
+ * flexcanConfig.baudRate = 125000U;
+ * flexcanConfig.maxMbNum = 16;
+ * flexcanConfig.enableLoopBack = false;
+ * flexcanConfig.enableSelfWakeup = false;
+ * flexcanConfig.enableIndividMask = false;
+ * flexcanConfig.enableDoze = false;
+ */
+ FLEXCAN_GetDefaultConfig(&flexcanConfig);
+
+ /* Init FlexCAN module. */
+ flexcanConfig.clkSrc = kFLEXCAN_ClkSrcPeri;
+ FLEXCAN_Init(CAN0, &flexcanConfig, CLOCK_GetFreq(kCLOCK_BusClk));
+
+ /* Create FlexCAN handle structure and set call back function. */
+ FLEXCAN_TransferCreateHandle(CAN0, &flexcanHandle[0], flexcan_callback0, flexcanHandle[0].userData);
+
+ /* Set Rx Masking mechanism. */
+ FLEXCAN_SetRxMbGlobalMask(CAN0, FLEXCAN_RX_MB_STD_MASK(rxIdentifier[0], 0, 0));
+
+ /* Setup Rx Message Buffer. */
+ mbConfig.format = kFLEXCAN_FrameFormatStandard;
+ mbConfig.type = kFLEXCAN_FrameTypeData;
+ mbConfig.id = FLEXCAN_ID_STD(rxIdentifier[0]);
+ FLEXCAN_SetRxMbConfig(CAN0, RX_MESSAGE_BUFFER_NUM, &mbConfig, true);
+
+ /* Setup Tx Message Buffer. */
+ FLEXCAN_SetTxMbConfig(CAN0, TX_MESSAGE_BUFFER_NUM, true);
+
+ /* Get FlexCAN module default Configuration. */
+ /*
+ * flexcanConfig.clkSrc = kFLEXCAN_ClkSrcOsc;
+ * flexcanConfig.baudRate = 125000U;
+ * flexcanConfig.maxMbNum = 16;
+ * flexcanConfig.enableLoopBack = false;
+ * flexcanConfig.enableSelfWakeup = false;
+ * flexcanConfig.enableIndividMask = false;
+ * flexcanConfig.enableDoze = false;
+ */
+ FLEXCAN_GetDefaultConfig(&flexcanConfig);
+
+ /* Init FlexCAN module. */
+ flexcanConfig.clkSrc = kFLEXCAN_ClkSrcPeri;
+ FLEXCAN_Init(CAN1, &flexcanConfig, CLOCK_GetFreq(kCLOCK_BusClk));
+
+ /* Create FlexCAN handle structure and set call back function. */
+ FLEXCAN_TransferCreateHandle(CAN1, &flexcanHandle[1], flexcan_callback1, flexcanHandle[1].userData);
+
+ /* Set Rx Masking mechanism. */
+ FLEXCAN_SetRxMbGlobalMask(CAN1, FLEXCAN_RX_MB_STD_MASK(rxIdentifier[1], 0, 0));
+
+ /* Setup Rx Message Buffer. */
+ mbConfig.format = kFLEXCAN_FrameFormatStandard;
+ mbConfig.type = kFLEXCAN_FrameTypeData;
+ mbConfig.id = FLEXCAN_ID_STD(rxIdentifier[1]);
+ FLEXCAN_SetRxMbConfig(CAN1, RX_MESSAGE_BUFFER_NUM1, &mbConfig, true);
+
+ /* Setup Tx Message Buffer. */
+ FLEXCAN_SetTxMbConfig(CAN1, TX_MESSAGE_BUFFER_NUM1, true);
+ PRINTF("CAN init done \r\n");
+}
+
+
+static void can_test_task(void *pvParameters) {
+ flexcan_frame_t txFrame, rxFrame;
+ flexcan_mb_transfer_t txXfer, rxXfer;
+ callback_message_t cb_msg[2];
+
+ cb_msg[0].sem = xSemaphoreCreateBinary();
+ cb_msg[1].sem = xSemaphoreCreateBinary();
+ flexcanHandle[0].userData = (void *) &cb_msg[0];
+ flexcanHandle[1].userData = (void *) &cb_msg[1];
+ CAN_Init();
+
+ vTaskSuspend(NULL);
+ rxXfer.frame = &rxFrame;
+ rxXfer.mbIdx = RX_MESSAGE_BUFFER_NUM1;
+ FLEXCAN_TransferReceiveNonBlocking(CAN1, &flexcanHandle[1], &rxXfer);
+
+ txFrame.format = kFLEXCAN_FrameFormatStandard;
+ txFrame.type = kFLEXCAN_FrameTypeData;
+ txFrame.id = FLEXCAN_ID_STD(0x321);
+ txFrame.length = 8;
+ txFrame.dataWord0 = CAN_WORD0_DATA_BYTE_0(0x11) | CAN_WORD0_DATA_BYTE_1(0x22) | CAN_WORD0_DATA_BYTE_2(0x33) |
+ CAN_WORD0_DATA_BYTE_3(0x44);
+ txFrame.dataWord1 = CAN_WORD1_DATA_BYTE_4(0x55) | CAN_WORD1_DATA_BYTE_5(0x66) | CAN_WORD1_DATA_BYTE_6(0x77) |
+ CAN_WORD1_DATA_BYTE_7(0x88);
+ txXfer.frame = &txFrame;
+ txXfer.mbIdx = TX_MESSAGE_BUFFER_NUM;
+
+ PRINTF("\r\nCAN0->CAN1 ");
+
+ FLEXCAN_TransferSendNonBlocking(CAN0, &flexcanHandle[0], &txXfer);
+ if (xSemaphoreTake(cb_msg[1].sem, 1000u) == pdFALSE)
+ {
+ PRINTF("FAIL!\r\n");
+ FLEXCAN_TransferAbortSend(CAN0, &flexcanHandle[0], &txXfer);
+ FLEXCAN_TransferAbortReceive(CAN1, &flexcanHandle[1], &rxXfer);
+ }
+ else
+ {
+ PRINTF("SUCCESS!\r\n");
+ }
+
+ rxXfer.frame = &rxFrame;
+ rxXfer.mbIdx = RX_MESSAGE_BUFFER_NUM;
+ FLEXCAN_TransferReceiveNonBlocking(CAN0, &flexcanHandle[0], &rxXfer);
+
+ txFrame.format = kFLEXCAN_FrameFormatStandard;
+ txFrame.type = kFLEXCAN_FrameTypeData;
+ txFrame.id = FLEXCAN_ID_STD(0x123);
+ txFrame.length = 8;
+ txFrame.dataWord0 = CAN_WORD0_DATA_BYTE_0(0x11) | CAN_WORD0_DATA_BYTE_1(0x22) | CAN_WORD0_DATA_BYTE_2(0x33) |
+ CAN_WORD0_DATA_BYTE_3(0x44);
+ txFrame.dataWord1 = CAN_WORD1_DATA_BYTE_4(0x55) | CAN_WORD1_DATA_BYTE_5(0x66) | CAN_WORD1_DATA_BYTE_6(0x77) |
+ CAN_WORD1_DATA_BYTE_7(0x88);
+ txXfer.frame = &txFrame;
+ txXfer.mbIdx = TX_MESSAGE_BUFFER_NUM1;
+
+ PRINTF("CAN1->CAN0 ");
+
+ FLEXCAN_TransferSendNonBlocking(CAN1, &flexcanHandle[1], &txXfer);
+ if (xSemaphoreTake(cb_msg[0].sem, 1000u ) == pdFALSE)
+ {
+ PRINTF("FAIL!\r\n");
+ FLEXCAN_TransferAbortSend(CAN1, &flexcanHandle[0], &txXfer);
+ FLEXCAN_TransferAbortReceive(CAN0, &flexcanHandle[1], &rxXfer);
+ }
+ else
+ {
+ PRINTF("SUCCESS!\r\n");
+ }
+
+ vSemaphoreDelete(cb_msg[0].sem);
+ vSemaphoreDelete(cb_msg[1].sem);
+
+ vTaskDelete(NULL);
}
/*!
* @brief Application entry point.
*/
int main(void) {
- flexcan_frame_t txFrame, rxFrame;
- flexcan_mb_transfer_t txXfer, rxXfer;
- /* Init board hardware. */
- BOARD_InitPins();
- BOARD_BootClockRUN();
- BOARD_InitDebugConsole();
- PRINTF("Hello!\r\n");
- USB_HostApplicationInit();
- CAN_Init();
-
- /* Add your code here */
- rxXfer.frame = &rxFrame;
- rxXfer.mbIdx = RX_MESSAGE_BUFFER_NUM1;
- FLEXCAN_TransferReceiveNonBlocking(CAN1, &flexcanHandle[1], &rxXfer);
-
- txFrame.format = kFLEXCAN_FrameFormatStandard;
- txFrame.type = kFLEXCAN_FrameTypeData;
- txFrame.id = FLEXCAN_ID_STD(0x321);
- txFrame.length = 8;
- txFrame.dataWord0 = CAN_WORD0_DATA_BYTE_0(0x11) | CAN_WORD0_DATA_BYTE_1(0x22) | CAN_WORD0_DATA_BYTE_2(0x33) |
- CAN_WORD0_DATA_BYTE_3(0x44);
- txFrame.dataWord1 = CAN_WORD1_DATA_BYTE_4(0x55) | CAN_WORD1_DATA_BYTE_5(0x66) | CAN_WORD1_DATA_BYTE_6(0x77) |
- CAN_WORD1_DATA_BYTE_7(0x88);
- txXfer.frame = &txFrame;
- txXfer.mbIdx = TX_MESSAGE_BUFFER_NUM;
-
- PRINTF("tx word0 = 0x%x\r\n", txFrame.dataWord0);
- PRINTF("tx word1 = 0x%x\r\n", txFrame.dataWord1);
- PRINTF("CAN0->CAN1\r\n");
-
- FLEXCAN_TransferSendNonBlocking(CAN0, &flexcanHandle[0], &txXfer);
- while (!rxComplete[1])
- {
- }
- PRINTF("rx word0 = 0x%x\r\n", rxFrame.dataWord0);
- PRINTF("rx word1 = 0x%x\r\n", rxFrame.dataWord1);
-
- rxXfer.frame = &rxFrame;
- rxXfer.mbIdx = RX_MESSAGE_BUFFER_NUM;
- FLEXCAN_TransferReceiveNonBlocking(CAN0, &flexcanHandle[0], &rxXfer);
-
- txFrame.format = kFLEXCAN_FrameFormatStandard;
- txFrame.type = kFLEXCAN_FrameTypeData;
- txFrame.id = FLEXCAN_ID_STD(0x123);
- txFrame.length = 8;
- txFrame.dataWord0 = CAN_WORD0_DATA_BYTE_0(0x11) | CAN_WORD0_DATA_BYTE_1(0x22) | CAN_WORD0_DATA_BYTE_2(0x33) |
- CAN_WORD0_DATA_BYTE_3(0x44);
- txFrame.dataWord1 = CAN_WORD1_DATA_BYTE_4(0x55) | CAN_WORD1_DATA_BYTE_5(0x66) | CAN_WORD1_DATA_BYTE_6(0x77) |
- CAN_WORD1_DATA_BYTE_7(0x88);
- txXfer.frame = &txFrame;
- txXfer.mbIdx = TX_MESSAGE_BUFFER_NUM1;
-
- PRINTF("tx word0 = 0x%x\r\n", txFrame.dataWord0);
- PRINTF("tx word1 = 0x%x\r\n", txFrame.dataWord1);
- PRINTF("CAN1->CAN0\r\n");
-
- FLEXCAN_TransferSendNonBlocking(CAN1, &flexcanHandle[1], &txXfer);
- while (!rxComplete[0])
- {
- }
- PRINTF("rx word0 = 0x%x\r\n", rxFrame.dataWord0);
- PRINTF("rx word1 = 0x%x\r\n", rxFrame.dataWord1);
-
- /* Create RTOS task */
- if (xTaskCreate(USB_HostTask, "usb host task", 2000L / sizeof(portSTACK_TYPE), g_HostHandle, 4, NULL) != pdPASS)
- {
- usb_echo("create host task error\r\n");
- }
- if(xTaskCreate(hello_task, "Hello_task", configMINIMAL_STACK_SIZE, NULL, hello_task_PRIORITY, NULL) != pdPASS)
- {
- usb_echo("create hello task error\r\n");
- }
- vTaskStartScheduler();
-
- for(;;) { /* Infinite loop to avoid leaving the main function */
- __asm("NOP"); /* something to use as a breakpoint stop while looping */
- }
+
+ /* Init board hardware. */
+ BOARD_InitPins();
+ BOARD_BootClockRUN();
+ BOARD_InitDebugConsole();
+ PRINTF("Hello!\r\n");
+ USB_HostApplicationInit();
+
+ /* Add your code here */
+
+
+ /* Create RTOS task */
+ if (xTaskCreate(can_test_task, "can test task", 2000L / sizeof(portSTACK_TYPE), NULL, 4, &can_task_handle) != pdPASS)
+ {
+ usb_echo("create host task error\r\n");
+ }
+ if (xTaskCreate(USB_HostTask, "usb host task", 2000L / sizeof(portSTACK_TYPE), g_HostHandle, 4, &usb_task_handle) != pdPASS)
+ {
+ usb_echo("create host task error\r\n");
+ }
+ if(xTaskCreate(hello_task, "Hello_task", configMINIMAL_STACK_SIZE, NULL, hello_task_PRIORITY, &hello_task_handle) != pdPASS)
+ {
+ usb_echo("create hello task error\r\n");
+ }
+
+ NVIC_SetPriority(CAN0_ORed_Message_buffer_IRQn, 5u);
+ NVIC_SetPriority(CAN1_ORed_Message_buffer_IRQn, 5u);
+ NVIC_SetPriorityGrouping( 0 );
+ vTaskStartScheduler();
+
+ for(;;) { /* Infinite loop to avoid leaving the main function */
+ __asm("NOP"); /* something to use as a breakpoint stop while looping */
+ }
}