static int updtapbus( ushort apreg, ushort apval ) { int fifoIsEmpty, fifoIsRunning; #ifdef FIFOBUFOBJ fifoIsEmpty = ( ( fifoEmpty( pTheFifoObject ) == 1 ) && ( fifoBufWkEntries(pTheFifoObject->pFifoWordBufs) == 0L ) ); #else fifoIsEmpty = fifoEmpty( pTheFifoObject ); #endif fifoIsRunning = fifoRunning( pTheFifoObject ); if (fifoIsEmpty && fifoIsRunning) { errLogRet( LOGIT, debugInfo, "FIFO empty but running in update APBUS\n" ); return( -1 ); } if (fifoIsEmpty) writeapwordStandAlone( apreg, apval, 50 ); else writeapword( apreg, apval, 50 ); DPRINT3( DEBUG_APBUS, "updateapbus: fifo empty: %d, apregister: 0x%x, value: 0x%x\n", fifoIsEmpty, apreg, apval ); return( 0 ); }
fifo_data_t fifoTop(fifo_struct_t* fifo) { if(fifoEmpty(fifo)) return 0; else return fifo->buf[fifo->tail]; }
unsigned int uart_write_data(const char *buffer, unsigned int length) { unsigned int i; DisableIntUTX(); for (i = 0; i < length; i++) { if (fifoEnqueue(&fifoTx1, buffer[i])) break; } if (!fifoEmpty(&fifoTx1)) { // habilita início de transmissão EnableIntUTX(); } /* else { DisableIntUTX(); } */ return i; }
fifo_data_t fifoPop(fifo_struct_t* fifo) { if(fifoEmpty(fifo)) return 0; else { char value = fifo->buf[fifo->tail]; fifo->tail = (fifo->tail+1) & FIFO_MASK; fifo->full = fifoFALSE; if(fifo->tail == fifo->head) fifo->empty = fifoTRUE; return value; } }
void uart_driver_tx_interrupt(void) { char byte; if (!fifoDequeue(&fifoTx1, &byte)) { // manda escrever PushUTXBuffer(byte); } if (fifoEmpty(&fifoTx1)) { DisableIntUTX(); } }
static int updtLockphase( ushort apval ) { int fifoIsEmpty, fifoIsRunning; int tmp1,tmp2; fifoIsEmpty = ( ( fifoEmpty( pTheFifoObject ) == 1 ) && ( fifoBufWkEntries(pTheFifoObject->pFifoWordBufs) == 0L ) ); fifoIsRunning = fifoRunning( pTheFifoObject ); if (fifoIsEmpty && fifoIsRunning) { errLogRet( LOGIT, debugInfo, "FIFO empty but running in update APBUS\n" ); return( -1 ); } if (fifoIsEmpty) init_fifo( NULL, 0, 0 ); fifoStuffCmd(pTheFifoObject,CL_AP_BUS_SLCT, 0x0A30); /* lk xmtr */ fifoStuffCmd(pTheFifoObject,CL_AP_BUS_WRT, 0x0A17); /* PIRB2 24-31*/ tmp1 = (int)(- (currentStatBlock.stb.AcqLockPhase * 32.0 / 45.0))&0xFF; fifoStuffCmd(pTheFifoObject,CL_AP_BUS_INCWR,0x0A00|tmp1);/* zeroing */ fifoStuffCmd(pTheFifoObject,CL_AP_BUS_SLCT, 0x0A30); /* lk xmtr */ fifoStuffCmd(pTheFifoObject,CL_AP_BUS_WRT, 0x0A18); /* SMC2 */ fifoStuffCmd(pTheFifoObject,CL_AP_BUS_INCWR,0x0A08); fifoStuffCmd(pTheFifoObject,CL_AP_BUS_SLCT, 0x0A30); /* lk xmtr */ fifoStuffCmd(pTheFifoObject,CL_AP_BUS_WRT, 0x0A1E); /* HOP CLK2 */ fifoStuffCmd(pTheFifoObject,CL_AP_BUS_INCWR,0x0A00); /* strobe*/ fifoStuffCmd(pTheFifoObject,CL_AP_BUS_SLCT, 0x0A30); /* lk xmtr */ fifoStuffCmd(pTheFifoObject,CL_AP_BUS_WRT, 0x0A17); /* PIRB2 24-31*/ tmp2 = (int)(apval * 32.0 / 45.0)&0xFF; fifoStuffCmd(pTheFifoObject,CL_AP_BUS_INCWR,0x0A00|tmp2); fifoStuffCmd(pTheFifoObject,CL_AP_BUS_SLCT, 0x0A30); /* lk xmtr */ fifoStuffCmd(pTheFifoObject,CL_AP_BUS_WRT, 0x0A1E); /* HOP CLK2*/ fifoStuffCmd(pTheFifoObject,CL_AP_BUS_INCWR,0x0A00); /* strobe */ if (fifoIsEmpty) { fifoStuffCmd(pTheFifoObject,HALTOP,0); fifoStart( pTheFifoObject ); fifoWait4Stop( pTheFifoObject ); } DPRINT3( DEBUG_APBUS, "updtLockphase: fifo empty: %d, value: %d [0x%x]\n", fifoIsEmpty, apval, apval ); currentStatBlock.stb.AcqLockPhase = apval; return( 0 ); }