/** * @brief The main task for the CAN1 channel * @param pvParameters: * @retval None */ void can1Task(void *pvParameters) { /* Mutex semaphore to manage when it's ok to send and receive new data */ xSemaphore = xSemaphoreCreateMutex(); /* Mutex semaphore for accessing the settings for this channel */ xSettingsSemaphore = xSemaphoreCreateMutex(); /* Create software timers */ prvBuffer1ClearTimer = xTimerCreate("Buf1ClearCan1", 10, pdFALSE, 0, prvBuffer1ClearTimerCallback); prvBuffer2ClearTimer = xTimerCreate("Buf2ClearCan1", 10, pdFALSE, 0, prvBuffer2ClearTimerCallback); /* Initialize hardware */ prvHardwareInit(); /* Wait to make sure the SPI FLASH is initialized */ while (SPI_FLASH_Initialized() == false) { vTaskDelay(100 / portTICK_PERIOD_MS); } /* Try to read the settings from SPI FLASH */ prvReadSettingsFromSpiFlash(); can1Clear(); /* The parameter in vTaskDelayUntil is the absolute time * in ticks at which you want to be woken calculated as * an increment from the time you were last woken. */ TickType_t xNextWakeTime; /* Initialize xNextWakeTime - this only needs to be done once. */ xNextWakeTime = xTaskGetTickCount(); uint8_t count = 0; prvDoneInitializing = true; while (1) { vTaskDelayUntil(&xNextWakeTime, 1000 / portTICK_PERIOD_MS); // /* Transmit debug data */ // if (prvCurrentSettings.connection == CANConnection_Connected) // { // /* Set the data to be transmitted */ // uint8_t data[2] = {0xAA, count}; // can1Transmit(0x321, data, CANDataLength_2, 50); // count++; // // if (count % 10 == 0) // { // uint8_t data2[5] = {0x72, 0x21, 0xDE, 0x03, 0xFA}; // can1Transmit(0x321, data2, CANDataLength_5, 50); // } // } } }
/** * @brief The main task for the UART1 channel * @param pvParameters: * @retval None */ void uart1Task(void *pvParameters) { /* Mutex semaphore to manage when it's ok to send and receive new data */ xSemaphore = xSemaphoreCreateMutex(); /* Mutex semaphore for accessing the settings for this channel */ xSettingsSemaphore = xSemaphoreCreateMutex(); /* Create software timers */ prvBuffer1ClearTimer = xTimerCreate("Buf1ClearUart1", 10, pdFALSE, 0, prvBuffer1ClearTimerCallback); prvBuffer2ClearTimer = xTimerCreate("Buf2ClearUart1", 10, pdFALSE, 0, prvBuffer2ClearTimerCallback); /* Initialize hardware */ prvHardwareInit(); /* Wait to make sure the SPI FLASH is initialized */ while (SPI_FLASH_Initialized() == false) { vTaskDelay(100 / portTICK_PERIOD_MS); } /* Try to read the settings from SPI FLASH */ prvReadSettingsFromSpiFlash(); /* * TODO: Figure out a good way to allow saved data in SPI FLASH to be read next time we wake up so that we * don't have to do a clear every time we start up the device. */ uart1Clear(); // uint8_t* data = "UART1 Debug! "; uint8_t* data = "Prevas Student Embedded Awards 2014 - "; /* The parameter in vTaskDelayUntil is the absolute time * in ticks at which you want to be woken calculated as * an increment from the time you were last woken. */ TickType_t xNextWakeTime; /* Initialize xNextWakeTime - this only needs to be done once. */ xNextWakeTime = xTaskGetTickCount(); prvDoneInitializing = true; while (1) { vTaskDelayUntil(&xNextWakeTime, 1000 / portTICK_PERIOD_MS); /* Transmit debug data if that mode is active */ if (prvCurrentSettings.connection == UARTConnection_Connected && prvCurrentSettings.mode == UARTMode_DebugTX) uart1Transmit(data, strlen(data)); } /* Something has gone wrong */ error: while (1); }
/** * @brief The main task for the CAN2 channel * @param pvParameters: * @retval None */ void can2Task(void *pvParameters) { /* Mutex semaphore to manage when it's ok to send and receive new data */ xSemaphore = xSemaphoreCreateMutex(); /* Mutex semaphore for accessing the settings for this channel */ xSettingsSemaphore = xSemaphoreCreateMutex(); /* Create software timers */ prvBuffer1ClearTimer = xTimerCreate("Buf1ClearCan2", 10, pdFALSE, 0, prvBuffer1ClearTimerCallback); prvBuffer2ClearTimer = xTimerCreate("Buf2ClearCan2", 10, pdFALSE, 0, prvBuffer2ClearTimerCallback); /* Initialize hardware */ prvHardwareInit(); /* Wait to make sure the SPI FLASH is initialized */ while (SPI_FLASH_Initialized() == false) { vTaskDelay(100 / portTICK_PERIOD_MS); } /* Try to read the settings from SPI FLASH */ prvReadSettingsFromSpiFlash(); can2Clear(); /* The parameter in vTaskDelayUntil is the absolute time * in ticks at which you want to be woken calculated as * an increment from the time you were last woken. */ TickType_t xNextWakeTime; /* Initialize xNextWakeTime - this only needs to be done once. */ xNextWakeTime = xTaskGetTickCount(); prvDoneInitializing = true; while (1) { vTaskDelayUntil(&xNextWakeTime, 1000 / portTICK_PERIOD_MS); } }