From: <jo...@us...> - 2008-11-07 21:54:41
|
Revision: 414 http://mspsim.svn.sourceforge.net/mspsim/?rev=414&view=rev Author: joxe Date: 2008-11-07 21:50:45 +0000 (Fri, 07 Nov 2008) Log Message: ----------- fixed usart timing - not tested Modified Paths: -------------- mspsim/se/sics/mspsim/core/USART.java Modified: mspsim/se/sics/mspsim/core/USART.java =================================================================== --- mspsim/se/sics/mspsim/core/USART.java 2008-11-06 17:17:39 UTC (rev 413) +++ mspsim/se/sics/mspsim/core/USART.java 2008-11-07 21:50:45 UTC (rev 414) @@ -89,7 +89,8 @@ private int baudRate = 0; private int tickPerByte = 1000; private long nextTXReady = -1; - + private int nextTXByte = -1; + private MSP430Core cpu; private SFR sfr; @@ -138,12 +139,12 @@ memory[IFG1 + 1] = 0x20; } - nextTXReady = cpu.cycles + 1000; - cpu.scheduleCycleEvent(txTrigger, nextTXReady); + reset(0); } public void reset(int type) { nextTXReady = cpu.cycles + 1000; + nextTXByte = -1; cpu.scheduleCycleEvent(txTrigger, nextTXReady); } @@ -217,10 +218,6 @@ case UTXBUF: if (DEBUG) System.out.print(getName() + ": USART_UTXBUF:" + (char) data + " = " + data + "\n"); - if (listener != null) { - listener.dataReceived(this, data); - } - // Interruptflag not set! clrBitIFG(utxifg); utctl &= ~UTCTL_TXEMPTY; @@ -230,6 +227,7 @@ // Schedule on cycles here... nextTXReady = cycles + tickPerByte; + nextTXByte = data; cpu.scheduleCycleEvent(txTrigger, nextTXReady); // We should set the "not-ready" flag here! @@ -310,19 +308,24 @@ } private void handleTransmit(long cycles) { - setBitIFG(utxifg); - utctl |= UTCTL_TXEMPTY; - cpu.flagInterrupt(transmitInterrupt, this, isIEBitsSet(utxifg)); + if (listener != null && nextTXByte != -1) { + listener.dataReceived(this, nextTXByte); + nextTXByte = -1; + } - if (DEBUG) { - if (isIEBitsSet(utxifg)) { - System.out.println(getName() + " flagging on transmit interrupt"); - } - System.out.println(getName() + " Ready to transmit next at: " + cycles); - } - } + setBitIFG(utxifg); + utctl |= UTCTL_TXEMPTY; + cpu.flagInterrupt(transmitInterrupt, this, isIEBitsSet(utxifg)); + if (DEBUG) { + if (isIEBitsSet(utxifg)) { + System.out.println(getName() + " flagging on transmit interrupt"); + } + System.out.println(getName() + " Ready to transmit next at: " + cycles); + } + } + public boolean isReceiveFlagCleared() { return (getIFG() & urxifg) == 0; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |