Ver código fonte

修改rtc模块,增加当前时间查询功能

zhoutao 1 mês atrás
pai
commit
f788eb976b

Diferenças do arquivo suprimidas por serem muito extensas
+ 1 - 1
ips8000v3.uvguix.zt200


+ 8 - 1
src/driverapp/driverapp_rtc.c

@@ -134,7 +134,7 @@ uint8 driverapp_rtc_read_hour_minute(uint8 *pbyHour, uint8 *pbyMinute)
 }
 
 // 读取当前时间,包括年月日时分
-uint8 driverapp_rtc_read_datetime(uint8 *pbyYear, uint8 *pbyMonth, uint8 *pbyDay, uint8 *pbyHour, uint8 *pbyMinute)
+uint8 driverapp_rtc_get_current_datetime(uint8 *pbyYear, uint8 *pbyMonth, uint8 *pbyDay, uint8 *pbyHour, uint8 *pbyMinute, uint8 *pbySecond)
 {
     uint8 byFlag = 0;
     uint8 byTmp = 0;
@@ -174,6 +174,13 @@ uint8 driverapp_rtc_read_datetime(uint8 *pbyYear, uint8 *pbyMonth, uint8 *pbyDay
     }
     *pbyMinute = driverapp_rtc_bcd_to_decimal(byTmp);
 
+    byFlag = driverapp_rtc_read_data(RTC_REG_ADDRESS_SECOND, &byTmp, 1);
+    if (!byFlag)
+    {
+        return byFlag;
+    }
+    *pbySecond = driverapp_rtc_bcd_to_decimal(byTmp);
+
     return 1;
 }
 

+ 1 - 1
src/driverapp/driverapp_rtc.h

@@ -22,7 +22,7 @@
 // 供外部使用接口
 uint8 driverapp_rtc_init();
 uint8 driverapp_rtc_set_current_datetime(uint8 year, uint8 month, uint8 date, uint8 hour, uint8 minute, uint8 second);
-uint8 driverapp_rtc_read_datetime(uint8 *pbyYear, uint8 *pbyMonth, uint8 *pbyDay, uint8 *pbyHour, uint8 *pbyMinute);
+uint8 driverapp_rtc_get_current_datetime(uint8 *pbyYear, uint8 *pbyMonth, uint8 *pbyDay, uint8 *pbyHour, uint8 *pbyMinute, uint8 *pbySecond);
 // 内部接口
 uint8 driverapp_rtc_write_data(uint8 byRegAddress, uint8 *pbyData, uint16 wLen);
 uint8 driverapp_rtc_read_data(uint8 byRegAddress, uint8 *pbyData, uint16 wLen);

+ 9 - 1
src/exti/exti.c

@@ -107,6 +107,14 @@ void EXTI0_IRQHandler(void)
                     }
                 }
             }
+
+            // 同步定时无效,不发送同步信号,指示灯每秒闪烁一次
+            if (!gExti_bySyncTimerEnabled)
+            {
+                // 亮灯
+                gExti_byLedFlag ^= 1; // 异或操作
+                driver_led_switch_green(gExti_byLedFlag);
+            }
         }
 
         // 清除中断标识符
@@ -173,7 +181,7 @@ void EXTI4_IRQHandler(void)
         exti_disable_sync_tx_int();
 
         // 亮灯
-        gExti_byLedFlag = ~gExti_byLedFlag;
+        gExti_byLedFlag ^= 1; // 异或操作
         driver_led_switch_green(gExti_byLedFlag);
 
         // 清除中断标识符

+ 3 - 2
src/inc/sysdef.h

@@ -77,7 +77,7 @@ typedef unsigned long long uint64;
 #define APP_WMM_STORE_FLAG 0xBBCCDDEE  // 参数保存标识符
 #define APP_WMM_STORE_VERSION 0x020100 // 软件版本
 
-#define DEVICE_TYPE 2             // 设备类型,1:声波基站,2:同步基站,3:同步中继
+#define DEVICE_TYPE 2             // 设备类型,1:声波基站,2:同步基站
 #define DEVICE_MODE "IPS8000SYNC" // 设备型号
 
 // V2.00.1,增加本地网管和集中网管
@@ -87,6 +87,7 @@ typedef unsigned long long uint64;
 // V2.0.05,解决升级经常失败的问题,包括本地网管和集中网管(by zt 2024/10/28)
 // V2.0.06,配合远程升级做部分修改(by zt 2024/11/13)
 // V2.1.00,增加重置参数功能,发布正式版本(by zt 2024/12/21)
-#define SOFTWARE_VERSION "V2.1.00"
+// V2.1.01,增加rtc功能(by zt 2025/3/6)
+#define SOFTWARE_VERSION "V2.1.01"
 
 #endif

+ 1 - 1
src/rtc/rtc.c

@@ -84,7 +84,7 @@ void rtc_monitor()
         }
         else
         {
-            exti_set_sync_timer_enabled_flag(0;)
+            exti_set_sync_timer_enabled_flag(0);
         }
     }
 

+ 22 - 0
src/wmm/oam_sync_timer.c

@@ -56,6 +56,28 @@ void oam_sync_timer_query(uint8 *pbyData)
 
     switch (wCommand)
     {
+    case ORDER_SYNC_TIMER_CURRENT_TIME: // 当前时间
+        uint8 year, month, day, hour, minute, second;
+        uint8 byFlag = driverapp_rtc_get_current_datetime(&year, &month, &day, &hour, &minute, &second);
+        if (!byFlag)
+        {
+            pstLtv->abyData[5] = 23;
+            pstLtv->abyData[4] = 6;
+            pstLtv->abyData[3] = 14;
+            pstLtv->abyData[2] = 15;
+            pstLtv->abyData[1] = 16;
+            pstLtv->abyData[0] = 17;
+        }
+        else
+        {
+            pstLtv->abyData[5] = year;
+            pstLtv->abyData[4] = month;
+            pstLtv->abyData[3] = day;
+            pstLtv->abyData[2] = hour;
+            pstLtv->abyData[1] = minute;
+            pstLtv->abyData[0] = second;
+        }
+        break;
     case ORDER_SYNC_TIMER_SWITCH: // 定时开关
         SYS_MEMCPY(pstLtv->abyData, &g_stSyncTimerParam.byTimerSwitch, byLen);
         break;

Alguns arquivos não foram mostrados porque muitos arquivos mudaram nesse diff