Преглед изворни кода

GD32E235 带升级单相交流。

liyi пре 1 година
родитељ
комит
c13c6a8830

+ 1 - 0
truing_control/PDU-AC-235-NEW/common/common.h

@@ -663,6 +663,7 @@ typedef struct {
 
 typedef struct {
 	mod_data_t md_data;
+	uint8_t   flag_upgrade;
 	uint8_t 	flag_1s;
 	uint8_t	  flag_10s;
 	uint8_t   flag_100ms;

+ 3 - 0
truing_control/PDU-AC-235-NEW/modbus/BARE/port/port.c

@@ -405,6 +405,9 @@ eMBRegHoldingCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNRegs, eMBRegi
 									elec[i] = 0.0;
 									board->ele_restore[i] = 0;									
 								}
+							}else if(BREAKE_UPGRATE == usAddress)
+							{
+								board->flag_upgrade = 1;
 							}
 						}
 						break;

+ 8 - 0
truing_control/PDU-AC-235-NEW/modbus/BARE/port/portserial.c

@@ -40,6 +40,14 @@ vMBPortSerialEnable( BOOL xRxEnable, BOOL xTxEnable )
     /* If xRXEnable enable serial receive interrupts. If xTxENable enable
      * transmitter empty interrupts.
      */
+		if(FALSE == xRxEnable && xTxEnable == FALSE)
+		{
+			usart_interrupt_disable(USART0,USART_INT_RBNE);
+			usart_interrupt_disable(USART0,USART_INT_TC);
+			gpio_bit_reset(GPIOA, GPIO_PIN_8);
+			return;
+		}
+	
 	  if(TRUE == xRxEnable)
     {
         usart_interrupt_enable(USART0,USART_INT_RBNE);//ʹÄܽÓÊÕÖжÏ

+ 4 - 0
truing_control/PDU-AC-235-NEW/modbus/include/mb.h

@@ -409,6 +409,10 @@ eMBErrorCode    eMBRegCoilsCB( UCHAR * pucRegBuffer, USHORT usAddress,
  */
 eMBErrorCode    eMBRegDiscreteCB( UCHAR * pucRegBuffer, USHORT usAddress,
                                   USHORT usNDiscrete );
+																	
+																	
+																	
+uint8_t eMBCheck(void);
 
 #ifdef __cplusplus
 PR_END_EXTERN_C

+ 14 - 0
truing_control/PDU-AC-235-NEW/modbus/mb.c

@@ -327,6 +327,20 @@ eMBDisable( void )
     return eStatus;
 }
 
+
+uint8_t eMBCheck(void)
+{
+	if( eMBState != STATE_ENABLED)
+	{
+		return 1;
+	}else
+	{
+		return 0;
+	}
+}
+
+
+
 eMBErrorCode
 eMBPoll( void )
 {

+ 31 - 11
truing_control/PDU-AC-235-NEW/modbus/rtu/mbrtu.c

@@ -153,8 +153,14 @@ eMBRTUReceive( UCHAR * pucRcvAddress, UCHAR ** pucFrame, USHORT * pusLength )
     eMBErrorCode    eStatus = MB_ENOERR;
 
     ENTER_CRITICAL_SECTION(  );
-    assert( usRcvBufferPos < MB_SER_PDU_SIZE_MAX );
-
+		
+    //assert( usRcvBufferPos < MB_SER_PDU_SIZE_MAX );
+		if(usRcvBufferPos >= MB_SER_PDU_SIZE_MAX)
+		{
+			eMBDisable();
+			EXIT_CRITICAL_SECTION(  );
+			return eStatus;
+		}
     /* Length and CRC check */
     if( ( usRcvBufferPos >= MB_SER_PDU_SIZE_MIN )
         && ( usMBCRC16( ( UCHAR * ) ucRTUBuf, usRcvBufferPos ) == 0 ) )
@@ -237,11 +243,13 @@ xMBRTUReceiveFSM( void )
     BOOL            xTaskNeedSwitch = FALSE;
     UCHAR           ucByte;
 
-    assert( eSndState == STATE_TX_IDLE );
-//		if(eSndState == STATE_TX_IDLE)
-//		{
-//			return xTaskNeedSwitch;
-//		}
+    //assert( eSndState == STATE_TX_IDLE );
+		if(eSndState != STATE_TX_IDLE)
+		{
+			eMBDisable();
+			return xTaskNeedSwitch;
+		}
+
     /* Always read the character. */
     ( void )xMBPortSerialGetByte( ( CHAR * ) & ucByte );
 
@@ -299,9 +307,16 @@ xMBRTUTransmitFSM( void )
 {
     BOOL            xNeedPoll = FALSE;
 
-    assert( eRcvState == STATE_RX_IDLE );
-//		if(eRcvState == STATE_RX_IDLE )
+    //assert( eRcvState == STATE_RX_IDLE );
+		if(eRcvState != STATE_RX_IDLE)
+		{
+			eMBDisable();
+			return xNeedPoll;
+		}
+//		if(eRcvState != STATE_RX_IDLE)
 //		{
+//			eMBDisable();
+//			eMBRTUStart();
 //			return xNeedPoll;
 //		}
     switch ( eSndState )
@@ -361,8 +376,13 @@ xMBRTUTimerT35Expired( void )
 
         /* Function called in an illegal state. */
     default:
-        assert( ( eRcvState == STATE_RX_INIT ) ||
-                ( eRcvState == STATE_RX_RCV ) || ( eRcvState == STATE_RX_ERROR ) );
+			{
+				eMBDisable();
+				eRcvState = STATE_RX_IDLE;
+				return xNeedPoll;
+				//  assert( ( eRcvState == STATE_RX_INIT ) ||
+				//          ( eRcvState == STATE_RX_RCV ) || ( eRcvState == STATE_RX_ERROR ) );
+			}
     }
 
     vMBPortTimersDisable(  );

Разлика између датотеке није приказан због своје велике величине
+ 2943 - 5829
truing_control/PDU-AC-235-NEW/prj/JLinkLog.txt


Разлика између датотеке није приказан због своје велике величине
+ 111 - 66
truing_control/PDU-AC-235-NEW/prj/ctrl_board.uvguix.Gowon


+ 8 - 4
truing_control/PDU-AC-235-NEW/prj/ctrl_board.uvoptx

@@ -103,7 +103,7 @@
         <bEvRecOn>1</bEvRecOn>
         <bSchkAxf>0</bSchkAxf>
         <bTchkAxf>0</bTchkAxf>
-        <nTsel>13</nTsel>
+        <nTsel>4</nTsel>
         <sDll></sDll>
         <sDllPa></sDllPa>
         <sDlgDll></sDlgDll>
@@ -114,9 +114,13 @@
         <tDlgDll></tDlgDll>
         <tDlgPa></tDlgPa>
         <tIfile>.\LoadSymbol.ini</tIfile>
-        <pMon>BIN\UL2V8M.DLL</pMon>
+        <pMon>Segger\JL2CM3.dll</pMon>
       </DebugOpt>
       <TargetDriverDllRegistry>
+        <SetRegEntry>
+          <Number>0</Number>
+          <Key>DLGUARM</Key>
+        </SetRegEntry>
         <SetRegEntry>
           <Number>0</Number>
           <Key>UL2V8M</Key>
@@ -125,7 +129,7 @@
         <SetRegEntry>
           <Number>0</Number>
           <Key>JL2CM3</Key>
-          <Name>-U69545260 -O70 -S2 -ZTIFSpeedSel5000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(0BF11477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8001 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO31 -FD20000000 -FC4000 -FN1 -FF0GD32E23x.FLM -FS08000000 -FL020000 -FP0($$Device:GD32E235CB$Flash\GD32E23x.FLM)</Name>
+          <Name>-U69545260 -O70 -S2 -ZTIFSpeedSel5000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(0BF11477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8001 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC4000 -FN1 -FF0GD32E23x.FLM -FS08000000 -FL020000 -FP0($$Device:GD32E235CB$Flash\GD32E23x.FLM)</Name>
         </SetRegEntry>
         <SetRegEntry>
           <Number>0</Number>
@@ -215,7 +219,7 @@
       <DebugFlag>
         <trace>0</trace>
         <periodic>1</periodic>
-        <aLwin>0</aLwin>
+        <aLwin>1</aLwin>
         <aCover>0</aCover>
         <aSer1>0</aSer1>
         <aSer2>0</aSer2>

+ 8 - 8
truing_control/PDU-AC-235-NEW/prj/ctrl_board.uvprojx

@@ -53,7 +53,7 @@
           <CreateExecutable>1</CreateExecutable>
           <CreateLib>0</CreateLib>
           <CreateHexFile>1</CreateHexFile>
-          <DebugInformation>0</DebugInformation>
+          <DebugInformation>1</DebugInformation>
           <BrowseInformation>1</BrowseInformation>
           <ListingPath>.\Listings\</ListingPath>
           <HexFormatSelection>1</HexFormatSelection>
@@ -80,10 +80,10 @@
             <nStopB2X>0</nStopB2X>
           </BeforeMake>
           <AfterMake>
-            <RunUserProg1>0</RunUserProg1>
-            <RunUserProg2>0</RunUserProg2>
-            <UserProg1Name></UserProg1Name>
-            <UserProg2Name></UserProg2Name>
+            <RunUserProg1>1</RunUserProg1>
+            <RunUserProg2>1</RunUserProg2>
+            <UserProg1Name>D:\Keil_v5\ARM\ARMCC\bin\fromelf.exe --bin --output=@L.bin !L</UserProg1Name>
+            <UserProg2Name>../tools/mb.exe  ../user/cfg.h ../tools/bootloader.bin @L.bin</UserProg2Name>
             <UserProg1Dos16Mode>0</UserProg1Dos16Mode>
             <UserProg2Dos16Mode>0</UserProg2Dos16Mode>
             <nStopA1X>0</nStopA1X>
@@ -138,7 +138,7 @@
           </Flash1>
           <bUseTDR>1</bUseTDR>
           <Flash2>BIN\UL2V8M.DLL</Flash2>
-          <Flash3></Flash3>
+          <Flash3>"" ()</Flash3>
           <Flash4></Flash4>
           <pFcarmOut></pFcarmOut>
           <pFcarmGrp></pFcarmGrp>
@@ -275,8 +275,8 @@
               </OCR_RVCT3>
               <OCR_RVCT4>
                 <Type>1</Type>
-                <StartAddress>0x8000000</StartAddress>
-                <Size>0x20000</Size>
+                <StartAddress>0x8004000</StartAddress>
+                <Size>0xc000</Size>
               </OCR_RVCT4>
               <OCR_RVCT5>
                 <Type>1</Type>

BIN
truing_control/PDU-AC-235-NEW/tools/bootloader.bin


+ 1 - 1
truing_control/PDU-AC-235-NEW/user/cfg.h

@@ -18,7 +18,7 @@
 #define PROGRAME_APP1_SIZE								(48*1024)													//App1 programe Max size
 
 
-#define VERSION                          		"V1.0.0.1"
+#define VERSION                          		"V1.0.0.9"
 
 #define MODBUS_HEAD                        	"GOWONE_UPGRADE"
 

+ 29 - 9
truing_control/PDU-AC-235-NEW/user/main.c

@@ -16,6 +16,7 @@
 #include "gd32e23x.h"
 #include "string.h"
 #include "query.h"
+#include "cfg.h"
 
 
 
@@ -40,12 +41,13 @@ static void task_10s(void);
 static void task_100ms(void);
 static void relay_ctrl(void);
 static void app_init(META_DATA_S *meta);
-
+static void break_2_boot_upgreade(void);
 
 int main(){
-	
+	app_init(&meta_data);
 	flash_disable_read();
 	ac_board.md_data.r_data.dev_chn =  ACSingCurrid << 8 | RelaySlaveChaNum;
+	ac_board.break_uboot = break_2_boot_upgreade;
 	InitSysTick();
 	led_init();
 	lock_init();
@@ -129,6 +131,10 @@ int main(){
 	
 	while(1)
 	{
+		if(eMBCheck())
+		{
+			eMBEnable();
+		}
 		ac_board.feed_dog();
 		task_query();
 		task_100ms();
@@ -164,7 +170,10 @@ static void task_1s(void)
 #if SUPPORT_SELF_LOCK
 			ac_board.get_lock_key();
 #endif
-
+		if(ac_board.flag_upgrade == 1)
+		{
+			ac_board.break_uboot();
+		}
 	}
 }
 
@@ -215,12 +224,23 @@ static void task_10s(void)
 		eMBPoll();
 	}
 }
-//static void app_init(META_DATA_S *meta)
-//{
-//	flash_get_meta_data(meta);
-//	nvic_vector_table_set(NVIC_VECTTAB_FLASH,meta->rom_addr - NVIC_VECTTAB_FLASH);
-//	__enable_irq();
-//}
+static void app_init(META_DATA_S *meta)
+{
+	flash_get_meta_data(meta);
+	nvic_vector_table_set(NVIC_VECTTAB_FLASH,0X08004000 - NVIC_VECTTAB_FLASH);
+	__enable_irq();
+}
+static void break_2_boot_upgreade(void)
+{
+	meta_data.errno = 0;
+	meta_data.operation_flag = 1;
+	meta_data.recent_running_time = ac_board.md_data.r_data.info.runing_time;
+	flash_erase_meta();
+	flash_write_meta(&meta_data);
+	__disable_irq();
+	NVIC_SystemReset();
+}
+
 
 
 static void relay_ctrl(void)