hsu han-lin
/
Modbus_Test
from Cam Marshall original modbus
Fork of Modbus by
Diff: Modbus/portserial.cpp
- Revision:
- 2:5f360876388e
- Parent:
- 1:7dc3a566a85a
- Child:
- 4:5000041d2dc2
--- a/Modbus/portserial.cpp Thu Mar 02 12:08:11 2017 +0000 +++ b/Modbus/portserial.cpp Mon Mar 13 21:07:48 2017 +0800 @@ -33,34 +33,57 @@ /* ----------------------- static functions ---------------------------------*/ static void prvvUARTTxReadyISR( void ); static void prvvUARTRxISR( void ); -static void prvvUARTISR( void ); +//static void prvvUARTISR( void ); /* ----------------------- System Variables ---------------------------------*/ -Serial pc(USBTX, USBRX); // Cam - mbed USB serial port - -Ticker simISR; // Cam - mbed ticker +//Serial pc(USBTX, USBRX); // Cam - mbed USB serial port +Serial ser3(D6, PC_11); //serial3 +extern Serial pc; +//Ticker simISR; // Cam - mbed ticker // we don't have the TX buff empty interrupt, so // we just interrupt every 1 mSec and read RX & TX // status to simulate the proper ISRs. -static BOOL RxEnable, TxEnable; // Cam - keep a static copy of the RxEnable and TxEnable +//static BOOL RxEnable, TxEnable; // Cam - keep a static copy of the RxEnable and TxEnable // status for the simulated ISR (ticker) /* ----------------------- Start implementation -----------------------------*/ +//stanley +//#define RX_BUFF_LENGTH 1 +//#define TX_BUFF_LENGTH 1 +//event_callback_t serialRxCBEvent; +//event_callback_t serialTxCBEvent; + +//uint8_t rx_buf[RX_BUFF_LENGTH]; +//uint8_t tx_buf[TX_BUFF_LENGTH]; + + +//static void serialRxCBFn(int events) +//{ +// +// prvvUARTRxISR(); +// +//} +//static void serialTxCBFn(int events) +//{ +// prvvUARTTxReadyISR(); +// +//} // Cam - This is called every 1mS to simulate Rx character received ISR and // Tx buffer empty ISR. -static void -prvvUARTISR( void ) -{ - if (TxEnable) - if(pc.writeable()) - prvvUARTTxReadyISR(); - - if (RxEnable) - if(pc.readable()) - prvvUARTRxISR(); -} +//static void +//prvvUARTISR( void ) +//{ +// if (TxEnable) +// if(ser3.writeable()) +// prvvUARTTxReadyISR(); +// +// if (RxEnable) +// if(ser3.readable()) +// prvvUARTRxISR(); +//} + void vMBPortSerialEnable( BOOL xRxEnable, BOOL xTxEnable ) @@ -68,17 +91,50 @@ /* If xRXEnable enable serial receive interrupts. If xTxENable enable * transmitter empty interrupts. */ - RxEnable = xRxEnable; - TxEnable = xTxEnable; + //RxEnable = xRxEnable; + //TxEnable = xTxEnable; + + //stanley + if(xRxEnable) + pc.printf("xRxEnable\n"); + else + pc.printf("xRxDisable\n"); + + if(xTxEnable) + pc.printf("xTxEnable\n"); + else + pc.printf("xTxDisable\n"); + + if(xRxEnable) + ser3.attach(&prvvUARTRxISR,Serial::RxIrq); + else + ser3.attach(NULL,Serial::RxIrq); + + /*if(xTxEnable) + ser3.attach(&prvvUARTTxReadyISR,Serial::TxIrq); + else + ser3.attach(NULL,Serial::TxIrq);*/ + //if(xTxEnable) + //¤£¥Î¦b³oÃä³]©wser3.write(tx_buf,TX_BUFF_LENGTH,serialTxCBEvent,SERIAL_EVENT_TX_COMPLETE); } BOOL xMBPortSerialInit( UCHAR ucPORT, ULONG ulBaudRate, UCHAR ucDataBits, eMBParity eParity ) { - simISR.attach_us(&prvvUARTISR,1000); // Cam - attach prvvUARTISR to a 1mS ticker to simulate serial interrupt behaviour + //simISR.attach_us(&prvvUARTISR,1000); // Cam - attach prvvUARTISR to a 1mS ticker to simulate serial interrupt behaviour // 1mS is just short of a character time at 9600 bps, so quick enough to pick // up status on a character by character basis. - return TRUE; + + pc.printf("in Ini\n"); + //stanley + //serialRxCBEvent.attach(serialRxCBFn); + // serialTxCBEvent.attach(serialTxCBFn); + + //ser3.attach(&prvvUARTRxISR,Serial::RxIrq); + //ser3.attach(&prvvUARTTxReadyISR,Serial::TxIrq); + + + return TRUE; } BOOL @@ -87,7 +143,12 @@ /* Put a byte in the UARTs transmit buffer. This function is called * by the protocol stack if pxMBFrameCBTransmitterEmpty( ) has been * called. */ - pc.putc( ucByte); + //ser3.putc( ucByte); + pc.printf("in put\n"); + //stanley + //while(!ser3.writeable()); + ser3.putc( ucByte); + return TRUE; } @@ -97,7 +158,12 @@ /* Return the byte in the UARTs receive buffer. This function is called * by the protocol stack after pxMBFrameCBByteReceived( ) has been called. */ - * pucByte = pc.getc(); + pc.printf("in get\n"); + if(ser3.readable()) + *pucByte = ser3.getc(); + + + return TRUE; } @@ -109,7 +175,8 @@ */ static void prvvUARTTxReadyISR( void ) { - pxMBFrameCBTransmitterEmpty( ); + pc.printf("in Tx_I\n"); + pxMBFrameCBTransmitterEmpty(); } /* Create an interrupt handler for the receive interrupt for your target @@ -119,7 +186,8 @@ */ static void prvvUARTRxISR( void ) { - pxMBFrameCBByteReceived( ); + pc.printf("in Rx_I\n"); + pxMBFrameCBByteReceived(); }