analog/v2-analog-rev1/parallel/parallelbuffer.c
2023-01-07 02:15:21 -05:00

55 lines
1.3 KiB
C

#include "parallel/parallelbuffer.h"
volatile uint8_t parallel_status = ~PARALLEL_SELECT;
volatile uint8_t *parallel_tx_fifo = private_memory;
volatile uint16_t parallel_tx_wrptr = 0;
volatile uint16_t parallel_tx_rdptr = 0;
int parallel_tx_empty() {
return (parallel_tx_wrptr == parallel_tx_rdptr);
}
uint8_t parallel_tx_pop() {
uint8_t retval;
if(parallel_tx_rdptr != parallel_tx_wrptr) {
retval = parallel_tx_fifo[parallel_tx_rdptr];
parallel_tx_rdptr++;
}
// Assert BUSY LOW when buffer is full
if((parallel_tx_wrptr+1) == parallel_tx_rdptr) {
parallel_status &= ~PARALLEL_BUSY;
} else {
parallel_status |= PARALLEL_BUSY;
}
return retval;
}
void parallel_tx_push(uint8_t value) {
if((parallel_tx_wrptr+1) != parallel_tx_rdptr) {
parallel_tx_fifo[parallel_tx_wrptr] = value;
parallel_tx_wrptr++;
}
// Deassert BUSY LOW when buffer is not full
if((parallel_tx_wrptr+1) == parallel_tx_rdptr) {
parallel_status &= ~PARALLEL_BUSY;
} else {
parallel_status |= PARALLEL_BUSY;
}
// Assert ACK
parallel_status &= ~PARALLEL_ACK;
}
void parallel_fifo_init() {
parallel_tx_wrptr = 0;
parallel_tx_rdptr = 0;
parallel_status = ~PARALLEL_SELECT;
}