From 7446bd874823bb058d872fa0718ff774379e8118 Mon Sep 17 00:00:00 2001 From: Roland Sahlsten Date: Tue, 8 May 2012 06:43:34 +0000 Subject: git-svn-id: https://svn.spreadspace.org/mur.sat@403 7de4ea59-55d0-425e-a1af-a3118ea81d4c --- software/mpu/src/kernel.c | 47 +++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 43 insertions(+), 4 deletions(-) (limited to 'software/mpu/src/kernel.c') diff --git a/software/mpu/src/kernel.c b/software/mpu/src/kernel.c index d75f9dd..f5d04ea 100644 --- a/software/mpu/src/kernel.c +++ b/software/mpu/src/kernel.c @@ -7,12 +7,18 @@ #include "Types.h" #include "FreeRTOS.h" #include "queue.h" +#include "uart.h" #define kernel_TASK_PRIORITY ( tskIDLE_PRIORITY + 5 ) #define kernel_TASK_STACK_SIZE ( ( unsigned short ) 64 ) +void UARTSend(uint8_t *BufferPtr, uint32_t Length); + /* Globals */ +#define BUFSIZE 0x40 // fixme: ...is sdefined in hart.h static Task_Param_t kernel_Param; +extern volatile uint32_t UARTCount; +extern volatile uint8_t UARTBuffer[BUFSIZE]; /* * Wake up other tasks, send them messages telling what to do, @@ -21,11 +27,12 @@ static Task_Param_t kernel_Param; * */ static void kernel_Process_Task(void *Param) { - Message_t Msg; + Message_t RcvMsg; Message_t SndMsg; portTickType tick; portCHAR chBufCam[10] = "Seas Cam!"; portCHAR chBufLSen[10] = "Seas LSe!"; + portCHAR l = 'l'; if(NULL == kernel_Param.QueueHandles.hxq_Kernel) { @@ -37,25 +44,57 @@ static void kernel_Process_Task(void *Param) { vTaskDelayUntil(&tick, MS(3)); - if( xQueueReceive( kernel_Param.QueueHandles.hxq_Kernel, &Msg, MS(5))) + if( xQueueReceive( kernel_Param.QueueHandles.hxq_Kernel, &RcvMsg, MS(5))) { /* * switch Msg.Sender and act accordingly. */ - switch (Msg.Sender) + switch (RcvMsg.Sender) { case Sender_Camera: { SndMsg.Sender = Sender_Kernel; SndMsg.pData = chBufCam; xQueueSend(kernel_Param.QueueHandles.hxq_Camera, &SndMsg, MS(10)); + break; } case Sender_LightSens: { SndMsg.Sender = Sender_Kernel; SndMsg.pData = chBufLSen; - xQueueSend(kernel_Param.QueueHandles.hxq_LightSens, &SndMsg, MS(10)); + for(l = 0; l < 8; l ++) + { + UARTBuffer[l*4 +0] = 48+(((uint8_t *)(RcvMsg.pData))[l])%1000 / 100; + UARTBuffer[l*4 +1] = 48+(((uint8_t *)(RcvMsg.pData))[l])%100 / 10; + UARTBuffer[l*4 +2] = 48+(((uint8_t *)(RcvMsg.pData))[l])%10; + UARTBuffer[l*4 +3] = ' '; + } + UARTCount = 34; + UARTBuffer[32] = '\r'; + UARTBuffer[33] = '\n'; + UARTSend( (uint8_t *)UARTBuffer, UARTCount ); +// UARTSend( (uint8_t *)(RcvMsg.pData), 10 ); +// xQueueSend(kernel_Param.QueueHandles.hxq_LightSens, &SndMsg, MS(10)); + break; + } + case Sender_UART: + { + if (UARTBuffer[UARTCount-1] != 'i') + break; + if ( UARTCount != 0 ) + { + LPC_UART->IER = IER_THRE | IER_RLS; /* Disable RBR */ + UARTSend( (uint8_t *)UARTBuffer, UARTCount ); + UARTCount = 0; + LPC_UART->IER = IER_THRE | IER_RLS | IER_RBR; /* Re-enable RBR */ + + l = 'r'; + SndMsg.pData = &l; + + xQueueSend(kernel_Param.QueueHandles.hxq_LightSens, &SndMsg, MS(10)); + } + break; } default: {;} } -- cgit v1.2.3