📄 leds.c
字号:
//// $Id: leds.c 328 2008-11-09 05:00:23Z jcw $// $Revision: 328 $// $Author: jcw $// $Date: 2008-11-09 00:00:23 -0500 (Sun, 09 Nov 2008) $// $HeadURL: http://tinymicros.com/svn_public/arm/lpc2148_demo/trunk/leds/leds.c $//#include "FreeRTOS.h"#include "task.h"#include "queue.h"#include "../main.h"#include "../cpu/cpu.h"#include "leds.h"//// If CFG_LED is not defined, we still compile the code, it's just not included.// Define TASKHANDLE_LED so we compile. Normally this is defined in main.h,// but it's #ifndef'ed out so that we don't allocate a task handle slot for it// when LED support isn't included.//#ifndef CFG_LED#define TASKHANDLE_LED 0#endif//////typedef struct{ int timeOn; int timeOff;}ledDutyCycles_t;static ledDutyCycles_t ledDutyCycles [] = { { (200 / portTICK_RATE_MS), (800 / portTICK_RATE_MS) }, { (400 / portTICK_RATE_MS), (600 / portTICK_RATE_MS) }, { (600 / portTICK_RATE_MS), (400 / portTICK_RATE_MS) }, { (800 / portTICK_RATE_MS), (200 / portTICK_RATE_MS) },};static xQueueHandle xLEDQueue = NULL;//////void ledsInit (void){ GPIO0_FIODIR |= (GPIO_IO_P10 | GPIO_IO_P11); GPIO0_FIOSET = (GPIO_IO_P10 | GPIO_IO_P11);}void ledsLED1On (void){ GPIO0_FIOCLR = GPIO_IO_P10;}void ledsLED1Off (void){ GPIO0_FIOSET = GPIO_IO_P10;}//////portBASE_TYPE ledsSetDutyCycle (int adcValue){ if (!xLEDQueue) return pdFALSE; return xQueueSend (xLEDQueue, &adcValue, (portTickType) 0);}//////static portTASK_FUNCTION (vLEDFlashTask, pvParameters __attribute__ ((unused))){ portTickType ledTimeOn = 1; portTickType ledTimeOff = 1; portTickType lastTickTime; int dutyCycle = 0; // // Create the queue, turn on LED and die if we can't // if (!xLEDQueue) { if ((xLEDQueue = xQueueCreate (1, sizeof (dutyCycle))) == 0) { ledsLED1On (); while (1) vTaskDelay (100); } } // // Send ourselves a message to init the flash time // xQueueSend (xLEDQueue, &dutyCycle, (portTickType) 0); // // We need to initialise lastTickTime prior to the first call to vTaskDelayUntil() // lastTickTime = xTaskGetTickCount (); for (;;) { vTaskDelayUntil (&lastTickTime, ledTimeOn); ledsLED1Off (); vTaskDelayUntil (&lastTickTime, ledTimeOff); ledsLED1On (); if (xQueueReceive (xLEDQueue, &dutyCycle, (portTickType) 0)) { dutyCycle %= arrsizeof (ledDutyCycles); ledTimeOn = ledDutyCycles [dutyCycle].timeOn; ledTimeOff = ledDutyCycles [dutyCycle].timeOff; } }}//////signed portBASE_TYPE ledsTaskStart (void){ return xTaskCreate (vLEDFlashTask, (const signed portCHAR * const) "LED1", configMINIMAL_STACK_SIZE, NULL, (tskIDLE_PRIORITY + 2), &taskHandles [TASKHANDLE_LED]);}signed portBASE_TYPE ledsTaskStop (void){ if (!taskHandles [TASKHANDLE_LED]) return 0; vTaskDelete (taskHandles [TASKHANDLE_LED]); taskHandles [TASKHANDLE_LED] = NULL; ledsLED1Off (); return 1;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -