from Cam Marshall original modbus

Dependencies:   mbed

Fork of Modbus by Cam Marshall

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();
 }