📄 fifo.#1
字号:
/************************************************************ 已测试
* Copyright (C) 2006, 华中科技大学电气与电子科技创新中心 *
* All Rights Reserved. *
* *
* 文件名: fifo.c *
* 文件描述: *
* *
* 当前版本: 1.0 *
* 作者: 王璠(wang.fan@smail.hust.edu.cn) *
* 完成日期: 2008年7月23日 *
************************************************************/
#include"fifo.h"
//#define DEPTH 60 //存储深度设置
unsigned char xdata fifo[8][DEPTH]; //FIFO寄存器
static unsigned char fifowp; //FIFO写指针
static unsigned char fiforp; //FIFO读指针
//static unsigned char virtualwp; //虚拟写指针,用于Scan
//static unsigned char virtualrp; //虚拟读指针,用于Scan
/*****************************
FIFO初始化
******************************/
void FIFO_Init(void)
{
fifowp = 0;
fiforp = 0;
// virtualwp = 0;
// virtualrp = 0;
}
/*****************************
写FIFO
******************************/
void WriteFIFO(unsigned char *logic)
{
unsigned char i;
for(i=0;i<8;i++)
{
fifo[i][fifowp] = logic[i]; //数据写入fifo
}
if(fifowp>DEPTH-1)
fifowp = 0; //循环指针
else
fifowp++; //写指针后移
if(fifowp==fiforp)
fiforp = fifowp + 1; //若未读数据被覆盖,读指针移到写指针的上一个单元
// virtualwp = fifowp;
// virtualrp = fiforp;
}
/******************************
读FIFO
*******************************/
void ReadFIFO(unsigned char *logic) reentrant
{
unsigned char i;
for(i=0;i<8;i++)
{
if(fifowp == fiforp)
{
logic[i] = 0;
}
else if(fifowp > fiforp)
{
logic[i] = fifo[i][fiforp];
if(i==7)
fiforp++;
}
else // if(fifowp < fiforp)
{
logic[i] = fifo[i][fiforp];
if(i==7)
fiforp++;
if(fiforp == DEPTH)
fiforp = 0;
}
}
// virtualwp = fifowp;
// virtualrp = fiforp;
}
/**********************************
查看FIFO,不改变读写指针的位置
**********************************/
/*
void ScanFIFO(unsigned char *logic)
{
unsigned char i;
for(i=0;i<8;i++)
{
if(virtualwp == virtualrp)
{
logic[i] = 0;
}
else if(virtualwp > virtualrp)
{
logic[i] = fifo[i][virtualrp];
if(i==7)
virtualrp++;
}
else // if(fifowp < fiforp)
{
logic[i] = fifo[i][virtualrp];
if(i==7)
virtualrp++;
if(virtualrp == DEPTH)
virtualrp = 0;
}
}
}
*/
/********************************
返回FIFO中的数据量
********************************/
unsigned char FIFO_length(void)
{
unsigned char num;
if(fiforp == fifowp)
num = 0;
else if(fifowp > fiforp)
num = (fifowp-fiforp);
else // if(fifowp < fiforp)
num = (DEPTH-fifowp+fiforp);
return num;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -