![](/media/cache/profiles/8b0dc65f996f98fd178a9defd0efa077.jpg.50x50_q85.jpg)
For Terrance
Code/Serial.c
- Committer:
- emh203
- Date:
- 2012-06-13
- Revision:
- 0:085749c8446f
File content as of revision 0:085749c8446f:
#include "System.h" ByteQueue PCBackDoorTx,PCBackDoorRx; BYTE PCBackDoorTx_Queue_Storage[PC_BACKDOOR_TX_QUEUE_SIZE]; BYTE PCBackDoorRx_Queue_Storage[PC_BACKDOOR_RX_QUEUE_SIZE]; Serial PCBackDoor(USBTX, USBRX); Ticker PCBackDoorTxQueueCheck; //IRQ for when data is received void PCBackDoorRxIRQ(); void PCBackDoorMoveTxQueue(); void InitPCBackDoor() { InitByteQueue(&PCBackDoorTx,PC_BACKDOOR_TX_QUEUE_SIZE,&PCBackDoorTx_Queue_Storage[0]); InitByteQueue(&PCBackDoorRx,PC_BACKDOOR_RX_QUEUE_SIZE,&PCBackDoorRx_Queue_Storage[0]); PCBackDoor.baud(57600); PCBackDoor.format(8,Serial::None,1); //The Rx IRQ wil fill up my big software Rx Queue PCBackDoor.attach(&PCBackDoorRxIRQ); //Periodicically check my outgoing Tx Queue (every 1 mS) PCBackDoorTxQueueCheck.attach_us(&PCBackDoorMoveTxQueue,500); } void PCBackDoorMoveTxQueue() { BYTE Temp; while(PCBackDoor.writeable()) { if(BytesInQueue(&PCBackDoorTx) == 0) { break; } else { ByteDequeue(&PCBackDoorTx,&Temp); PCBackDoor.putc(Temp); } } } void PCBackDoorRxIRQ() { while(PCBackDoor.readable()) { ByteEnqueue(&PCBackDoorRx,(BYTE)PCBackDoor.getc()); } }