Other Parts Discussed in Thread: SN74V263
器件型号: SN74V263
工具/软件:
您好、
我正在开发一个在标准模式下使用 SN74V263 FIFO、输入和输出总线宽度为 9 位的项目。 我的写入和读取操作以及状态标志存在问题。
我的系统使用外部 50MHz 振荡器来驱动 WCLK 引脚、该引脚会将数据写入 FIFO。 我的微控制器 (MCU) 是在 120MHz 上运行的 PIC (1 个机器周期= 60MHz)。
问题:
1.写入期间:
我已配置 HF 和 FF 标志的更改通知中断。 当 HF = 0 时、我会设置 WREN = 1、但 FF 标志也会变为低电平、表示写入没有停止。
我正在使用以下代码结构进行写入操作:
void enable_fifo_write(void)
{
// Disable reading from FIFO
FIFO_REN = 1;
// Enable writing into FIFO
FIFO_WREN = 0;
// Perform Partial Reset
FIFO_PRS = 0;
fifo_usec_delay(1);
FIFO_PRS = 1;
// Clear interrupt flag
// Enable change notification interrupt for FF, EF and HF flags
// Enable CN interrupt globally
// After the first write is performed,
// EF goes high after two low-to-high transitions on RCLK
FIFO_RCLK = 1;
FIFO_RCLK = 0;
FIFO_RCLK = 1;
FIFO_RCLK = 0;
}
2.读取期间:
我尝试在 FIFO 已满 (FF = 0) 时执行读取操作、但标志状态不变、尤其是 FF 标志。
根据我的理解、当 FIFO 已满 (FF = 0) 时、单次读取操作将导致 FF 在 2 个 RCLK 转换后从低电平变为高电平。
我甚至尝试读取 FIFO 大小达到最大值、但没有观察到标志 (FF、HF 和 EF) 有任何变化。
我正在使用以下代码结构进行读取操作:
void read_data_from_fifo(void)
{
uint16_t readcount = 8200;
while(readcount-- > 0)
{
fifo_read_init();
raw_data = fifo_read_start();
}
}
void fifo_read_init(void)
{
FIFO_REN = 0;
__asm__ volatile("nop");
FIFO_OE = 1;
__asm__ volatile("nop");
FIFO_RCLK = 0;
__asm__ volatile("nop");
// REN should be LOW when the RCLK goes from LOW->HIGH.
FIFO_RCLK = 1;
__asm__ volatile("nop");
}
void fifo_read_start(void)
{
uint16_t read_data;
// When RCLK is HIGH, OE should go from HIGH-> LOW before reading from the port.
FIFO_OE = 0;
// REN should go high while RCLK is HIGH
FIFO_REN = 1;
__asm__ volatile("nop");
FIFO_RCLK = 0;
__asm__ volatile("nop");
// By this time tOLZ time has elapsed and data on Q0-Qn are valid.
// Read 9-bit data from the FIFO's output port
read_data = PORTD & 0x01FF;
return read_data;
}
我的分析
- 在主复位期间、我已将器件正确配置为标准模式。
- 我担心、尽管我的 MCU 在 120MHz 下运行 (1 个机器周期= 60MHz)、但速度太慢无法跟上 50MHz 写入时钟、并且 FIFO 在我的软件可以做出反应之前已满。
- 我相信我的读取功能可能不符合 SN74V263 的时序要求。
您能否提出标准模式下单字或连续读取的正确信号序列建议、同时密切注意 REN、OE 和 RCLK 的时序要求?
感谢您的帮助。
此致、
Tanuj Kumar






