+++ /dev/null
-\r
-#include "core.h"\r
-\r
-//\8ew\92è\83T\83C\83Y\82Í\81A\83o\83C\83g\92P\88Ê\81B4\83o\83C\83g\90Ø\82è\8eÌ\82Ä\81B\r
-//\93à\95\94\83T\83C\83Y\82Í\81A\83G\83\93\83g\83\8a(uint=4byte)\92P\88Ê\81B\r
-\r
-DATA_FIFO32 *FIFO32_Initialize(IO_MemoryControl memctrl, uint size)\r
-{\r
- DATA_FIFO32 *fifo;\r
-\r
- //fifo = Memory_Allocate(memctrl, sizeof(DATA_FIFO32));\r
- fifo = (DATA_FIFO32 *)System_CommonStruct_Allocate(SYSTEM_STRUCTID_FIFO32);\r
-\r
- fifo->size = size >> 2;\r
- fifo->buf = Memory_Allocate(memctrl, fifo->size << 2);\r
- fifo->free = fifo->size; /*freesize*/\r
- fifo->flags.initialized = False;\r
- fifo->flags.overflow = False;\r
- fifo->p = 0; /*write*/\r
- fifo->q = 0; /*read*/\r
- fifo->flags.initialized = True;\r
- return fifo;\r
-}\r
-\r
-int FIFO32_Put(DATA_FIFO32 *fifo, uint data)\r
-{\r
- uint eflags;\r
-\r
- if(fifo == Null){\r
- return -1;\r
- }\r
-\r
- if(!fifo->flags.initialized){\r
- return -2;\r
- }\r
-\r
- eflags = IO_Load_EFlags();\r
- IO_CLI();\r
-\r
- if(fifo->free == 0){\r
- #ifdef CHNOSPROJECT_DEBUG_FIFO\r
- debug("FIFO32_Put:Overflow data.\n");\r
- #endif\r
- fifo->flags.overflow = True;\r
- Error_Report(ERROR_FIFO_BUFFER_OVERFLOW, fifo);\r
- return -1;\r
- }\r
- fifo->buf[fifo->p] = data;\r
- fifo->p++;\r
- if(fifo->p == fifo->size){\r
- fifo->p = 0;\r
- }\r
- fifo->free--;\r
-\r
-\r
- if(fifo->task != Null){\r
- if(fifo->task->flags.linked && !fifo->task->flags.running){\r
- #ifdef CHNOSPROJECT_DEBUG_FIFO\r
- debug("FIFO32_Put:Task run start.\n");\r
- #endif\r
- System_MultiTask_Task_Run(fifo->task);\r
- #ifdef CHNOSPROJECT_DEBUG_FIFO\r
- debug("FIFO32_Put:Task run end.\n");\r
- #endif\r
-\r
- }\r
- }\r
-\r
- IO_Store_EFlags(eflags);\r
-\r
- return 0;\r
-}\r
-\r
-int FIFO32_Put_Arguments(DATA_FIFO32 *fifo, uint args, ...)\r
-{\r
- int i;\r
- uint *vargs;\r
- uint eflags;\r
-\r
- if(fifo == Null){\r
- return -1;\r
- }\r
-\r
- if(!fifo->flags.initialized){\r
- return -2;\r
- }\r
-\r
- if(args == 0){\r
- return 0;\r
- }\r
-\r
- eflags = IO_Load_EFlags();\r
- IO_CLI();\r
-\r
- vargs = (uint *)(&args + 1);\r
-\r
- for(i = 0; i < args; i++){\r
- if(fifo->free <= 1){\r
- i = -1;\r
- break;\r
- }\r
- FIFO32_Put(fifo, vargs[i]);\r
- }\r
- FIFO32_Put(fifo, SIGNAL_ARGUMENTS_END);\r
-\r
- IO_Store_EFlags(eflags);\r
-\r
- return i; \r
-}\r
-\r
-void FIFO32_Set_Task(DATA_FIFO32 *fifo, UI_Task *task)\r
-{\r
- if(fifo == Null){\r
- return;\r
- }\r
-\r
- fifo->task = task;\r
- return;\r
-}\r
-\r
-uint FIFO32_Get(DATA_FIFO32 *fifo)\r
-{\r
- int data;\r
-\r
- if(fifo == Null){\r
- return 0;\r
- }\r
-\r
- if(!fifo->flags.initialized){\r
- return 0;\r
- }\r
-\r
- if (fifo->free == fifo->size) { /*\83o\83b\83t\83@\82ª\8bó\82Ì\8e\9e\82Í\81A\8dÅ\8cã\82É\93Ç\82Ý\82Æ\82ç\82ê\82½\83f\81[\83^\82ð\8cJ\82è\95Ô\82µ\95Ô\82·*/\r
- if(fifo->q == 0){ /*\93Ç\82Ý\82¾\82µ\83|\83C\83\93\83g\82ª\8dÅ\8f\89\82Ì\82Æ\82«\82Í\81A\8dÅ\8cã\82É\93Ç\82Ý\82Æ\82ç\82ê\82½\83f\81[\83^\82Í\8fI\92[\82É\82 \82é*/\r
- return fifo->buf[fifo->size];\r
- }\r
- return fifo->buf[fifo->q - 1];\r
- }\r
- data = fifo->buf[fifo->q];\r
- fifo->q++;\r
- if (fifo->q == fifo->size) { /*\93Ç\82Ý\8fo\82µ\83|\83C\83\93\83g\82ª\8fI\92[\82Ü\82Å\8ds\82Á\82½\82Ì\82Å\81A\90æ\93ª\82É\96ß\82·*/\r
- fifo->q = 0;\r
- }\r
- fifo->free++;\r
- return data;\r
-}\r
-\r
-uint FIFO32_Status(DATA_FIFO32 *fifo)\r
-{\r
- if(fifo == Null){\r
- return 0;\r
- }\r
-\r
- if(!fifo->flags.initialized){\r
- return 0;\r
- }\r
-\r
- return fifo->size - fifo->free; /*\83o\83b\83t\83@\82É\91¶\8dÝ\82·\82é\83f\81[\83^\82Ì\83G\83\93\83g\83\8a\90\94(\83G\83\93\83g\83\8a\90\94=uint\82Ì\8cÂ\90\94->\83G\83\93\83g\83\8a\90\94*4=\8eg\82í\82ê\82Ä\82¢\82é\83o\83C\83g\90\94)*/\r
-}\r
-\r
-void FIFO32_Free(DATA_FIFO32 *fifo)\r
-{\r
- if(fifo == Null){\r
- return;\r
- }\r
-\r
- if(!fifo->flags.initialized){\r
- return;\r
- }\r
-\r
- System_Memory_Free(fifo->buf, fifo->size << 2);\r
-\r
- fifo->size = 0;\r
- fifo->buf = 0;\r
- fifo->free = 0; /*freesize*/\r
- fifo->flags.initialized = False;\r
- fifo->p = 0; /*write*/\r
- fifo->q = 0; /*read*/\r
-\r
- System_CommonStruct_Free(&fifo->common_tag);\r
- return;\r
-}\r
-\r
-uint FIFO32_MyTaskFIFO_Status(void)\r
-{\r
- return FIFO32_Status(System_MultiTask_GetNowTask()->fifo);\r
-}\r
-\r
-uint FIFO32_MyTaskFIFO_Get(void)\r
-{\r
- return FIFO32_Get(System_MultiTask_GetNowTask()->fifo);\r
-}\r
-\r