From 1abaa36b489794929e6ee8bc06e3fb396ec72d87 Mon Sep 17 00:00:00 2001 From: Dominik Sliwa Date: Wed, 29 Jun 2016 14:03:46 +0200 Subject: freertos: Move CAN test to a thread --- board/pin_mux.c | 4 +- source/main.c | 552 ++++++++++++++++++++++++++++++-------------------------- 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 */ + } } -- cgit v1.2.3