Index: make/YC3121_hal.uvoptx
===================================================================
--- /YC3121_SDK/fw/hal/jinghongling/make/YC3121_hal.uvoptx	(revision 744)
+++ /YC3121_SDK/fw/hal/jinghongling/make/YC3121_hal.uvoptx	(working copy)
@@ -735,7 +735,7 @@
 
   <Group>
     <GroupName>HalApp</GroupName>
-    <tvExp>0</tvExp>
+    <tvExp>1</tvExp>
     <tvExpOptDlg>0</tvExpOptDlg>
     <cbSel>0</cbSel>
     <RteFlg>0</RteFlg>
@@ -815,7 +815,7 @@
 
   <Group>
     <GroupName>HalEncrypt</GroupName>
-    <tvExp>0</tvExp>
+    <tvExp>1</tvExp>
     <tvExpOptDlg>0</tvExpOptDlg>
     <cbSel>0</cbSel>
     <RteFlg>0</RteFlg>
@@ -895,7 +895,7 @@
 
   <Group>
     <GroupName>HalIcc</GroupName>
-    <tvExp>0</tvExp>
+    <tvExp>1</tvExp>
     <tvExpOptDlg>0</tvExpOptDlg>
     <cbSel>0</cbSel>
     <RteFlg>0</RteFlg>
@@ -1035,7 +1035,7 @@
 
   <Group>
     <GroupName>HalRtc</GroupName>
-    <tvExp>0</tvExp>
+    <tvExp>1</tvExp>
     <tvExpOptDlg>0</tvExpOptDlg>
     <cbSel>0</cbSel>
     <RteFlg>0</RteFlg>
@@ -1135,7 +1135,7 @@
 
   <Group>
     <GroupName>HalTrng</GroupName>
-    <tvExp>0</tvExp>
+    <tvExp>1</tvExp>
     <tvExpOptDlg>0</tvExpOptDlg>
     <cbSel>0</cbSel>
     <RteFlg>0</RteFlg>
@@ -1175,7 +1175,7 @@
 
   <Group>
     <GroupName>HalUsb</GroupName>
-    <tvExp>0</tvExp>
+    <tvExp>1</tvExp>
     <tvExpOptDlg>0</tvExpOptDlg>
     <cbSel>0</cbSel>
     <RteFlg>0</RteFlg>
Index: src/HalApp/main.c
===================================================================
--- /YC3121_SDK/fw/hal/jinghongling/src/HalApp/main.c	(revision 744)
+++ /YC3121_SDK/fw/hal/jinghongling/src/HalApp/main.c	(working copy)
@@ -6,7 +6,9 @@
 
 #include "yc_gpio.h"
 #include "yc_sysctrl.h"
-
+#include "halEncrypt.h"
+#include "misc.h"
+//#include "yc_rtc.h"
 #if 0
 void check_power_key()
 {
@@ -57,21 +59,28 @@
   	UART_Init(UARTx, &UART_InitStruct);
 }
 
+void NVIC_Configuration(void)
+{
+	NVIC_EnableIRQ(SEC_IRQn);
+	NVIC_SetPriority(SEC_IRQn, 0);
+}
 int main(void)
 {
-    u32 i = 0;
-
+  u32 i = 0;
 	halSysClkInit();//1ms
 	SYSCTRL_AHBPeriphClockCmd(SYSCTRL_AHBPeriph_UART,ENABLE);
+	NVIC_Configuration();
 	printf_uart_init(UART0);
 	//testUart();
   //halUsbInit(0);
-
+	//testTrng();	
+	testRtc();
+	//testEncrypt();
 	while (1)
 	{
-		MyPrintf("-------< YC3121_HAL_V0.028>------ \n");
-		MyPrintf("\r\nData:%s-%s",__DATE__,__TIME__);
-		delay_ms(500);
+		//MyPrintf("-------< YC3121_HAL_V0.028>------ \n");
+	//	MyPrintf("\r\nData:%s-%s",__DATE__,__TIME__);
+	//	delay_ms(500);
 	}
 	//while (1)
 	//check_power_key();
@@ -95,3 +104,9 @@
     while (1);
 }
 #endif
+
+void SEC_IRQHandler(void)
+{
+	rtcIrqHandler();
+}
+
Index: src/HalCommon/halCommon.c
===================================================================
--- /YC3121_SDK/fw/hal/jinghongling/src/HalCommon/halCommon.c	(revision 744)
+++ /YC3121_SDK/fw/hal/jinghongling/src/HalCommon/halCommon.c	(working copy)
@@ -43,7 +43,7 @@
 	if (iLen <= 0)
 	{
 		return;
-    }
+   }
 
     //halUartSend(UART_PT0, ucSendBuff, iLen);
 }
Index: src/HalEncrypt/halEncrypt.c
===================================================================
--- /YC3121_SDK/fw/hal/jinghongling/src/HalEncrypt/halEncrypt.c	(revision 744)
+++ /YC3121_SDK/fw/hal/jinghongling/src/HalEncrypt/halEncrypt.c	(working copy)
@@ -496,6 +496,17 @@
     return HAL_OK;
 }
 
+//s32 hal3Des(u8 *pucDataIn,u8 *pucDataOut, u8 *pucKey,E_PKA_CRYPT_MODE eCryptMode)
+//{
+//	if(PKA_ENCRYPT == eCryptMode)
+//	{
+//		return TDES_Enc((PACK_ModeTypeDef) eCryptMode,pucDataOut,  8,pucDataIn,  8, (TDES_KeyTypeDef *)pucKey,	 HAL_NULL, &RAND_RandP,HAL_NULL);
+//	}
+//	else
+//	{
+//		return TDES_Dec((PACK_ModeTypeDef) eCryptMode,pucDataOut,  8,pucDataIn,  8, (TDES_KeyTypeDef *)pucKey,	 HAL_NULL, &RAND_RandP,HAL_NULL);
+//	}
+//}
 
 /*******************************************************************************
 函数功能: Perform crc16 operation.
@@ -596,6 +607,11 @@
     }
 }
 
+s32 halSM2(u8 *pucIn,u32 uiInLen,u8 *pucOut, u32 *puiOutLen,u8 *pucKey, u8 ucMode)
+{
+
+}
+
 //#############################################################################
 //############################################################## 测试函数
 
@@ -622,7 +638,7 @@
     s32 iRet = 0;
 
     // test Des @ OK
-    #if 1
+    #if 0
     halPrintf("========== des ==========\n");
     memset(ucResult, 0x00, sizeof(ucResult));
     halDes((u8*)ucSrcData, ucResult, (u8*)ucKey, PKA_ENCRYPT);
@@ -637,20 +653,22 @@
     // test 3Des @ OK
     #if 1
     halPrintf("========== 3Des ==========\n");
+		//MyPrintf("========== 3Des ==========\n");
     memset(ucResult, 0x00, sizeof(ucResult));
     hal3Des((u8*)ucSrcData, ucResult, (u8*)ucKey, PKA_ENCRYPT);
     hal3Des((u8*)ucSrcData+8, ucResult+8, (u8*)ucKey, PKA_ENCRYPT);
     halPrintfWithTitle(ucResult, 16, "hal3Des PKA_ENCRYPT:");
-
+		//printv(ucResult, 16, "hal3Des PKA_ENCRYPT:");
     memcpy(ucTmpBuff, ucResult, 16);
     memset(ucResult, 0x00, sizeof(ucResult));
     hal3Des(ucTmpBuff, ucResult, (u8*)ucKey, PKA_DECRYPT);
     hal3Des(ucTmpBuff+8, ucResult+8, (u8*)ucKey, PKA_DECRYPT);
-    halPrintfWithTitle(ucResult, 16, "hal3Des PKA_DECRYPT:");
+		halPrintfWithTitle(ucResult, 16, "hal3Des PKA_DECRYPT:");
+    //printv(ucResult, 16, "hal3Des PKA_DECRYPT:");
     #endif
 
     // test Tdes @ OK
-    #if 1
+    #if 0
     halPrintf("========== Tdes ==========\n");
     memset(ucIv, 0x00, sizeof(ucIv));
     memset(ucResult, 0x00, sizeof(ucResult));
@@ -666,7 +684,7 @@
     #endif
 
     // test crc16
-    #if 1
+    #if 0
     halPrintf("========== crc16 ==========\n");
     uiCrcResult = halCrc16((u8*)ucSrcData, 8, 0xFFFF);
     halPrintf("halCrc16 : %08x\n", uiCrcResult);
@@ -675,7 +693,7 @@
     #endif
 
     // test crc32 @ OK
-    #if 1
+    #if 0
     halPrintf("========== crc32 ==========\n");
 
     for (u8 i=0; i<3; i++)
@@ -698,7 +716,7 @@
     #endif
 
     // test sm3 @ OK
-    #if 1
+    #if 0
     halPrintf("========== sm3 ==========\n");
     memset(ucResult, 0x00, sizeof(ucResult));
     iRet = halSm3(NULL, (u8*)ucSrcData, 32, ucResult);
@@ -710,7 +728,7 @@
     #endif
 
     // test sm4 @ OK
-    #if 1
+    #if 0
     halPrintf("========== sm4 ==========\n");
     memset(ucIv, 0x00, sizeof(ucIv));
     memset(ucResult, 0x00, sizeof(ucResult));
@@ -726,7 +744,7 @@
     #endif
 
     // test AES @ OK
-    #if 1
+    #if 0
     halPrintf("========== AES ==========\n");
     memset(ucIv, 0x00, sizeof(ucIv));
     memset(ucResult, 0x00, sizeof(ucResult));
@@ -742,7 +760,7 @@
     #endif
 
     // RSA @ OK
-    #if 1
+    #if 0
     halPrintf("========== RSA ==========\n");
     memcpy(ucAesKey,
 		"\xAF\xCB\x37\xF0\xF2\x74\x0F\xF4\x36\x62\x73\xB6\x4B\xD5\x1B\xC4\x94\xD5\xD0\x27\x34\x0F\x71\xE6\x2F\xF6\x94\xB7\x3C\x0E\x06\x8F\xCB\x94\x17\x4B\x42\x51\x6E\x83\xDC\x41\x69\xF9\xB2\x77\xA7\xC1\xAB\x2E\xAD\x23\x05\x76\x12\x66\x3B\xCD\xFD\xCB\x81\x1C\x36\x8A\x62\x60\x60\xD7\xFB\xFB\x8D\x33\xE3\x09\xE4\x1B\xAE\x12\x5C\xB9\xD4\x8B\x00\x12\xCB\x74\x4E\xB5\x2F\x0D\xE1\x02\xE4\xAA\x8B\x07\x6B\x70\x8C\x31\x19\x37\x2F\xC3\xDE\x4B\xAE\x60\xB8\x71\xCE\xA5\x4C\x78\x35\x2A\x66\x1C\x91\xDC\xBF\x12\x41\x38\x9A\x3E\x2F\x81\x0C\x74\x55\xBA\xF0\x13\x5E\x04\xA1\xCB\x72\x23\x2F\x05\x0C\x2C\x8B\x62\x32\x38\x97\x34\x1F\x4E\x10\xAA\x0D\xCD\xD2\xC1\xEA\xE3\x0E\xE0\xCC\xB1\x33\x52\x93\xBC\x3C\x9A\x28\x30\xDD\x09\x8A\x21\xB8\x62\xF3\xC7\xCC\x87\x22\x9B\x02\x10\x9E\x78\x13\x9D\xD4\x64\xE6\x95\x78\x3B\x01\xA5\xA3\x88\x4C\x72\xEA\x5C\x72\x9D\x73\x6F\x5E\x5C\x7F\xC0\x2D\xDE\x12\xC3\x31\xEC\xC4\xBF\xB4\xA3\x63\xDD\xF8\x4E\x5B\xAC\xE4\xDB\xCB\x48\x13\xFB\x31\x56\x69\x0A\x25\x7D\x54\x9F\x01\xB9\x5F\x53\x9C\x7E\xA0\x2C\x78\x20\xE9\x42\xA3\xBB",
@@ -764,30 +782,32 @@
 
     // SHA
     #if 1
-    halPrintf("========== SHA ==========\n");
+    //halPrintf("========== SHA ==========\n");
+		MyPrintf("========== SHA ==========\n");
     memset(ucResult, 0x00, sizeof(ucResult));
     iRet = halSha(SHA_MODE_160, (u8*)ucSrcData, 16, ucResult);
     halPrintfWithTitle(ucResult, 64, "SHA_160 :");
-
+		//printv(ucResult, 64, "SHA_160 :");
     memset(ucResult, 0x00, sizeof(ucResult));
     iRet = halSha(SHA_MODE_224, (u8*)ucSrcData, 16, ucResult);
     halPrintfWithTitle(ucResult, 64, "SHA_224 :");
-
+		//printv(ucResult, 64, "SHA_224 :");
     memset(ucResult, 0x00, sizeof(ucResult));
     iRet = halSha(SHA_MODE_256, (u8*)ucSrcData, 16, ucResult);
     halPrintfWithTitle(ucResult, 64, "SHA_256 :");
-
+		//printv(ucResult, 64, "SHA_256 :");
     memset(ucResult, 0x00, sizeof(ucResult));
     iRet = halSha(SHA_MODE_384, (u8*)ucSrcData, 16, ucResult);
     halPrintfWithTitle(ucResult, 64, "SHA_384 :");
-
+		//printv(ucResult, 64, "SHA_384 :");
     memset(ucResult, 0x00, sizeof(ucResult));
     iRet = halSha(SHA_MODE_512, (u8*)ucSrcData, 16, ucResult);
     halPrintfWithTitle(ucResult, 64, "SHA_512 :");
-
+		//printv(ucResult, 64, "SHA_512 :");
     memset(ucResult, 0x00, sizeof(ucResult));
     iRet = halSha(SHA_MODE_SM3, (u8*)ucSrcData, 16, ucResult);
     halPrintfWithTitle(ucResult, 64, "SHA_SM3 :");
-    #endif
+    //printv(ucResult, 64, "SHA_SM3 :");
+		#endif
 }
 
Index: src/HalInt/halInt.c
===================================================================
--- /YC3121_SDK/fw/hal/jinghongling/src/HalInt/halInt.c	(revision 744)
+++ /YC3121_SDK/fw/hal/jinghongling/src/HalInt/halInt.c	(working copy)
@@ -206,10 +206,10 @@
     halPrintf("SM4_IRQHandler\n");
 }
 
-void SEC_IRQHandler(void)
-{
-    halPrintf("SEC_IRQHandler\n");
-}
+//void SEC_IRQHandler(void)
+//{
+//    halPrintf("SEC_IRQHandler\n");
+//}
 
 void MSR_IRQHandler(void)
 {
Index: src/HalRtc/halRtc.c
===================================================================
--- /YC3121_SDK/fw/hal/jinghongling/src/HalRtc/halRtc.c	(revision 744)
+++ /YC3121_SDK/fw/hal/jinghongling/src/HalRtc/halRtc.c	(working copy)
@@ -1,3 +1,155 @@
 #include "halRtc.h"
+#include "yc3121.h"
+#include "yc_gpio.h"
+#include "yc_uart.h"
+#include "yc_rtc.h"
+#include "yc_lpm.h"
+#include "misc.h"
+#include "time.h"
+#include "yc_qspi.h"
+#include "stdio.h"
+#include "math.h"
+#include "stdlib.h"
+
+#define RTC_OFFSET_ADR 0x1000000+0x40000
+int g_time_offset = 0;
+
+s32 halSysSetTime(s8 *cTimeStr)
+{
+		short hour, min, sec, year, month,day;
+		struct tm bTime;
+		/*年份*/
+		year = cTimeStr[0];
+		/*月份*/
+		month = cTimeStr[1];
+		/*天数*/
+		day = cTimeStr[2];
+		/*小时*/
+		hour = cTimeStr[3];
+		/*分钟*/
+		min = cTimeStr[4];
+		/*秒数*/
+		sec = cTimeStr[5];
+		
+		//数据放入日期相关结构体
+		bTime.tm_year = year+2000-1900 ;
+		bTime.tm_mon = month - 1;
+		bTime.tm_mday = day;
+		bTime.tm_hour = hour;
+		bTime.tm_min = min;
+		bTime.tm_sec = sec;	
+		
+		g_time_offset = mktime(&bTime) - RTC_GetRefRegister();//总秒数减去RTC计数值得到偏移量
+	 //保存偏移值
+		qspi_flash_sectorerase(RTC_OFFSET_ADR);
+		qspi_flash_write(RTC_OFFSET_ADR,( uint8_t *)(&g_time_offset),4);
+		#if 1
+		MyPrintf("%04d年%02d月%02d日%02d时%02d分%02d秒\n",bTime.tm_year+1900,bTime.tm_mon + 1,bTime.tm_mday,bTime.tm_hour,bTime.tm_min,bTime.tm_sec);
+		#endif
+		return HAL_RTC_OK ;
+}
+s32 halSysGetTime(s8 *cTimeStr)
+{
+		int now = 0;
+		struct tm* pTime;
+
+		now = RTC_GetRefRegister();        //获取实时钟计数值
+
+		qspi_flash_read(RTC_OFFSET_ADR,( uint8_t *)(&g_time_offset),4);//获取偏正值
+
+		now = now  + g_time_offset;   //修正偏移
+		pTime = localtime((const time_t*)&now);
+		cTimeStr[0] = pTime->tm_year-100;
+		cTimeStr[1] = pTime->tm_mon+1;
+		cTimeStr[2] = pTime->tm_mday;
+		cTimeStr[3] = pTime->tm_hour;
+		cTimeStr[4] = pTime->tm_min;
+		cTimeStr[5] = pTime->tm_sec; 
+		return HAL_RTC_OK ;
+}
+void halRtcAlarmClose(void)
+{
+		NVIC_DisableIRQ(SEC_IRQn);
+}
+void halRtcSetAlarm(u8 ucMIN,u8 ucSEC)
+{
+	 u32 timecnt;
+	 u32 RtcCntCru;
+	 RtcCntCru = RTC_GetRefRegister();
+	 if(ucMIN <60 && ucSEC <60)
+	 {
+			timecnt = ucMIN*60+ucSEC;
+			RTC_SetWakeUpCounter(timecnt+RtcCntCru);
+	 }
+}
+s32 halRtcSetAlarmCheck(u8 ucMIN,u8 ucSEC)
+{
+		u32 rtccnt;
+		u32 timecnt;
+		timecnt = ucMIN*60+ucSEC;
+		rtccnt = RTC_GetRefRegister();
+		if(rtccnt > timecnt)
+		{
+				return HAL_RTC_FAILED;			//闹钟已响过
+		}
+		else
+		{
+				return HAL_RTC_OK;					//闹钟未响过
+		}
+}
+void halSetRtcAlarmflag(u32 Value)
+{
+		Value = 1;
+}
+
+void halClearRtcAlarmStatus(void)
+{
+		RTC_ClearITPendingBit();
+}
+
+void halRtccalibrationfrequency(void)
+{
+	
+}
+void fd3IrqHandler(void)
+{
+
+}
+extern u32 Value;
+void rtcIrqHandler(void)
+{
+
+	s8 cTimeStr[6];	
+	halSetRtcAlarmflag(Value);
+	halSysGetTime(cTimeStr);
+	MyPrintf("Alarm ok,data = %04d年%02d月%02d日%02d时%02d分%02d秒\n",cTimeStr[0]+2000,cTimeStr[1],cTimeStr[2],cTimeStr[3],cTimeStr[4],cTimeStr[5]);
+	RTC_Calibration();
+	halClearRtcAlarmStatus();
+//	halRtcAlarmClose();
+}
+
+void VbatrtcInitial(void)
+{
+	
+}
+s32 testRtc(void)
+{
+	u8 ucMIN = 0;
+	u8 ucSEC = 10;
+	s8 cTimeStr[6] = {20,1,1,1,1,0};   //年，月，日，时，分，秒
+	RTC_Get_SexMax();
+	RTC_Calibration();
+	RTC_SetRefRegister(0);
+	halRtcSetAlarm(ucMIN,ucSEC);
+	RTC_Config(ENABLE);
+	halClearRtcAlarmStatus();
+	halSysSetTime(cTimeStr);
+	while(1)
+	{
+		delay_ms(10000);
+		halSysGetTime(cTimeStr);
+		MyPrintf("%04d年%02d月%02d日%02d时%02d分%02d秒\n",cTimeStr[0]+2000,cTimeStr[1],cTimeStr[2],cTimeStr[3],cTimeStr[4],cTimeStr[5]);
+	}
+}
 
 
Index: src/HalTimer/halTimer.c
===================================================================
--- /YC3121_SDK/fw/hal/jinghongling/src/HalTimer/halTimer.c	(revision 744)
+++ /YC3121_SDK/fw/hal/jinghongling/src/HalTimer/halTimer.c	(working copy)
@@ -97,7 +97,7 @@
 s32 halTimerStop(E_TIMER_ID eIndex)
 {
 #if 0
-    return HAL_ERROR;
+   return HAL_ERROR;
 #else
 	TIM_Cmd((TIM_NumTypeDef)eIndex, DISABLE);
 	return HAL_OK;
Index: src/HalTrng/halTrng.c
===================================================================
--- /YC3121_SDK/fw/hal/jinghongling/src/HalTrng/halTrng.c	(revision 744)
+++ /YC3121_SDK/fw/hal/jinghongling/src/HalTrng/halTrng.c	(working copy)
@@ -29,7 +29,7 @@
 {
     TRNG_Init();
     //Disable_Trng(); // 20191226 
-    return HAL_OK;
+    return HAL_RANDOM_OK;
 }
 
 /*******************************************************************************
@@ -44,51 +44,56 @@
 --------------------------------------------------------------------------------
 修改信息: 2019.11.16    jqdeng    创建
 *******************************************************************************/
-s32 halGetRandom(u8 *random, u32 len)
+extern s32 halGetRandom(u8 *pucRandom,u32 uilen)
 {
+	if((HAL_NULL == pucRandom) || (uilen==0)) 
+		return  HAL_RANDOM_FAILED;
 	int i,j;
-	int gettimes = len/16+1;
+	int gettimes = uilen/16+1;
 	u8 buf[16] = {0};
 
-	if((NULL == random) || (len==0))
-    {
-        return HAL_ERROR;
-    }
-
-    TRNG_Init();
+	halRandomInit();
 	for(j=0;j<gettimes;j++)
 	{
 		TRNG_Get((volatile unsigned long*)buf);
 
 		for(i=0; i<16;i++)
 		{
-			random[j*16+i] = buf[i];
-			if((j*16+i)==len)
-            {
-                break;
-            }
+			pucRandom[j*16+i] = buf[i];
+			if((j*16+i)==uilen) 
+			{	
+				Disable_Trng();				
+				return HAL_RANDOM_OK;
+			}
 		}
-	}
-
-    Disable_Trng();
-    return HAL_OK;
+	}	
+	Disable_Trng();
 }
 
-
 void testTrng(void)
 {
-    s32 iRet = 0;
-    u8 ucRandBuff[32] = {0};
-    u16 i = 0;
-
-    iRet = halRandomInit();
-
-    for (i=0; i<50; i++)
-    {
-        memset(ucRandBuff, 0x00, sizeof(ucRandBuff));
-        iRet = halGetRandom(ucRandBuff, 32);
-        halPrintf("halGetRandom iRet: %d\n", iRet);
-        halPrintfWithTitle(ucRandBuff, 32, "ucRandBuff");
-    }
+		u8 i;
+		u8 pucRandom[32];
+		halGetRandom(pucRandom,32);
+		for(i=0;i<32;i++)
+		{
+			MyPrintf("pucRandom[%d] = %x\n",i,pucRandom[i]);
+		}
 }
+//void testTrng(void)
+//{
+//    s32 iRet = 0;
+//    u8 ucRandBuff[32] = {0};
+//    u16 i = 0;
+
+//    iRet = halRandomInit();
+
+//    for (i=0; i<50; i++)
+//    {
+//        memset(ucRandBuff, 0x00, sizeof(ucRandBuff));
+//        iRet = halGetRandom(ucRandBuff, 32);
+//        MyPrintf("halGetRandom iRet: %d\n", iRet);
+//        halPrintfWithTitle(ucRandBuff, 32, "ucRandBuff");
+//    }
+//}
 
