为华客户W13项目源码。

This commit is contained in:
Alex xu 2024-08-19 11:15:53 +08:00
commit 4d73a57b11
79 changed files with 14863 additions and 0 deletions

Binary file not shown.

View File

@ -0,0 +1,231 @@
:0300000002076C88
:10076C00758E3075D20078FFE4F6D8FD7581C20223
:02077C0007B9BB
:0F0BD30012087FD2AED2BE120B521207FE80F470
:0404EE0002BF000049
:020ADB00AD0765
:100ADD00E4FCFBFAF54EF54F75FE2975FF8BEDC461
:100AED0054F04401F5A5E5A520E0FBAFA1AB07AFA0
:100AFD00A2EFFEEEFAEB254FF54FEA354EF54E0C13
:100B0D00BC08DBE54FAE4E7803CEC313CE13D8F938
:010B1D00FFD8
:010B1E0022B4
:100B1F00E4F54CF54D7F05120ADB8E4C8F4D7F06A9
:100B2F00120ADBE4FCFDC004A905AA06AB07AE4C14
:100B3F00AF4D7C077DD01204C1D0001204098E4C3A
:020B4F008F4DC8
:010B51002281
:0204F200C11730
:1009B100E5E620E70953B3FE75F210C21722E5F20E
:1009C100540C601053B3FEE5F354C0603475F20C5F
:1009D10075F3C022E5F354C0600375F3C0E5F2304E
:1009E100E41AC378C0E694EB18E6940F500575F24B
:1009F10010800353B3FED217E4F5452243B301C27D
:020A01001722BA
:0404F400C115C11657
:100A9500E5E530E103C21522E5E230E705C215D2EE
:100AA5001622E5E830E00EC215301229C21275E8AB
:100AB5000175B50122D21530161BE5E630E716C3E0
:100AC50078C0E6941018E6940E4005D215C2162299
:060AD500E4F5B5C2152294
:1004F800013EBC19250000000000000000000000BB
:10050800000000000000000000000000000020467D
:1005180051060708090A0B180708181818181806AA
:10052800070C0A09181806070C080918180B0C07F5
:1005380008181818060B0C08091818060B0C0809D7
:100548000A1806070818181818060B0C08090A07CD
:10055800060708090B0C181497181818180018180B
:100568001800011818000102180001020314AB1842
:10057800181818141818181415181814151618140B
:030588001516172E
:10005E000524120A03E524D394184003752401E500
:10006E002412049B00BE0100D20200E60300FA0433
:10007E00010E05012206013607014A08015E09013B
:10008E00720A01860B019A0C01AD0D01C10E01D54C
:10009E000F01E91002031102161202261302361482
:1000AE00024615025D16027417028B18000002A09C
:1000BE0075FE0643FF20D285E5256401600302022A
:1000CE00A002026B75FE0643FF20D285E526640171
:1000DE0060030202A002028275FE0643FF20D28553
:1000EE00E527640160030202A002029875FE064332
:1000FE00FF20D285E528640160030202A00201FA06
:10010E0075FE0643FF10D284E539640160030202D6
:10011E00A002025475FE0643FF10D284E53A640134
:10012E0060030202A002028275FE0643FF10D28413
:10013E00E53B640160030202A002029875FE0643CD
:10014E00FF10D284E53C640160030202A00201FAB2
:10015E0075FE0643FF08D283E5296401600302029F
:10016E00A002025475FE0643FF08D283E52B6401FC
:10017E0060030202A002026B75FE0643FF08D283E3
:10018E00E530640160030202A002029875FE064388
:10019E00FF08D283E531640160030202A0804D7531
:1001AE00FE0643FF04D282E52F640160030202A023
:1001BE0002025475FE0643FF04D282E52E640160EE
:1001CE00030202A002026B75FE0643FF04D282E513
:1001DE002D640160030202A002028275FE0643FF37
:1001EE0004D282E536640160030202A075FE064366
:1001FE00FF02C2812275FE0643FF02D281E52C6406
:10020E000160030202A0803E75FE0643FF02D2810A
:10021E00E5376401707C804575FE0643FF02D2818E
:10022E00E5326401706C804C75FE0643FF02D2818C
:10023E00E5336401705C805275FE0643FF01D28087
:10024E00E5386401704C75FE0643FF20C2852275A9
:10025E00FE0643FF01D280E5346401703575FE065B
:10026E0043FF10C2842275FE0643FF01D280E5359E
:10027E006401701E75FE0643FF08C2832275FE06DA
:10028E0043FF01D280E52AB4010875FE0643FF0440
:02029E00C2821A
:0102A000223B
:09000E007F197825E4F608DFFCF7
:0100170022C6
:090040007F107829E4F608DFFCCA
:010049002294
:02095200AE07EE
:10095400E4FDFCF9FFFB120040EE75F06484F9EE4F
:1009640075F06484ABF0EB75F00A84FFEB75F00A64
:1009740084ABF0E96006752901752A01E4FDEED324
:100984009409400FEF75F007A424512DF8E62425AF
:10099400F87601EB75F007A424512DF8E6FC6418F1
:0C09A4006006742C2CF876010DBD07D203
:0109B0002224
:10001E00E4FD7E047839E4F608DEFCE4FEEF25E02C
:10002E0025E024AB2EF8E6FD2425F876010EBE045D
:01003E00ECD5
:01003F00229E
:100B8300E4FD7E047825E4F608DEFCE4FEEF25E0D0
:100B930025E024972EF8E6FD2425F876010EBE0401
:010BA300EC65
:010BA400222E
:100A030075FE0653FFDF75FE0543FF2075FE065393
:100A1300FFEF75FE0543FF1075FE0653FFF775FEE6
:100A23000543FF0875FE0653FFFB75FE0543FF04F0
:100A330075FE0653FFFD75FE0543FF0275FE065363
:090A4300FFFE75FE0543FF0122D0
:05058B0001500AC11837
:100BBD00E5E620E709200F06200E03301805C218C0
:060BCD007F00227F0122DF
:10087F00E4F5D275FE8943FF8075FE8075FF3075F4
:10088F00FE0153FFFC75B7C3758901758CFC758A22
:10089F0017D2A9D28C438910758DFE758B0BD2ABF5
:1008AF00D28E75868075FE1775FF3CD2A8D2B9D24D
:1008BF00BBD2AF75F21C75F3C075E80C75FE87538C
:1008CF00FFDF43B31075FE7043FF0475FE0F53FF38
:1008DF00F3AF3E1209527F0412001E7F04020B83F6
:03000300020006F2
:0100060032C7
:03004B0002004E62
:06004E0075EB3CD21832F4
:03005B000200544C
:0600540075F30CD2183216
:100590000141FF014500014400C105014300014242
:1005A00000013F00C102C107014000C104C103C1F5
:0705B00008C106C101C100F2
:1002A100E4F54C78C2E6FF6541601B20020DEF606A
:1002B1005ED20275F00AA4F53E80548F41EF75F0CD
:1002C1000AA4F5448049053FE53FD395404040E409
:1002D100F53FE5E630E71CE5442409FFE433FEC3BE
:1002E100E53E9FEE6480F87480985002053E7540AB
:1002F1001E8012200F03300E0CE53ED395444002C0
:10030100153E75403CE53ED394644003753E642040
:1003110002030203CCE5E630E748301718E545C390
:10032100940A500C0545753E64AF3E120952802E69
:1003310012000E8029200515754C0D7425254CF8E9
:10034100E4F6054CE54CB414F2D2058011E53EC348
:1003510094634003753E63AF3E120952C205D20752
:10036100802E200306200403300722200F18200EC0
:1003710015E545C39405500305452212000EC2033D
:10038100C204C207800AAF3E120952800312000E56
:10039100300F16200813AF4312001E0543E543D367
:1003A1009404400A7543018005E4FF12001E300EDB
:1003B10015200612AF42120B830542E542D3940485
:0B03C100400975420122E4FF120B838B
:0103CC00220E
:1007FE0030111BC211120A951209B1120B1F78BFCC
:10080E00A60608A6071208EF12060C1206BC301335
:10081E005FC2131202A1E550D39400400915503067
:10082E00184EC2188047120BBDEF604175FE24436F
:10083E00FF3CC2ABC2BBC2B9C2A9C29053B7CFE490
:10084E00F5B575FE2953FF7F75FE0653FFC075FE85
:10085E000553FFC075FE8053FFCF43870275FE80A0
:10086E0043FF30D2BBD2B9D2A9D2AB800075500AA9
:01087E002257
:1005B700C10FC10E014602014800014702014A006E
:1005C700014900014B00C110C109C10CC10AC10D8D
:0205D700C10B56
:10060C002015030206A1E54614601A14606D24023D
:10061C0060030206A4E5B720E40653B7EF43B71016
:10062C007546018073E5E35424FFBF241C300A0691
:10063C00C20AD206D20C0548E548C394284059E4B6
:10064C00F54853B7EFD210804FE5E35424FFBF2099
:10065C001BE4F548D20E300C07C20CC2068543428F
:10066C00D20A301033C20EE4F545802CE5E3542455
:10067C007026754602C203C210801D53B7EFE4F515
:10068C0048C20EE5E330E510E4F54675B501D2033A
:10069C008543428003754602E5E830E2120549E5E0
:1006AC0049C394024009E4F54975E80475460222F1
:1006BC00201503020751E54714601A14606D2402DB
:1006CC006003020754E5B720E50653B7DF43B720B4
:1006DC007547018073E5E35488FFBF881C300B0617
:1006EC00C20BD208D20D054AE54AC394284059E4FE
:1006FC00F54A53B7DFD209804FE5E35488FFBF803A
:10070C001BE4F54AD20F300D07C20DC208854243D7
:10071C00D20B300933C20FE4F545802CE5E3548845
:10072C007026754702C204C209801D53B7DFE4F579
:10073C004AC20FE5E330E710E4F54775B501D20482
:10074C008542438003754602E5E830E312054BE52C
:10075C004BC394024009E4F54B75E8087547022237
:1005D90001C200C11901C13214080D7A0E420E740C
:0E05E9000EA10EC90F0A0F5F0F3C0FD2106853
:1008EF00E4FFEF25E02408F8E6FC08E6FDC378C036
:1008FF00E69D18E69C40040FBF0AE7E5E16009E4B6
:10090F00F5E178C2A607D20778C2E6FEEFD39E4084
:10091F00041806800378C11678C1E6FED3945A50A6
:10092F0006EEC3940A500778C2A60718763278C22B
:10093F00E6FFD394015003D21922EFD39402400261
:02094F00C219CB
:010951002283
:1005F700011D00011C00011E00C112C111C1130120
:040607001F00C114FB
:100B5200E51F602CE4F51F051CE51CC394644005E9
:100B6200E4F51CD211051DE51DC394FA4012E4F50B
:100B72001DD212051EE51E94044005E4F51ED21393
:010B82002250
:03000B00020BA540
:100BA500C0E0C0D074FC258CF58C7417258AF58AB5
:080BB500751F01D0D0D0E03221
:03001B00020A4C8A
:100A4C00C0E0C0F0C083C082C0D075D000C000C070
:100A5C0001C002C003C004C005C006C007C28F1588
:100A6C008D158D740B258BF58B12005ED214D0076F
:100A7C00D006D005D004D003D002D001D000D0D005
:090A8C00D082D083D0F0D0E0321A
:030BFD00010101F2
:10077E00020BD3E493A3F8E493A34003F68001F2B3
:10078E0008DFF48029E493A3F85407240CC8C3337C
:10079E00C4540F4420C8834004F456800146F6DF4B
:1007AE00E4800B01020408102040809004EEE47EE9
:1007BE00019360BCA3FF543F30E509541FFEE49340
:1007CE00A360010ECF54C025E060A840B8E493A307
:1007DE00FAE493A3F8E493A3C8C582C8CAC583CA32
:1007EE00F0A3C8C582C8CAC583CADFE9DEE780BEEA
:01060B0000EE
:1003CD0075F008758200EF2FFFEE33FECD33CDCCE7
:1003DD0033CCC58233C5829BED9AEC99E58298406A
:1003ED000CF582EE9BFEED9AFDEC99FC0FD5F0D647
:1003FD00E4CEFBE4CDFAE4CCF9A88222B800C1B971
:10040D000059BA002DEC8BF084CFCECDFCE5F0CBAE
:10041D00F97818EF2FFFEE33FEED33FDEC33FCEBE7
:10042D0033FB10D703994004EB99FB0FD8E5E4F9A2
:10043D00FA227818EF2FFFEE33FEED33FDEC33FC8F
:10044D00C933C910D7059BE99A4007EC9BFCE99A83
:10045D00F90FD8E0E4C9FAE4CCFB2275F010EF2FC8
:10046D00FFEE33FEED33FDCC33CCC833C810D707C8
:10047D009BEC9AE899400AED9BFDEC9AFCE899F803
:0E048D000FD5F0DAE4CDFBE4CCFAE4C8F92296
:10049B00D083D082F8E4937012740193700DA3A3F0
:1004AB0093F8740193F5828883E473740293686004
:0604BB00EFA3A3A380DF04
:1004C100EC8EF0A4CCC5F0CCCDF8EFA4CEC5F02DC8
:1004D100FDE43CFCE8A42EC8C5F03DFDE43CFCEF86
:0D04E100A4FFE5F028FEE43DFDE43CFC2214
:00000001FF

71
Project/HEXBIN.bat Normal file
View File

@ -0,0 +1,71 @@
:: @File Name: HEXBIN.bat
:: @Version : 1.0
:: @Author : Alex-XU
:: @Creat Date : 2023-03-30
:: @Brief :
:: 在keil中,生成hex、bin文件到 Out 文件夹中.
:: 复制本文件到keil工程文件所在目录下/Project目录下
:: 在keil 魔法棒USER里填写
:: .\Out.bat $K !P @P
:: $K hextobin转换工具位置 !P 工程名 @P 工程目录
:: .\HEXBIN.bat .\Objects\hex2bin_TP.exe mcu \Objects\
::关闭显示
@echo off
::获取时间
set year=%date:~0,4%
set month=%date:~5,2%
set day=%date:~8,2%
set hour=%time:~0,2%
set min=%time:~3,2%
set sec=%time:~6,2%
::创建输出文件夹 Out
if exist .\..\Out (
echo Out file exist
) else (
mkdir .\..\Out
)
::设置hex2bin_TP.exe位置 ,\Objects\hex2bin_TP.exe
set exe_location=%1
::获取工程名 mcu.hex
set project_name=%3
::设置.hex文件所在目录路径\Objects\
set crc_path=%2
::设置.hex文件所在目录路径\Objects\
set obj_path=%4
::设置输出后的文件名
set output_nameTmp=SY883X_EVB_%project_name%_%date:~0,4%_%date:~5,2%_%date:~8,2%_%time:~0,2%%time:~3,2%%time:~6,2%
::如果hour小于10会有空格下面这句话可以除去字符串中的空格并用0代替。
set output_name=%output_nameTmp: =0%
::将bin文件生成到HEXBIN文件夹 >nul屏蔽成功命令 .\Objects\hex2bin_TP.exe .\Objects\mcu.hex .\Objects\bin.bin 3 0
%exe_location% .%obj_path%%project_name%.hex .%obj_path%%output_name%.bin 3 0 >nul
::将hex文件重命名
ren .%obj_path%%project_name%.hex %output_name%.hex >nul
ECHO Add CRC16 At the end of the .bin file
ECHO -------------------------------------
SET SREC_PATH=D:\Keil_v5\SREC
for /f %%i in ('dir /s /b .%obj_path%%output_name%.bin') do (
set indexdx=%%~zi
)
ECHO --- size= %indexdx% Bytes ---
::计算程序CRC16校验和并加在.bin文件最后
ECHO %SREC_PATH%\srec_cat.exe .%obj_path%%output_name%.bin -Binary -crop 0 %indexdx% -CRC16_Big_Endian %indexdx% -XMODEM -o .%obj_path%%output_name%_crc.bin -Binary
%SREC_PATH%\srec_cat.exe .%obj_path%%output_name%.bin -Binary -crop 0 %indexdx% -CRC16_Big_Endian %indexdx% -XMODEM -o .%obj_path%%output_name%_crc.bin -Binary
::获取软件CRC校验和以及版本号
%crc_path% .%obj_path%%output_name%_crc.bin
del /q ..\Out\*.*
::将hex文件复制到HEXBIN文件夹
move .%obj_path%%output_name%.hex .\..\Out >nul
move .%obj_path%%output_name%.bin .\..\Out >nul
::del .%obj_path%%output_name%.hex
::del .%obj_path%%output_name%.bin
del .%obj_path%%output_name%_crc.bin
move .%obj_path%%output_name%_crc(*.bin .\..\Out >nul

3637
Project/TP3102_Demo.uvgui.GH Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

461
Project/TP3102_Demo.uvopt Normal file
View File

@ -0,0 +1,461 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<ProjectOpt xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="project_opt.xsd">
<SchemaVersion>1.0</SchemaVersion>
<Header>### uVision Project, (C) Keil Software</Header>
<Extensions>
<cExt>*.c</cExt>
<aExt>*.s*; *.src; *.a*</aExt>
<oExt>*.obj; *.o</oExt>
<lExt>*.lib</lExt>
<tExt>*.txt; *.h; *.inc</tExt>
<pExt>*.plm</pExt>
<CppX>*.cpp</CppX>
<nMigrate>0</nMigrate>
</Extensions>
<DaveTm>
<dwLowDateTime>0</dwLowDateTime>
<dwHighDateTime>0</dwHighDateTime>
</DaveTm>
<Target>
<TargetName>Target 1</TargetName>
<ToolsetNumber>0x0</ToolsetNumber>
<ToolsetName>MCS-51</ToolsetName>
<TargetOption>
<CLK51>12000000</CLK51>
<OPTTT>
<gFlags>1</gFlags>
<BeepAtEnd>1</BeepAtEnd>
<RunSim>1</RunSim>
<RunTarget>0</RunTarget>
<RunAbUc>0</RunAbUc>
</OPTTT>
<OPTHX>
<HexSelection>0</HexSelection>
<FlashByte>65535</FlashByte>
<HexRangeLowAddress>0</HexRangeLowAddress>
<HexRangeHighAddress>0</HexRangeHighAddress>
<HexOffset>0</HexOffset>
</OPTHX>
<OPTLEX>
<PageWidth>120</PageWidth>
<PageLength>65</PageLength>
<TabStop>8</TabStop>
<ListingPath>.\Listings\</ListingPath>
</OPTLEX>
<ListingPage>
<CreateCListing>1</CreateCListing>
<CreateAListing>1</CreateAListing>
<CreateLListing>1</CreateLListing>
<CreateIListing>0</CreateIListing>
<AsmCond>1</AsmCond>
<AsmSymb>1</AsmSymb>
<AsmXref>0</AsmXref>
<CCond>1</CCond>
<CCode>0</CCode>
<CListInc>0</CListInc>
<CSymb>0</CSymb>
<LinkerCodeListing>0</LinkerCodeListing>
</ListingPage>
<OPTXL>
<LMap>1</LMap>
<LComments>1</LComments>
<LGenerateSymbols>1</LGenerateSymbols>
<LLibSym>1</LLibSym>
<LLines>1</LLines>
<LLocSym>1</LLocSym>
<LPubSym>1</LPubSym>
<LXref>0</LXref>
<LExpSel>0</LExpSel>
</OPTXL>
<OPTFL>
<tvExp>1</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<IsCurrentTarget>1</IsCurrentTarget>
</OPTFL>
<CpuCode>255</CpuCode>
<Books>
<Book>
<Number>0</Number>
<Title>Data Sheet</Title>
<Path>DATASHTS\CAST\CAST_R8051XC.PDF</Path>
</Book>
</Books>
<DebugOpt>
<uSim>1</uSim>
<uTrg>0</uTrg>
<sLdApp>1</sLdApp>
<sGomain>1</sGomain>
<sRbreak>1</sRbreak>
<sRwatch>1</sRwatch>
<sRmem>1</sRmem>
<sRfunc>1</sRfunc>
<sRbox>1</sRbox>
<tLdApp>1</tLdApp>
<tGomain>1</tGomain>
<tRbreak>1</tRbreak>
<tRwatch>1</tRwatch>
<tRmem>1</tRmem>
<tRfunc>0</tRfunc>
<tRbox>1</tRbox>
<tRtrace>1</tRtrace>
<sRSysVw>1</sRSysVw>
<tRSysVw>1</tRSysVw>
<sRunDeb>0</sRunDeb>
<sLrtime>0</sLrtime>
<bEvRecOn>1</bEvRecOn>
<bSchkAxf>0</bSchkAxf>
<bTchkAxf>0</bTchkAxf>
<nTsel>10</nTsel>
<sDll></sDll>
<sDllPa></sDllPa>
<sDlgDll></sDlgDll>
<sDlgPa></sDlgPa>
<sIfile></sIfile>
<tDll></tDll>
<tDllPa></tDllPa>
<tDlgDll></tDlgDll>
<tDlgPa></tDlgPa>
<tIfile></tIfile>
<pMon>BIN\SY8831.dll</pMon>
</DebugOpt>
<TargetDriverDllRegistry>
<SetRegEntry>
<Number>0</Number>
<Key>DLGDC51</Key>
<Name>(94=-1,-1,-1,-1,0)(80=-1,-1,-1,-1,0)(81=-1,-1,-1,-1,0)(82=-1,-1,-1,-1,0)(83=-1,-1,-1,-1,0)(84=-1,-1,-1,-1,0)(1201=-1,-1,-1,-1,0)(90=-1,-1,-1,-1,0)(91=-1,-1,-1,-1,0)(5045=-1,-1,-1,-1,0)(5046=-1,-1,-1,-1,0)(5031=-1,-1,-1,-1,0)(104=-1,-1,-1,-1,0)(5015=-1,-1,-1,-1,0)(5160=-1,-1,-1,-1,0)(5057=-1,-1,-1,-1,0)(5166=-1,-1,-1,-1,0)(5164=-1,-1,-1,-1,0)(5165=-1,-1,-1,-1,0)</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>SY8831</Key>
<Name>-S14 -B921600 -O1799</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>DLGTC51</Key>
<Name></Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>TP3102</Key>
<Name>-S14 -B921600 -O1799</Name>
</SetRegEntry>
</TargetDriverDllRegistry>
<Breakpoint/>
<WatchWindow1>
<Ww>
<count>0</count>
<WinNumber>1</WinNumber>
<ItemText>n_ADC_Plus,0x0A</ItemText>
</Ww>
<Ww>
<count>1</count>
<WinNumber>1</WinNumber>
<ItemText>n_Vbat_Data,0x0A</ItemText>
</Ww>
<Ww>
<count>2</count>
<WinNumber>1</WinNumber>
<ItemText>F_sys_tim_1s</ItemText>
</Ww>
<Ww>
<count>3</count>
<WinNumber>1</WinNumber>
<ItemText>Protect_Type_Flg</ItemText>
</Ww>
<Ww>
<count>4</count>
<WinNumber>1</WinNumber>
<ItemText>Decnt_SleepDelay</ItemText>
</Ww>
</WatchWindow1>
<MemoryWindow1>
<Mm>
<WinNumber>1</WinNumber>
<SubType>0</SubType>
<ItemText>X:0</ItemText>
<AccSizeX>0</AccSizeX>
</Mm>
</MemoryWindow1>
<Tracepoint>
<THDelay>0</THDelay>
</Tracepoint>
<DebugFlag>
<trace>0</trace>
<periodic>1</periodic>
<aLwin>1</aLwin>
<aCover>0</aCover>
<aSer1>0</aSer1>
<aSer2>0</aSer2>
<aPa>0</aPa>
<viewmode>1</viewmode>
<vrSel>0</vrSel>
<aSym>0</aSym>
<aTbox>0</aTbox>
<AscS1>0</AscS1>
<AscS2>0</AscS2>
<AscS3>0</AscS3>
<aSer3>0</aSer3>
<eProf>0</eProf>
<aLa>0</aLa>
<aPa1>0</aPa1>
<AscS4>0</AscS4>
<aSer4>0</aSer4>
<StkLoc>1</StkLoc>
<TrcWin>0</TrcWin>
<newCpu>0</newCpu>
<uProt>0</uProt>
</DebugFlag>
<LintExecutable></LintExecutable>
<LintConfigFile></LintConfigFile>
<bLintAuto>0</bLintAuto>
<bAutoGenD>0</bAutoGenD>
<LntExFlags>0</LntExFlags>
<pMisraName></pMisraName>
<pszMrule></pszMrule>
<pSingCmds></pSingCmds>
<pMultCmds></pMultCmds>
<pMisraNamep></pMisraNamep>
<pszMrulep></pszMrulep>
<pSingCmdsp></pSingCmdsp>
<pMultCmdsp></pMultCmdsp>
</TargetOption>
</Target>
<Group>
<GroupName>Startup</GroupName>
<tvExp>1</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel>
<RteFlg>0</RteFlg>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>1</FileNumber>
<FileType>2</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\Src\startup\STARTUP.A51</PathWithFileName>
<FilenameWithoutPath>STARTUP.A51</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
</Group>
<Group>
<GroupName>UsrSrc</GroupName>
<tvExp>1</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel>
<RteFlg>0</RteFlg>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>2</FileNumber>
<FileType>1</FileType>
<tvExp>1</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\UsrSrc\main.c</PathWithFileName>
<FilenameWithoutPath>main.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>3</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\UsrSrc\adc\adc.c</PathWithFileName>
<FilenameWithoutPath>adc.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>4</FileNumber>
<FileType>1</FileType>
<tvExp>1</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\UsrSrc\charger\charger_module.c</PathWithFileName>
<FilenameWithoutPath>charger_module.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>5</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\UsrSrc\discharge\discharge_module.c</PathWithFileName>
<FilenameWithoutPath>discharge_module.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>6</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\UsrSrc\gpio\gpio.c</PathWithFileName>
<FilenameWithoutPath>gpio.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>7</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\UsrSrc\hall\hall.c</PathWithFileName>
<FilenameWithoutPath>hall.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>8</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\UsrSrc\key\key.c</PathWithFileName>
<FilenameWithoutPath>key.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>9</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\UsrSrc\led\led.c</PathWithFileName>
<FilenameWithoutPath>led.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>10</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\UsrSrc\sleep\sleep.c</PathWithFileName>
<FilenameWithoutPath>sleep.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>11</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\UsrSrc\system\system.c</PathWithFileName>
<FilenameWithoutPath>system.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>12</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\UsrSrc\uart\uart.c</PathWithFileName>
<FilenameWithoutPath>uart.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>13</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\UsrSrc\userapp\userapp.c</PathWithFileName>
<FilenameWithoutPath>userapp.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>14</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\UsrSrc\vox\vox_module.c</PathWithFileName>
<FilenameWithoutPath>vox_module.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>15</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\UsrSrc\watchdog\watchdog.c</PathWithFileName>
<FilenameWithoutPath>watchdog.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>16</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\UsrSrc\bat\bat.c</PathWithFileName>
<FilenameWithoutPath>bat.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>17</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\UsrSrc\timer\sys_tim.c</PathWithFileName>
<FilenameWithoutPath>sys_tim.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>18</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\UsrSrc\InitVars.c</PathWithFileName>
<FilenameWithoutPath>InitVars.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
</Group>
</ProjectOpt>

495
Project/TP3102_Demo.uvproj Normal file
View File

@ -0,0 +1,495 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<Project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="project_proj.xsd">
<SchemaVersion>1.1</SchemaVersion>
<Header>### uVision Project, (C) Keil Software</Header>
<Targets>
<Target>
<TargetName>Target 1</TargetName>
<ToolsetNumber>0x0</ToolsetNumber>
<ToolsetName>MCS-51</ToolsetName>
<uAC6>0</uAC6>
<TargetOption>
<TargetCommonOption>
<Device>R8051XC</Device>
<Vendor>CAST, Inc.</Vendor>
<Cpu>IRAM(0-0xFF) CLOCK(24000000) MOD517DP MDU_R515</Cpu>
<FlashUtilSpec></FlashUtilSpec>
<StartupFile>"LIB\STARTUP.A51" ("Standard 8051 Startup Code")</StartupFile>
<FlashDriverDll></FlashDriverDll>
<DeviceId>4129</DeviceId>
<RegisterFile>REG51XC.H</RegisterFile>
<MemoryEnv></MemoryEnv>
<Cmp></Cmp>
<Asm></Asm>
<Linker></Linker>
<OHString></OHString>
<InfinionOptionDll></InfinionOptionDll>
<SLE66CMisc></SLE66CMisc>
<SLE66AMisc></SLE66AMisc>
<SLE66LinkerMisc></SLE66LinkerMisc>
<SFDFile></SFDFile>
<bCustSvd>0</bCustSvd>
<UseEnv>0</UseEnv>
<BinPath></BinPath>
<IncludePath></IncludePath>
<LibPath></LibPath>
<RegisterFilePath>Evatronix\</RegisterFilePath>
<DBRegisterFilePath>Evatronix\</DBRegisterFilePath>
<TargetStatus>
<Error>0</Error>
<ExitCodeStop>0</ExitCodeStop>
<ButtonStop>0</ButtonStop>
<NotGenerated>0</NotGenerated>
<InvalidFlash>1</InvalidFlash>
</TargetStatus>
<OutputDirectory>.\Objects\</OutputDirectory>
<OutputName>mcu</OutputName>
<CreateExecutable>1</CreateExecutable>
<CreateLib>0</CreateLib>
<CreateHexFile>1</CreateHexFile>
<DebugInformation>1</DebugInformation>
<BrowseInformation>1</BrowseInformation>
<ListingPath>.\Listings\</ListingPath>
<HexFormatSelection>0</HexFormatSelection>
<Merge32K>0</Merge32K>
<CreateBatchFile>0</CreateBatchFile>
<BeforeCompile>
<RunUserProg1>0</RunUserProg1>
<RunUserProg2>0</RunUserProg2>
<UserProg1Name></UserProg1Name>
<UserProg2Name></UserProg2Name>
<UserProg1Dos16Mode>0</UserProg1Dos16Mode>
<UserProg2Dos16Mode>0</UserProg2Dos16Mode>
<nStopU1X>0</nStopU1X>
<nStopU2X>0</nStopU2X>
</BeforeCompile>
<BeforeMake>
<RunUserProg1>0</RunUserProg1>
<RunUserProg2>0</RunUserProg2>
<UserProg1Name></UserProg1Name>
<UserProg2Name></UserProg2Name>
<UserProg1Dos16Mode>0</UserProg1Dos16Mode>
<UserProg2Dos16Mode>0</UserProg2Dos16Mode>
<nStopB1X>0</nStopB1X>
<nStopB2X>0</nStopB2X>
</BeforeMake>
<AfterMake>
<RunUserProg1>1</RunUserProg1>
<RunUserProg2>0</RunUserProg2>
<UserProg1Name>.\..\Tools\HEXBIN.bat .\..\Tools\hex2bin_TP.exe .\..\Tools\bin_crc.exe mcu \Objects\</UserProg1Name>
<UserProg2Name></UserProg2Name>
<UserProg1Dos16Mode>0</UserProg1Dos16Mode>
<UserProg2Dos16Mode>0</UserProg2Dos16Mode>
<nStopA1X>0</nStopA1X>
<nStopA2X>0</nStopA2X>
</AfterMake>
<SelectedForBatchBuild>0</SelectedForBatchBuild>
<SVCSIdString></SVCSIdString>
</TargetCommonOption>
<CommonProperty>
<UseCPPCompiler>0</UseCPPCompiler>
<RVCTCodeConst>0</RVCTCodeConst>
<RVCTZI>0</RVCTZI>
<RVCTOtherData>0</RVCTOtherData>
<ModuleSelection>0</ModuleSelection>
<IncludeInBuild>1</IncludeInBuild>
<AlwaysBuild>0</AlwaysBuild>
<GenerateAssemblyFile>0</GenerateAssemblyFile>
<AssembleAssemblyFile>0</AssembleAssemblyFile>
<PublicsOnly>0</PublicsOnly>
<StopOnExitCode>3</StopOnExitCode>
<CustomArgument></CustomArgument>
<IncludeLibraryModules></IncludeLibraryModules>
<ComprImg>1</ComprImg>
<BankNo>65535</BankNo>
</CommonProperty>
<DllOption>
<SimDllName>S8051.DLL</SimDllName>
<SimDllArguments>-PMW -DPC -BSE</SimDllArguments>
<SimDlgDll>DCore51.DLL</SimDlgDll>
<SimDlgDllArguments>-pR8051XC -o38081BDBFFF</SimDlgDllArguments>
<TargetDllName>S8051.DLL</TargetDllName>
<TargetDllArguments></TargetDllArguments>
<TargetDlgDll>TCore51.DLL</TargetDlgDll>
<TargetDlgDllArguments>-pR8051XC</TargetDlgDllArguments>
</DllOption>
<DebugOption>
<OPTHX>
<HexSelection>0</HexSelection>
<HexRangeLowAddress>0</HexRangeLowAddress>
<HexRangeHighAddress>0</HexRangeHighAddress>
<HexOffset>0</HexOffset>
<Oh166RecLen>16</Oh166RecLen>
</OPTHX>
<Simulator>
<UseSimulator>1</UseSimulator>
<LoadApplicationAtStartup>1</LoadApplicationAtStartup>
<RunToMain>1</RunToMain>
<RestoreBreakpoints>1</RestoreBreakpoints>
<RestoreWatchpoints>1</RestoreWatchpoints>
<RestoreMemoryDisplay>1</RestoreMemoryDisplay>
<RestoreFunctions>1</RestoreFunctions>
<RestoreToolbox>1</RestoreToolbox>
<LimitSpeedToRealTime>0</LimitSpeedToRealTime>
<RestoreSysVw>1</RestoreSysVw>
</Simulator>
<Target>
<UseTarget>0</UseTarget>
<LoadApplicationAtStartup>1</LoadApplicationAtStartup>
<RunToMain>1</RunToMain>
<RestoreBreakpoints>1</RestoreBreakpoints>
<RestoreWatchpoints>1</RestoreWatchpoints>
<RestoreMemoryDisplay>1</RestoreMemoryDisplay>
<RestoreFunctions>0</RestoreFunctions>
<RestoreToolbox>1</RestoreToolbox>
<RestoreTracepoints>1</RestoreTracepoints>
<RestoreSysVw>1</RestoreSysVw>
</Target>
<RunDebugAfterBuild>0</RunDebugAfterBuild>
<TargetSelection>10</TargetSelection>
<SimDlls>
<CpuDll></CpuDll>
<CpuDllArguments></CpuDllArguments>
<PeripheralDll></PeripheralDll>
<PeripheralDllArguments></PeripheralDllArguments>
<InitializationFile></InitializationFile>
</SimDlls>
<TargetDlls>
<CpuDll></CpuDll>
<CpuDllArguments></CpuDllArguments>
<PeripheralDll></PeripheralDll>
<PeripheralDllArguments></PeripheralDllArguments>
<InitializationFile></InitializationFile>
<Driver>BIN\SY8831.dll</Driver>
</TargetDlls>
</DebugOption>
<Utilities>
<Flash1>
<UseTargetDll>0</UseTargetDll>
<UseExternalTool>0</UseExternalTool>
<RunIndependent>0</RunIndependent>
<UpdateFlashBeforeDebugging>0</UpdateFlashBeforeDebugging>
<Capability>0</Capability>
<DriverSelection>-1</DriverSelection>
</Flash1>
<bUseTDR>0</bUseTDR>
<Flash2></Flash2>
<Flash3>"" ()</Flash3>
<Flash4></Flash4>
<pFcarmOut></pFcarmOut>
<pFcarmGrp></pFcarmGrp>
<pFcArmRoot></pFcArmRoot>
<FcArmLst>0</FcArmLst>
</Utilities>
<Target51>
<Target51Misc>
<MemoryModel>0</MemoryModel>
<RTOS>0</RTOS>
<RomSize>2</RomSize>
<DataHold>0</DataHold>
<XDataHold>0</XDataHold>
<UseOnchipRom>0</UseOnchipRom>
<UseOnchipArithmetic>0</UseOnchipArithmetic>
<UseMultipleDPTR>0</UseMultipleDPTR>
<UseOnchipXram>0</UseOnchipXram>
<HadIRAM>1</HadIRAM>
<HadXRAM>0</HadXRAM>
<HadIROM>0</HadIROM>
<Moda2>0</Moda2>
<Moddp2>0</Moddp2>
<Modp2>0</Modp2>
<Mod517dp>1</Mod517dp>
<Mod517au>0</Mod517au>
<Mode2>0</Mode2>
<useCB>0</useCB>
<useXB>0</useXB>
<useL251>0</useL251>
<useA251>0</useA251>
<Mx51>0</Mx51>
<ModC812>0</ModC812>
<ModCont>0</ModCont>
<Lp51>0</Lp51>
<useXBS>0</useXBS>
<ModDA>0</ModDA>
<ModAB2>0</ModAB2>
<Mx51P>0</Mx51P>
<hadXRAM2>0</hadXRAM2>
<uocXram2>0</uocXram2>
<hadXRAM3>0</hadXRAM3>
<ModC2>0</ModC2>
<ModH2>0</ModH2>
<Mdu_R515>1</Mdu_R515>
<Mdu_F120>0</Mdu_F120>
<Psoc>0</Psoc>
<hadIROM2>0</hadIROM2>
<hadIROM3>0</hadIROM3>
<ModSmx2>0</ModSmx2>
<cBanks>0</cBanks>
<xBanks>0</xBanks>
<OnChipMemories>
<RCB>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0xffff</Size>
</RCB>
<RXB>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</RXB>
<Ocm1>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</Ocm1>
<Ocm2>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</Ocm2>
<Ocm3>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</Ocm3>
<Ocr1>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</Ocr1>
<Ocr2>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</Ocr2>
<Ocr3>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</Ocr3>
<IRO>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</IRO>
<IRA>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x100</Size>
</IRA>
<XRA>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</XRA>
<XRA512>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</XRA512>
<IROM512>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</IROM512>
<XRA513>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</XRA513>
<IROM513>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</IROM513>
</OnChipMemories>
</Target51Misc>
<C51>
<RegisterColoring>0</RegisterColoring>
<VariablesInOrder>0</VariablesInOrder>
<IntegerPromotion>1</IntegerPromotion>
<uAregs>0</uAregs>
<UseInterruptVector>1</UseInterruptVector>
<Fuzzy>3</Fuzzy>
<Optimize>8</Optimize>
<WarningLevel>2</WarningLevel>
<SizeSpeed>0</SizeSpeed>
<ObjectExtend>1</ObjectExtend>
<ACallAJmp>0</ACallAJmp>
<InterruptVectorAddress>0</InterruptVectorAddress>
<VariousControls>
<MiscControls></MiscControls>
<Define></Define>
<Undefine></Undefine>
<IncludePath>..\UsrInc\adc;..\UsrInc\charger;..\UsrInc\discharge;..\UsrInc\gpio;..\UsrInc\hall;..\UsrInc\i2c_simu;..\UsrInc\inc;..\UsrInc\key;..\UsrInc\led;..\UsrInc\mtp;..\UsrInc\pwm;..\UsrInc\sleep;..\UsrInc\system;..\UsrInc\uart;..\UsrInc\userapp;..\UsrInc\vox;..\UsrInc\vox_comm;..\UsrInc\watchdog;..\UsrInc\bat;..\UsrInc\timer</IncludePath>
</VariousControls>
</C51>
<Ax51>
<UseMpl>0</UseMpl>
<UseStandard>1</UseStandard>
<UseCase>0</UseCase>
<UseMod51>0</UseMod51>
<VariousControls>
<MiscControls></MiscControls>
<Define></Define>
<Undefine></Undefine>
<IncludePath></IncludePath>
</VariousControls>
</Ax51>
<Lx51>
<useFile>0</useFile>
<linkonly>0</linkonly>
<UseMemoryFromTarget>1</UseMemoryFromTarget>
<CaseSensitiveSymbols>0</CaseSensitiveSymbols>
<WarningLevel>2</WarningLevel>
<DataOverlaying>1</DataOverlaying>
<OverlayString></OverlayString>
<MiscControls></MiscControls>
<DisableWarningNumbers></DisableWarningNumbers>
<LinkerCmdFile></LinkerCmdFile>
<Assign></Assign>
<ReserveString></ReserveString>
<CClasses></CClasses>
<UserClasses></UserClasses>
<CSection></CSection>
<UserSection></UserSection>
<CodeBaseAddress></CodeBaseAddress>
<XDataBaseAddress></XDataBaseAddress>
<PDataBaseAddress></PDataBaseAddress>
<BitBaseAddress></BitBaseAddress>
<DataBaseAddress></DataBaseAddress>
<IDataBaseAddress></IDataBaseAddress>
<Precede></Precede>
<Stack></Stack>
<CodeSegmentName>?CO?INITVARS(0x0BFD)</CodeSegmentName>
<XDataSegmentName></XDataSegmentName>
<BitSegmentName></BitSegmentName>
<DataSegmentName></DataSegmentName>
<IDataSegmentName></IDataSegmentName>
</Lx51>
</Target51>
</TargetOption>
<Groups>
<Group>
<GroupName>Startup</GroupName>
<Files>
<File>
<FileName>STARTUP.A51</FileName>
<FileType>2</FileType>
<FilePath>..\Src\startup\STARTUP.A51</FilePath>
</File>
</Files>
</Group>
<Group>
<GroupName>UsrSrc</GroupName>
<Files>
<File>
<FileName>main.c</FileName>
<FileType>1</FileType>
<FilePath>..\UsrSrc\main.c</FilePath>
</File>
<File>
<FileName>adc.c</FileName>
<FileType>1</FileType>
<FilePath>..\UsrSrc\adc\adc.c</FilePath>
</File>
<File>
<FileName>charger_module.c</FileName>
<FileType>1</FileType>
<FilePath>..\UsrSrc\charger\charger_module.c</FilePath>
</File>
<File>
<FileName>discharge_module.c</FileName>
<FileType>1</FileType>
<FilePath>..\UsrSrc\discharge\discharge_module.c</FilePath>
</File>
<File>
<FileName>gpio.c</FileName>
<FileType>1</FileType>
<FilePath>..\UsrSrc\gpio\gpio.c</FilePath>
</File>
<File>
<FileName>hall.c</FileName>
<FileType>1</FileType>
<FilePath>..\UsrSrc\hall\hall.c</FilePath>
</File>
<File>
<FileName>key.c</FileName>
<FileType>1</FileType>
<FilePath>..\UsrSrc\key\key.c</FilePath>
</File>
<File>
<FileName>led.c</FileName>
<FileType>1</FileType>
<FilePath>..\UsrSrc\led\led.c</FilePath>
</File>
<File>
<FileName>sleep.c</FileName>
<FileType>1</FileType>
<FilePath>..\UsrSrc\sleep\sleep.c</FilePath>
</File>
<File>
<FileName>system.c</FileName>
<FileType>1</FileType>
<FilePath>..\UsrSrc\system\system.c</FilePath>
</File>
<File>
<FileName>uart.c</FileName>
<FileType>1</FileType>
<FilePath>..\UsrSrc\uart\uart.c</FilePath>
</File>
<File>
<FileName>userapp.c</FileName>
<FileType>1</FileType>
<FilePath>..\UsrSrc\userapp\userapp.c</FilePath>
</File>
<File>
<FileName>vox_module.c</FileName>
<FileType>1</FileType>
<FilePath>..\UsrSrc\vox\vox_module.c</FilePath>
</File>
<File>
<FileName>watchdog.c</FileName>
<FileType>1</FileType>
<FilePath>..\UsrSrc\watchdog\watchdog.c</FilePath>
</File>
<File>
<FileName>bat.c</FileName>
<FileType>1</FileType>
<FilePath>..\UsrSrc\bat\bat.c</FilePath>
</File>
<File>
<FileName>sys_tim.c</FileName>
<FileType>1</FileType>
<FilePath>..\UsrSrc\timer\sys_tim.c</FilePath>
</File>
<File>
<FileName>InitVars.c</FileName>
<FileType>1</FileType>
<FilePath>..\UsrSrc\InitVars.c</FilePath>
</File>
</Files>
</Group>
</Groups>
</Target>
</Targets>
<LayerInfo>
<Layers>
<Layer>
<LayName>&lt;Project Info&gt;</LayName>
<LayDesc></LayDesc>
<LayUrl></LayUrl>
<LayKeys></LayKeys>
<LayCat></LayCat>
<LayLic></LayLic>
<LayTarg>0</LayTarg>
<LayPrjMark>1</LayPrjMark>
</Layer>
</Layers>
</LayerInfo>
</Project>

205
Src/startup/STARTUP.A51 Normal file
View File

@ -0,0 +1,205 @@
$NOMOD51
;------------------------------------------------------------------------------
; This file is part of the C51 Compiler package
; Copyright (c) 1988-2005 Keil Elektronik GmbH and Keil Software, Inc.
; Version 8.01
;
; *** <<< Use Configuration Wizard in Context Menu >>> ***
;------------------------------------------------------------------------------
; STARTUP.A51: This code is executed after processor reset.
;
; To translate this file use A51 with the following invocation:
;
; A51 STARTUP.A51
;
; To link the modified STARTUP.OBJ file to your application use the following
; Lx51 invocation:
;
; Lx51 your object file list, STARTUP.OBJ controls
;
;------------------------------------------------------------------------------
;
; User-defined <h> Power-On Initialization of Memory
;
; With the following EQU statements the initialization of memory
; at processor reset can be defined:
;
; <o> IDATALEN: IDATA memory size <0x0-0x100>
; <i> Note: The absolute start-address of IDATA memory is always 0
; <i> The IDATA space overlaps physically the DATA and BIT areas.
IDATALEN EQU 100H
;
; <o> XDATASTART: XDATA memory start address <0x0-0xFFFF>
; <i> The absolute start address of XDATA memory
XDATASTART EQU 0
;
; <o> XDATALEN: XDATA memory size <0x0-0xFFFF>
; <i> The length of XDATA memory in bytes.
XDATALEN EQU 0H
;
; <o> PDATASTART: PDATA memory start address <0x0-0xFFFF>
; <i> The absolute start address of PDATA memory
PDATASTART EQU 0H
;
; <o> PDATALEN: PDATA memory size <0x0-0xFF>
; <i> The length of PDATA memory in bytes.
PDATALEN EQU 0H
;
;</h>
;------------------------------------------------------------------------------
;
;<h> Reentrant Stack Initialization
;
; The following EQU statements define the stack pointer for reentrant
; functions and initialized it:
;
; <h> Stack Space for reentrant functions in the SMALL model.
; <q> IBPSTACK: Enable SMALL model reentrant stack
; <i> Stack space for reentrant functions in the SMALL model.
IBPSTACK EQU 0 ; set to 1 if small reentrant is used.
; <o> IBPSTACKTOP: End address of SMALL model stack <0x0-0xFF>
; <i> Set the top of the stack to the highest location.
IBPSTACKTOP EQU 0xFF +1 ; default 0FFH+1
; </h>
;
; <h> Stack Space for reentrant functions in the LARGE model.
; <q> XBPSTACK: Enable LARGE model reentrant stack
; <i> Stack space for reentrant functions in the LARGE model.
XBPSTACK EQU 0 ; set to 1 if large reentrant is used.
; <o> XBPSTACKTOP: End address of LARGE model stack <0x0-0xFFFF>
; <i> Set the top of the stack to the highest location.
XBPSTACKTOP EQU 0xFFFF +1 ; default 0FFFFH+1
; </h>
;
; <h> Stack Space for reentrant functions in the COMPACT model.
; <q> PBPSTACK: Enable COMPACT model reentrant stack
; <i> Stack space for reentrant functions in the COMPACT model.
PBPSTACK EQU 0 ; set to 1 if compact reentrant is used.
;
; <o> PBPSTACKTOP: End address of COMPACT model stack <0x0-0xFFFF>
; <i> Set the top of the stack to the highest location.
PBPSTACKTOP EQU 0xFF +1 ; default 0FFH+1
; </h>
;</h>
;------------------------------------------------------------------------------
;
; Memory Page for Using the Compact Model with 64 KByte xdata RAM
; <e>Compact Model Page Definition
;
; <i>Define the XDATA page used for PDATA variables.
; <i>PPAGE must conform with the PPAGE set in the linker invocation.
;
; Enable pdata memory page initalization
PPAGEENABLE EQU 0 ; set to 1 if pdata object are used.
;
; <o> PPAGE number <0x0-0xFF>
; <i> uppermost 256-byte address of the page used for PDATA variables.
PPAGE EQU 0
;
; <o> SFR address which supplies uppermost address byte <0x0-0xFF>
; <i> most 8051 variants use P2 as uppermost address byte
PPAGE_SFR DATA 0A0H
;
; </e>
;------------------------------------------------------------------------------
; Standard SFR Symbols
ACC DATA 0E0H
B DATA 0F0H
SP DATA 81H
DPL DATA 82H
DPH DATA 83H
CKCON DATA 8EH
CLKPRE DATA 0D2H
PCON DATA 87H
NAME ?C_STARTUP
?C_C51STARTUP SEGMENT CODE
?STACK SEGMENT IDATA
RSEG ?STACK
DS 1
EXTRN CODE (?C_START)
PUBLIC ?C_STARTUP
CSEG AT 0
?C_STARTUP: LJMP STARTUP1
RSEG ?C_C51STARTUP
STARTUP1:
;Set Wait State to 0x30 and CPU CLK Prescaler to 1 to Accelerate Startup
;MOV PCON, #02H ;Enter Standby
MOV CKCON, #30H ;Wait State = 0x30
MOV CLKPRE, #0 ;CLK Prescaler = 1
IF IDATALEN <> 0
MOV R0,#IDATALEN - 1
CLR A
IDATALOOP: MOV @R0,A
DJNZ R0,IDATALOOP
ENDIF
IF XDATALEN <> 0
MOV DPTR,#XDATASTART
MOV R7,#LOW (XDATALEN)
IF (LOW (XDATALEN)) <> 0
MOV R6,#(HIGH (XDATALEN)) +1
ELSE
MOV R6,#HIGH (XDATALEN)
ENDIF
CLR A
XDATALOOP: MOVX @DPTR,A
INC DPTR
DJNZ R7,XDATALOOP
DJNZ R6,XDATALOOP
ENDIF
IF PPAGEENABLE <> 0
MOV PPAGE_SFR,#PPAGE
ENDIF
IF PDATALEN <> 0
MOV R0,#LOW (PDATASTART)
MOV R7,#LOW (PDATALEN)
CLR A
PDATALOOP: MOVX @R0,A
INC R0
DJNZ R7,PDATALOOP
ENDIF
IF IBPSTACK <> 0
EXTRN DATA (?C_IBP)
MOV ?C_IBP,#LOW IBPSTACKTOP
ENDIF
IF XBPSTACK <> 0
EXTRN DATA (?C_XBP)
MOV ?C_XBP,#HIGH XBPSTACKTOP
MOV ?C_XBP+1,#LOW XBPSTACKTOP
ENDIF
IF PBPSTACK <> 0
EXTRN DATA (?C_PBP)
MOV ?C_PBP,#LOW PBPSTACKTOP
ENDIF
MOV SP,#?STACK-1
; This code is required if you use L51_BANK.A51 with Banking Mode 4
;<h> Code Banking
; <q> Select Bank 0 for L51_BANK.A51 Mode 4
#if 0
; <i> Initialize bank mechanism to code bank 0 when using L51_BANK.A51 with Banking Mode 4.
EXTRN CODE (?B_SWITCH0)
CALL ?B_SWITCH0 ; init bank mechanism to code bank 0
#endif
;</h>
LJMP ?C_START
END

View File

@ -0,0 +1,28 @@
---- DISPLAY_6PIN_188 Matches (27 in 11 files) ----
check_bat_level in bat.c (UsrSrc\bat) : #if DISPLAY_6PIN_188
Charger_Handler in charger_module.c (UsrSrc\charger) : #if DISPLAY_6PIN_188
define.h (UsrInc\inc) line 35 : #define DISPLAY_6PIN_188 1 //903Bytes
led.c (UsrSrc\led) line 301 : #if DISPLAY_6PIN_188
Set_AllLed_Input in led.c (UsrSrc\led) : #if DISPLAY_6PIN_188
led.h (UsrInc\led) line 165 : #if DISPLAY_6PIN_188
System_Init in system.c (UsrSrc\system) : #if DISPLAY_6PIN_188
tim1_Interrupt in sys_tim.c (UsrSrc\timer) : #if DISPLAY_6PIN_188
sys_tim.h (UsrInc\timer) line 55 : #if DISPLAY_6PIN_188
userapp.c (UsrSrc\userapp) line 38 : #if DISPLAY_6PIN_188
userapp.c (UsrSrc\userapp) line 58 : #if DISPLAY_6PIN_188
userapp.c (UsrSrc\userapp) line 74 : #if DISPLAY_6PIN_188
UserAPP in userapp.c (UsrSrc\userapp) : #if DISPLAY_6PIN_188
UserAPP in userapp.c (UsrSrc\userapp) : #if DISPLAY_6PIN_188
userapp.h (UsrInc\userapp) line 30 : #if DISPLAY_6PIN_188
vox_module.c (UsrSrc\vox) line 171 : #if DISPLAY_6PIN_188
Vol_Det_Machine in vox_module.c (UsrSrc\vox) : #if DISPLAY_6PIN_188
Vol_Det_Machine in vox_module.c (UsrSrc\vox) : #if DISPLAY_6PIN_188
Vol_Det_Machine in vox_module.c (UsrSrc\vox) : #if DISPLAY_6PIN_188
Vol_Det_Machine in vox_module.c (UsrSrc\vox) : #if DISPLAY_6PIN_188
Vol_Det_Machine in vox_module.c (UsrSrc\vox) : #if DISPLAY_6PIN_188
vox_module.c (UsrSrc\vox) line 334 : #if DISPLAY_6PIN_188
Vor_Det_Machine in vox_module.c (UsrSrc\vox) : #if DISPLAY_6PIN_188
Vor_Det_Machine in vox_module.c (UsrSrc\vox) : #if DISPLAY_6PIN_188
Vor_Det_Machine in vox_module.c (UsrSrc\vox) : #if DISPLAY_6PIN_188
Vor_Det_Machine in vox_module.c (UsrSrc\vox) : #if DISPLAY_6PIN_188
Vor_Det_Machine in vox_module.c (UsrSrc\vox) : #if DISPLAY_6PIN_188

View File

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<SourceInsightBookmarks
AppVer="4.00.0084"
AppVerMinReader="4.00.0009"
>
<Bookmarks/>
</SourceInsightBookmarks>

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,22 @@
<?xml version="1.0" encoding="utf-8"?>
<ProjectSettings
AppVer="4.00.0084"
AppVerMinReader="4.00.0034"
GlobalConfiguration="1"
GlobalWorkspace="0"
LocalsInDb="0"
IndexMembers="1"
IndexFragments="1"
UseMasterFileList="0"
SourceDir="..\"
BackupDir="%PROJECT_DATA_DIR%\Backup"
MasterFileList="%PROJECT_SOURCE_DIR%\%PROJECT_NAME%_filelist.txt"
IsImportProject="0"
>
<Imports>
<ImportedLibs/>
</Imports>
<ParseConditions>
<Defines/>
</ParseConditions>
</ProjectSettings>

Binary file not shown.

View File

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<SourceInsightCodeSnippets
AppVer="4.00.0084"
AppVerMinReader="4.00.0019"
>
<SnippetList/>
</SourceInsightCodeSnippets>

72
Tools/HEXBIN.bat Normal file
View File

@ -0,0 +1,72 @@
:: @File Name: HEXBIN.bat
:: @Version : 1.0
:: @Author : Alex-XU
:: @Creat Date : 2023-03-30
:: @Brief :
:: 在keil中,生成hex、bin文件到 Out 文件夹中.
:: 复制本文件到keil工程文件所在目录下/Project目录下
:: 在keil 魔法棒USER里填写
:: .\Out.bat $K !P @P
:: $K hextobin转换工具位置 !P 工程名 @P 工程目录
:: .\HEXBIN.bat .\Objects\hex2bin_TP.exe mcu \Objects\
::关闭显示
@echo off
::获取时间
set year=%date:~0,4%
set month=%date:~5,2%
set day=%date:~8,2%
set hour=%time:~0,2%
set min=%time:~3,2%
set sec=%time:~6,2%
::创建输出文件夹 Out
if exist .\..\Out (
echo Out file exist
) else (
mkdir .\..\Out
)
::设置hex2bin_TP.exe位置 ,\Objects\hex2bin_TP.exe
set exe_location=%1
::获取工程名 mcu.hex
set project_name=%3
::设置.hex文件所在目录路径\Objects\
set crc_path=%2
::设置.hex文件所在目录路径\Objects\
set obj_path=%4
::设置输出后的文件名
set output_nameTmp=SY883X_EVB_%project_name%_%date:~0,4%_%date:~5,2%_%date:~8,2%_%time:~0,2%%time:~3,2%%time:~6,2%
::如果hour小于10会有空格下面这句话可以除去字符串中的空格并用0代替。
set output_name=%output_nameTmp: =0%
::将bin文件生成到HEXBIN文件夹 >nul屏蔽成功命令 .\Objects\hex2bin_TP.exe .\Objects\mcu.hex .\Objects\bin.bin 3 0
%exe_location% .%obj_path%%project_name%.hex .%obj_path%%output_name%.bin 3 0 >nul
::将hex文件重命名
ren .%obj_path%%project_name%.hex %output_name%.hex >nul
ECHO Add CRC16 At the end of the .bin file
ECHO -------------------------------------
::SET SREC_PATH=D:\Keil_v5\SREC
SET SREC_PATH=..\Tools\SREC
for /f %%i in ('dir /s /b .%obj_path%%output_name%.bin') do (
set indexdx=%%~zi
)
ECHO --- size= %indexdx% Bytes ---
::计算程序CRC16校验和并加在.bin文件最后
ECHO %SREC_PATH%\srec_cat.exe .%obj_path%%output_name%.bin -Binary -crop 0 %indexdx% -CRC16_Big_Endian %indexdx% -XMODEM -o .%obj_path%%output_name%_crc.bin -Binary
%SREC_PATH%\srec_cat.exe .%obj_path%%output_name%.bin -Binary -crop 0 %indexdx% -CRC16_Big_Endian %indexdx% -XMODEM -o .%obj_path%%output_name%_crc.bin -Binary
::获取软件CRC校验和以及版本号
%crc_path% .%obj_path%%output_name%_crc.bin
del /q ..\Out\*.*
::将hex文件复制到HEXBIN文件夹
move .%obj_path%%output_name%.hex .\..\Out >nul
move .%obj_path%%output_name%.bin .\..\Out >nul
::del .%obj_path%%output_name%.hex
::del .%obj_path%%output_name%.bin
del .%obj_path%%output_name%_crc.bin
move .%obj_path%%output_name%_crc(*.bin .\..\Out >nul

Binary file not shown.

BIN
Tools/SREC/libgcrypt-20.dll Normal file

Binary file not shown.

Binary file not shown.

BIN
Tools/SREC/libstdc++-6.dll Normal file

Binary file not shown.

Binary file not shown.

BIN
Tools/SREC/srec_cat.exe Normal file

Binary file not shown.

BIN
Tools/SREC/srec_cmp.exe Normal file

Binary file not shown.

BIN
Tools/SREC/srec_info.exe Normal file

Binary file not shown.

BIN
Tools/bin_crc.exe Normal file

Binary file not shown.

BIN
Tools/hex2bin_TP.exe Normal file

Binary file not shown.

72
UsrDoc/HEXBIN.bat Normal file
View File

@ -0,0 +1,72 @@
:: @File Name: HEXBIN.bat
:: @Version : 1.0
:: @Author : Alex-XU
:: @Creat Date : 2023-03-30
:: @Brief :
:: 在keil中,生成hex、bin文件到 Out 文件夹中.
:: 复制本文件到keil工程文件所在目录下/Project目录下
:: 在keil 魔法棒USER里填写
:: .\Out.bat $K !P @P
:: $K hextobin转换工具位置 !P 工程名 @P 工程目录
:: .\HEXBIN.bat .\Objects\hex2bin_TP.exe mcu \Objects\
::关闭显示
@echo off
::获取时间
set year=%date:~0,4%
set month=%date:~5,2%
set day=%date:~8,2%
set hour=%time:~0,2%
set min=%time:~3,2%
set sec=%time:~6,2%
::创建输出文件夹 Out
if exist .\..\Out (
echo Out file exist
) else (
mkdir .\..\Out
)
::设置hex2bin_TP.exe位置 ,\Objects\hex2bin_TP.exe
set exe_location=%1
::获取工程名 mcu.hex
set project_name=%3
::设置.hex文件所在目录路径\Objects\
set crc_path=%2
::设置.hex文件所在目录路径\Objects\
set obj_path=%4
::设置输出后的文件名
set output_nameTmp=SY883X_EVB_%project_name%_%date:~0,4%_%date:~5,2%_%date:~8,2%_%time:~0,2%%time:~3,2%%time:~6,2%
::如果hour小于10会有空格下面这句话可以除去字符串中的空格并用0代替。
set output_name=%output_nameTmp: =0%
::将bin文件生成到HEXBIN文件夹 >nul屏蔽成功命令 .\Objects\hex2bin_TP.exe .\Objects\mcu.hex .\Objects\bin.bin 3 0
%exe_location% .%obj_path%%project_name%.hex .%obj_path%%output_name%.bin 3 0 >nul
::将hex文件重命名
ren .%obj_path%%project_name%.hex %output_name%.hex >nul
ECHO Add CRC16 At the end of the .bin file
ECHO -------------------------------------
::SET SREC_PATH=D:\Keil_v5\SREC
SET SREC_PATH=..\Tools\SREC
for /f %%i in ('dir /s /b .%obj_path%%output_name%.bin') do (
set indexdx=%%~zi
)
ECHO --- size= %indexdx% Bytes ---
::计算程序CRC16校验和并加在.bin文件最后
ECHO %SREC_PATH%\srec_cat.exe .%obj_path%%output_name%.bin -Binary -crop 0 %indexdx% -CRC16_Big_Endian %indexdx% -XMODEM -o .%obj_path%%output_name%_crc.bin -Binary
%SREC_PATH%\srec_cat.exe .%obj_path%%output_name%.bin -Binary -crop 0 %indexdx% -CRC16_Big_Endian %indexdx% -XMODEM -o .%obj_path%%output_name%_crc.bin -Binary
::获取软件CRC校验和以及版本号
%crc_path% .%obj_path%%output_name%_crc.bin
del /q ..\Out\*.*
::将hex文件复制到HEXBIN文件夹
move .%obj_path%%output_name%.hex .\..\Out >nul
move .%obj_path%%output_name%.bin .\..\Out >nul
::del .%obj_path%%output_name%.hex
::del .%obj_path%%output_name%.bin
del .%obj_path%%output_name%_crc.bin
move .%obj_path%%output_name%_crc(*.bin .\..\Out >nul

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 642 KiB

Binary file not shown.

Binary file not shown.

8
UsrDoc/readme.txt Normal file
View File

@ -0,0 +1,8 @@
工程文件应包含以下全部或部分文件夹:
UsrSrc用户源文件用来存放.c文件和其它源文件。main.c应放在这里
UsrInc用户头文件用来存放.h文件
UsrDoc用户说明文档用来存放用户在开发过程中书协的文档包括软件开发说明、指令说明、版本更改说明等
Src引用库的源文件
Inc应用库的头文件
Lib应用的库文件。
Out编译生成的烧写程序烧录到芯片中的firmware

Binary file not shown.

Binary file not shown.

51
UsrInc/adc/adc.h Normal file
View File

@ -0,0 +1,51 @@
/*
******************************************************************************
*
* @file adc.h
* @brief adc module
*
*
* @version 1.0
* @date 2023/05/12 09:59:40
* @author Alex Xu
*
* Copyright (c) 2013-2099,Tkplusemi Technology Co.,Ltd.
* All Rights Reserved
*
* History:
* Revision Date Author Desc
* 1.0.0 2023/07/12 Alex build this file
******************************************************************************
*/
#ifndef __ADC_H__
#define __ADC_H__
#include "define.h"
#if ADC_ENABLE
#define VREF 1000
extern idata uint16_t Vbat_Adc;
extern uint16_t Vbat_Value(void);
typedef enum {
ADC_CH0 = 0x00,
ADC_CH1,
ADC_CH2,
ADC_CH3,
ADC_CH4,
ADC_BAT,
ADC_VREF,
}ADC_CHANNELS_E;
#if NTC_ENABLE
extern uint16_t ADC_NTC_Value(void);
#endif
#endif
#endif

38
UsrInc/bat/bat.h Normal file
View File

@ -0,0 +1,38 @@
/*
******************************************************************************
*
* @file bat.h
* @brief bat module
*
*
* @version 1.0
* @date 2023/05/12 09:59:40
* @author Alex Xu
*
* Copyright (c) 2013-2099,Tkplusemi Technology Co.,Ltd.
* All Rights Reserved
*
* History:
* Revision Date Author Desc
* 1.0.0 2023/07/12 Alex build this file
******************************************************************************
*/
#ifndef __BAT_H__
#define __BAT_H__
#include "define.h"
extern idata uint8_t bat_level;
extern bit F_batlevel_low; //µç³ØµÍѹ
#if BAT_VALUE
//extern bit F_batlevel_protect; //µÍµç±£»¤
extern void check_bat_level(void);
#endif
#endif

View File

@ -0,0 +1,57 @@
/*
******************************************************************************
*
* @file Charger_module.h
* @brief charger module
*
*
* @version 1.0
* @date 2023/05/12 09:59:40
* @author Alex Xu
*
* Copyright (c) 2013-2099,Tkplusemi Technology Co.,Ltd.
* All Rights Reserved
*
* History:
* Revision Date Author Desc
* 1.0.0 2023/07/12 Alex build this file
******************************************************************************
*/
#ifndef __CHARGER_MODULE_H__
#define __CHARGER_MODULE_H__
#include "define.h"
extern bit Charger_Done;
#if NTC_ENABLE
extern bit NTC_Pro_Flag;
#endif
#if CHARGER_ENABLE
/*充电电流设置在系统初始化时通过配置寄存器REG_CHG1配置。
REG_CHG1 = CHG_CURRENT_300MA;
*/
#define CHG_CURRENT_100MA 0x00
#define CHG_CURRENT_200MA 0x01
#define CHG_CURRENT_250MA 0x02
#define CHG_CURRENT_300MA 0x03
#define CHG_CURRENT_350MA 0x04
#define CHG_CURRENT_400MA 0x05
#define CHG_CURRENT_450MA 0x06
#define CHG_CURRENT_500MA 0x07
#define CHG_CONSTANT_CUR_TIM 1
#define DIE_OT_RECOVER_TIM 25 //NTC保护后恢复正常后等待250ms重新开启充电
extern void Charger_Handler(void);
extern uint8_t PMU_NTC_Control(void);
#endif
#endif

View File

@ -0,0 +1,48 @@
/*
******************************************************************************
*
* @file discharge_module.h
* @brief discharge module
*
*
* @version 1.0
* @date 2023/05/12 09:59:40
* @author Alex Xu
*
* Copyright (c) 2013-2099,Tkplusemi Technology Co.,Ltd.
* All Rights Reserved
*
* History:
* Revision Date Author Desc
* 1.0.0 2023/07/12 Alex build this file
******************************************************************************
*/
#ifndef __DISCHARGE_MODULE_H__
#define __DISCHARGE_MODULE_H__
#include "define.h"
extern bit gBoost_Prepared_Flag; //Boost满足开启条件。
#if DISCHARGE_ENABLE
#define BOOST_OPEN_TIM 10
extern bit gBoost_Opened_Flag; //Boost已正常开启。
#if 0
extern void DisCharge_Boost_Open(void);
extern void DisCharge_Boost_Close(void);
#endif
extern void DisCharge_Handler(void);
#endif
#endif

33
UsrInc/gpio/gpio.h Normal file
View File

@ -0,0 +1,33 @@
/*
******************************************************************************
*
* @file gpio.h
* @brief gpio module
*
*
* @version 1.0
* @date 2023/05/12 09:59:40
* @author Alex Xu
*
* Copyright (c) 2013-2099,Tkplusemi Technology Co.,Ltd.
* All Rights Reserved
*
* History:
* Revision Date Author Desc
* 1.0.0 2023/07/12 Alex build this file
******************************************************************************
*/
#ifndef __GPIO_H__
#define __GPIO_H__
#include "define.h"
//extern void GPIO_Init(void);
//extern void Enter_ShipMode(void);
#endif

45
UsrInc/hall/hall.h Normal file
View File

@ -0,0 +1,45 @@
/*
******************************************************************************
*
* @file hall.h
* @brief hall module
*
*
* @version 1.0
* @date 2023/05/12 09:59:40
* @author Alex Xu
*
* Copyright (c) 2013-2099,Tkplusemi Technology Co.,Ltd.
* All Rights Reserved
*
* History:
* Revision Date Author Desc
* 1.0.0 2023/07/12 Alex build this file
******************************************************************************
*/
#ifndef __HALL_H__
#define __HALL_H__
#include "define.h"
#if HALL_ENABLE
typedef enum{
CLOSE = 0,
OPEN = !CLOSE
} CoverStatus_E;
extern CoverStatus_E CoverStatus;
extern bit CoverEvent_Flg;
extern bit CoverEvent_Flg_led;
extern void Hall_Handler(void);
#endif
#endif

125
UsrInc/inc/config.h Normal file
View File

@ -0,0 +1,125 @@
/*
******************************************************************************
*
* @file Config.h
* @brief Config module
*
*
* @version 1.0
* @date 2023/07/12 09:59:40
* @author Alex Xu
*
* Copyright (c) 2013-2099,Tkplusemi Technology Co.,Ltd.
* All Rights Reserved
*
* History:
* Revision Date Author Desc
* 1.0.0 2023/07/12 Alex build this file
******************************************************************************
*/
#ifndef __CONFIG_H__
#define __CONFIG_H__
#include "define.h"
/******************************************************************************\
Macro definitions
\******************************************************************************/
/*Charger Module Config Para Setting*/
#define BAT_CV 4200 //电池CV电压设置4.20V
#define BAT_PRE 3000 //电池涓流充电电压3.0v
#define BAT_RECHARG 4075 //电池复充电压4200mv - 135mv = 4075mv
#if 1
/*20uA 电流源下接 104K NTC(4250K) 电阻并联一个82K电阻后得到的电压值*/
#define T_N20C 1530 //-20℃(76.5KΩ * 20uA) NTC:1151K
#define T_N15C 1495 //-15℃ 迟滞温度
#define T_N10C 1440 //-10℃(72KΩ * 20uA) NTC:629K
#define T_0C 1334 //-0℃(66.7KΩ * 20uA) NTC:357K
#define T_3C 1300
#define T_8C 1200
#define T_10C 1178 //10℃(58.9KΩ * 20uA) NTC:209.7K
#define T_12C 1100
#define T_42C 580
#define T_45C 546 //45℃(27.3KΩ * 20uA) NTC:40.9K
#define T_47C 500
#define T_57C 370
#define T_60C 350 //60℃(17.5KΩ * 20uA) NTC:22.2K
#define T_75C 250
#define T_80C 188 //80℃(9.4KΩ * 20uA) NTC:10.6K
#else
/*20uA 电流源下接 104K NTC(3950K) 电阻并联一个82K电阻后得到的电压值*/
#define T_N20C 1500 //-20℃(75.5KΩ * 20uA) NTC:953K
#define T_N17C 1488 //-17℃(74.4KΩ * 20uA) NTC:804K
#define T_N15C 1495 //-15℃(73.6KΩ * 20uA) NTC:719K
#define T_N13C 1454 //-13℃(72.7KΩ * 20uA) NTC:644K
#define T_N10C 1420 //-10℃(71KΩ * 20uA) NTC:547K
#define T_0C 1308 //-0℃(65.4KΩ * 20uA) NTC:325K
#define T_3C 1282 //3℃(64.1KΩ * 20uA) NTC:293K
#define T_8C 1192 //8℃(59.6KΩ * 20uA) NTC:218K
#define T_10C 1158 //10℃(57.9KΩ * 20uA) NTC:198K
#define T_12C 1126 //12℃(56.3KΩ * 20uA) NTC:180K
#define T_42C 612 //42℃(30.6KΩ * 20uA) NTC:49K
#define T_45C 568 //45℃(28.4KΩ * 20uA) NTC:43.6K
#define T_47C 538 //47℃(26.9KΩ * 20uA) NTC:40K
#define T_57C 412 //57℃(20.6KΩ * 20uA) NTC:27.6K
#define T_60C 380 //60℃(19KΩ * 20uA) NTC:24.7K
#define T_75C 248 //75℃(12.4KΩ * 20uA) NTC:14.6K
#define T_80C 216 //80℃(10.8KΩ * 20uA) NTC:12.4K
#endif
/*Boost Module Config Para Setting*/
#define OPEN_BOOST_VIN 3600 //Boost 发生uvlo保护后在有VIN条件下Boost再次恢复开启的电压3.6V)。
#define OPEN_BOOST_NOVIN 3300 //Boost 发生uvlo保护后在无VIN条件下Boost再次恢复开启的电压3.3V)。
/*KEY And Hall Module Setting*/
#define HALL_OPEN_LEV_SET 1 //配置是高电平为开盖还是低电平为开盖。1:高电平为开盖0:低电平为开盖
/*Sleep Module Setting*/
/*Enter Sleep Time Debounce*/
#define ENTER_STANDBYMODE_CNT 10 //进入Standby Mode 延迟时间,单位:秒
/******************************************************************************\
Variables definitions
\******************************************************************************/
/******************************************************************************\
UserCfg.Functions definitions
\******************************************************************************/
#endif

130
UsrInc/inc/define.h Normal file
View File

@ -0,0 +1,130 @@
/*
******************************************************************************
*
* @file define.h
* @brief define module
*
*
* @version 1.0
* @date 2023/07/12 09:59:40
* @author Alex Xu
*
* Copyright (c) 2013-2099,Tkplusemi Technology Co.,Ltd.
* All Rights Reserved
*
* History:
* Revision Date Author Desc
* 1.0.0 2023/07/12 Alex build this file
******************************************************************************
*/
#ifndef __DEFINE_H__
#define __DEFINE_H__
#include "config.h"
/*Function Select功能选择宏定义*/
#define TIMER1_ENABLE 1 //Timer1 定时周期1ms or 100us主要用于188数码管显示\呼吸灯。(46Bytes)
#if TIMER1_ENABLE
#define LED_188
#define DISPLAY_5PIN_188 0 //188数码管显示功能,采用Timer11ms定时扫描631Bytes
#define DISPLAY_6PIN_188 1 //903Bytes
#endif
#if TIMER1_ENABLE
//#define BREATHING_LIGHT //呼吸灯功能驱动函数置于Timer1中断处理函数中调用周期100us。(154Bytes)
#endif
#define UART0_ENABLE 0 //UART0功能用于程序调试。(55Bytes)
#define WTG_ENABLE 1 //看门狗功能使能(7Bytes)
//#define LED_DISPLAY //LED显示 (450Bytes)
#define HALL_ENABLE 0 //Hall功能。(Hall 35Bytes)
#define KEY_ENABLE 0 //Key功能(96Bytes)
#define VOX_ENABLE 1 //482Bytes
#define CHARGER_ENABLE 1 //220Bytes
#define DISCHARGE_ENABLE 1 //110Bytes
#define SLEEP_ENABLE 1 //91Bytes
#define ADC_ENABLE 1 //567Bytes
#if ADC_ENABLE
#define NTC_ENABLE 0 //NTC保护功能
#endif
#define BAT_VALUE 1 //147Bytes
//#define _DEBUG_ALL //打开打印功能
#ifdef _DEBUG_ALL
// #define _DEBUG_MAIN
// #define _DEBUG_KEY
// #define _DEBUG_VOX
// #define _DEBUG_HALL
// #define _DEBUG_ADC
// #define _DEBUG_DISCHARGE
// #define _DEBUG_CHARGER
// #define _DEBUG_SLEEP
#define _DEBUG_BAT
//#define TEST_MODE
#include "stdio.h"
#include "string.h"
#endif
#define HIBYTE(v1) ((uint8_t)((v1)>>8)) //v1 is uint16_t
#define LOBYTE(v1) ((uint8_t)((v1)&0xFF))
typedef bit BIT;
typedef unsigned char uint8_t;
typedef unsigned int uint16_t;
typedef unsigned long uint32_t;
typedef unsigned char uint8;
typedef unsigned int uint16;
typedef unsigned long uint32;
typedef signed char int8_t;
typedef signed int int16_t;
typedef signed long int32_t;
typedef signed char int8;
typedef signed int int16;
typedef signed long int32;
typedef signed char s8;
typedef unsigned char u8;
typedef signed short int s16;
typedef unsigned short int u16;
typedef signed long int s32;
typedef unsigned long int u32;
typedef enum{false = 0, true = !false} bool;
#define FALSE false
#define TRUE true
#define ON true
#define OFF false
#include "reg3310.h"
#if UART0_ENABLE
#include "uart.h"
#endif
#endif

277
UsrInc/inc/reg3310.h Normal file
View File

@ -0,0 +1,277 @@
/*---------------------------------------------------------------------
REG3310.H
Header file for TP3310 microcontroller.
Initial Released by zheng, 2023-12-01.
Thinkplus Semiconductor co., ltd, All Rights Reserved!
----------------------------------------------------------------------*/
#ifndef __REG3310_H__ //给客户的头文件名里的所有内部项目编号需改成实际产品编号!!!
#define __REG3310_H__
//------------------------ Ext SFR Registers -------------------------
/*------ GPIO/MFP Registers ------*/
#define P0_PU 0x00
#define P0_PD 0x01
#define P0_OD 0x02
#define P0_DRV 0x03
#define P0_IE 0x05
#define P0_OE 0x06
#define P1_PU 0x07
#define P1_PD 0x08
#define P1_OD 0x09
#define P1_IE 0x0C
#define P1_OE 0x0D
#define MFP_CTL0 0x0E
#define MFP_CTL1 0x0F
#define GPIO_TEST 0x9B
/*----- IRQ Enable Registers ----*/
#define IRQ_EN0 0x14 // Abnormal interrupt enable
#define IRQ_EN1 0x15 // EXTI interrupt enable 0
#define IRQ_EN2 0x16 // EXTI interrupt enable 1
#define IRQ_EN3 0x17 // VOL/R LOADIN/ON interrupt enable
#define IRQ_EN4 0x18 // VOL/R Recharge and IOFF interrupt enable
#define IRQ_EN7 0x1B // KEY/PWM interrupt enable
#define IRQ_EN9 0x1D // Charger interrupt enable
#define IRQ_EN10 0x1E // VBUS/COMP/HALL/STBTMR/ADC_DATA_RDY interrupt enable
/*--- Wakeup Enable Registers ---*/
#define WKUP_EN0 0x21 // BOOST/HALL/KEY/VBUS Wakeup enable
#define WKUP_EN1 0x22 // EXTI and VOL/R Short Wakeup enable
#define WKUP_EN3 0x24 // BAT_LOW/TMR/VOX LOADIN/ON Wakeup enable
/*-------- ADC Registers --------*/
#define ADC_CTL0 0x29
#define ADC00 0x2D
#define ADCCS_CTL0 0x4F
/*---- OTP KEY Registers ----*/
#define OTP_KEY 0x8F
/*------ VOL/R Registers -----*/
#define VOL_IOFF_TRIM 0x69
#define VOX_CON0 0x6A
#define VOX_CON1 0x6B
#define VOX_CON2 0x6C
#define VOR_IOFF_TRIM 0x6D
#define ST_VOX 0x6E
/*------ CHG Registers ------*/
#define REG_CHG0 0x70
#define REG_CHG3 0x9D
#define OTP_CHG0 0x71
#define OTP_CHG1 0x72
/*----- BOOST Registers -----*/
#define BST_CTL0 0x78
#define BST_CTL1 0x79
/*------ PMU Registers ------*/
#define PMU_CTL0 0x80
#define PMU_CTL1 0x81
#define PMU_CTL3 0x83
#define PMU_CTL6 0x86
#define PMU_CTL7 0x87
#define PMU_CTL8 0x88
#define PMU_CTL9 0x89
/*------ CMU Registers ------*/
#define HOSC_CTL 0x8B
/*------ Misc Registers -----*/
#define CHIP_ID 0x8D
#define CHIP_VER 0x8E
//------------------------- SFR Registers ----------------------------
/*--- BYTE Register ---*/
sfr P0 = 0x80;
sfr P1 = 0x90;
sfr P2 = 0xA0;
sfr P3 = 0xB0;
sfr PSW = 0xD0;
sfr ACC = 0xE0;
sfr B = 0xF0;
sfr SP = 0x81;
sfr DPL = 0x82;
sfr DPH = 0x83;
sfr DPL1 = 0x84;
sfr DPH1 = 0x85;
sfr WDTREL = 0x86;
sfr PCON = 0x87;
sfr TCON = 0x88;
sfr TMOD = 0x89;
sfr TL0 = 0x8A;
sfr TL1 = 0x8B;
sfr TH0 = 0x8C;
sfr TH1 = 0x8D;
sfr CKCON = 0x8E;
sfr DPSEL = 0x92;
sfr ASKCTL0 = 0x96;
sfr ASKDATA = 0x97;
sfr S0CON = 0x98;
sfr S0BUF = 0x99;
sfr IEN2 = 0x9A;
sfr S1CON = 0x9B;
sfr S1BUF = 0x9C;
sfr S1RELL = 0x9D;
sfr16 ADC_DAT = 0xA1;
sfr ADC_DATL = 0xA1;
sfr ADC_DATH = 0xA2;
sfr ADC_OFFSET = 0xA3;
sfr ADC_CTL1 = 0xA5;
sfr IEN0 = 0xA8;
sfr IP0 = 0xA9;
sfr S0RELL = 0xAA;
sfr REG_CHG1 = 0xB1;
sfr REG_CHG2 = 0xB2;
sfr CHG_CTL = 0xB3;
sfr BST_EN = 0xB5;
sfr VOX_CTL0 = 0xB7;
sfr IEN1 = 0xB8;
sfr IP1 = 0xB9;
sfr S0RELH = 0xBA;
sfr S1RELH = 0xBB;
sfr IRCON2 = 0xBF;
sfr IRCON = 0xC0;
sfr CCEN = 0xC1;
sfr CCL1 = 0xC2;
sfr CCH1 = 0xC3;
sfr CCL2 = 0xC4;
sfr CCH2 = 0xC5;
sfr CCL3 = 0xC6;
sfr CCH3 = 0xC7;
sfr T2CON = 0xC8;
sfr CRCL = 0xCA;
sfr CRCH = 0xCB;
sfr TL2 = 0xCC;
sfr TH2 = 0xCD;
sfr CLKPRE = 0xD2;
sfr RSTCON = 0xD3;
sfr KEY_CTL = 0xD7;
sfr ADCON = 0xD8;
sfr RST_FLAG = 0xE1;
sfr CHIP_STA0 = 0xE2;
sfr CHIP_STA1 = 0xE3;
sfr CHIP_STA2 = 0xE4;
sfr CHIP_STA3 = 0xE5;
sfr CHIP_STA4 = 0xE6;
sfr IRQ_FLAG0 = 0xE8;
sfr IRQ_FLAG1 = 0xE9;
sfr IRQ_FLAG2 = 0xEA;
sfr IRQ_FLAG3 = 0xEB;
sfr IRQ_FLAG4 = 0xEC;
sfr IRQ_FLAG7 = 0xEF;
sfr IRQ_FLAG9 = 0xF2;
sfr IRQ_FLAG10 = 0xF3;
sfr SRST = 0xF7;
sfr WKUP_FLAG0 = 0xF6;
sfr WKUP_FLAG1 = 0xF8;
sfr WKUP_FLAG3 = 0xFA;
sfr SFRADDR = 0xFE;
sfr SFRDATA = 0xFF;
/*--- BIT Register ---*/
/* PSW */
sbit CY = 0xD7;
sbit AC = 0xD6;
sbit F0 = 0xD5;
sbit RS1 = 0xD4;
sbit RS0 = 0xD3;
sbit OV = 0xD2;
sbit P = 0xD0;
/* TCON */
sbit TF1 = 0x8F;
sbit TR1 = 0x8E;
sbit TF0 = 0x8D;
sbit TR0 = 0x8C;
sbit IE1 = 0x8B;
sbit IT1 = 0x8A;
sbit IE0 = 0x89;
sbit IT0 = 0x88;
/* T2CON */
sbit T2PS = 0xCF;
sbit I3FR = 0xCE;
sbit I2FR = 0xCD;
sbit T2R1 = 0xCC;
sbit T2R0 = 0xCB;
sbit T2CM = 0xCA;
sbit T2I1 = 0xC9;
sbit T2I0 = 0xC8;
/* S0CON */
sbit SM0 = 0x9F;
sbit SM1 = 0x9E;
sbit SM20 = 0x9D;
sbit REN0 = 0x9C;
sbit TB80 = 0x9B;
sbit RB80 = 0x9A;
sbit TI0 = 0x99;
sbit RI0 = 0x98;
/* IEN0 */
sbit EAL = 0xAF;
sbit WDT = 0xAE;
sbit ET2 = 0xAD;
sbit ES0 = 0xAC;
sbit ET1 = 0xAB;
sbit EX1 = 0xAA;
sbit ET0 = 0xA9;
sbit EX0 = 0xA8;
/* IEN1 */
sbit EXEN2 = 0xBF;
sbit SWDT = 0xBE;
sbit EX6 = 0xBD;
sbit EX5 = 0xBC;
sbit EX4 = 0xBB;
sbit EX3 = 0xBA;
sbit EX2 = 0xB9;
sbit EX7 = 0xB8;
/* IRCON */
sbit EXF2 = 0xC7;
sbit TF2 = 0xC6;
sbit IEX6 = 0xC5;
sbit IEX5 = 0xC4;
sbit IEX4 = 0xC3;
sbit IEX3 = 0xC2;
sbit IEX2 = 0xC1;
sbit IADC = 0xC0;
/* ADCON */
sbit BD = 0xDF;
/* P0 */
sbit P00 = P0^0;
sbit P01 = P0^1;
sbit P02 = P0^2;
sbit P03 = P0^3;
sbit P04 = P0^4;
sbit P05 = P0^5;
sbit P06 = P0^6;
sbit P07 = P0^7;
/* P1 */
sbit P10 = P1^0;
#endif

49
UsrInc/key/key.h Normal file
View File

@ -0,0 +1,49 @@
/*
******************************************************************************
*
* @file key.h
* @brief key module
*
*
* @version 1.0
* @date 2023/05/12 09:59:40
* @author Alex Xu
*
* Copyright (c) 2013-2099,Tkplusemi Technology Co.,Ltd.
* All Rights Reserved
*
* History:
* Revision Date Author Desc
* 1.0.0 2023/07/12 Alex build this file
******************************************************************************
*/
#ifndef __KEY_H__
#define __KEY_H__
#include "define.h"
#if KEY_ENABLE
extern bit Key_Press_short_irq;
extern bit Key_Press_l_irq;
extern bit Key_Press_ll_irq;
extern bit Key_l_Flag;
typedef enum {
KEY_EVENT_Empty = 0x00,
KEY_EVENT_SHORT, //Key short press(60ms-1s) interrupt flag
KEY_EVENT_L_2S, //Key long press for 2/3s interrupt flag
KEY_EVENT_LL_8S, //Key super long press for 8s interrupt flag
}KEY_EVENT_E;
extern idata KEY_EVENT_E Event_key;
extern void Key_Handler(void );
#endif
#endif

230
UsrInc/led/led.h Normal file
View File

@ -0,0 +1,230 @@
/*
******************************************************************************
*
* @file led.h
* @brief led dispaly module
*
*
* @version 1.0
* @date 2023/05/12 09:59:40
* @author Alex Xu
*
* Copyright (c) 2013-2099,Tkplusemi Technology Co.,Ltd.
* All Rights Reserved
*
* History:
* Revision Date Author Desc
* 1.0.0 2023/07/12 Alex build this file
******************************************************************************
*/
#ifndef __LED_H__
#define __LED_H__
#include "define.h"
#ifdef LED_DISPLAY
#ifdef _DEBUG_LED
#define _DEBUG_LED_1
#define _DEBUG_LED_2
#endif
/******************************************************************************\
Macro definitions
\******************************************************************************/
sbit pin_LED_1 = P0^2;
sbit pin_LED_2 = P0^3;
sbit pin_LED_3 = P0^4;
#if 0
#define LED_1_CONFIG() do{ SFRADDR = P0_DRV; SFRDATA |= 0x03;SFRADDR = MFP_CTL0; SFRDATA &= 0xCF;}while(0) //P02
#define LED_2_CONFIG() do{ SFRADDR = P0_DRV; SFRDATA |= 0x08;SFRADDR = MFP_CTL0; SFRDATA &= 0x3F;}while(0) //P03
#define LED_3_CONFIG() do{ SFRADDR = P0_DRV; SFRDATA |= 0x20;SFRADDR = MFP_CTL1; SFRDATA &= 0xFC;}while(0) //P04
#endif
// LED端口定义
#define LEDR_ON() pin_LED_2 = 1 //LED_1_ON() p03
#define LEDR_OFF() pin_LED_2 = 0 //LED_1_OFF()
#define LEDR_TOG() pin_LED_2 = !pin_LED_2 //LED_1_RUN()
#define LEDG_ON() pin_LED_1 = 1 //LED_2_ON() p02
#define LEDG_OFF() pin_LED_1 = 0 //LED_2_OFF()
#define LEDG_TOG() pin_LED_1 = !pin_LED_1 //LED_2_RUN()
#define LEDY_ON() pin_LED_3 = 1 //LED_3_ON() p04
#define LEDY_OFF() pin_LED_3 = 0 //LED_3_OFF()
#define LEDY_TOG() pin_LED_3 = !pin_LED_3 //LED_3_RUN()
#define LED_PLUS_TIME 1 //LED闪烁最小时间周期单位ms
/******************************************************************************\
Typedef definitions
\******************************************************************************/
//LED名称重定义顺序和上方的宏定义保持一致
enum LED_ID
{
LED_R,
LED_G,
LED_Y,
// LED_B,
LED_ID_MAX
};
//LED工作状态
enum LED_STATE
{
LED_OFF,
LED_ON,
LED_FLASH,
// LED_KEEP_FLASHING,
LED_BREATHING_LIGHT
};
//LED控制结构体
typedef struct{
uint8_t State[LED_ID_MAX];//LED 的工作状态
uint8_t Flash_Duty[LED_ID_MAX];//LED占空比即点亮时间
uint8_t Flash_Period[LED_ID_MAX];//LED周期
uint8_t Flash_Times[LED_ID_MAX];//闪烁次数
uint8_t Timer[LED_ID_MAX];//时间计数 1ms计数一次
}TS_LED_INFO;
extern volatile uint8_t Display_RSta; // 显示状态
extern volatile uint8_t Display_GSta; // 显示状态
extern volatile uint8_t Display_YSta; // 显示状态
/******************************************************************************\
Global variables and functions
\******************************************************************************/
/*
* : LED_Init
* : LED初始化
* : NONE
* : NONE
*/
/******************************************************************************/
//extern void LED_Init(void);
/******************************************************************************/
/*
* : LED_Clr
* : LED
* : NONE
* : NONE
*/
/******************************************************************************/
extern void LED_Drv(void);
/******************************************************************************/
/*
* : LED_Set
* : LED工作方式设置
* : State / Period:(ms) / Times:
* : NONE
*/
/******************************************************************************/
extern void LED_Set(uint8_t LedId,uint8_t State,uint8_t Period,uint8_t Times);
/******************************************************************************/
// 外部操作接口;Fre:闪烁周期ms;n:闪烁次数
#define LED_R_ON() LED_Set(LED_R, LED_ON, 0,0)
#define LED_R_OFF() LED_Set(LED_R, LED_OFF, 0,0)
#define LED_R_FLASH(Fre,n) LED_Set(LED_R, LED_FLASH, Fre,n)
#define LED_R_KEEP_FLASHING(Fre) LED_Set(LED_R, LED_FLASH, Fre,0xff)
#define LED_G_ON() LED_Set(LED_G, LED_ON, 0,0)
#define LED_G_OFF() LED_Set(LED_G, LED_OFF, 0,0)
#define LED_G_FLASH(Fre,n) LED_Set(LED_G, LED_FLASH, Fre,n)
#define LED_G_KEEP_FLASHING(Fre) LED_Set(LED_G, LED_FLASH, Fre,0xff)
#define LED_Y_ON() LED_Set(LED_Y, LED_ON, 0,0)
#define LED_Y_OFF() LED_Set(LED_Y, LED_OFF, 0,0)
#define LED_Y_FLASH(Fre,n) LED_Set(LED_Y, LED_FLASH, Fre,n)
#define LED_Y_KEEP_FLASHING(Fre) LED_Set(LED_Y, LED_FLASH, Fre,0xff)
#ifdef BREATHING_LIGHT
extern bit Breathing_Light_On;
/*
* : LED_Breathing_Light
* : LED呼吸灯驱动100us时间片中
* : NONE
* : NONE
*/
/******************************************************************************/
extern void LED_Breathing_Light(void);
/******************************************************************************/
#endif
#endif
#if DISPLAY_6PIN_188
extern uint8_t g_188_Num;
extern uint8_t Display_Ram_Tab[25];
extern void Display_Scan_6Pin_188(void);
extern void Display_Show_Num(uint8_t num);
extern void Display_Show_Vor(uint8_t earR_bat);
extern void Display_Show_Vol(uint8_t earL_bat);
//extern void Set_AllLed_Down(void);
extern void Set_NumLED_Down(void);
extern void Set_AllLed_Input(void);
#if 1
#define PIN0_IN() do{SFRADDR = P0_OE;SFRDATA &= 0xDF;SFRADDR = P0_IE;SFRDATA |= 0x20;}while(0) //Set P05 Input Enable.
#define PIN0_L() do{SFRADDR = P0_OE;SFRDATA |= 0x20;P05 = 0;}while(0) //Set P05 output low Enable.
#define PIN0_H() do{SFRADDR = P0_OE;SFRDATA |= 0x20;P05 = 1;}while(0) //Set P05 output high Enable.
#else
#define PIN0_IN() do{SFRADDR = P1_OE;SFRDATA &= 0xFE;SFRADDR = P1_IE;SFRDATA |= 0x01;}while(0) //Set P10 Input Enable.
#define PIN0_L() do{SFRADDR = P1_OE;SFRDATA |= 0x01;P10 = 0;}while(0) //Set P10 output low Enable.
#define PIN0_H() do{SFRADDR = P1_OE;SFRDATA |= 0x01;P10 = 1;}while(0) //Set P10 output high Enable.
#endif
#endif
#ifdef LED_188
#define PIN5_IN() do{SFRADDR = P0_OE;SFRDATA &= 0xFE;SFRADDR = P0_IE;SFRDATA |= 0x01;}while(0) //Set P00 Input Enable.设置输入功能前,需先关闭输出功能。
#define PIN4_IN() do{SFRADDR = P0_OE;SFRDATA &= 0xFD;SFRADDR = P0_IE;SFRDATA |= 0x02;}while(0) //Set P01 Input Enable.
#define PIN3_IN() do{SFRADDR = P0_OE;SFRDATA &= 0xFB;SFRADDR = P0_IE;SFRDATA |= 0x04;}while(0) //Set P02 Input Enable.
#define PIN2_IN() do{SFRADDR = P0_OE;SFRDATA &= 0xF7;SFRADDR = P0_IE;SFRDATA |= 0x08;}while(0) //Set P03 Input Enable.
#define PIN1_IN() do{SFRADDR = P0_OE;SFRDATA &= 0xEF;SFRADDR = P0_IE;SFRDATA |= 0x10;}while(0) //Set P04 Input Enable.
#define PIN5_L() do{SFRADDR = P0_OE;SFRDATA |= 0x01;P00 = 0;}while(0) //Set P00 output low Enable.
#define PIN4_L() do{SFRADDR = P0_OE;SFRDATA |= 0x02;P01 = 0;}while(0) //Set P01 output low Enable.
#define PIN3_L() do{SFRADDR = P0_OE;SFRDATA |= 0x04;P02 = 0;}while(0) //Set P02 output low Enable.
#define PIN2_L() do{SFRADDR = P0_OE;SFRDATA |= 0x08;P03 = 0;}while(0) //Set P03 output low Enable.
#define PIN1_L() do{SFRADDR = P0_OE;SFRDATA |= 0x10;P04 = 0;}while(0) //Set P04 output low Enable.
#define PIN5_H() do{SFRADDR = P0_OE;SFRDATA |= 0x01;P00 = 1;}while(0) //Set P00 output high Enable.
#define PIN4_H() do{SFRADDR = P0_OE;SFRDATA |= 0x02;P01 = 1;}while(0) //Set P01 output high Enable.
#define PIN3_H() do{SFRADDR = P0_OE;SFRDATA |= 0x04;P02 = 1;}while(0) //Set P02 output high Enable.
#define PIN2_H() do{SFRADDR = P0_OE;SFRDATA |= 0x08;P03 = 1;}while(0) //Set P03 output high Enable.
#define PIN1_H() do{SFRADDR = P0_OE;SFRDATA |= 0x10;P04 = 1;}while(0) //Set P04 output high Enable.
extern void Set_AllLed_Down(void);
#endif
#if DISPLAY_5PIN_188
extern uint8_t g_188_Num;
extern void LED_188_Init(void);
extern void LED_188_Drive(uint8_t Num);
#endif
#endif

35
UsrInc/sleep/sleep.h Normal file
View File

@ -0,0 +1,35 @@
/*
******************************************************************************
*
* @file sleep.h
* @brief sleep module
*
*
* @version 1.0
* @date 2023/07/12 09:59:40
* @author Alex Xu
*
* Copyright (c) 2013-2099,Tkplusemi Technology Co.,Ltd.
* All Rights Reserved
*
* History:
* Revision Date Author Desc
* 1.0.0 2023/07/12 Alex build this file
******************************************************************************
*/
#ifndef __SLEEP_H__
#define __SLEEP_H__
#include "define.h"
#if SLEEP_ENABLE
extern uint8_t Decnt_SleepDelay;
extern bit Enter_Sleep_Cnt_Restart_Flag;
extern bool Check_Require_Sleep(void);
#endif
#endif

40
UsrInc/system/system.h Normal file
View File

@ -0,0 +1,40 @@
/*
******************************************************************************
*
* @file system.h
* @brief system module
*
*
* @version 1.0
* @date 2023/05/12 09:59:40
* @author Alex Xu
*
* Copyright (c) 2013-2099,Tkplusemi Technology Co.,Ltd.
* All Rights Reserved
*
* History:
* Revision Date Author Desc
* 1.0.0 2023/07/12 Alex build this file
******************************************************************************
*/
#ifndef __SYSTEM_H__
#define __SYSTEM_H__
#include "define.h"
/*中断号计算方式:中断向量 = 中断号 * 8 + 3*/
#define Interrupt_Vector_IE0 0 //0x03,TP3310 IE0 use for wakeup
#define Interrupt_Vector_TF0 1 //0x0B,Timer 0 Overflow
#define Interrupt_Vector_TF1 3 //0x1B,Timer 1 Overflow
#define Interrupt_Vector_RI_TI 4 //0x23,Serial Port0 Interrupt
#define Interrupt_Vector_IE7 8 //0x43,Charger Interrupt
#define Interrupt_Vector_IE2 9 //0x4B,External Interrupr 2/VOX Interrupt
#define Interrupt_Vector_IE3 10 //0x53,External Interrupr 3/系统异常中断、电源插拔中断
#define Interrupt_Vector_IE4 11 //0x5B,External Interrupr 4/key和Hall中断
#define Interrupt_Vector_IE5 12 //0x63,NA
#define Interrupt_Vector_IE6 13 //0x6B,ADC中断
extern void System_Init(void);
#endif

66
UsrInc/timer/sys_tim.h Normal file
View File

@ -0,0 +1,66 @@
/*
******************************************************************************
*
* @file sys_tim.h
* @brief system timer module
*
*
* @version 1.0
* @date 2023/05/12 09:59:40
* @author Alex Xu
*
* Copyright (c) 2013-2099,Tkplusemi Technology Co.,Ltd.
* All Rights Reserved
*
* History:
* Revision Date Author Desc
* 1.0.0 2023/07/12 Alex build this file
******************************************************************************
*/
#ifndef __sys_tim_H__
#define __sys_tim_H__
#include "define.h"
//#define FOSC 11059200L
#define T1MS 1000
#define T100uS 100
#define T500uS 500
#define T10MS 10000 //FOSC/12/100
#define T10MS_DEBOUNCE_1S 100 //10msÖÜÆÚ¶¨Ê±1s
#define C_TIM0_Reload (65535 - T1MS) //1ms (65535 - N) * 1/FOSC = Time -> (65535 - N) * 1/11.0592M = 1ms -> 65535 - N = 11059.2 -> N = 65535 - 11059.2
//extern void Sys_Tim0_Init(void );
#if TIMER1_ENABLE
#ifdef BREATHING_LIGHT
#define C_TIM1_Reload (65535 - T100uS) //100us ÓÃÓÚºôÎüµÆ
#else
#define C_TIM1_Reload (65535 - T500uS) //1ms
#endif
extern bit F_sys_tim1_tick;
extern void Sys_Tim1_Init(void );
#endif
extern bit F_sys_tim_5ms;
#ifdef LED_DISPLAY
extern bit F_sys_tim_10ms;
#endif
#if DISPLAY_6PIN_188
extern bit F_sys_tim_500ms;
#endif
extern bit F_sys_tim_250ms;
extern bit F_sys_tim_100ms;
extern bit F_sys_tim_1s;
extern void Sys_Tim_Handler(void );
extern void Delay200ms(void);
#endif

50
UsrInc/uart/uart.h Normal file
View File

@ -0,0 +1,50 @@
/*
******************************************************************************
*
* @file uart.h
* @brief uart module
*
*
* @version 1.0
* @date 2023/05/12 09:59:40
* @author Alex Xu
*
* Copyright (c) 2013-2099,Tkplusemi Technology Co.,Ltd.
* All Rights Reserved
*
* History:
* Revision Date Author Desc
* 1.0.0 2023/07/12 Alex build this file
******************************************************************************
*/
#ifndef __UART_H__
#define __UART_H__
#include "define.h"
#define Baud_Rate0 115200//9600//19200//38400//93750
#define S0REL_VALUE (1024-375000/Baud_Rate0)
#define COM0_Data_Lenth 7
#ifdef _DEBUG_ALL
extern char putchar (char ch);
#endif
#if UART0_ENABLE
#ifdef VOX_RX
extern idata uint8_t RX0_Buffer[COM0_Data_Lenth]; //?¨®¨º??o3?
extern bit Uart0_RX_Finish_Flag;
#endif
extern void Uart0SendPacket(uint8_t Length,uint8_t *TransBuf);
#endif
#endif

47
UsrInc/userapp/userapp.h Normal file
View File

@ -0,0 +1,47 @@
/*
******************************************************************************
*
* @file userapp.h
* @brief userapp module
*
*
* @version 1.0
* @date 2023/05/12 09:59:40
* @author Alex Xu
*
* Copyright (c) 2013-2099,Tkplusemi Technology Co.,Ltd.
* All Rights Reserved
*
* History:
* Revision Date Author Desc
* 1.0.0 2023/07/12 Alex build this file
******************************************************************************
*/
#ifndef __USERAPP_H__
#define __USERAPP_H__
#include "define.h"
#define BAT_LEVEL_LOW 20 //电池电量低报警值
extern uint8_t LED_On_Timer; //led亮时间计时
#if DISPLAY_6PIN_188
extern bit Vor_GetInto_Box_Flag; //耳机入盒标志位
extern bit Vol_GetInto_Box_Flag;
extern bit Vor_GetOut_Box_Flag; //耳机出盒标志位
extern bit Vol_GetOut_Box_Flag;
extern uint8_t Disp_Vor_Lev;
extern uint8_t Disp_Vol_Lev;
extern bit CHG_LED_Disp_Flag;
#endif
extern void UserAPP(void);
#endif

102
UsrInc/vox/vox_module.h Normal file
View File

@ -0,0 +1,102 @@
/*
******************************************************************************
*
* @file VOX_Module.h
* @brief VOL/R module
*
*
* @version 1.0
* @date 2022/07/18 09:59:40
* @author Alex Xu
*
* Copyright (c) 2013-2099,Tkplusemi Technology Co.,Ltd.
* All Rights Reserved
*
* History:
* Revision Date Author Desc
* 1.0.0 2022/07/18 Alex build this file
******************************************************************************
*/
#ifndef __VOX_MODULE_H__
#define __VOX_MODULE_H__
#include "define.h"
sbit COM_CTRL = P1^0;
extern bit Vor_Vout_Enable; //Vor功率输出标志位
extern bit Vol_Vout_Enable; //Vol功率输出标志位;
extern bit Vor_Chg_Flag; //耳机出入盒标志位
extern bit Vol_Chg_Flag;
#if VOX_ENABLE
/******************************************************************************\
Macro definitions
\******************************************************************************/
/*
VOX过流档位设置(Vox_init())VOX_CON0
SFRADDR = VOX_CON0; //设置VOX输出500mA负载识别电流2.5uA。
SFRDATA &= 0xE0;
SFRDATA |= (VOX_IOUT_500MA << 3) | VOX_ADT_Cur_2_5UA;
*/
#define VOX_IOUT_200MA 0x00
#define VOX_IOUT_300MA 0x01
#define VOX_IOUT_400MA 0x02
#define VOX_IOUT_500MA 0x03
#define VOX_ADT_Cur_0_5UA 0x00
#define VOX_ADT_Cur_1_5UA 0x01
#define VOX_ADT_Cur_2_5UA 0x02
#define VOX_ADT_Cur_3_5UA 0x03
#define VOX_ADT_Cur_4_5UA 0x04
#define VOX_ADT_Cur_5_5UA 0x05
#define VOX_ADT_Cur_6_5UA 0x06
#define VOX_ADT_Cur_7_5UA 0x07
/******************************************************************************\
Variables definitions
\******************************************************************************/
/* VOL Enable Type */
typedef enum {
VOX_VOUT_Mode = 0x00, //VOx 5V 输出使能
VOX_ADT_Mode, //VOx 负载接入、存在识别功能使能,负载自动识别
} VOX_Enable_Mode_e;
typedef enum {
VOX_GET_INTO_BOX = 0, //耳机入仓
VOX_STAY_IN_BOX, //耳机在仓
//VOX_GET_OUTPUT_BOX, //耳机出仓
VOX_NONE_IN_BOX, //空仓
}Vox_State_e;
extern Vox_State_e Vol_State;
extern Vox_State_e Vor_State;
/******************************************************************************\
UserCfg.Functions definitions
\******************************************************************************/
extern void Vox_init(void);
extern void VOL_EN_Type(VOX_Enable_Mode_e VOL_Enable_Mode);
extern void VOR_EN_Type(VOX_Enable_Mode_e VOL_Enable_Mode);
extern void Vol_Det_Machine(void);
extern void Vor_Det_Machine(void);
#endif
#endif

View File

@ -0,0 +1,51 @@
/*
******************************************************************************
*
* @file watchdog.h
* @brief watchdog module
*
*
* @version 1.0
* @date 2023/05/12 09:59:40
* @author Alex Xu
*
* Copyright (c) 2013-2099,Tkplusemi Technology Co.,Ltd.
* All Rights Reserved
*
* History:
* Revision Date Author Desc
* 1.0.0 2023/07/12 Alex build this file
******************************************************************************
*/
#ifndef __WATCHDOG_H__
#define __WATCHDOG_H__
#include "define.h"
#if 0
/******************************************************************************\
Macro definitions
\******************************************************************************/
#define _WDT_TIME_65ms_ 0
#define _WDT_TIME_1s_ 1
/******************************************************************************\
Variables definitions
\******************************************************************************/
/******************************************************************************\
UserCfg.Functions definitions
\******************************************************************************/
extern void Watchdog_Clear(void);
extern void Watchdog_Init(uint8_t watchdog_time );
#endif
#endif

39
UsrSrc/InitVars.c Normal file
View File

@ -0,0 +1,39 @@
/*
******************************************************************************
*
* @file adc.c
* @brief adc module
* @ic TP3102
*
* @version 1.0
* @date 2024/07/03 15:00:40
* @author Alex Xu
*
* Copyright (c) 2013-2099,Tkplusemi Technology Co.,Ltd.
* All Rights Reserved
*
* History:
* Revision Date Author Desc
* 1.0.0 2024/07/03 Alex build this file
******************************************************************************/
/*_____ I N C L U D E S ____________________________________________________*/
#include "define.h"
/******************************************************************************\
Macro definitions
\******************************************************************************/
/*程序版本第一个数代表在硬件存在改动不能兼容之前版本时加1
1
*/
#define FW_VER0 0x01 //程序版本0:代表在硬件存在改动不能兼容之前版本时加1
#define FW_VER1 0x01 //程序版本1:代表在功能存在改动时加1
#define FW_VER2 0x01 //程序版本2:代表在软件调试出现不同的测试版本时改动时加1
/******************************************************************************\
Variables definitions
\******************************************************************************/
char code Version_Addr[3] = {FW_VER0,FW_VER1,FW_VER2}; //设置ROM绝对地址存放软版本两个参数存于ROM的3070、3071、3072位置处小端模式存储。

178
UsrSrc/adc/adc.c Normal file
View File

@ -0,0 +1,178 @@
/*
******************************************************************************
*
* @file adc.c
* @brief adc module
* @ic TP3102
*
* @version 1.0
* @date 2024/03/26 15:00:40
* @author Alex Xu
*
* Copyright (c) 2013-2099,Tkplusemi Technology Co.,Ltd.
* All Rights Reserved
*
* History:
* Revision Date Author Desc
* 1.0.0 2022/08/04 Alex build this file
******************************************************************************/
/*_____ I N C L U D E S ____________________________________________________*/
#include "adc.h"
#include "system.h"
#include "sys_tim.h"
#if ADC_ENABLE
/******************************************************************************\
Macro definitions
\******************************************************************************/
/******************************************************************************\
Variables definitions
\******************************************************************************/
idata uint16_t Vbat_Adc = 0;
/******************************************************************************\
Functions definitions
\******************************************************************************/
/*
*******************************************************************************
* uint16_t ADC_Chn_Data(ADC_CHANNELS_E adc_chn)
*
* Description : ADC值
*
* Arguments : NONE
* Returns : adc Value (mV)
* Notes : NONE
*
*******************************************************************************
*/
uint16_t ADC_Chn_Data(ADC_CHANNELS_E adc_chn)
{
uint8_t index = 0;
uint16_t adc_data = 0;
uint16_t adc_plus_data = 0;
SFRADDR = ADC_CTL0;
SFRDATA = 0x8B; //0x8B--ADC EN; Single mode; ADC CLK divided by 24=460k
for(index=0; index<8; index++)
{
ADC_CTL1 = (adc_chn << 4) | 0x01; //Channel set and Start conversion
while(ADC_CTL1 & 0x01); //Wait for conversion complete
adc_data = ADC_DATL; //Read low byte first! Lock ADC Value.
adc_data |= (uint16_t)(ADC_DATH << 8);
adc_plus_data += adc_data;
#ifdef _DEBUG_ADC
printf("adc4:%d,plus:%d.\r\n",(uint16_t)adc_data,(uint16_t)adc_plus_data);
#endif
// adc_data = 0;
}
adc_data = adc_plus_data >> 3;
#ifdef _DEBUG_ADC
printf("adc_chn1:%d.\r\n",(uint16_t)adc_data);
#endif
#ifdef _DEBUG_ADC
printf("Adc,Vadc:%d,Vref:%d.\r\n", (uint16_t)adc_data, (uint16_t)adc_plus_data);
#endif
return adc_data;
}
/*
*******************************************************************************
* uint16_t Vbat_Value(void)
*
* Description : Vbat Value.
*
* Arguments : NONE
* Returns : Vbat Value (mV)
* Notes : NONE
*
*******************************************************************************
*/
uint16_t Vbat_Value(void)
{
uint16_t n_Vbat_Data = 0;
//uint16_t n_ADC_Plus = 0;
n_Vbat_Data = ADC_Chn_Data(ADC_BAT);
#ifdef _DEBUG_ADC
printf("bat_Vbat1:%d.\r\n",(uint16_t)n_Vbat_Data);
#endif
// n_ADC_Plus = ADC_Chn_Data(ADC_VREF); //获取VREF
n_Vbat_Data = (uint32_t)(n_Vbat_Data) * VREF * 2 / ADC_Chn_Data(ADC_VREF); //Vadx = VREF*DATAadx/DATAvref
#ifdef _DEBUG_ADC
printf("bat,Vbat:%d.\r\n",(uint16_t)n_Vbat_Data);
#endif
return n_Vbat_Data;
}
#if NTC_ENABLE
/*
*******************************************************************************
* uint16_t ADC_NTC_Value(void)
*
* Description : NTC采样电压
* Arguments : NONE
* Returns : ADC Value (mV)
* Notes : NONE
*
*******************************************************************************
*/
uint16_t ADC_NTC_Value(void)
{
uint16_t adc_data = 0;
SFRADDR = MFP_CTL1; //Set P07 Pinmux As AD4 Function
SFRDATA |= 0x80;
adc_data = ADC_Chn_Data(ADC_CH4);
#ifdef _DEBUG_ADC
printf("adc_chn1:%d.\r\n",(uint16_t)adc_data);
#endif
// adc_plus_data = ADC_Chn_Data(ADC_VREF); //获取VREF
adc_data = (uint32_t)(adc_data) * VREF / ADC_Chn_Data(ADC_VREF); //Vadx = VREF*DATAadx/DATAvref
#ifdef _DEBUG_ADC
printf("Adc,Vadc:%d.\r\n", (uint16_t)adc_data);
#endif
SFRADDR = MFP_CTL1; //Set P07 Pinmux As AD4 Function
SFRDATA &= ~0x80;
return adc_data;
}
#endif
#endif

149
UsrSrc/bat/bat.c Normal file
View File

@ -0,0 +1,149 @@
/*
******************************************************************************
*
* @file bat.c
* @brief Voltage-based RC model gauge algorithm
*
*
* @version 1.0
* @date 2023/02/20 17:35:40
* @author Alex Xu
*
* Copyright (c) 2013-2099,Tkplusemi Technology Co.,Ltd.
* All Rights Reserved
*
* History:
* Revision Date Author Desc
* 1.0.0 2023/02/20 Alex build this file
******************************************************************************
*/
#include "bat.h"
#include "adc.h"
#include "userapp.h"
idata uint8_t bat_level = 0;
bit F_batlevel_low = 0; //电池低压
#if BAT_VALUE
#define C_offset_bat_level_MAX 90
#define C_offset_bat_level_MIN 10
#define C_bat_level_protect 0
#define C_bat_level_lowpower 1
//bit F_batlevel_protect = 0; //低电保护
idata uint8_t offset_bat_level = ( C_offset_bat_level_MAX + C_offset_bat_level_MIN ) / 2;
#define C_batLevel_SetMax 10
/*充电电池电压会浮高,具体电压需要测试。*/
const uint16_t Boost_batlevel_Threshold[C_batLevel_SetMax] =
{
3450, //1
3650, //2
3700, //3
3745, //4
3785, //5
3850, //6
3935, //7
3900, //8
4050, //9
4200 //10
};
#if 0
const uint16_t Charging_batlevel_Threshold1[C_batLevel_SetMax] =
{
3050, //1
3150, //2
3350, //3
3450, //4
3550, //5
3700, //6
3850, //7
3950, //8
4100, //9
4200 //10
};
#endif
void check_bat_level(void)
{
uint8_t i = 0;
//get bat level
#if ADC_ENABLE
for(i=0; i < C_batLevel_SetMax; i++)
{
#if 1
if( Vbat_Adc < Boost_batlevel_Threshold[i] )
{
break;
}
#else
if(CHIP_STA4 & 0x80) //充电
{
if( Vbat_Adc < Boost_batlevel_Threshold[i] + 50 )
break;
}
else //放电
{
if( Vbat_Adc < Boost_batlevel_Threshold[i] )
{
break;
}
}
#endif
}
#endif
/*系统重启后,快速采集电量*/
if( RST_FLAG )
{
RST_FLAG = 0;
bat_level = i;
/*初始化显示电量*/
#if DISPLAY_6PIN_188
CHG_LED_Disp_Flag = 1;
#endif
}
if( i > bat_level )
{
offset_bat_level++;
}
else
{
offset_bat_level--;
}
//debounce
if( (offset_bat_level > C_offset_bat_level_MAX) || (offset_bat_level < C_offset_bat_level_MIN) )
{
//update
bat_level = i;
offset_bat_level = ( C_offset_bat_level_MAX + C_offset_bat_level_MIN ) / 2;
}
#if 0
if( bat_level <= C_bat_level_protect )
{
F_batlevel_protect = 1;
}
else if( bat_level > ( C_bat_level_protect + 1 ) )
{
F_batlevel_protect = 0;
}
#endif
if( bat_level <= C_bat_level_lowpower )
{
F_batlevel_low = 1;
}
else if( bat_level > (C_bat_level_lowpower + 1) )
{
F_batlevel_low = 0;
}
}
#endif

View File

@ -0,0 +1,321 @@
/*
******************************************************************************
*
* @file charger_module.c
* @brief charger module
*
*
* @version 1.0
* @date 2022/07/12 17:35:40
* @author Alex Xu
*
* Copyright (c) 2013-2099,Tkplusemi Technology Co.,Ltd.
* All Rights Reserved
*
* History:
* Revision Date Author Desc
* 1.0.0 2022/07/12 Alex build this file
******************************************************************************
*/
/*_____ I N C L U D E S ____________________________________________________*/
#include "charger_module.h"
#include "adc.h"
#include "sys_tim.h"
#include "discharge_module.h"
#include "system.h"
#include "vox_module.h"
#include "led.h"
#include "userapp.h"
bit Charger_Done = 0;
#if NTC_ENABLE
bit NTC_Pro_Flag = 0;
#endif
#if CHARGER_ENABLE
/******************************************************************************\
Macro definitions
\******************************************************************************/
#define NTC_PRO_DEBOUNCE_TIM 10
/******************************************************************************\
Variables definitions
\******************************************************************************/
//idata TE_CHG_STA ChgStatus; // 系统状态定义
//bit NTC_Low_Pro_Flag = 0;
//bit NTC_High_Pro_Flag = 0;
/******************************************************************************\
Functions definitions
\******************************************************************************/
/*
*******************************************************************************
* void Charger_init(void)
*
* Description : Charger Initialization
*
* Arguments : NONE
* Returns : NONE
* Notes : NONE
*
*******************************************************************************
*/
#if 0
void Charger_Init(void)
{
SFRADDR = PMU_CTL1;
SFRDATA |= 0x07; //电池低压检测 enable 信号电池低压检测档位选择3.3V
/* Setting CV */
REG_CHG2 = 0x00; //0:4.20V;1:4.35V
/* Setting CHG Current */
REG_CHG1 = 0x03; //000:100mA;001:200mA;010:250mA;011:300mA;100:350mA;101:400mA;110:450mA;111:500mA
}
#endif
/*
*******************************************************************************
* void Charger_Current_Set(void)
*
* Description : Charger Initialization
*
* Arguments : NONE
* Returns : NONE
* Notes : NONE
*
*******************************************************************************
*/
#if 0
void Charger_Current_Set(void)
{
uint16_t Charger_CurADC_Value = 0;
/* 通过外部电阻ADC1值设置充电电流值 */
Charger_CurADC_Value = ADC_Chn_Value(ADC_CH1);
/* Setting CV */
REG_CHG2 = 0x00; //0:4.20V;1:4.35V
/* Setting CHG Current */
REG_CHG1 = 0x03; //000:100mA;001:200mA;010:250mA;011:300mA;100:350mA;101:400mA;110:450mA;111:500mA
}
#endif
#if NTC_ENABLE
/*
*******************************************************************************
* uint8_t Charger_NTC_Control(uint8_t Charge_sta)
*
* Description : Charger NTC Control
* NTC 103 104 NTC ADC NTC
* 线 103 NTC 8.2k
* 20uA 103 NTC 10k 104 NTC 82k
* 使NTC NTC NTC
* NTC 0VNTC
* 250ms
*
* Arguments : NTC_Protect_Type_e NTC_Type:Shield JEITA or IEC;Charge_sta:Charge or not
* Returns :NTC_Flag (0:Shield; 1:JEITA; 2:IEC)
* Notes : NONE
*
*******************************************************************************
*/
uint8_t PMU_NTC_Control(void)
{
uint16_t NTC_Adc = 0;
uint8_t NTC_Flag = TRUE;
static bit NTC_Low_Pro_Flag;
static bit NTC_High_Pro_Flag;
#if ADC_ENABLE
NTC_Adc = ADC_NTC_Value();
#endif
if(NTC_Adc >= 3700) ////屏蔽NTC功能NTC浮空屏蔽 NTC 功能,并锁定。
{
return TRUE;
}
// if(CHIP_STA4 & 0x80)
{
if(NTC_Adc <= T_0C && NTC_Adc > T_45C) //正常充电
{
if(NTC_Low_Pro_Flag)
{
if( NTC_Adc < T_3C )
{
NTC_Low_Pro_Flag = 0;
NTC_Flag = TRUE;
}
else
{
NTC_Flag = FALSE;
}
}
if(NTC_High_Pro_Flag)
{
if( NTC_Adc > T_42C )
{
NTC_High_Pro_Flag = 0;
NTC_Flag = TRUE;
}
else
{
NTC_Flag = FALSE;
}
}
}
else //异常不充电
{
if(NTC_Adc > T_0C)
{
NTC_Low_Pro_Flag = 1;
}
else
if(NTC_Adc < T_45C)
{
NTC_High_Pro_Flag = 1;
}
NTC_Flag = FALSE;
}
}
if( NTC_Flag == FALSE )
{
NTC_Pro_Flag = 1;
}
else
{
NTC_Pro_Flag = 0;
}
return NTC_Flag;
}
#endif
/*
*******************************************************************************
* void Charger_Handler(void)
*
* Description : Charger Handle. ---- NTC
*
* Arguments : NONE
* Returns : NONE
* Notes : NONE
*
*******************************************************************************
*/
/*
1使VIN拔出
*/
void Charger_Handler(void)
{
if( !(CHIP_STA4 & 0x80) ) //未检测到Power good,则关闭Charger使能后返回。
{
CHG_CTL &= ~0x01; //Disable Charger
IRQ_FLAG9 = 0x10; //未充电需清Charg complete interrupt中断
Charger_Done = 0;
#ifdef BREATHING_LIGHT //关闭LED UI显示呼吸灯
Breathing_Light_On = 0;
#endif
return;
}
/*各项保护都无需软件处理只处理充电超时超时后需要等VBUS重新插拔后才重新开始Charger流程。*/
if ( IRQ_FLAG9 & 0x0C ) //充电超时,Tricle charg and Fast charge timeout
{
CHG_CTL &= ~0x01; //Disable Charger
if ( IRQ_FLAG10 & 0xC0 ) //Plugin\Plugout interrupt
{
IRQ_FLAG9 = 0x0C;
IRQ_FLAG10 = 0xC0; //Clear Plugin\Plugout interrupt
}
#ifdef BREATHING_LIGHT //关闭LED UI显示呼吸灯
Breathing_Light_On = 0;
#endif
return;
}
else /*充电未超时存在Plug则清Plugin\Plugout int*/
{
if( IRQ_FLAG10 & 0xC0 )
{
IRQ_FLAG10 = 0xC0; //Clear Plugin\Plugout interrupt
}
}
#if NTC_ENABLE
/*NTC Handle*/ //使能Charger前先检测NTC温度异常就不开充电。(CHIP_STA4 & 0x80):PG
if( PMU_NTC_Control() == FALSE ) //NTC保护不充电。
{
CHG_CTL &= ~0x01; //Disable Charger.
#ifdef BREATHING_LIGHT //关闭LED UI显示呼吸灯
Breathing_Light_On = 0;
#endif
return;
}
#endif
if( IRQ_FLAG9 & 0x10 ) //Charg complete interrupt
{
#ifdef BREATHING_LIGHT //关闭LED UI显示呼吸灯
Breathing_Light_On = 0;
#endif
#if ADC_ENABLE
#ifdef _DEBUG_CHARGER
printf("Chg Done\r\n");
#endif
if( Vbat_Adc < BAT_RECHARG )
{
//CHG_CTL |= 0x01; //Enable Charger
IRQ_FLAG9 = 0x10;
#ifdef _DEBUG_CHARGER
printf("En Chg\r\n");
#endif
}
else
{
CHG_CTL &= ~0x01; //Disable Charger
#ifdef _DEBUG_CHARGER
printf("Dis Chg\r\n");
#endif
}
Charger_Done = 1;
#if DISPLAY_6PIN_188
LED_On_Timer = 0;
#endif
#endif
}
else
{
CHG_CTL |= 0x01; //Enable Charger
Charger_Done = 0;
#ifdef BREATHING_LIGHT //LED UI显示呼吸灯
Breathing_Light_On = 1;
#endif
}
}
#endif

View File

@ -0,0 +1,206 @@
/*
******************************************************************************
*
* @file discharge_module.c
* @brief discharge module
*
*
* @version 1.0
* @date 2022/07/12 17:35:40
* @author Alex Xu
*
* Copyright (c) 2013-2099,Tkplusemi Technology Co.,Ltd.
* All Rights Reserved
*
* History:
* Revision Date Author Desc
* 1.0.0 2022/07/12 Alex build this file
******************************************************************************
*/
#include "discharge_module.h"
#include "vox_module.h"
#include "adc.h"
#include "charger_module.h"
#include "sys_tim.h"
#include "system.h"
#include "led.h"
bit gBoost_Prepared_Flag = 0; //Boost满足开启条件。
#if DISCHARGE_ENABLE
/******************************************************************************\
Macro definitions
\******************************************************************************/
/******************************************************************************\
Variables definitions
\******************************************************************************/
bit gBoost_UVLO_Flag = 0;
/******************************************************************************\
Functions definitions
\******************************************************************************/
#if 0
/*
*******************************************************************************
* void DisCharge_Boost_Open(void)
*
* Description : Boost Open
* VIN Boost UVLO 2.8/3.0V boost 使
* VIN3.6V VIN3.3V
*
* Arguments : NONE
* Returns : NONE
* Notes : NONE
*
*******************************************************************************
*/
void DisCharge_Boost_Open(void)
{
if( gBoost_Prepared_Flag ) //Boost需满足开启条件
{
BST_EN = 1; //Boost Enable异常时由硬件主动关闭。
#ifdef _DEBUG_DISCHARGE
printf("Bst Open\r\n");
#endif
}
}
/*
*******************************************************************************
* void DisCharge_Boost_Close(void)
*
* Description : Boost CloseLOW电量状态下boost输出
*
* Arguments :
* Returns :
* Notes :
*
*******************************************************************************
*/
void DisCharge_Boost_Close(void)
{
if( (BST_EN & 0x01) && gBoost_Prepared_Flag )
{
BST_EN = 0; //Boost Disable
gBoost_Prepared_Flag = 0;
#ifdef _DEBUG_DISCHARGE
printf("Bst Close\r\n");
#endif
}
}
#endif
/*
*******************************************************************************
* void DisCharge_Handler(void)
*
* Description : Boost放电的保护功能包括 UVLO
*
* Arguments :
* Returns :
* Notes :
*
*******************************************************************************
*/
void DisCharge_Handler(void)
{
/*放电过流保护 --- 硬件实现*/
#if 0
gBoost_Prepared_Flag = 1;
#else
/*过温保护 --- 硬件实现*/
if( CHIP_STA3 & 0x02 )
{
gBoost_Prepared_Flag = 0;
return;
}
/*Boost Input UVLO 硬件实现*/
if( (CHIP_STA0 & 0x80) ) //用于清软件标志位。
{
gBoost_Prepared_Flag = 0;
gBoost_UVLO_Flag = 1;
return;
}
/*输出短路保护 (使用中断标志位Boost短路中断发生后会锁存需要写1清零。)-- 短路保护后一直打嗝或者打嗝BOOST_HICCUP_TIM次之后disable boost打嗝时间 250ms软件实现。*/
if( IRQ_FLAG0 & 0x01 )
{
#ifdef _DEBUG_DISCHARGE
printf("Boost Pro Output Short!\r\n");
#endif
gBoost_Prepared_Flag = 0;
//一直打嗝
if( F_sys_tim_250ms )
{
F_sys_tim_250ms = 0;
IRQ_FLAG0 = 0x01;
BST_EN = 1; //250ms定时开一次Boost
}
return;
}
#if NTC_ENABLE
/*NTC Handle*/ //使能Boost前先检测NTC温度异常就不开放电。
if( PMU_NTC_Control() == FALSE ) //NTC保护不放电。
{
gBoost_Prepared_Flag = 0;
BST_EN = 0;
return;
}
#endif
gBoost_Prepared_Flag = 1;
#if ADC_ENABLE
/*
VIN Boost UVLO 2.8/3.0V boost 使
VIN3.6V VIN3.3V
VIN3.6V开boost VIN3.3V开boost逻辑
VIN存在时的UVLO恢复Boost情况VIN情况下由硬件处理
*/
if ( gBoost_UVLO_Flag )
{
if( CHIP_STA4 & 0x80 ) //Power GOOD
{
if( Vbat_Adc >= OPEN_BOOST_VIN )
{
gBoost_Prepared_Flag = 1;
gBoost_UVLO_Flag = 0;
}
else
{
BST_EN = 0; //Boost Disable
gBoost_Prepared_Flag = 0;
}
}
}
#endif
#endif
}
#endif

66
UsrSrc/gpio/gpio.c Normal file
View File

@ -0,0 +1,66 @@
/*
******************************************************************************
*
* @file gpio.c
* @brief gpio module
* @ic TP3102
*
* @version 1.0
* @date 2022/08/05 15:00:40
* @author Alex Xu
*
* Copyright (c) 2013-2099,Tkplusemi Technology Co.,Ltd.
* All Rights Reserved
*
* History:
* Revision Date Author Desc
* 1.0.0 2022/08/05 Alex build this file
******************************************************************************/
/*_____ I N C L U D E S ____________________________________________________*/
#include "gpio.h"
#include "sleep.h"
#include "userapp.h"
#include "led.h"
/******************************************************************************\
Macro definitions
\******************************************************************************/
/******************************************************************************\
Variables definitions
\******************************************************************************/
//uint8_t System_Rst_Cnt = 0; //系统软复位定时器
/******************************************************************************\
Functions definitions
\******************************************************************************/
/*
*******************************************************************************
* void Gpio_Init(void)
*
* Description : gpio Initialization. ---
*
* Arguments :
* Returns :
* Notes :
*
*******************************************************************************
*/
#if 0
void GPIO_Init(void)
{
/* GPIO */
// SFRADDR = P0_OE;
// SFRDATA |= 0x1C; //P02,P03,P04设置成输出模式
SFRADDR = P1_OE;
SFRDATA = 0x01;
}
#endif

91
UsrSrc/hall/hall.c Normal file
View File

@ -0,0 +1,91 @@
/*
******************************************************************************
*
* @file hall.c
* @brief hall module
*
*
* @version 1.0
* @date 2022/08/04 15:00:40
* @author Alex Xu
*
* Copyright (c) 2013-2099,Tkplusemi Technology Co.,Ltd.
* All Rights Reserved
*
* History:
* Revision Date Author Desc
* 1.0.0 2022/08/04 Alex build this file
******************************************************************************/
/*_____ I N C L U D E S ____________________________________________________*/
#include "hall.h"
#include "key.h"
#include "led.h"
#include "userapp.h"
#include "sleep.h"
#if HALL_ENABLE
/******************************************************************************\
Macro definitions
\******************************************************************************/
/******************************************************************************\
Variables definitions
\******************************************************************************/
uint8_t Hall_Sta_bk = 0xff;
CoverStatus_E CoverStatus;
bit CoverEvent_Flg = 0; //Hall开关触发事件标志位
bit CoverEvent_Flg_led = 0;
/******************************************************************************\
Functions definitions
\******************************************************************************/
/*
*******************************************************************************
* void Hall_Handle(void)
*
* Description : Hall Handle --- 10msCoverStatus ---
*
* Arguments : NONE
* Returns : NONE
* Notes : NONE
*
*******************************************************************************
*/
void Hall_Handler(void)
{
uint8_t Hall_Sta = 0;
Hall_Sta = CHIP_STA0 & 0x08;
if( Hall_Sta != Hall_Sta_bk)
{
if(CHIP_STA0 & 0x08) //Hall 高电平
{
#if HALL_OPEN_LEV_SET
CoverStatus = OPEN;
#else
CoverStatus = CLOSE;
#endif
}
else
{
#if HALL_OPEN_LEV_SET
CoverStatus = CLOSE;
#else
CoverStatus = OPEN;
#endif
}
CoverEvent_Flg = 1;
CoverEvent_Flg_led = 1;
LED_On_Timer = 0;
Hall_Sta_bk = Hall_Sta;
Enter_Sleep_Cnt_Restart_Flag = 1;
}
}
#endif

135
UsrSrc/key/key.c Normal file
View File

@ -0,0 +1,135 @@
/*
******************************************************************************
*
* @file key.c
* @brief key module
*
*
* @version 1.0
* @date 2022/08/04 15:00:40
* @author Alex Xu
*
* Copyright (c) 2013-2099,Tkplusemi Technology Co.,Ltd.
* All Rights Reserved
*
* History:
* Revision Date Author Desc
* 1.0.0 2022/08/04 Alex build this file
******************************************************************************/
/*_____ I N C L U D E S ____________________________________________________*/
#include "key.h"
#include "system.h"
#include "led.h"
#include "sleep.h"
#include "adc.h"
#include "bat.h"
#if KEY_ENABLE
/******************************************************************************\
Macro definitions
\******************************************************************************/
/******************************************************************************\
Variables definitions
\******************************************************************************/
bit Key_Press_short_irq = 0;
bit Key_Press_l_irq = 0;
bit Key_Press_ll_irq = 0;
bit Key_l_Flag = 0;
bit Hall_Positive_Flg = 0;
bit Hall_Negative_Flg = 0;
idata KEY_EVENT_E Event_key = 0;
/******************************************************************************\
Functions definitions
\******************************************************************************/
/*
*******************************************************************************
* void Key_Init(void)
*
* Description : Hey Initialization
*
* Arguments :
* Returns :
* Notes :
*
*******************************************************************************
*/
#if 0
void Key_Init(void)
{
SFRADDR = MFP_CTL1; //Set P05 as key Function
SFRDATA &= ~0x3C;
SFRDATA |= 0x14;
SFRADDR = PMU_CTL0;
SFRDATA |= 0x02; //Key Detect Enable
//KEY_CTL = 0x04; //Set all of the functions about KEY are enable.
}
#endif
/*
*******************************************************************************
* void Key_Handler(void)
*
* Description : Key Handler --- 5ms(2s)
CoverStatus --- Key事件标志位
*
* Arguments : NONE
* Returns : NONE
* Notes : NONE
*
*******************************************************************************
*/
void Key_Handler(void)
{
if( Key_l_Flag )
{
Key_Press_l_irq = 0;
Key_l_Flag = 0;
/*todo*/
Event_key = KEY_EVENT_L_2S;
#ifdef _DEBUG_KEY
printf("long press\r\n");
#endif
}
if( Key_Press_ll_irq )
{
Key_Press_ll_irq = 0;
/*todo*/
Event_key = KEY_EVENT_LL_8S;
#ifdef _DEBUG_KEY
printf("supper long press\r\n");
#endif
}
if( Key_Press_short_irq )
{
Key_Press_short_irq = 0;
/*todo*/
Event_key = KEY_EVENT_SHORT;
#ifdef _DEBUG_KEY
printf("short press\r\n");
#endif
}
}
#endif

1203
UsrSrc/led/led.c Normal file

File diff suppressed because it is too large Load Diff

66
UsrSrc/main.c Normal file
View File

@ -0,0 +1,66 @@
/*
******************************************************************************
*
* @file main.c
* @brief main module
*
*
* @version 1.0
* @date 2022/07/12 17:35:40
* @author Alex Xu
*
* Copyright (c) 2013-2099,Tkplusemi Technology Co.,Ltd.
* All Rights Reserved
*
* History:
* Revision Date Author Desc
* 1.0.0 2022/07/12 Alex build this file
******************************************************************************
*/
/*_____ I N C L U D E S ____________________________________________________*/
#include "define.h"
#include "userapp.h"
#include "watchdog.h"
#include "sys_tim.h"
#include "system.h"
#include "led.h"
#include "charger_module.h"
#include "adc.h"
/******************************************************************************\
Macro definitions
\******************************************************************************/
/******************************************************************************\
Variables definitions
\******************************************************************************/
/******************************************************************************\
Functions definitions
\******************************************************************************/
void main(void)
{
System_Init(); //ϵͳ³õʼ»¯
#ifdef _DEBUG_MAIN
printf("System Init(Ver:%d%d%d)\r\n",Version_Addr[0],Version_Addr[1],Version_Addr[2]);
#endif
while(1)
{
#if WTG_ENABLE
WDT = 1;
SWDT = 1;
#endif
Sys_Tim_Handler(); //¶¨Ê±Æ÷
UserAPP();
}
}

73
UsrSrc/sleep/sleep.c Normal file
View File

@ -0,0 +1,73 @@
/*
******************************************************************************
*
* @file sleep.c
* @brief sleep module
*
*
* @version 1.0
* @date 2023/03/22 17:35:40
* @author Alex Xu
*
* Copyright (c) 2013-2099,Tkplusemi Technology Co.,Ltd.
* All Rights Reserved
*
* History:
* Revision Date Author Desc
* 1.0.0 2023/03/22 Alex build this file
******************************************************************************
*/
#include "sleep.h"
#include "system.h"
#include "vox_module.h"
#if SLEEP_ENABLE
/******************************************************************************\
Macro definitions
\******************************************************************************/
/******************************************************************************\
Variables definitions
\******************************************************************************/
uint8_t Decnt_SleepDelay = ENTER_STANDBYMODE_CNT;
bit Enter_Sleep_Cnt_Restart_Flag = 0;
/******************************************************************************\
Functions definitions
\******************************************************************************/
/*
*******************************************************************************
* bool Check_Require_Sleep(void )
*
* Description :
*
* Arguments : None
* Returns : None
* Notes : bool Flag
*
*******************************************************************************
*/
bool Check_Require_Sleep(void )
{
if( ( CHIP_STA4 & 0x80 ) || ( ON == Vor_Vout_Enable ) || ( ON == Vol_Vout_Enable ) || Enter_Sleep_Cnt_Restart_Flag ) /*VBUS Power Good存在、有中断、耳机处于充电状态情况下Boost重载输出系统不进休眠模式。 */
{
#ifdef _DEBUG_SLEEP
printf("Protect\r\n");
#endif
Enter_Sleep_Cnt_Restart_Flag = 0;
/*处理对应的保护和中断唤醒事件。*/
return false;
}
return true;
}
#endif

338
UsrSrc/system/system.c Normal file
View File

@ -0,0 +1,338 @@
/*
******************************************************************************
*
* @file system.c
* @brief system module
*
*
* @version 1.0
* @date 2022/08/04 15:00:40
* @author Alex Xu
*
* Copyright (c) 2013-2099,Tkplusemi Technology Co.,Ltd.
* All Rights Reserved
*
* History:
* Revision Date Author Desc
* 1.0.0 2022/08/15 Alex build this file
* Attention:1Byte的中断标志位1 |= =
IRQ_FLAG10 = 0x02; //Clear bit0,bit1 interrupt flag
20
******************************************************************************/
/*_____ I N C L U D E S ____________________________________________________*/
#include "system.h"
#include "gpio.h"
#include "adc.h"
#include "hall.h"
#include "key.h"
#include "sleep.h"
#include "uart.h"
#include "bat.h"
#include "sys_tim.h"
#include "charger_module.h"
#include "discharge_module.h"
#include "led.h"
#include "vox_module.h"
#include "watchdog.h"
#include "userapp.h"
/******************************************************************************\
Macro definitions
\******************************************************************************/
/******************************************************************************\
Variables definitions
\******************************************************************************/
/******************************************************************************\
Functions definitions
\******************************************************************************/
/*
*******************************************************************************
* void System_Init(void)
*
* Description : System Initialization
*
* Arguments : NONE
* Returns : NONE
* Notes : NONE
*
*******************************************************************************
*/
void System_Init(void)
{
CLKPRE = 0x00; //frequency division: 2^0, 12M 后续根据系统功耗情况调整。
/* test开启IO LDO bias和增加100uA负载。*/
SFRADDR = 0x89;
SFRDATA |= 0x80;
SFRADDR = PMU_CTL0; //bit3-bit4芯片硬件需求固定;Disable HALL And KEY;VCC IO 3.1v
SFRDATA = 0x30;
/*test*/
SFRADDR = P0_PD;
SFRDATA &= ~0x03;
#if UART0_ENABLE
SFRADDR = P0_PU;
SFRDATA = 0x03;
SFRADDR = MFP_CTL0;
SFRDATA = 0x05; //P01 as UART's TX,P00 as UART's RX
BD = 1; //Select additional Baudrate generator
PCON |= 0x80; //Baudrate double enable
//baudrate set
S0RELH = HIBYTE(S0REL_VALUE);
S0RELL = LOBYTE(S0REL_VALUE);//s0rel=1023, baudrate = fclk/32 = 187.5k
S0CON = 0xD0; //SCON: MODE 3, 9-bit UART, RI enable, EVEN Parity
TI0 = 1;
RI0 = 1;
ES0 = 1; //Enable UART0 IRQ
#endif
#if VOX_ENABLE
//Vox_init(); //上电后尽快初始化VOX为自动识别模式为后续识别VOX是否有LOADON做好准备。
VOX_CTL0 = 0xC3; //VOX 负载接入、存在识别功能使能负载自动识别。打开Vox vds钳压环使能主要用于VOX 5V输出
/*
SFRADDR = VOX_CON0; //设置VOX输出500mA负载识别电流2.5uA。
SFRDATA &= 0xE0;
SFRDATA |= (VOX_IOUT_500MA << 3) | VOX_ADT_Cur_2_5UA;
*/
#endif
//Sys_Tim0_Init();
//TMOD &= 0xF0;
TMOD = 0x01; //mode 1, 16bit timer
TH0 = C_TIM0_Reload >> 8;
TL0 = C_TIM0_Reload & 0xFF;
ET0 = 1; //enable time0 interrupt
TR0 = 1; //time0 run
#if TIMER1_ENABLE
//Sys_Tim1_Init();
TMOD |= 0x10; //mode 1, 16bit timer
TH1 = C_TIM1_Reload >> 8;
TL1 = C_TIM1_Reload & 0xFF;
ET1 = 1; //enable time1 interrupt
TR1 = 1; //time1 run
#endif
#ifdef LED_DISPLAY
LED_R_FLASH(25,6);
LED_G_FLASH(25,6);
LED_Y_FLASH(25,6);
#endif
#if WTG_ENABLE
/* 65ms */
//WDTREL = 0x00; //WDTPS = 0,wdt_f = wdt_f1/2;WDTPS = 1,wdt_f = wdt_f1/32;
/* 1s */
WDTREL = 0x80; //WDTPS = 0,wdt_f = wdt_f1/2;WDTPS = 1,wdt_f = wdt_f1/32;
#endif
#if NTC_ENABLE
SFRADDR = ADCCS_CTL0; //AD0~AD4 GPIO constant 20uA current source enable.
SFRDATA = 0x10;
#endif
/* Interrupt Enable 根据应用选择必要的中断 */
SFRADDR = IRQ_EN3; //INT2 --- VOX EDGE LOADON
SFRDATA = 0x3C;
#if KEY_ENABLE
SFRADDR = IRQ_EN7; //INT4 --- Key Interrupt Flag
SFRDATA = 0xF8;
#else
//SFRADDR = PMU_CTL0;
//SFRDATA &= ~0x0A; //Key Detect Disable
#endif
#if HALL_ENABLE
SFRADDR = IRQ_EN10; //INT4 --- Hall interrupr enable.
SFRDATA = 0x0C;
#else
//SFRADDR = PMU_CTL0;
//SFRDATA &= ~0x08; //Hall Detect Disable
#endif
/* 开外部中断使能 */
EX0 = 1;
EX2 = 1;
EX4 = 1;
EAL = 1; //开总中断。
IRQ_FLAG9 = 0x1C; //清 Charge complete Int、Tricle/Fast Charge Time expire Int
IRQ_FLAG10 = 0xC0; //清 VBUS Plugin\Plugout Int
IRQ_FLAG0 = 0x0C; //Vox短路保护
#if CHARGER_ENABLE
SFRADDR = PMU_CTL7; //合封芯片关闭VBUS OV检测使能
SFRDATA &= ~0x20;
CHG_CTL |= 0x10; //开启充电超时使能
SFRADDR = REG_CHG0;
SFRDATA |= 0x04; //关VDPM环
#endif
#if SLEEP_ENABLE
//Decnt_SleepDelay = ENTER_STANDBYMODE_CNT;
#endif
#if DISPLAY_6PIN_188
//LED_188_Init();
SFRADDR = MFP_CTL1;
SFRDATA &= ~0x0C;
// P0 &= ~0xC0; //P00、P01、P02、P03、P04、P05
// SFRADDR = P0_OE;
// SFRDATA |= 0x3f;
// SFRADDR = P1_OE;
// SFRDATA = 0x01;
/*初始化显示*/
// g_188_Num = 188;
Display_Show_Num(g_188_Num);
Display_Show_Vor(4);
Display_Show_Vol(4);
#endif
}
/*
*******************************************************************************
* void EX0_isr(void ) interrupt Interrupt_Vector_IE0
*
* Description : System External Intterupt 0
*
* Arguments : NONE
* Returns : NONE
* Notes : NONE
*
*******************************************************************************
*/
void EX0_isr(void) interrupt Interrupt_Vector_IE0
{
}
/*
*******************************************************************************
* void EX2_isr(void) interrupt Interrupt_Vector_IE2
*
* Description : System External Intterupt 2
*
* Arguments : NONE
* Returns : NONE
* Notes : NONE
*
*******************************************************************************
*/
void EX2_isr(void) interrupt Interrupt_Vector_IE2
{
IRQ_FLAG3 = 0x3C;
#if SLEEP_ENABLE
// if( !Enter_Sleep_Cnt_Restart_Flag )
{
Enter_Sleep_Cnt_Restart_Flag = 1;
}
#endif
}
/*
*******************************************************************************
* void EX4_isr(void) interrupt Interrupt_Vector_IE4
*
* Description : System External Intterupt 4
*
* Arguments : NONE
* Returns : NONE
* Notes : NONE
*
*******************************************************************************
*/
void EX4_isr(void) interrupt Interrupt_Vector_IE4
{
#if KEY_ENABLE
if( IRQ_FLAG7 & 0x10 ) //Key short press for 16ms-1s interrupt flag
{
Key_Press_short_irq = 1;
}
if( IRQ_FLAG7 & 0x20 ) //Key long press for 2s interrupt flag and Key release interrupt flag
{
Key_Press_l_irq = 1;
}
if( IRQ_FLAG7 & 0x40 ) //Key super long press for 8s interrupt flag
{
Key_Press_ll_irq = 1;
Key_Press_l_irq = 0;
}
if( IRQ_FLAG7 & 0x08 )
{
if( Key_Press_l_irq )
{
Key_Press_l_irq = 0;
Key_l_Flag = 1;
}
}
IRQ_FLAG7 = 0xF8; //Clean Key interrupt flag
#endif
IRQ_FLAG10 = 0x0C; //Clean Hall edge interrupt flag
#if SLEEP_ENABLE
//if( !Enter_Sleep_Cnt_Restart_Flag )
{
Enter_Sleep_Cnt_Restart_Flag = 1;
}
#endif
}

285
UsrSrc/timer/sys_tim.c Normal file
View File

@ -0,0 +1,285 @@
/*
******************************************************************************
*
* @file sys_tim.c
* @brief Timer module
*
*
* @version 1.0
* @date 2022/09/05 15:00:40
* @author Alex Xu
*
* Copyright (c) 2013-2099,Tkplusemi Technology Co.,Ltd.
* All Rights Reserved
*
* History:
* Revision Date Author Desc
* 1.0.0 2022/09/05 Alex build this file
******************************************************************************/
/*_____ I N C L U D E S ____________________________________________________*/
#include "sys_tim.h"
#include "vox_module.h"
#include "system.h"
#include "charger_module.h"
#include "led.h"
/******************************************************************************\
Macro definitions
\******************************************************************************/
/******************************************************************************\
Variables definitions
\******************************************************************************/
//uint8_t cnt_sys_tim_5ms = 0;
#if 0
uint8_t cnt_sys_tim_500ms = 0;
#endif
uint8_t cnt_sys_tim_250ms = 0;
uint8_t cnt_sys_tim_100ms = 0;
uint8_t cnt_sys_tim_1s = 0;
//bit F_sys_tim_5ms = 0;
#ifdef LED_DISPLAY
uint8_t cnt_sys_tim_10ms = 0;
bit F_sys_tim_10ms = 0;
#endif
#if 0
bit F_sys_tim_500ms = 0;
#endif
bit F_sys_tim_250ms = 0;
bit F_sys_tim_100ms = 0;
bit F_sys_tim_1s = 0;
uint8_t F_sys_tim0_tick = 0;
//uint8_t cnt_sys_tim0_5ms = 0;
#if TIMER1_ENABLE
bit F_sys_tim1_tick = 0;
#endif
/******************************************************************************\
Functions definitions
\******************************************************************************/
/*
*******************************************************************************
* void Sys_Tim_Handler(void )
*
* Description : Timer Handle
*
* Arguments : NONE
* Returns : NONE
* Notes : NONE
*
*******************************************************************************
*/
void Sys_Tim_Handler(void)
{
if(F_sys_tim0_tick == 0)
return;
F_sys_tim0_tick = 0;
//system tick
//---------------5ms----------------------------------------
#if 0
cnt_sys_tim_5ms++;
if(cnt_sys_tim_5ms >= 5)
{
cnt_sys_tim_5ms = 0;
F_sys_tim_5ms = 1;
}
#endif
#ifdef LED_DISPLAY
//---------------10ms----------------------------------------
cnt_sys_tim_10ms++;
if(cnt_sys_tim_10ms >= 10)
{
cnt_sys_tim_10ms = 0;
F_sys_tim_10ms = 1;
}
#endif
//---------------100ms----------------------------------------
cnt_sys_tim_100ms++;
if(cnt_sys_tim_100ms >= 100)
{
cnt_sys_tim_100ms = 0;
F_sys_tim_100ms = 1;
}
//-------------------------------------------------
cnt_sys_tim_250ms++;
if(cnt_sys_tim_250ms>=250)
{
cnt_sys_tim_250ms = 0;
F_sys_tim_250ms = 1;
#if 0
//-----------------500ms-------------------------
cnt_sys_tim_500ms++;
if(cnt_sys_tim_500ms >= 2)
{
cnt_sys_tim_500ms = 0;
F_sys_tim_500ms = 1;
}
#endif
//-----------------1s-------------------------
cnt_sys_tim_1s++;
if(cnt_sys_tim_1s >= 4)
{
cnt_sys_tim_1s = 0;
F_sys_tim_1s = 1;
}
}
}
/*
*******************************************************************************
* void Delay200ms(void) //@11.0592MHz
*
* Description : 200msÈí¨Ê±º¯Êý
*
* Arguments : NONE
* Returns : NONE
* Notes : NONE
*
*******************************************************************************
*/
#if 0
void Delay200ms(void) //@11.0592MHz
{
unsigned char i, j, k;
//_nop_();
//_nop_();
i = 9;
j = 104;
k = 139;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
#endif
/**
* @brief This function handles sys_tim Handler.
* @param None
* @retval None
* 1ms
*/
void tim0_Interrupt(void) interrupt Interrupt_Vector_TF0 //interrupt address is 0x000B
{
//1ms
TH0 += C_TIM0_Reload >> 8;
TL0 += C_TIM0_Reload & 0xFF;
F_sys_tim0_tick = 1;
}
/*
*******************************************************************************
* void Sys_Tim0_Init(void)
*
* Description : TImer0 Mode1 16bit timer Initialization
*
* Arguments : NONE
* Returns : NONE
* Notes : NONE
*
*******************************************************************************
*/
#if 0
void Sys_Tim0_Init(void)
{
TMOD &= 0xF0;
TMOD |= 0x01; //mode 1, 16bit timer
TH0 = C_TIM0_Reload >> 8;
TL0 = C_TIM0_Reload & 0xFF;
ET0 = 1; //enable time0 interrupt
TR0 = 1; //time0 run
}
#endif
#if TIMER1_ENABLE
/**
* @brief This function handles sys_tim Handler.
* @param None
* @retval None
* 1ms
*/
void tim1_Interrupt(void) interrupt Interrupt_Vector_TF1//interrupt address is 0x000B
{
//1ms
TF1 = 0;
TH1 += C_TIM1_Reload >> 8;
TL1 += C_TIM1_Reload & 0xFF;
#ifdef BREATHING_LIGHT
/*todo*/
if ( Breathing_Light_On )
{
LED_Breathing_Light();
}
#endif
#if DISPLAY_6PIN_188
Display_Scan_6Pin_188();
#endif
#if DISPLAY_5PIN_188
LED_188_Drive(g_188_Num); //188ÊýÂë¹ÜÏÔʾ
#endif
F_sys_tim1_tick = 1;
}
/*
*******************************************************************************
* void Sys_Tim1_Init(void)
*
* Description : TImer1 Mode1 16bit timer Initialization
*
* Arguments : NONE
* Returns : NONE
* Notes : NONE
*
*******************************************************************************
*/
#if 0
void Sys_Tim1_Init(void)
{
TMOD &= 0x0F;
TMOD |= 0x10; //mode 1, 16bit timer
TH1 = C_TIM1_Reload >> 8;
TL1 = C_TIM1_Reload & 0xFF;
ET1 = 1; //enable time1 interrupt
TR1 = 1; //time1 run
}
#endif
#endif

183
UsrSrc/uart/uart.c Normal file
View File

@ -0,0 +1,183 @@
/*
******************************************************************************
*
* @file uart.c
* @brief uart module
*
*
* @version 1.0
* @date 2022/12/14 15:00:40
* @author Alex Xu
*
* Copyright (c) 2013-2099,Tkplusemi Technology Co.,Ltd.
* All Rights Reserved
*
* History:
* Revision Date Author Desc
* 1.0.0 2022/12/14 Alex build this file
******************************************************************************/
/*_____ I N C L U D E S ____________________________________________________*/
#include "uart.h"
#include "system.h"
#include "vox_module.h"
#if UART0_ENABLE
/******************************************************************************\
Macro definitions
\******************************************************************************/
#define NONE_PARITY 0 //无校验
#define ODD_PARITY 1 //奇校验
#define EVEN_PARITY 2 //偶校验
#define MARK_PARITY 3 //标记校验
#define SPACE_PARITY 4 //空白校验
#define PARITYBIT EVEN_PARITY //定义校验位
/******************************************************************************\
Variables definitions
\******************************************************************************/
bit busy0;
#ifdef VOX_RX
idata uint8_t RX0_Buffer[COM0_Data_Lenth] = 0; //接收缓冲
bit Uart0_RX_Finish_Flag = 0;
#endif
#ifdef _DEBUG_ALL
char putchar(char c)
{
while(!TI0);
TI0 = 0;
return (S0BUF = c);
}
#endif
/*
*******************************************************************************
* void UART0_Init(void)
*
* Description : UART0 Initialization UART0用于debug
*
* Arguments : NONE
* Returns : NONE
* Notes : NONE
*
*******************************************************************************
*/
#if 0
void UART0_Init(void)
{
SFRADDR = MFP_CTL0;
SFRDATA &= ~0x0C;
SFRDATA |= 0x04; //P01 as UART's TX
BD = 1; //Select additional Baudrate generator
PCON |= 0x80; //Baudrate double enable
//baudrate set
S0RELH = HIBYTE(S0REL_VALUE);
S0RELL = LOBYTE(S0REL_VALUE);//s0rel=1023, baudrate = fclk/32 = 187.5k
S0CON = 0xD0; //SCON: MODE 3, 9-bit UART, RI enable, EVEN Parity
TI0 = 1;
RI0 = 1;
ES0 = 1; //Enable UART0 IRQ
}
#endif
/*
*******************************************************************************
* void Uart0SendData(uint8_t Txdata)
*
* Description : UART0 Send Data
*
* Arguments : NONE
* Returns : NONE
* Notes : NONE
*
*******************************************************************************
*/
#if 0
void Uart0SendData(uint8_t Txdata)
{
while(busy0);
ACC = Txdata;
if (P) //根据P来设置校验位
{
#if (PARITYBIT == ODD_PARITY)
TB80 = 0; //设置校验位为0
#elif (PARITYBIT == EVEN_PARITY)
TB80 = 1; //设置校验位为1
#endif
}
else
{
#if (PARITYBIT == ODD_PARITY)
TB80 = 1; //设置校验位为1
#elif (PARITYBIT == EVEN_PARITY)
TB80 = 0; //设置校验位为0
#endif
}
busy0 = 1;
S0BUF = ACC;
}
#endif
/*
*******************************************************************************
* void Uart0SendPacket(uint8_t Length,uint8_t *TransBuf)
*
* Description : UART0 Send Packet
*
* Arguments : NONE
* Returns : NONE
* Notes : NONE
*
*******************************************************************************
*/
void Uart0SendPacket(uint8_t Length,uint8_t *TransBuf)
{
uint8_t i = 0;
for(i=0;i<Length;i++)
{
//Uart0SendData(*TransBuf++);
while(busy0);
ACC = *TransBuf++;
busy0 = 1;
S0BUF = ACC;
}
}
/*uart0中断处理函数*/
void uart0_Interrupt(void) interrupt Interrupt_Vector_RI_TI
{
uint16_t CrcCheckSum = 0;
/*处理UART0发送中断*/
if(TI0)
{
TI0 = 0;
busy0 = 0;
}
/*处理UART0接收中断透传开关功能协议监听。*/
if(RI0)
{
RI0 = 0;
}
}
#endif

483
UsrSrc/userapp/userapp.c Normal file
View File

@ -0,0 +1,483 @@
/*
******************************************************************************
*
* @file UserApp.c
* @brief UserApp module
*
*
* @version 1.0
* @date 2023/03/27 15:00:40
* @author Alex Xu
*
* Copyright (c) 2013-2099,Tkplusemi Technology Co.,Ltd.
* All Rights Reserved
*
* History:
* Revision Date Author Desc
* 1.0.0 2023/03/27 Alex build this file
******************************************************************************/
/*_____ I N C L U D E S ____________________________________________________*/
#include "userapp.h"
#include "gpio.h"
#include "adc.h"
#include "hall.h"
#include "key.h"
#include "sleep.h"
#include "system.h"
#include "bat.h"
#include "sys_tim.h"
#include "charger_module.h"
#include "discharge_module.h"
#include "led.h"
#include "vox_module.h"
/******************************************************************************\
Macro definitions
\******************************************************************************/
#if DISPLAY_6PIN_188
#define LED_ON_CNT 10 //充满显示10s后熄灭
#define LED_BLINK_CNT 1
#define LED_NUM_UNIT_CNT 1
#define LED_COVER_CNT 5 //开关盖显示4s后熄灭
#define BATLEV_UPDATE_UINT_TIM_CHG 30
#define BATLEV_UPDATE_UINT_TIM_DISCHG 60
#endif
/******************************************************************************\
Variables definitions
\******************************************************************************/
uint8_t bat_level_update = 0xFF;
uint8_t LED_On_Timer = 0; //led亮时间计时
#if DISPLAY_6PIN_188
uint8_t bat_level_Disp_Num = 0;
bit LED_188_Disp_Flg = 0;
uint8_t Disp_Vor_Lev = 0;
uint8_t Disp_Vol_Lev = 0;
uint8_t BatLev_Update_Uint_Cnt = 0;
#endif
/******************************************************************************\
Functions definitions
\******************************************************************************/
#if DISPLAY_6PIN_188
/*****************************************************************************
* Function : void LED_Display_App(void)
* Description : 5000ms调用周期
* Input : None
* Output : None
* Return : None
* Note : None
*****************************************************************************/
/*
4S后灭掉
4S后灭掉
*/
bit Init_LED_Disp_Flag = 0;
bit CHG_LED_Disp_Flag = 0;
uint8_t BatLev_Update_Uint_Tim = 0;
bit Vor_GetInto_Box_Flag = 0; //耳机入盒标志位
bit Vol_GetInto_Box_Flag = 0;
bit Vor_GetOut_Box_Flag = 0; //耳机出盒标志位
bit Vol_GetOut_Box_Flag = 0;
bit Vor_GetOut_Box_Flag1 = 0; //耳机出盒标志位
bit Vol_GetOut_Box_Flag1 = 0;
void LED_188Display_App(void)
{
uint8_t i = 0;
if (bat_level_update != bat_level) //电量发生变化,不能立刻变化,需要缓慢变化
{
if( !Init_LED_Disp_Flag )
{
if( bat_level != 0 )
{
Init_LED_Disp_Flag = 1;
g_188_Num = bat_level * 10;
}
}
else
{
bat_level_update = bat_level;
bat_level_Disp_Num = 10 * bat_level;
}
}
else
{
BatLev_Update_Uint_Cnt++;
if( BatLev_Update_Uint_Cnt > BatLev_Update_Uint_Tim )
{
BatLev_Update_Uint_Cnt = 0;
if ( CHIP_STA4 & 0x80 ) //充电中
{
if( g_188_Num < (bat_level_Disp_Num + 9) )
{
g_188_Num += 1;
}
BatLev_Update_Uint_Tim = BATLEV_UPDATE_UINT_TIM_CHG; //充电30s更新一次电量个位数
}
else
{
if( ( Vor_Vout_Enable == ON ) || ( Vol_Vout_Enable == ON ) ) //有耳机充电,电量才减
{
if( g_188_Num > bat_level_Disp_Num )
{
g_188_Num -= 1;
}
BatLev_Update_Uint_Tim = BATLEV_UPDATE_UINT_TIM_DISCHG; //放电60更新一次电量个位数
}
}
if( g_188_Num > 100 )
{
g_188_Num = 100;
}
}
}
#if NTC_ENABLE
/*NTC保护*/
if( NTC_Pro_Flag )
{
if( !LED_188_Disp_Flg )
{
Set_NumLED_Down();
LED_188_Disp_Flg = 1;
}
else
{
Display_Show_Num(g_188_Num);
LED_188_Disp_Flg = 0;
}
return;
}
#endif
if( Init_LED_Disp_Flag )
{
if ( CHIP_STA4 & 0x80 ) //充电中
{
if ( Charger_Done ) // 充电完成LED绿灯常亮
{
if( LED_On_Timer < LED_ON_CNT )
{
LED_On_Timer++;
g_188_Num = 100;
Display_Show_Num(g_188_Num);
}
else
{
Set_AllLed_Down();
}
}
else
{
#if 0
if( LED_On_Timer < LED_NUM_UNIT_CNT )
{
LED_On_Timer++;
}
else
#endif
{
// LED_On_Timer = 0;
/*188数码管个位数闪烁显示。*/
if( !LED_188_Disp_Flg )
{
for(i=13;i<20;i++)
{
Display_Ram_Tab[i] = 0;
}
LED_188_Disp_Flg = 1;
}
else
{
if(g_188_Num >= 99) //未出现chg_done则电量卡在99各位数闪。
{
g_188_Num = 99;
}
Display_Show_Num(g_188_Num);
LED_188_Disp_Flg = 0;
}
}
}
CHG_LED_Disp_Flag = 1;
}
else
{
if ( Vol_GetInto_Box_Flag || Vor_GetInto_Box_Flag || CHG_LED_Disp_Flag ) //耳机入盒,显示灯效
{
if( ( Vor_Vout_Enable == OFF ) && ( Vol_Vout_Enable == OFF ) ) //盒子里没耳机则显示百分百比电量4S后灭掉
{
if( LED_On_Timer < LED_COVER_CNT )
{
LED_On_Timer++;
return;
}
Set_AllLed_Down();
Vol_GetInto_Box_Flag = 0;
Vor_GetInto_Box_Flag = 0;
CHG_LED_Disp_Flag = 0;
}
else //盒子里有耳机,则显示电量
{
Display_Show_Num(g_188_Num);
}
}
else
{
Set_AllLed_Down();
}
}
#if 0
if( Vor_GetOut_Box_Flag || Vol_GetOut_Box_Flag )
{
// if( LED_On_Timer < LED_BLINK_CNT )
{
//LED_On_Timer++;
if( Vor_GetOut_Box_Flag )
{
Vor_GetOut_Box_Flag = 0;
Disp_Vor_Lev = Disp_Vol_Lev;
//Disp_Vol_Lev = 1;
Display_Show_Vor(0);
}
if( Vol_GetOut_Box_Flag )
{
Vol_GetOut_Box_Flag = 0;
Disp_Vol_Lev = Disp_Vor_Lev;
//Disp_Vor_Lev = 1;
Display_Show_Vol(0);
}
}
}
#endif
/*放电:左右耳对应的图标跑马,从下往上,盒子电量常亮*/
if( Vor_Vout_Enable == ON && !Vor_GetOut_Box_Flag )
{
Display_Show_Vor(Disp_Vor_Lev);
Disp_Vor_Lev++;
if(Disp_Vor_Lev > 4)
{
Disp_Vor_Lev = 1;
}
}
else
{
Display_Show_Vor(0);
}
if( Vol_Vout_Enable == ON && !Vol_GetOut_Box_Flag )
{
Display_Show_Vol(Disp_Vol_Lev);
Disp_Vol_Lev++;
if(Disp_Vol_Lev > 4)
{
Disp_Vol_Lev = 1;
}
}
else
{
Display_Show_Vol(0);
}
}
}
#endif
/*****************************************************************************
* Function : UserAPP
* Description : 5ms调用周期
* Input : None
* Output : None
* Return : None
* Note : None
*****************************************************************************/
void UserAPP(void)
{
#ifdef LED_DISPLAY
if(F_sys_tim_10ms)
{
F_sys_tim_10ms = 0;
LED_Drv();
}
#endif
if(F_sys_tim_100ms)
{
F_sys_tim_100ms = 0;
#if HALL_ENABLE
Hall_Handler(); //开关盖检测
#endif
#if DISCHARGE_ENABLE
DisCharge_Handler(); //放电boost功能
#endif
#if KEY_ENABLE
Key_Handler(); //按键检测
#endif
#if CHARGER_ENABLE
Charger_Handler(); //充电功能
#endif
#if ADC_ENABLE
Vbat_Adc = Vbat_Value(); //获取Bat电压
#endif
#if BAT_VALUE
check_bat_level();
#endif
#if VOX_ENABLE
Vol_Det_Machine();
Vor_Det_Machine();
#endif
}
#if 0
if( F_sys_tim_500ms )
{
F_sys_tim_500ms = 0;
LED_188Display_App(); //LED 灯效
}
#endif
if( F_sys_tim_1s )
{
F_sys_tim_1s = 0;
#if DISPLAY_6PIN_188
LED_188Display_App(); //LED 灯效
#endif
#if SLEEP_ENABLE
/*1、唤醒后工作Ns后进入Sleep Mode,N需要大于100ms。
2VIN存在的情况下sleep mode
*/
if( Decnt_SleepDelay > 0 ) /*能否在数字中实现此功能?*/
{
Decnt_SleepDelay--;
/*倒数进Sleep Mode过程中出现了KEY\HALL\Loadon\IOFF中断则重新计时。*/
if( Enter_Sleep_Cnt_Restart_Flag )
{
Enter_Sleep_Cnt_Restart_Flag = 0;
Decnt_SleepDelay = ENTER_STANDBYMODE_CNT;
}
#ifdef _DEBUG_MAIN
printf("sleep decnt:%d,STA0:0x%x,STA1:0x%x,STA2:0x%x,STA4:0x%x\r\n", (uint16_t)Decnt_SleepDelay,(uint16_t)CHIP_STA0,(uint16_t)CHIP_STA1,(uint16_t)CHIP_STA2,(uint16_t)CHIP_STA4);
#endif
return;
}
if( Check_Require_Sleep() )
{
/* Enter Sleep */
SFRADDR = WKUP_EN3; //vox loadon wake up enable
SFRDATA |= 0x3C;
/* InSleep Handler */ //Disable All IRQ
#if TIMER1_ENABLE
ET1 = 0; //timer1 IRQ Disable
#endif
#if UART0_ENABLE
ES0 = 0; //UART0 IRQ Disable
#endif
EX4 = 0;
EX2 = 0;
ET0 = 0; //timer0 IRQ Disable
COM_CTRL = OFF; //进休眠关闭VOUT输出
VOX_CTL0 &= ~0x30; //VOX 5v Off
#if DISCHARGE_ENABLE
BST_EN = 0; //Boost Disable
#endif
SFRADDR = ADC_CTL0;
SFRDATA &= ~0x80; //ADC Disable.
#if DISPLAY_6PIN_188
SFRADDR = P0_OE;
SFRDATA &= 0xC0;
SFRADDR = P0_IE;
SFRDATA &= 0xC0;
#endif
SFRADDR = PMU_CTL0; //芯片硬件需求,固定
SFRDATA &= ~0x30;
PCON |= 0x02; //Enter StandbyMode, Only int0 or int1 can wake up system
SFRADDR = PMU_CTL0; //芯片硬件需求,固定
SFRDATA |= 0x30;
/* OutSleep Handler */ //Enable IRQ
#if UART0_ENABLE
ES0 = 1; //UART0 IRQ
#endif
EX4 = 1;
EX2 = 1;
ET0 = 1; //timer0 IRQ
#if TIMER1_ENABLE
ET1 = 1; //timer1 IRQ
#endif
Decnt_SleepDelay = ENTER_STANDBYMODE_CNT;
}
else
{
Decnt_SleepDelay = ENTER_STANDBYMODE_CNT;
}
#endif
}
}

479
UsrSrc/vox/vox_module.c Normal file
View File

@ -0,0 +1,479 @@
/*
******************************************************************************
*
* @file VOX_Module.c
* @brief VOL/R module
*
*
* @version 1.0
* @date 2022/07/18 09:59:40
* @author Alex Xu
*
* Copyright (c) 2013-2099,Tkplusemi Technology Co.,Ltd.
* All Rights Reserved
*
* History:
* Revision Date Author Desc
* 1.0.0 2022/07/18 Alex build this file
******************************************************************************
*/
#include "vox_module.h"
#include "led.h"
#include "system.h"
#include "discharge_module.h"
#include "sleep.h"
#include "userapp.h"
bit Vor_Vout_Enable = OFF; //OFF:用于BOOST开启后延时开启VOUT输出TRUE:用于判断是正常充电还是IOFF充电。
bit Vol_Vout_Enable = OFF;
#if VOX_ENABLE
/******************************************************************************\
Macro definitions
\******************************************************************************/
#define VOX_IOFF_DET_DEBOUNCE 40 //Vox Ioff检测延时4s为了保证耳机端初始化完成开始抽电流
#define VOX_LOADON_DET_DEBOUNCE 2
#define T10MIN_DEBOUNCE 150 //10分钟定时4s一次。150
/******************************************************************************\
Variables definitions
\******************************************************************************/
Vox_State_e Vol_State = VOX_NONE_IN_BOX;
//uint8_t Vol_Loadon_Det_Debounce = 0;
uint8_t Vol_Ioff_Det_Debounce = 0;
//uint8_t Vol_LiPro_Det_Debounce = 0;
//bit Vol_LiPro_Flag = 0;
Vox_State_e Vor_State = VOX_NONE_IN_BOX;
//uint8_t Vor_Loadon_Det_Debounce = 0;
uint8_t Vor_Ioff_Det_Debounce = 0;
//uint8_t Vor_LiPro_Det_Debounce = 0;
//bit Vor_LiPro_Flag = 0;
uint8_t Vol_Output_Short_Debounce = 0;
uint8_t Vor_Output_Short_Debounce = 0;
bit Vol_Bat_Full_Flag = 0;
bit Vor_Bat_Full_Flag = 0;
/******************************************************************************\
Functions definitions
\******************************************************************************/
/*
*******************************************************************************
* void Vox_init(void)
*
* Description : Vox Initialization :Vox初始化函数
*
* Arguments : NONE
* Returns : NONE
* Notes : NONE
*
*******************************************************************************
*/
#if 0
void Vox_init(void)
{
VOX_CTL0 = 0xC3; //VOX 负载接入、存在识别功能使能负载自动识别。打开Vox vds钳压环使能主要用于VOX 5V输出
/*
SFRADDR = VOX_CON0; //设置VOX输出500mA负载识别电流2.5uA。
SFRDATA &= 0xE0;
SFRDATA |= (VOX_IOUT_500MA << 3) | VOX_ADT_Cur_2_5UA;
*/
Vol_State = VOX_NONE_IN_BOX;
Vor_State = VOX_NONE_IN_BOX;
}
#endif
#if 0
/*
*******************************************************************************
* uint8_t VOL_EN_Type(VOL_Enable_Type_e VOL_Enable_Type)
*
* Description : VOL Open(EN_VO)
* Arguments :
* Returns :
* Notes :
*
*******************************************************************************
*/
void VOL_EN_Type(VOX_Enable_Mode_e VOL_Enable_Mode)
{
if(VOL_Enable_Mode == VOX_VOUT_Mode )
{
VOX_CTL0 &= ~0x10; //VOL Disable 5V And Enable VOR ADT
VOX_CTL0 |= 0x10; //VOL Enable 5V
}
else
{
VOX_CTL0 &= ~0x10; //VOL 5v Off
}
}
/*
*******************************************************************************
* void VOR_EN_Type(VOR_Enable_Type_e VOR_Enable_Type)
*
* Description : VOL Open(EN_VO)
* Arguments :
* Returns :
* Notes :
*
*******************************************************************************
*/
void VOR_EN_Type(VOX_Enable_Mode_e VOR_Enable_Mode)
{
if(VOR_Enable_Mode == VOX_VOUT_Mode )
{
VOX_CTL0 &= ~0x20; //VOR Disable 5V And Enable VOR ADT
VOX_CTL0 |= 0x20; //VOR Enable 5V
}
else
{
VOX_CTL0 &= ~0x20; //VOR 5v Off
}
}
#endif
/*
*******************************************************************************
* void Vol_Det_Machine(void)
*
* Description : Vol Detect: (100ms调用周期)
*
* Arguments : NONE
* Returns : NONE
* Notes : NONE
*
*******************************************************************************
*/
#if DISPLAY_6PIN_188
bit Vol_Outbox_Disp_Flag = 0;
bit Vol_Intobox_Disp_Flag = 0;
#endif
void Vol_Det_Machine(void)
{
if( gBoost_Prepared_Flag )
{
switch( Vol_State )
{
case VOX_GET_INTO_BOX: //耳机入仓
if( (VOX_CTL0 & 0x10) != 0x10 ) //1、当前已经开启了VOUT则无需重复开启原因在使能VOUT前需要先关闭VOUT使能如果连续开会出现一段时间断开的情况。
{
VOX_CTL0 &= ~0x10; //VOL Disable 5V And Enable VOR ADT
VOX_CTL0 |= 0x10; //VOL Enable 5V
}
Vol_State = VOX_STAY_IN_BOX;
break;
case VOX_STAY_IN_BOX: //耳机在仓
if( (CHIP_STA1 & 0x24) == 0x24 ) //Vox在充电过程中出现了Loadon和IOFF同时存在的状态则出现如下三种情况1、耳机出仓2、耳机电池充满3、耳机电池锂保。
{
#if DISPLAY_6PIN_188
if( Vol_Intobox_Disp_Flag ) //拔出左耳,左耳对应的图标闪一次
{
Vol_Intobox_Disp_Flag = 0;
Vol_GetOut_Box_Flag = 1; //左耳出盒标志置1
//LED_On_Timer = 0;
Vol_Outbox_Disp_Flag = 1;
}
#endif
Vol_Ioff_Det_Debounce++;
if( Vol_Ioff_Det_Debounce >= VOX_IOFF_DET_DEBOUNCE ) //重载转轻载(耳机出仓后)需延时4s
{
Vol_Ioff_Det_Debounce = 0;
//if( ON == Vol_Vout_Enable ) //Vox在正常充电过程中出现了IOFF状态则说明1、耳机出仓2、耳机电池充满
{
VOX_CTL0 &= ~0x10; //VOL Disable 5V And Enable VOR ADT
Vol_Bat_Full_Flag = 1;
#ifdef _DEBUG_VOX
printf("Vol Get Out\r\n");
#endif
}
}
}
else
if( (CHIP_STA1 & 0x24) == 0x20 ) //观察CHIP_STA1的状态无IOFF有Loadon说明1、耳机出仓后4s内耳机再次入仓2、10分钟未满耳机电池退出锂保状态进入正常充电
{
Vol_Ioff_Det_Debounce = 0;
Vol_Vout_Enable = ON; //正常充电标志置ON。
#if DISPLAY_6PIN_188
if( Vol_Outbox_Disp_Flag ) //左耳4s内再次入盒左耳对应的图标闪一次
{
Vol_Outbox_Disp_Flag = 0;
Vol_GetOut_Box_Flag = 0;
Disp_Vol_Lev = Disp_Vor_Lev;
//LED_On_Timer = 0;
}
Vol_Intobox_Disp_Flag = 1;
#endif
if( Vol_Bat_Full_Flag ) //耳机充满在ADT模式下只有Loadon状态则说明耳机充满。
{
Vol_Vout_Enable = OFF;
#if DISPLAY_6PIN_188
LED_On_Timer = 0;
#endif
#ifdef _DEBUG_VOX
printf("Vol Bat Full\r\n");
#endif
}
}
else
if( !(CHIP_STA1 & 0x24) ) //CHIP_STA1无loadon和ioff状态则说明耳机出仓了。
{
Vol_State = VOX_NONE_IN_BOX;
#if DISPLAY_6PIN_188
Vol_GetInto_Box_Flag = 0;
#endif
Vol_Bat_Full_Flag = 0;
}
break;
case VOX_NONE_IN_BOX: //空仓
//VOL_EN_Type(VOX_ADT_Mode);
VOX_CTL0 &= ~0x10; //VOL Disable 5V And Enable VOR ADT
//Vol_Loadon_Det_Debounce = 0;
Vol_Ioff_Det_Debounce = 0;
Vol_Vout_Enable = OFF;
if( CHIP_STA1 & 0x20 ) //ADT模式下出现Loadon信号则说明有耳机入仓。
{
Vol_State = VOX_GET_INTO_BOX;
#if DISCHARGE_ENABLE
BST_EN = 1; //Boost Enable异常时由硬件主动关闭。
#endif
#if DISPLAY_6PIN_188
Vol_GetInto_Box_Flag = 1;
Disp_Vol_Lev = Disp_Vor_Lev;
//LED_On_Timer = 0;
#endif
#ifdef _DEBUG_VOX
printf("VO_INTO_BOX\r\n");
#endif
}
break;
default:
break;
}
}
else //Boost保护后VOX恢复到最初状态。
{
Vol_State = VOX_NONE_IN_BOX;
}
/*Vol 过流保护每隔200ms打嗝一次*/
if( IRQ_FLAG0 & 0x04 )
{
Vol_Output_Short_Debounce++;
if( Vol_Output_Short_Debounce >= 2 ) //Vor短路保护200ms后重新开启ADT
{
Vol_Output_Short_Debounce = 0;
IRQ_FLAG0 = 0x04;
Vol_State = VOX_NONE_IN_BOX;
}
}
}
/*
*******************************************************************************
* void Vor_Det_Machine(void)
*
* Description : Vor Detect: (100ms调用周期)
*
* Arguments : NONE
* Returns : NONE
* Notes : NONE
*
*******************************************************************************
*/
#if DISPLAY_6PIN_188
bit Vor_Outbox_Disp_Flag = 0;
bit Vor_Intobox_Disp_Flag = 0;
#endif
void Vor_Det_Machine(void)
{
if( gBoost_Prepared_Flag )
{
switch( Vor_State )
{
case VOX_GET_INTO_BOX: //耳机入仓
if( (VOX_CTL0 & 0x20) != 0x20 ) //1、当前已经开启了VOUT则无需重复开启原因在使能VOUT前需要先关闭VOUT使能如果连续开会出现一段时间断开的情况。
{
VOX_CTL0 &= ~0x20; //VOR Disable 5V And Enable VOR ADT
VOX_CTL0 |= 0x20; //VOR Enable 5V
}
Vor_State = VOX_STAY_IN_BOX;
break;
case VOX_STAY_IN_BOX: //耳机在仓
if( (CHIP_STA1 & 0x88) == 0x88 ) //Vox在充电过程中出现了Loadon和IOFF同时存在的状态则说明1、耳机出仓2、耳机电池充满3、耳机电池锂保。
{
#if DISPLAY_6PIN_188
if( Vor_Intobox_Disp_Flag ) //
{
Vor_Intobox_Disp_Flag = 0;
Vor_GetOut_Box_Flag = 1; //右耳出盒标志置1
//LED_On_Timer = 0;
Vor_Outbox_Disp_Flag = 1;
}
#endif
Vor_Ioff_Det_Debounce++;
if( Vor_Ioff_Det_Debounce >= VOX_IOFF_DET_DEBOUNCE ) //重载转轻载(耳机出仓后)需延时4s
{
Vor_Ioff_Det_Debounce = 0;
//if( ON == Vor_Vout_Enable ) //Vox在正常充电过程中出现了IOFF状态则说明1、耳机出仓2、耳机电池充满
{
VOX_CTL0 &= ~0x20; //VOR Disable 5V And Enable VOR ADT
Vor_Bat_Full_Flag = 1;
#ifdef _DEBUG_VOX
printf("Vor Get Out\r\n");
#endif
}
}
}
else
if( (CHIP_STA1 & 0x88) == 0x80 ) //观察CHIP_STA1的状态无IOFF有Loadon说明1、耳机出仓后4s内耳机再次入仓2、10分钟未满耳机电池退出锂保状态进入正常充电3、耳机锂保满10分钟。
{
Vor_Ioff_Det_Debounce = 0;
Vor_Vout_Enable = ON;
#if DISPLAY_6PIN_188
if( Vor_Outbox_Disp_Flag ) //左耳4s内再次入盒左耳对应的图标闪一次
{
Vor_Outbox_Disp_Flag = 0;
Vor_GetOut_Box_Flag = 0;
Disp_Vor_Lev = Disp_Vol_Lev;
}
Vor_Intobox_Disp_Flag = 1;
#endif
if( Vor_Bat_Full_Flag )
{
Vor_Vout_Enable = OFF;
#if DISPLAY_6PIN_188
LED_On_Timer = 0;
#endif
#ifdef _DEBUG_VOX
printf("Vor Bat Full\r\n");
#endif
}
}
else
if( !(CHIP_STA1 & 0x88) ) //CHIP_STA1无loadon和ioff状态则说明耳机出仓了。
{
Vor_State = VOX_NONE_IN_BOX;
#if DISPLAY_6PIN_188
Vor_GetInto_Box_Flag = 0;
#endif
Vor_Bat_Full_Flag = 0;
}
break;
case VOX_NONE_IN_BOX: //空仓
VOX_CTL0 &= ~0x20; //VOR Disable 5V And Enable VOR ADT
Vor_Ioff_Det_Debounce = 0;
Vor_Vout_Enable = OFF;
/* Loadon状态位存在则说明耳机入仓开启后续充电流程。*/
if( CHIP_STA1 & 0x80 )
{
Vor_State = VOX_GET_INTO_BOX;
#if DISCHARGE_ENABLE
BST_EN = 1; //Boost Enable异常时由硬件主动关闭。
#endif
#if DISPLAY_6PIN_188
Vor_GetInto_Box_Flag = 1;
Disp_Vor_Lev = Disp_Vol_Lev;
#endif
#ifdef _DEBUG_VOX
printf("VOR_INTO_BOX\r\n");
#endif
}
break;
default:
break;
}
}
else //Boost保护后VOX恢复到最初状态。
{
Vol_State = VOX_NONE_IN_BOX;
}
/*Vor 过流保护(读中断标志位)每隔200ms打嗝一次*/
if( IRQ_FLAG0 & 0x08 )
{
Vor_Output_Short_Debounce++;
if( Vor_Output_Short_Debounce >= 2 ) //Vor短路保护200ms后重新开启ADT
{
Vor_Output_Short_Debounce = 0;
IRQ_FLAG0 = 0x08;
Vor_State = VOX_NONE_IN_BOX;
}
}
}
#endif

View File

@ -0,0 +1,96 @@
/*
******************************************************************************
*
* @file watchdog.c
* @brief watchdog module
*
*
* @version 1.0
* @date 2022/08/04 15:00:40
* @author Alex Xu
*
* Copyright (c) 2013-2099,Tkplusemi Technology Co.,Ltd.
* All Rights Reserved
*
* History:
* Revision Date Author Desc
* 1.0.0 2022/08/04 Alex build this file
******************************************************************************/
/*_____ I N C L U D E S ____________________________________________________*/
#include "watchdog.h"
#if 0
/*_____ D E F I N I T I O N S ______________________________________________*/
/******************************************************************************\
Macro definitions
\******************************************************************************/
/******************************************************************************\
Variables definitions
\******************************************************************************/
/******************************************************************************\
Functions definitions
\******************************************************************************/
/*_____ F U N C T I O N S __________________________________________________*/
/*
*******************************************************************************
* void Watchdog_Init(uint8_t watchdog_time)
*
* Description : watchdog Initialization. WDT_TM = 012
wdtrel.7=1 Sys_Fre/12*32wdtrel.7=0 Sys_Fre/12*2.
Sys_Fre = 12MHzwdtrel.7=0
(1/Sys_Fre)*12*2*256~(1/Sys_Fre)*12*2*256*128 = 5ms~65ms
Sys_Fre = 12MHzwdtrel.7=1
(1/Sys_Fre)*12*32*256~(1/Sys_Fre)*12*32*256*128 = 80ms~1s
*
* Arguments :
* Returns :
* Notes :
*
*******************************************************************************
*/
void Watchdog_Init(uint8_t watchdog_time)
{
switch(watchdog_time)
{
case _WDT_TIME_65ms_:
WDTREL = 0x00; //WDTPS = 0,wdt_f = wdt_f1/2;WDTPS = 1,wdt_f = wdt_f1/32;
break;
case _WDT_TIME_1s_:
WDTREL = 0x80; //WDTPS = 0,wdt_f = wdt_f1/2;WDTPS = 1,wdt_f = wdt_f1/32;
break;
}
SWDT = 1; //Watchdog Start
}
/*
*******************************************************************************
* void Watchdog_Clear(void)
*
* Description : Feed watchdog
*
* Arguments :
* Returns :
* Notes :
*
*******************************************************************************
*/
void Watchdog_Clear(void)
{
WDT = 1;
SWDT = 1;
}
#endif