fifo_rw.c
来自「C8051F3xx USB Hid Code」· C语言 代码 · 共 53 行
C
53 行
// FIFO_RW.c
// FIFO read / write
// Template C code to generate an asm source
//
#include "c8051F320.h"
typedef unsigned char BYTE;
//typedef BYTE idata buf_t;
//typedef BYTE pdata buf_t;
typedef BYTE xdata buf_t;
//typedef BYTE code buf_t;
void FIFO_Read( BYTE fifo_adr, BYTE n, buf_t * ptr )
{
if ( n != 0 ) {
if ( --n == 0 ) {
USB0ADR = fifo_adr | 0x80; // Set address and initiate first read
while( USB0ADR & 0x80 ); // Wait for data ready
*ptr = USB0DAT; // read out FIFO data
return;
}
USB0ADR = fifo_adr | 0xC0; // Set address, auto-read and initiate first read
do {
while(USB0ADR & 0x80); // Wait for BUSY->'0' (data ready)
// *ptr++ = USB0DAT; // Copy data byte
*ptr = USB0DAT; // Separating dereference and increment results better Asm code
ptr++;
} while ( --n != 0 );
while(USB0ADR & 0x80); // Wait for data ready
USB0ADR = 0; // Clear auto-read
*ptr = USB0DAT; // Read last data
}
}
void FIFO_Write( BYTE fifo_adr, BYTE n, buf_t * ptr )
{
if ( n != 0 ) {
USB0ADR = fifo_adr & 0x3F; // Set address (mask out bits7-6)
do {
// USB0DAT = *ptr++; // Push to FIFO
USB0DAT = *ptr; // Separating dereference and increment results better Asm code
ptr++;
while(USB0ADR & 0x80); // Wait for BUSY->'0' (data ready)
} while ( --n != 0 );
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?