Beispiel #1
0
// copy from software TX FIFO to hardware TX FIFO
// stop when software TX FIFO is empty or hardware TX FIFO is full
void static copySoftwareToHardware(void){
  char letter;
  while(((UART0_FR_R&UART_FR_TXFF) == 0) && (TxFifo_Size() > 0)){
    TxFifo_Get(&letter);
    UART0_DR_R = letter;
  }
}
//-------------------------SCI_OutChar------------------------
// Wait for buffer to be empty, output 8-bit to serial port
// interrupt synchronization
// Input: SCI port, 8-bit data to be transferred
// Output: none
void SCI_OutChar(unsigned char port, char data){
#if HISTOGRAM
  TxHistogram[port][TxFifo_Size(port)]++;    // analysis of FIFO 
#endif
  while (TxFifo_Put(port, data) == 0){}; // spin if TxFifo is full
  if(port==0) SCI0CR2 = 0xAC; /* arm TDRE */
  if(port==1) SCI1CR2 = 0xAC; /* arm TDRE */
}
Beispiel #3
0
/*
===================================================================================================
  USB_UART :: USB_UART_HandleTXBuffer
  
   - does... something....
===================================================================================================
*/
void USB_UART_HandleTXBuffer(void){
  char letter;
  while(((UART0_FR_R&UART_FR_TXFF) == 0) && (TxFifo_Size() > 0)){ //while not full put copy from SW to HW fifo
		
    TxFifo_Get(&letter);
    UART0_DR_R = letter;
		
  }
}
Beispiel #4
0
// at least one of three things has happened:
// hardware TX FIFO goes from 3 to 2 or less items
// hardware RX FIFO goes from 1 to 2 or more items
// UART receiver has timed out
void UART0_Handler(void){
  if(UART0_RIS_R&UART_RIS_TXRIS){       // hardware TX FIFO <= 2 items
    UART0_ICR_R = UART_ICR_TXIC;        // acknowledge TX FIFO
    // copy from software TX FIFO to hardware TX FIFO
    copySoftwareToHardware();
    if(TxFifo_Size() == 0){             // software TX FIFO is empty
      UART0_IM_R &= ~UART_IM_TXIM;      // disable TX FIFO interrupt
    }
  }
  if(UART0_RIS_R&UART_RIS_RXRIS){       // hardware RX FIFO >= 2 items
    UART0_ICR_R = UART_ICR_RXIC;        // acknowledge RX FIFO
    // copy from hardware RX FIFO to software RX FIFO
    copyHardwareToSoftware();
  }
  if(UART0_RIS_R&UART_RIS_RTRIS){       // receiver timed out
    UART0_ICR_R = UART_ICR_RTIC;        // acknowledge receiver time out
    // copy from hardware RX FIFO to software RX FIFO
    copyHardwareToSoftware();
  }
}
Beispiel #5
0
int main2(void){    int i;
  // *************** Test #1: test transmit (index) FIFO **************
  TxFifo_Init();
  result = TxFifo_Get(&letter); // letter = ??, result = 0
  result = TxFifo_Put('A');     // result = 1
  result = TxFifo_Put('B');     // result = 1
  result = TxFifo_Put('C');     // result = 1
  result = TxFifo_Get(&letter); // letter = 0x41, result = 1
  result = TxFifo_Get(&letter); // letter = 0x42, result = 1
  result = TxFifo_Put('D');     // result = 1
  result = TxFifo_Size();       // result = 2
  result = TxFifo_Get(&letter); // letter = 0x43, result = 1
  result = TxFifo_Get(&letter); // letter = 0x44, result = 1
  result = TxFifo_Size();       // result = 0
  result = TxFifo_Get(&letter); // letter = ??, result = 0
  for(i='A'; i<'A'+TXFIFOSIZE; i=i+1){
    result = TxFifo_Put(i);     // result = 1
  }
  result = TxFifo_Size();       // result = 16
  result = TxFifo_Get(&letter); // letter = 0x41, result = 1
  result = TxFifo_Size();       // result = 15
  result = TxFifo_Get(&letter); // letter = 0x42, result = 1
  result = TxFifo_Size();       // result = 14
  result = TxFifo_Put(' ');     // result = 1
  result = TxFifo_Size();       // result = 15
  // *************** Test #2: test receive (pointer) FIFO *************
  RxFifo_Init();
  result = RxFifo_Get(&letter); // letter = ??, result = 0
  result = RxFifo_Put('A');     // result = 1
  result = RxFifo_Put('B');     // result = 1
  result = RxFifo_Put('C');     // result = 1
  result = RxFifo_Get(&letter); // letter = 0x41, result = 1
  result = RxFifo_Get(&letter); // letter = 0x42, result = 1
  result = RxFifo_Put('D');     // result = 1
  result = RxFifo_Size();       // result = 2
  result = RxFifo_Get(&letter); // letter = 0x43, result = 1
  result = RxFifo_Get(&letter); // letter = 0x44, result = 1
  result = RxFifo_Size();       // result = 0
  result = RxFifo_Get(&letter); // letter = ??, result = 0
  for(i='A'; i<'A'+RXFIFOSIZE-1; i=i+1){
    result = RxFifo_Put(i);     // result = 1
  }
  result = RxFifo_Size();       // result = 9
  result = RxFifo_Get(&letter); // letter = 0x41, result = 1
  result = RxFifo_Size();       // result = 8
  result = RxFifo_Get(&letter); // letter = 0x42, result = 1
  result = RxFifo_Size();       // result = 7
  result = RxFifo_Put(' ');     // result = 1
  result = RxFifo_Size();       // result = 8
  // *********** Test #3: test transmit (index) FIFO creator **********
  Tx2Fifo_Init();
  result = Tx2Fifo_Get(&letter);// letter = ??, result = 0
  result = Tx2Fifo_Put('A');    // result = 1
  result = Tx2Fifo_Put('B');    // result = 1
  result = Tx2Fifo_Put('C');    // result = 1
  result = Tx2Fifo_Get(&letter);// letter = 0x41, result = 1
  result = Tx2Fifo_Get(&letter);// letter = 0x42, result = 1
  result = Tx2Fifo_Put('D');    // result = 1
  result = Tx2Fifo_Size();      // result = 2
  result = Tx2Fifo_Get(&letter);// letter = 0x43, result = 1
  result = Tx2Fifo_Get(&letter);// letter = 0x44, result = 1
  result = Tx2Fifo_Size();      // result = 0
  result = Tx2Fifo_Get(&letter);// letter = ??, result = 0
  for(i='A'; i<'A'+TX2FIFOSIZE; i=i+1){
    result = Tx2Fifo_Put(i);    // result = 1
  }
  result = Tx2Fifo_Size();      // result = 32
  result = Tx2Fifo_Get(&letter);// letter = 0x41, result = 1
  result = Tx2Fifo_Size();      // result = 31
  result = Tx2Fifo_Get(&letter);// letter = 0x42, result = 1
  result = Tx2Fifo_Size();      // result = 30
  result = Tx2Fifo_Put(' ');    // result = 1
  result = Tx2Fifo_Size();      // result = 31
  // *********** Test #4: test receive (pointer) FIFO creator *********
  Rx2Fifo_Init();
  result = Rx2Fifo_Get(&letter);// letter = ??, result = 0
  result = Rx2Fifo_Put('A');    // result = 1
  result = Rx2Fifo_Put('B');    // result = 1
  result = Rx2Fifo_Put('C');    // result = 1
  result = Rx2Fifo_Get(&letter);// letter = 0x41, result = 1
  result = Rx2Fifo_Get(&letter);// letter = 0x42, result = 1
  result = Rx2Fifo_Put('D');    // result = 1
  result = Rx2Fifo_Size();      // result = 2
  result = Rx2Fifo_Get(&letter);// letter = 0x43, result = 1
  result = Rx2Fifo_Get(&letter);// letter = 0x44, result = 1
  result = Rx2Fifo_Size();      // result = 0
  result = Rx2Fifo_Get(&letter);// letter = ??, result = 0
  for(i='A'; i<'A'+RX2FIFOSIZE-1; i=i+1){
    result = Rx2Fifo_Put(i);    // result = 1
  }
  result = Rx2Fifo_Size();      // result = 26
  result = Rx2Fifo_Get(&letter);// letter = 0x41, result = 1
  result = Rx2Fifo_Size();      // result = 25
  result = Rx2Fifo_Get(&letter);// letter = 0x42, result = 1
  result = Rx2Fifo_Size();      // result = 24
  result = Rx2Fifo_Put(' ');    // result = 1
  result = Rx2Fifo_Size();      // result = 25
  while(1);
}