上传SY8835初版软件源码。

This commit is contained in:
Alex xu 2024-11-27 16:16:31 +08:00
commit fab81d0228
112 changed files with 76094 additions and 0 deletions

Binary file not shown.

View File

@ -0,0 +1,653 @@
:0300000002194A98
:0F194A0075FE7275FF00758E007581B6021994D7
:0F23320053797374656D20496E69742E0D0A001E
:1022C200121F9A7BFF7A237932120466121AC612FF
:0422D2001EF280F880
:10106C004100CE0002B5000002AF000002AD00004E
:10107C0002AB000002B1000002A900004100CF0049
:10108C00029D000002A3000002B3000002A70000B2
:0C109C0002A50000029F000002A100005D
:10006E0075FE3175FF8175FE0E43FF107DAB7F303F
:0C007E001223B475FE3243FF03D2BD22F2
:1021B700900000EFF04408FD7F31122027900000C7
:0F21C700E09000CFF075A38175FE3275FF012205
:03006B00020EB8CA
:100EB800C0E0C0F0C083C082C0D075D000C000C000
:0D0EC80001C002C003C004C005C006C00781
:100ED500900048E4F0E5FEF0E5A420E003020FC829
:100EE5007F351223BB78AF760008A6077F3612231D
:100EF500BBEF540378AF46F608E6F618E6FE08E6BB
:100F0500FF7C097DC4120E8B780A120E2978AFA6D4
:100F15000608A6079000CFE0120E650F3C000F4FA4
:100F2500010F58020F6B030F7E040F91050FA406E6
:100F35000FB30700000FC878AFE6FE08E67802CECB
:100F4500C313CE13D8F9799E807578B0E625E0797C
:100F5500B6805378AFE6FE08E67803C333CE33CECA
:100F6500D8F979A4805978AFE6FE08E67802C3334C
:100F7500CE33CED8F979B4804678AFE6FE08E67868
:100F850002C333CE33CED8F979A8803378AFE6FEE5
:100F950008E67802C333CE33CED8F979A680207817
:100FA500B0E625E079A0F718E63319F7801578AF94
:100FB500E6FE08E67802CEC313CE13D8F979A2F778
:100FC500EE19F7E5A430E11B7F371223BB78AD7628
:100FD5000008A6077F381223BBEF540378AD46F609
:100FE50008E6F6E5A430E21B7F391223BB78AB7621
:100FF5000008A6077F3A1223BBEF540378AB46F6E9
:1010050008E6F6E5A430E31B7F3B1223BB78B176F7
:101015000008A6077F3C1223BBEF540378B146F6C0
:1010250008E6F6E5A430E41B7F3D1223BB78A976DC
:101035000008A6077F3E1223BBEF540378A946F6A6
:0C10450008E6F675A40F900048E0F5FEE8
:10105100D007D006D005D004D003D002D001D000F3
:0B106100D0D0D082D083D0F0D0E0329D
:0510A800C136010D033B
:10227D00E4780FF67811F6780DE67810F678127688
:08228D00047D207F40022027A0
:101D13009000C4E05463600CE4FF122153E4780E96
:101D2300F6C236229000C5E05407FFBF0607D2363D
:101D3300780E7602227810E6FD7F22122027781291
:101D4300E6FD7F21122027780FE6C454F078114670
:101D5300FD7F231220277F01122153780E7601C2C3
:021D6300362226
:0410AD00C12EC12F60
:101DB4009000C4E0FF30E603C22E22EF30E205C2F9
:101DC4002ED22F22303508E4FF122175C22E229024
:101DD40000C4E030E503C22E22D22E302F19780E33
:101DE400E6B40113C378B6E6941018E6940E4005E1
:081DF400D22EC22F22C22E22C2
:0810B100C130C1314100D1FF43
:101FFB009000C5E0FE5420FF9000D1E06F601CEE16
:10200B0030E5089000D07401F08005E49000D0F02A
:0B201B00D230D231D22A9000D1EFF079
:012026002297
:101F65006C6F6E672032732070726573730D0A0093
:101F7500737570706572206C6F6E67203873207092
:101F8500726573730D0A0073686F727420707265E1
:051F950073730D0A004A
:1010B900C11DC11CC11B0118004100C8004100C766
:0610C900004200C9000016
:10154F009000C5E030E4379000C9E475F001120E49
:10155F00029000C9E0FEA3E0FFC39464EE94004044
:10156F0007201914D2198010C3EF9490EE94014004
:10157F0007201A04D21AD21BD216C217803830167F
:10158F002EC216D217C21A9000C9E0FEA3E0FFD3F5
:10159F009419EE94005008D21DD218D22A8010C38D
:1015AF00EF94FAEE94005007301904C219D21CE4DC
:1015BF009000C9F0A3F030173FC217301C14C21CA3
:1015CF0078187602E49000C8F07BFF7A1F796512D5
:1015DF000466301B0FC21B781876037BFF7A1F79C6
:1015EF0075120466301815C218781876017BFF7AC9
:1015FF001F798C1204668004E47818F69000D0E00E
:10160F00640160030216CC7818E6640270769000CD
:10161F00C8E0C39401500F7D017F0112121EE478C0
:10162F009BF608F6804B9000C7E0D394054004E486
:10163F00F08032789CE6B4010DE4FD7F0212121E99
:10164F00789C7602802B789CE66402702418E66002
:10165F00197D017F0212121EE4789BF608F69000A6
:10166F00C8F07818F67F030219D9E4FD7F01121232
:10167F001E9000C8E0D3941440349000C7E004F0EB
:10168F00E4A3F0227818E6640370329000C8E0FFFC
:10169F00C3941E5020EF540125E060047D018009A2
:1016AF009000C8E030E007E4FD7F0312121E9000A7
:0D16BF00C8E004F022E47818F69000C8F0AE
:0116CC0022FB
:1010CF0041004B0041004A0041004C0041004900E3
:0F23410075FE0B75FF0FC290C291C293C292221C
:10224900EF14600D14600D14600D2403700BD2900F
:0A22590022D29122D29222D29322C7
:0521D600900000E0FF95
:1021DB00EF14600D14600D14600D2403700BC2908E
:0A21EB0022C29122C29222C2932266
:101BF800E4FF744D2FF582E43400F583E4F074516A
:101C08002FF582E43400F583E4F0EF25E02455F560
:101C180082E43400F583E4F0A3F0EF25E0245DF5D9
:101C280082E43400F583E4F0A3F0EF25E02465F5C1
:101C380082E43400F583E4F0A3F0EF25E0246DF5A9
:0F1C480082E43400F583E4F0A3F00FEFB404A3BB
:011C5700226A
:101B9500AC07744D2CF582E43400F583EDF0EAC30F
:101BA50013FEEB13FFEC25E02455F582E43400F534
:101BB50083EEF0A3EFF0AF03EC25E0245DF582E4BE
:101BC5003400F583EAF0A3EFF0900005E0FEA3E012
:101BD500FFEC25E02465F582E43400F583EEF0A3FF
:101BE500EFF0EC25E0246DF582E43400F583E4F0B4
:031BF500A3F02238
:101E7C00744D2FF582E43400F583EDF074512FF599
:101E8C0082E43400F583EBF0EF25E02455F582E491
:101E9C003400F583E4F0A37469F0EF25E0246DF5CC
:0B1EAC0082E43400F583E4F0A3F02290
:10008E00E4900000F0F0900000E0FFC39404400301
:10009E000203D0744D2FF582E43400F583E0602224
:1000AE0024FE602414700302019814700302020FE0
:1000BE002403600302036C900000E0FF1222490249
:1000CE00036C1221D602036C900000E0FF25E024A1
:1000DE0055F582E43400F583E0FCA3E0FDEF25E066
:1000EE00246DF582E43400F583E0FEA3E0C39DEEBB
:1000FE009C500512224980031221D6900000E0FF89
:10010E0025E0245DF582E43400F583E0FCA3E0FDF8
:10011E00EF25E0246DF582E43400F583E0FEA3E0E4
:10012E00C39DEE9C500302036C900000E025E0247A
:10013E006DF582E43400F583E4F0A3F0EF25E024BE
:10014E0065F582E43400F583E0FEA3E0D39400EE7F
:10015E0094004016900000E025E02465F582E4341A
:10016E0000F58374FFF5F0120E02900000E0FF25FB
:10017E00E02465F582E43400F583E0FCA3E04C60F6
:10018E000302036C744D2F02022B900000E0FF253A
:10019E00E02455F582E43400F583E0FCA3E0FDEFA6
:1001AE0025E0246DF582E43400F583E0FEA3E0D370
:1001BE009DEE9C500512224980031221D69000001C
:1001CE00E0FF25E0245DF582E43400F583E0FCA336
:1001DE00E0FDEF25E0246DF582E43400F583E0FECA
:1001EE00A3E0C39DEE9C500302036C900000E0253B
:1001FE00E0246DF582E43400F583E4F0A3F002030D
:10020E006C900000E0FF2451F582E43400F583E0A9
:10021E007017122197C237900000E0244DF582E44A
:10022E003400F583E4F002036C900000E0FF2451EB
:10023E00F582E43400F583E0FE6402704B2037143F
:10024E00D237EF25E02455F582E43400F583E4F04F
:10025E00A37469F0900000E0FF25E02455F582E4D8
:10026E003400F583E475F001120E02EF25E02455FB
:10027E00F582E43400F583E0FCA3E0C394FEEC9435
:10028E00005003020356804EEE6401705A20371759
:10029E00D237900000E025E02455F582E43400F5D5
:1002AE0083E4F0A374FEF0900000E0FF25E02455F7
:1002BE00F582E43400F58374FFF5F0120E02EF259B
:1002CE00E02455F582E43400F583E0FEA3E0D394F8
:1002DE0069EE94005072900000E02451F582E434EF
:1002EE0000F583E4F08061900000E0FF2451F58278
:1002FE00E43400F583E06403704EEF25E02455F5F9
:10030E0082E43400F583E0FEA3E0FFC394FEEE9496
:10031E00004004D237800BD3EF946AEE9400500263
:10032E00C237900000E025E0245530370DF582E409
:10033E003400F58374FFF5F0800BF582E43400F59C
:10034E0083E475F001120E02900000E0FF25E02418
:10035E0055F582E43400F583A3E0FD121D6590008F
:10036E0000E0FF7011744D2FF582E43400F583E048
:10037E0090004BF08043900000E0B40110244DF546
:10038E0082E43400F583E090004AF0802C90000067
:10039E00E0B40210244DF582E43400F583E09000C1
:1003AE004CF08015900000E0B4030E244DF582E46D
:1003BE003400F583E0900049F0900000E004F00274
:1003CE000094E4900000F0900000E0FFC39404500D
:1003DE001BEF25E0246DF582E43400F583E475F01F
:0C03EE0001120E02900000E004F080DB21
:0103FA0022E0
:101CB800456E74657220536869704D6F646521289C
:101CC8006C696E653A2564290D0A004E6F742047C9
:101CD800657420496E746F20536C6565702843687D
:101CE800675374617475733A25642C566F785F5620
:101CF8006F75743A25642C526573746172745F460B
:0B1D08006C61673A2564292E0D0A006B
:1010DF00C1334100B9004200BA00004100BC0F41CA
:0510EF0000B800C13251
:1022D600D2AC759A03D2BCD2BDD2A9D2AB75FE30B0
:0422E60043FF802210
:1022EA00C2ACE4F59AC2BCC2BDC2A9C2AB75FE308B
:0422FA0053FF7F22ED
:1000260030333730223DC2229000B8E004F0E0C3FE
:1000360094054010E4A3F07DAA7F4F122027E49098
:1000460000B8F0229000B8E0B404187BFF7A1C795F
:10005600B890000474DCF00204661222EA438702B8
:040066001222D6226A
:101EB700780EE6FF64016006200C0330322B7BFFAF
:101EC7007A1C79D3900004E4F0A3EFF0A20CE4FFAE
:101ED70033A3CFF0A3EFF0A232E4FF33A3CFF0A3F5
:0B1EE700EFF0120466C232C322D322C7
:101F9A0012207E12232212236D12006E7D087F7694
:101FAA001223B4D2A8D2AF12227D7D697F031222F6
:101FBA00AC122341121BF812000E121FCE9000AD74
:041FCA007401F0228C
:030003000223C213
:0623C200D23275E20F3279
:1010F4002040270000000000000000000000000065
:1011040000000000000000000000000000000000DB
:1011140000000000000000000000000000000000CB
:1011240000000000000000000000000000000000BB
:07113400000000C12DC12CD9
:10207E0075FE0443FF0C75FE0343FF0C75FE0E53F5
:10208E00FFF043FF09D2DF43878075BA0375AADCE0
:06209E00759852D2AC223D
:061F2C00900043120E5C60
:101F3200E4900046F05398EFF0900046E0C39FE42F
:101F42009E501C202BFDD22B900043E475F0011211
:101F52000E45120D88F599900046E004F080DA43B0
:021F62009810D5
:011F6400225A
:030023000216CDF5
:1016CD00C0E0C0F0C083C082C0D075D000C000C0E3
:0716DD0002C003C006C007B4
:1016E400309904C299C22B2098030217A2C298D23F
:1016F400329000BDE014602114604D2402600302A6
:1017040017A2E5999000BDB4550D7401F0A3E4F05F
:10171400A3F09000BE80138027AF997E00BE551DB4
:10172400BFAA1A9000BD7402F0A3A3E02427F8A670
:10173400999000BEE475F001120E0280619000BD24
:10174400E4F0A3F0A3F080569000BEA3E02427F8B1
:10175400A6999000BEE475F001120E029000BEE05E
:10176400FAA3E0FB64074A700D7829E62404FEE43A
:1017740033A3F0A3CEF09000C0E06A7003A3E06B43
:10178400600FD39000BFE094409000BEE09400400E
:0E1794000D9000BEE4F0A3F09000BDF0D22D49
:1017A200D007D006D003D002D000D0D0D082D083D0
:0517B200D0F0D0E03290
:0E235F00900029EFF012238F900029E0FF225A
:1023220075F10A759F03759EFD759692759A022244
:08238F00202CFDD22C8F9722B7
:03008B00022295B9
:10229500C0E0E59630E1055396FDC22CE59630E0A9
:0722A500035396FED0E03266
:1017B700506F776572204F6E2053746174652148AE
:1017C700616C6C28307825782920286C696E653A19
:1017D7002564290D0A004177616B65205374617494
:1017E7006520286C696E653A2564290D0A004E6FDD
:1017F700726D616C20537461746520286C696E6525
:101807003A2564290D0A00536C656570205374618D
:10181700746520286C696E653A2564290D0A0053A2
:101827005441303A307825782C535441313A307846
:1018370025782C535441323A307825782C436869FF
:10184700705F5354413A307825782C564F585F5380
:1018570054413A307825782E4465635F536C65654B
:10186700703A25640D0A004465636E745F536C65B6
:10187700657044656C61792052656C6F61642E0DEB
:101887000A00456E746572205374616E6462792034
:081897004D6F6465210D0A008C
:10113B004300AD0402024100AB00C12AC1294100AA
:0E114B00AC004100B0004100A9004100AA0024
:1020C800E4FB7D04FF121E7CE4FB7D047F01121EED
:1020D8007CE4FB7D047F02121E7CE4FB7D047F030D
:0320E800021E7C59
:10076000780EE66401600302086230365C202705DB
:10077000D2271220C8E4900005F0A3F0FBFA7D0117
:10078000FF121B95E4900005F0A3F0FBFA7D017FBA
:1007900001121B95E4900005F0A3F0FBFA7D017FA8
:1007A00002121B95E4900005F0A3F0FBFA7D017F97
:1007B00003121B9590004B7401F090004AF09000DA
:1007C0004CF0900049F002085920260CD226D22A7B
:1007D000E49000B0F00208599000ABE0C3940150DF
:1007E00057E004F09000B0E014601A146027146021
:1007F000342403706490004BE06404605C7B017DF2
:1008000004E4FF802E90004AE06404604C7B017D8C
:10081000047F01801E90004CE06404603C7B017DFD
:10082000047F02800E900049E06404602C7B017D0F
:10083000047F03121E7C80219000ABE0C3940F5014
:1008400005E004F08013E49000ABF09000B0E00409
:10085000F0E0C394044002E4F0C231C20AC21DD2E7
:10086000282230260AC2261220C8D22AD2292230B3
:100870002A49E49000ABF0C22A900005F0A3F0FBF7
:10088000FAFDFF121B95E4900005F0A3F0FBFAFDC2
:100890007F01121B95E4900005F0A3F0FBFAFD7FA9
:1008A00002121B95E4900005F0A3F0FBFAFD7F0314
:1008B000121B9590004B7402020A1A20310C20285A
:1008C00009200A06201D03020A329000ABE0FFC394
:1008D00094015004E004F022EFC394644003020A40
:1008E000289000ABE004F07814E6C39419503790D8
:1008F000004BE064037003020A32E4900005F0A3A9
:10090000F07B64FA7D03FF121B9590004B7404F09A
:10091000E4900005F0A3F0FBFAFD7F01121B959017
:10092000004A740280327814E6C394325041E49055
:100930000005F0A3F0FBFA7D01FF121B9590004B20
:100940007401F0E4900005F0A3F0FBFA7D017F0153
:10095000121B9590004A7401F0E4900005F0A3F09A
:10096000FBFAFD7F02121B9590004C7402804878C0
:1009700014E6C3944B5057E4900005F0A3F0FBFA43
:100980007D01FF121B9590004B7401F0E49000056F
:10099000F0A3F0FBFA7D017F01121B9590004A74D1
:1009A00001F0E4900005F0A3F0FBFA7D017F021254
:1009B0001B9590004C7401F0E4900005F0A3F0FB4F
:1009C000FAFD7F03121B959000497402F0227814FF
:1009D000E6C39464505CE4900005F0A3F0FBFA7D5C
:1009E00001FF121B95E4900005F0A3F0FBFA7D01D6
:1009F0007F01121B95E4900005F0A3F0FBFA7D0146
:100A00007F02121B95E4900005F0A3F0FBFA7D0134
:100A10007F03121B9590004B7401F090004AF090F8
:100A2000004CF0900049F022C231C228C20AC21D17
:020A3000D22AC8
:010A320022A1
:102213009000CEE0FF04F01221B79000CEE0C3940B
:0B222300084005E4F07F01227F00224C
:1021F500121D13121DB4121FFB12154F122053305E
:0E2205001E0BC21E12189F120760120A33220F
:092386007B017A0079C2021C58A7
:1013BB00E4900000F09000ADE0FFA3E0FE6F70033F
:1013CB00021467A3EEF09000ADE0A3F024FE605191
:1013DB0014605F1460732403600302154E900005C4
:1013EB00E4F0A37403F07B647A007D02E4FF121B2C
:1013FB0095900005E4F0A37403F07B647A007D0202
:10140B007F01121B957BFF7A1779B79000D0E0FF15
:10141B00900004E4F0A3EFF0A37401F0A374E88050
:10142B00377BFF7A1779DD9000047401F0A374F217
:10143B0080269000BC740FF07BFF7A1779F5900033
:10144B00047401F0A374FE800F7BFF7A18790E9061
:10145B0000047402F0A3740AF00215289000AEE0A9
:10146B0024FE603914603D147003021540240360A0
:10147B000302154E9000A9E004F0E0C3940850035A
:10148B0002154E9000AD7402F0E49000A9F07815AF
:10149B00E6600302154E9000AD7404F0229000AD8F
:1014AB007403F02220220302154EC2227BFF7A180E
:1014BB0079269000C2E0FF900004E4F0A3EFF090D7
:1014CB0000C3E0FF900006E4F0A3EFF09000C4E04F
:1014DB00FF900008E4F0A3EFF09000C5E0FF900050
:1014EB000AE4F0A3EFF09000C6E0FF90000CE4F0EC
:1014FB00A3EFF09000BCE0FF90000EE4F0A3EFF040
:10150B001204669000BCE0D394004014E014F03059
:10151B003231C232740FF07BFF7A18796E02046697
:10152B007BFF7A1879891204669000AD7404F0E49D
:10153B009000B8F022121EB750030200269000ADA7
:03154B007402F037
:01154E00227A
:101EF20030212EC2219000AAE0FF04F0EF14600FFF
:101F0200146011146013240370171222138012122A
:101F12002386800D1221F580081213BBE49000AADB
:0A1F2200F0302305C22312008E22C6
:101B2F00564F58204348472046756C6C2E0D0A00BF
:101B3F00564F582047657420496E746F20536C655B
:101B4F0065702E0D0A00000000000000000000006C
:101B5F000000000000000000000000000000000076
:101B6F000000000000000000000000000000000066
:101B7F000000000000000000000000000000000056
:061B8F0000000000000050
:10115900C10CC10AC10B4100A6FFC1094200A1008F
:1011690000029B00004200A300004200A7000010FB
:1011790067000000000000000000000000000000FF
:10118900002024770000000000000000000000009B
:101199000000000000000000000000000000000046
:0C11A90000000000000000004100A50054
:0519D900900043EFF057
:1019DE00E4A3F0A3F07F27121E3F900044EFF07FA8
:1019EE0037121E3F900045EFF0900043E024FD605B
:1019FE001B14602424FE602824057035900045E0F9
:101A0E004494F0900044E04498F08025900044E027
:101A1E004406F054E7F08019900045E054FD80092B
:101A2E00900045E04402F054FEF0900044E054E192
:101A3E00F0900044E0FD7F27122027900045E0FD46
:051A4E007F3702202794
:100A33009000C4E054186003D20922C209202E0397
:100A4300020C4E303045200B0D7F3C1222637F0198
:100A5300122175D20B227F031219D9E49000A0F062
:100A630090009EF0A3F0C2009000D0E07015C20A7F
:100A7300D201C202C206C207C208789BF608F6D2A8
:100A83000C8006C201D202C204C230200203020B50
:100A93003390009EE0C394055003020BF290009F35
:100AA300E0C39405500A7F061219D990009F802A4B
:100AB3002000409000A0E0FFD3940B5022EF75F08C
:100AC3000384E5F07003FD80099000A0E020E007B7
:100AD3007D017F0612121E9000A0E004F080517F7A
:100AE300041219D9E49000A0F0D200D203C20BC2C1
:100AF3000C803D30030EC2039000C6E0540C9000FE
:100B03009DF0802C9000C6E0540CFBE4FAF9F890B9
:100B1300009DE0FFE4FCFDFEC3120E18601290007E
:100B2300C6E0540CFF6004D20AD22A90009DEFF075
:100B3300200103020C4B302925200B197F011221C0
:100B430075D20BD20CE490009FF090009EF09000C1
:100B5300A0F0C206227F031219D9C2298035900062
:100B63009EE0D394035003020BF290009FE0FFD367
:100B7300940B501FEF75F00384E5F07003FD8009BB
:100B830090009FE020E0077D017F8112121E9000FC
:100B93009F805C9000A0E0FFD39432501FEF75F06C
:100BA3000384E5F07003FD80099000A0E020E007D6
:100BB3007D017F0712121E9000A08033200648900B
:100BC30000C6E05430FFE4FCFDFE7B30FAF9F8C3C5
:100BD300120E1860119000C6E0540CFFE4FCFDFEF9
:100BE300EF600330346290009EE0C394325004E01F
:100BF30004F0227BFF7A1B792F120466D206C20B04
:100C03007F041219D980419000A0E0FFD3940B50C8
:100C130022EF75F00384E5F07003FD80099000A0D6
:100C2300E020E0077D017F8012121E9000A0E00407
:100C3300F08015200712D2077F041219D9C20C7B4A
:100C4300FF7A1B793F120466C20522200514D205E0
:100C53007F041219D9C20C9000C6E0540C90009D79
:100C6300F0229000C6E0540CFBE4FAF9F890009DE2
:100C7300E0FFE4FCFDFEC3120E1860129000C6E014
:0E0C8300540CFF6004D20AD22A90009DEFF0BC
:010C91002240
:0B1DFC00900043120E5C900046EDF0DA
:101E0700E4FE900046E0FD14F0ED6029900043E405
:101E170075F001120E45120D886EFEE4FFEFC394B4
:101E27000850DFEE30E007C313648CFE8004EEC376
:071E370013FE0F80E8AF0667
:011E3E002281
:08121E00900000EFF0A3EDF0D9
:10122600E4A3F078037C007D017BFF7A1B7955FEF1
:101236007F40120D62E4900003F0A37455F0A3748E
:10124600AAF0900000E0FE900007F0900001E0FD9B
:101256009000A6F0EE120E6512770112A40212F3A8
:1012660003130006130007134580134D8100001376
:101276005B9000067402F0ED700D9000087402F0A9
:10128600E4789BF602135B900001E06401600302C0
:10129600135B90000804F0E4789CF602135B900060
:1012A60006741BF07F05900001E075F012A4247708
:1012B6002FF8E6FE74032FF582E43400F583EEF092
:1012C6000FEFB412E17F17EFC39408400302135BDC
:1012D600900001E075F008A424672FF8E6FE740379
:1012E6002FF582E43400F583EEF00F80DA900006E5
:1012F6007402F090000804F0805B9000067405F01C
:101306009000087401F07814E6A3F0A37420F0901E
:101316000001E0FF700D9000A3E07002800F9000C6
:10132600A48015EFB4012E9000A4E0700890000B85
:1013360074FFF080209000A3E090000BF0801690E0
:1013460000067401F0800E9000067402F09000A56D
:10135600E0900008F0900006E02404FF900002F000
:10136600FD7B017A007903121DFC900002E0240344
:10137600F582E43400F583EFF07F011219D990006D
:1013860001E0FF700B75FE0E53FFF043FF08800D62
:10139600EFB4010975FE0E53FFF043FF0190000202
:1013A600E02401FFE433FE7B017A007903121F2C4F
:0513B6007F030219D9BC
:101A5300EF24FA604D14604A24067066E4FE742B8A
:101A63002EF8E6FF9000A6E075F012A424772EF876
:101A7300A6070EEEB412E7E4FE743D2EF8E6FF90DF
:101A830000A6E075F008A424672EF8A6070EEEB4AE
:101A930008E79000A6E07005789B760122789C7693
:101AA3000122782BE6B4E30D9000A17401F008E65F
:101AB3009000A3F0229000A27401F0782CE690002D
:021AC300A4F08D
:011AC50022FE
:10205300E4FF900000F0302D21C22DFB7A00792798
:102063007829E62403FD121DFC7829E6242AF8E6E4
:0A207300B50707782AE6FF121A539A
:01207D002240
:1011B500011500011400C134C13501135060280028
:1011C500750BB80BEA0C1C0C800CB20CE40D160D5B
:1011D500480D7A0DAC0DF70E420E880ED80F0A0F8A
:0911E5003C0F870FD2101D1068A9
:10189F00E4FF780EE6B40122EF25E02475F582E42B
:1018AF003400F583E0FCA3E02432FDE43CFCC37874
:1018BF00B6E69D18E69C501B801EEF25E02475F5BB
:1018CF0082E43400F583E0FCA3E0D378B696EC18FD
:1018DF009650050FEFB414BA7815E6FEEFD39E7845
:1018EF00134003068001169000C5E030E30A781517
:1018FF00EFF675F005A418F67813E6FED39496501C
:10190F0006EEC3940A500D7815EFF675F005A4187E
:10191F00F61876507815E6FFD394005004D2358030
:10192F0008EFD394014002C235EFD394015003D294
:0A193F003422EFD394024002C234B8
:01194900227B
:1011EE004100B4004100B7004100B3004200B1001D
:1011FE00004100B500C120C121C123C11FC11EC1C4
:09120E00224100B600C124C125F3
:101AC6009000B6E06062E4F0D2209000B4E004F04A
:101AD600E0C394054004E4F0D2219000B7E004F09E
:101AE600E0C3940A4004E4F0D2239000B1E475F018
:101AF60001120E02C39000B2E094649000B1E0942B
:101B0600004006E4F0A3F0D21E9000B3E004F0E03B
:101B1600C394FA4013E4F0D21F9000B5E004F0E05D
:091B260094044004E4F0D22222F0
:03000B000220EBE5
:1020EB00C0E0C083C082C0D074FC258CF58C7466B4
:1020FB00258AF58A9000B67401F0D0D0D082D083B7
:03210B00D0E032EF
:0E236D00758901758CFC758A66D2A9D28C2206
:1021970075FE0FEF25E0FE7403A806088002C3331F
:1021A700D8FCF452FFEFB4040675FE0FE4F5FF22E6
:1022AC0075FE11EF5407F5FF75FE12AF058FFF7524
:0622BC00FE1075FF012277
:101D650075FE0FEF25E0FE7403A806088002C33355
:101D7500D8FCF452FF7401A806088002C333D8FCCE
:101D850042FF75FE0B7401A807088002C333D8FC17
:101D950042FFEF70038DCE22EFB401038DCF22EF0A
:0F1DA500B402038DDE22EFB40304AF058FDF22FB
:033FFD00010101BE
:06121700011600011700A2
:101FCE00D28075FE0443FF0175FE0343FF0175FECB
:101FDE000243FF01D28175FE0443FF0275FE0343E7
:0D1FEE00FF0275FE0243FF02781676012205
:0C22FE00C28012230AD28112230AD2806F
:05230A00E4FF0FDFFEFF
:01230F0022AB
:10222E00D281D28012230A2081037F0022C2811222
:0B223E00230A3081037F00227F012271
:0F235000C280C281122305D28112230A02230AFE
:10231000C28012230AC28112230512230AC280023C
:02232000230A8E
:082397001222FEC28002230A9B
:0B237B001222FE12230AC28002230A75
:02213100AE07F7
:102133007D08AF051DEF6015C280EE30E704D28144
:0F2143008002C281EE25E0FE12230580E5C280F6
:01215200226A
:10210E007E08E4FDD281AF061EEF6012ED25E0FDE4
:10211E00C2801223053081EEED4401FD80E8C280BD
:02212E00AF05FB
:01213000228C
:10000E007D087F351220277D0A7F761223B47D046A
:05001E007F20022027F5
:101C5800900000120E5C7F10121E3F900000120EC2
:101C68003CEF120DCE7F11121E3F900000120E3C69
:101C7800900001EF120DE07F12121E3F900000123B
:101C88000E3C900002EF120DE07F13121E3F9000F1
:101C980000120E3C900003EF120DE07F14121E3F5D
:101CA800900000120E3C900004EF120DE07F00221D
:05215300900000EFF018
:10215800E47F20121E3F900000E06006EF4401FF7C
:0D2168008004EF54FEFFAD077F200220270A
:05217500900000EFF0F6
:10217A00E47F27121E3F900000E06006EF4401FF53
:0D218A008004EF54FEFFAD077F27022027E1
:05226300900000EFF007
:10226800E47F25121E3FEF54C0FF900000E04FFDB1
:052278007F2502202774
:1020A4009000CB120E5C120D88FD7F271220279022
:1020B40000CB120E3C900001120DA1FD7F371220BF
:0420C400277F002250
:07239F007DAA7F4F022027F9
:0723A6007D117F4F0220278B
:0723AD007D337F4F02202762
:0723B4008FFEAF058FFF2231
:0623BB008FFEAEFFAF062D
:0123C10022F9
:10202700900046EFF0A3EDF012222E7F0C12213123
:1020370012237B900046E0FF12213112237B900090
:0C20470047E0FF12213112237B022350DE
:051E3F00900046EFF0E9
:101E4400E4A3F012222E7F0C12213112237B900086
:101E540046E0FF12213112237B12222E7F0D122124
:101E64003112237B12210E900047EFF012239712B8
:071E74002350900047E0FF3E
:011E7B002244
:101959000222C2E493A3F8E493A34003F68001F2C0
:1019690008DFF48029E493A3F85407240CC8C3338F
:10197900C4540F4420C8834004F456800146F6DF5E
:10198900E4800B010204081020408090106CE47E72
:10199900019360BCA3FF543F30E509541FFEE49353
:1019A900A360010ECF54C025E060A840B8E493A31A
:1019B900FAE493A3F8E493A3C8C582C8CAC583CA45
:1019C900F0A3C8C582C8CAC583CADFE9DEE780BEFD
:01121D0000D0
:100C9200E709F608DFFA8046E709F208DFFA803E44
:100CA20088828C83E709F0A3DFFA8032E309F60831
:100CB200DFFA8078E309F208DFFA807088828C8399
:100CC200E309F0A3DFFA806489828A83E0A3F6084D
:100CD200DFFA805889828A83E0A3F208DFFA804C27
:100CE20080D280FA80C680D4806980F280338010FE
:100CF20080A680EA809A80A880DA80E280CA803367
:100D020089828A83ECFAE493A3C8C582C8CCC583DE
:100D1200CCF0A3C8C582C8CCC583CCDFE9DEE780AE
:100D22000D89828A83E493A3F608DFF9ECFAA9F02D
:100D3200EDFB2289828A83ECFAE0A3C8C582C8CC83
:100D4200C583CCF0A3C8C582C8CCC583CCDFEADE9C
:100D5200E880DB89828A83E493A3F208DFF980CCFE
:100D620088F0EF60010E4E60C388F0ED2402B404F7
:100D72000050B9F582EB2402B4040050AF2323459E
:060D82008223900CE273D5
:100D8800BB010689828A83E0225002E722BBFE0269
:090D9800E32289828A83E493229C
:100DA100BB010CE58229F582E5833AF583E0225007
:100DB10006E92582F8E622BBFE06E92582F8E22251
:0D0DC100E58229F582E5833AF583E493226B
:100DCE00BB010689828A83F0225002F722BBFE0104
:020DDE00F322FE
:100DE000F8BB010DE58229F582E5833AF583E8F049
:100DF000225006E92582C8F622BBFE05E92582C8F5
:020E0000F222DC
:100E0200C5F0F8A3E028F0C5F0F8E582158270027B
:060E12001583E038F02218
:100E1800EB9FF5F0EA9E42F0E99D42F0E89C45F030
:010E280022A7
:100E2900E8600FECC313FCED13FDEE13FEEF13FFA7
:030E3900D8F122CB
:090E3C00E0FBA3E0FAA3E0F922B7
:100E4500F8E0FBA3A3E0F925F0F0E5821582700236
:070E55001583E0FA38F022DA
:090E5C00EBF0A3EAF0A3E9F02297
:100E6500D083D082F8E4937012740193700DA3A31C
:100E750093F8740193F5828883E473740293686030
:060E8500EFA3A3A380DF30
:100E8B00EC8EF0A4CCC5F0CCCDF8EFA4CEC5F02DF4
:100E9B00FDE43CFCE8A42EC8C5F03DFDE43CFCEFB2
:0D0EAB00A4FFE5F028FEE43DFDE43CFC2240
:1003FB00E5082404F582E43400F583E00508229037
:10040B000001301403900004E475F001120E450254
:10041B000D88200DE97F2ED20D8018EF540F2490FC
:10042B00D43440D4FF30110BEF24BFB41A00500367
:10043B002461FFE50960021509050CE50C70020546
:10044B000B30140E900001E475F001120E45EF0213
:10045B000DCE02235F7403D2148003E4C214F5089B
:10046B00900001120E5CE4F509F50BF50CE5096043
:10047B00077F2012043E80F5750AFFC20EC20DC223
:10048B000FC210C212C213C21512040AFF700D3034
:10049B0014057F0012044FAF0CAE0B22B4255FC2C4
:1004AB00D5C21112040AFF24D0B40A00501A75F0F9
:1004BB000A780930D50508B6FF0106C6A426F62032
:1004CB00D5047002D21080D924CFB41A00EF500497
:1004DB00C2E5D211020650D20E80C6D20D80C0D218
:1004EB000F80BCD2D580BAD21280B47F2012043ECA
:1004FB00200F077401B5090040F11203FBFF120432
:10050B003E020478D215D21380951203FBFB120323
:10051B00FBFA1203FBF94A4B700679217A077BFF32
:10052B00200F2EE509602A7E008E82758300120D46
:10053B00A160060EEE650A70F0C2D5EBC0E0EAC012
:10054B00E0E9C0E0EE120697D0E0F9D0E0FAD0E097
:10055B00FB120D88FF60AAEBC0E0EAC0E0E9C0E047
:10056B0012043ED0E02401F9D0E03400FAD0E0FBD5
:10057B00E50A0460DCD50AD980877BFF7A0679937C
:10058B00D20F809C791080027908C213C2158008A3
:10059B00D2D5790A8004790AC2D5E50A047002F52E
:1005AB000AE4FAFDFEFF1203FBFC7B08200E13127C
:1005BB0003FBFD7B10300D0A1203FBFE1203FBFF46
:1005CB007B20EC3382D592D55013C3E4300D069FBC
:1005DB00FFE49EFEE4200E039DFDE49CFCE4CBF8BF
:1005EB00C20EEC700CCFCECDCCE824F8F870F380B3
:1005FB0017C3EF33FFEE33FEED33FDEC33FCEB3380
:10060B00FB994002FB0FD8E9EB300E05F8D0E0C4A4
:10061B0048B20EC0E00AEC4D4E4F78207B0070C202
:10062B00EAB50A0040BCC0E0120699D0F0D0E02039
:10063B000E04C4C0E0C4B20EC0F0120427D0F0D533
:10064B00F0EB020478120E65051553058F5804E67E
:10065B004C04E24205934F059B44059B4904FB4325
:08066B0005A155058546058532
:100673004505854707415004EA2D04EE2E05112B4D
:1006830004F223050F20072A2A04AA4800000509BB
:100693003F3F3F00790AA2D5201014301209B91048
:1006A300020404B9080104A2D52013025001042056
:1006B3000F68920FB509005034C0E07F2030101945
:1006C3007F30A20F72137212500F1206F0C20FC2C4
:1006D30013C212C2157F30800F301203E9C0E0123B
:1006E300043E301203D0E0F9D0E0B509CC30121744
:1006F3007F30B9100C12043E7F583011077F788089
:1007030003B9080312043E300F057F2D02043E7F18
:10071300202015F87F2B2013F322920F80CF286E11
:10072300756C6C2900D20E1203FB300EF8C20E78E2
:100733000930D50108F60204AA2D50434958120383
:10074300FB2403B405004001E490073C9312042FFB
:0D075300743A12042FD21075090402058FAC
:00000001FF

3844
Project/SY8835_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

509
Project/SY8835_Demo.uvopt Normal file
View File

@ -0,0 +1,509 @@
<?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>1</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>0</nTsel>
<sDll></sDll>
<sDllPa></sDllPa>
<sDlgDll></sDlgDll>
<sDlgPa></sDlgPa>
<sIfile></sIfile>
<tDll></tDll>
<tDllPa></tDllPa>
<tDlgDll></tDlgDll>
<tDlgPa></tDlgPa>
<tIfile></tIfile>
<pMon>BIN\MON51.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>0</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>0</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\pwm\pwm.c</PathWithFileName>
<FilenameWithoutPath>pwm.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>19</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>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>20</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\UsrSrc\i2c_simu\i2c_simu.c</PathWithFileName>
<FilenameWithoutPath>i2c_simu.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>21</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\UsrSrc\pmu\pmu.c</PathWithFileName>
<FilenameWithoutPath>pmu.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>22</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\UsrSrc\user\user.c</PathWithFileName>
<FilenameWithoutPath>user.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
</Group>
</ProjectOpt>

515
Project/SY8835_Demo.uvproj Normal file
View File

@ -0,0 +1,515 @@
<?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>.\..\Tools\hex2bin_TP.exe .\Objects\mcu.hex .\Objects\bin.bin 16 0</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>0</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\MON51.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>2</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>0x400</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;..\UsrInc\pmu;..\UsrInc\user</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>0X0000-0X03FF</XDataBaseAddress>
<PDataBaseAddress></PDataBaseAddress>
<BitBaseAddress></BitBaseAddress>
<DataBaseAddress></DataBaseAddress>
<IDataBaseAddress></IDataBaseAddress>
<Precede></Precede>
<Stack></Stack>
<CodeSegmentName>?CO?INITVARS(0x3FFD)</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>pwm.c</FileName>
<FileType>1</FileType>
<FilePath>..\UsrSrc\pwm\pwm.c</FilePath>
</File>
<File>
<FileName>InitVars.c</FileName>
<FileType>1</FileType>
<FilePath>..\UsrSrc\InitVars.c</FilePath>
</File>
<File>
<FileName>i2c_simu.c</FileName>
<FileType>1</FileType>
<FilePath>..\UsrSrc\i2c_simu\i2c_simu.c</FilePath>
</File>
<File>
<FileName>pmu.c</FileName>
<FileType>1</FileType>
<FilePath>..\UsrSrc\pmu\pmu.c</FilePath>
</File>
<File>
<FileName>user.c</FileName>
<FileType>1</FileType>
<FilePath>..\UsrSrc\user\user.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>

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

@ -0,0 +1,210 @@
$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 0;300H;TP3315
;
; <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;SYD
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:
;MOV CLKPRE,#0;SYD
MOV 0xFE,#0x72;TP3315
MOV 0xFF,#0x00;TP3315
MOV CKCON,#0;SYD
IF 0
IF IDATALEN <> 0
;MOV CLKPRE,#0;SYD
;MOV CKCON,#0;SYD
MOV R0,#IDATALEN - 1
CLR A
IDATALOOP: MOV @R0,A
DJNZ R0,IDATALOOP
ENDIF
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

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=SY8835_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 16 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.

61
UsrDoc/HEXBIN.bat Normal file
View File

@ -0,0 +1,61 @@
:: @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 exist
) else (
mkdir .\..\Out
)
::设置hex2bin_TP.exe位置 ,\Objects\hex2bin_TP.exe
set exe_location=%1
::获取工程名 mcu.hex
set project_name=%2
::设置.hex文件所在目录路径\Objects\
set obj_path=%3
::设置输出后的文件名
set output_name=TP3102_%project_name%_%year%_%month%_%day%_%hour%_%min%_%sec%
::将bin文件生成到HEXBIN文件夹 >nul屏蔽成功命令 .\Objects\hex2bin_TP.exe .\Objects\mcu.hex .\Objects\bin.bin 16 0
%exe_location% .%obj_path%%project_name%.hex .%obj_path%%output_name%.bin 16 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% Byte----
ECHO %SREC_PATH%\srec_cat.exe .%obj_path%%output_name%.bin.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
::将hex文件复制到HEXBIN文件夹
move .%obj_path%%output_name%.hex .\..\Out >nul
move .%obj_path%%output_name%.bin .\..\Out >nul
move .%obj_path%%output_name%_crc.bin .\..\Out >nul

Binary file not shown.

Binary file not shown.

Binary file not shown.

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.

Binary file not shown.

After

Width:  |  Height:  |  Size: 202 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

View File

@ -0,0 +1,18 @@
1、通讯协议的具体数据格式Header + Side + CMD + ......
2、盒子 -> 耳机和耳机 -> 盒子通讯协议的差异Header不同
3、灯显LED个数
4、各个触发动作如Key按下、Hall触发对应的显示灯效
5、各条协议通讯完成后相应的灯效
6、各条协议通讯的具体功能逻辑什么条件下发收到耳机的回复后仓需要的动作等。
如,盒子收到配对指令指令后,对应的配对数据需要显示的灯效。
7、其它重要的需要实现的功能。如呼吸灯、潮汐充、跟随充等。
8、盒子电池电量的精度
9、pattern如何发格式
10、心跳包如何发间隔多久发一次发多少次
11、交互地址的具体逻辑。和oppo的一样
12、充电流程的管理逻辑阶段充
13、放电流程的管理逻辑跟随充
14、NTC逻辑
15、SN码怎么处理具体应用
16、复位功能的要求
17、出厂运输和用户常规使用时功耗控制方面分别啥要求如何处理

Binary file not shown.

Binary file not shown.

BIN
UsrDoc/软件说明.doc Normal file

Binary file not shown.

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

@ -0,0 +1,113 @@
/*
******************************************************************************
*
* @file adc.h
* @brief adc module
* @ic sy8835
*
* @version 1.0
* @date 2024/11/01 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 2024/11/01 Alex build this file
******************************************************************************
*/
#ifndef __ADC_H__
#define __ADC_H__
/*_____ I N C L U D E S ____________________________________________________*/
#include "define.h"
#if ADC_ENABLE
/******************************************************************************\
Macro definitions
\******************************************************************************/
#define VREF 1000
/******************************************************************************\
Variables definitions
\******************************************************************************/
extern uint8_t ADC_Chn_Num;
extern idata uint16_t Vbat_Adc;
extern idata uint16_t g_Vpmu_Adc;
extern idata uint16_t g_Vntc_Adc;
extern idata uint16_t g_Vbjt_Adc;
extern idata uint16_t g_Vp13_Adc;
extern idata uint16_t g_Vref_Adc;
extern uint8_t g_PMU_ADC_Chn;
extern idata uint16_t g_pmu_Adc_Ivol;
extern idata uint16_t g_pmu_Adc_Vin;
extern idata uint16_t g_pmu_Adc_Vpmid;
extern idata uint16_t g_pmu_Adc_Vor;
extern idata uint16_t g_pmu_Adc_Vol;
extern idata uint16_t g_pmu_Adc_Vdd;
extern idata uint16_t g_pmu_Adc_Ivor;
typedef enum {
ADC_PMU_CH0 = 0x00,
ADC_NTC_CH1,
ADC_BJT_CH2,
ADC_P13_CH3,
ADC_VREF_CH4,
}ADC_CHANNELS_E;
typedef enum {
pmu_ADC_IVOL = 0x00,
pmu_ADC_VBAT, //vbat的2分压
pmu_ADC_VIN, //vin的8分压
pmu_ADC_VPMID, //PMID的4分压
pmu_ADC_VOR, //vor的4分压
pmu_ADC_VOL, //vol的4分压
pmu_ADC_VDD, //vdd的2分压
pmu_ADC_IVOR,
pmu_ADC_MAX,
}PMU_ADC_CHANNELS_E;
/******************************************************************************\
Functions definitions
\******************************************************************************/
extern void Adc_Init(void);
extern void PMU_ADC_Chn_Data(PMU_ADC_CHANNELS_E pmu_Adc_Chn);
#endif
#endif

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

@ -0,0 +1,62 @@
/*
******************************************************************************
*
* @file bat.h
* @brief bat module
* @ic sy8835
*
* @version 1.0
* @date 2024/11/01 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 2024/11/01 Alex build this file
******************************************************************************
*/
#ifndef __BAT_H__
#define __BAT_H__
/*_____ I N C L U D E S ____________________________________________________*/
#include "define.h"
/******************************************************************************\
Macro definitions
\******************************************************************************/
/******************************************************************************\
Variables definitions
\******************************************************************************/
extern idata uint8_t bat_level;
extern idata uint8_t bat_level_Pec;
extern bit F_batlevel_low; //电池低压
extern bit F_batlevel_protect; //低电保护
#if GAUGE_ENABLE
extern uint8 SOC_report; //上报的SOC值结合库仑计信息和SOC_int/SOC_dsg之间
extern void Bat_Cal_Init(void);
extern void Bat_Gauge_Handle(void);
#endif
#if BAT_VALUE
/******************************************************************************\
Functions definitions
\******************************************************************************/
extern void check_bat_level(void);
#endif
#endif

View File

@ -0,0 +1,84 @@
/*
******************************************************************************
*
* @file Charger_module.h
* @brief charger module
* @ic sy8835
*
* @version 1.0
* @date 2024/11/01 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 2024/11/01 Alex build this file
******************************************************************************
*/
#ifndef __CHARGER_MODULE_H__
#define __CHARGER_MODULE_H__
#include "define.h"
extern bit Charger_Done;
#ifdef NTC_ENABLE
extern bit NTC_Pro_Flag;
#endif
// 充电状态定义
typedef enum
{
CHG_NONE=0x00,
CHG_STA_ING, // 充电中
CHG_STA_COMPLETED, // 充电完成
CHG_STA_PULLOUT, // 充电器拔出
} TE_CHG_STA;
extern idata TE_CHG_STA ChgStatus; // 系统状态定义
#if CHARGER_ENABLE
/* Charger Current Setting */
typedef struct {
uint8_t nTrickle_Cur; //Set Trickle Current Trickle charge 电流配置step 10mA;
uint8_t nConstant_Cur; //Set Constant Current 恒流 cc 电流配置step 25mA
uint8_t nIterm_Cur; //Set Iterm Current iterm charge 电流配置(范围5mA ~ 50mA ,step 5mA)
uint8_t nVFloat;
} s_gCharger_Cfg;
/*充电电流设置在系统初始化时通过配置寄存器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_Init(void);
extern void Charger_Handler(void);
#ifdef NTC_ENABLE
extern uint8_t PMU_NTC_Handle(uint8_t Charge_sta);
#endif
#endif
#endif

View File

@ -0,0 +1,42 @@
/*
******************************************************************************
*
* @file discharge_module.h
* @brief discharge module
* @ic sy8835
*
* @version 1.0
* @date 2024/11/01 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 2024/11/01 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
#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
* @ic sy8835
*
* @version 1.0
* @date 2024/11/01 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 2024/11/01 Alex build this file
******************************************************************************
*/
#ifndef __GPIO_H__
#define __GPIO_H__
#include "define.h"
//extern void GPIO_Init(void);
//extern void Enter_ShipMode(void);
#endif

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

@ -0,0 +1,59 @@
/*
******************************************************************************
*
* @file hall.h
* @brief hall module
* @ic sy8835
*
* @version 1.0
* @date 2024/11/01 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 2024/11/01 Alex build this file
******************************************************************************
*/
#ifndef __HALL_H__
#define __HALL_H__
/*_____ I N C L U D E S ____________________________________________________*/
#include "define.h"
/******************************************************************************\
Macro definitions
\******************************************************************************/
/******************************************************************************\
Variables definitions
\******************************************************************************/
typedef enum{
CLOSE = 0,
OPEN = !CLOSE
} CoverStatus_E;
extern CoverStatus_E CoverStatus;
extern bit CoverEvent_Flg;
extern bit CoverEvent_Flg_led;
#if HALL_ENABLE
/******************************************************************************\
Functions definitions
\******************************************************************************/
//extern void Hall_Init(void);
extern void Hall_Handler(void);
#endif
#endif

View File

@ -0,0 +1,97 @@
/*
******************************************************************************
*
* @file i2c_simu.h
* @brief i2c gpio simu module
* @ic sy8835
*
* @version 1.0
* @date 2024/10/31 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 2024/10/31 Alex Xu build this file
******************************************************************************
*/
#ifndef __I2C_SIMU_H__
#define __I2C_SIMU_H__
/*_____ I N C L U D E S ____________________________________________________*/
#include "define.h"
#if GPIO_I2C_SIMULATE
#include "intrins.h"
/******************************************************************************\
Macro definitions
\******************************************************************************/
sbit pin_i2c_scl = P0^0;
#define _pin_i2c_scl_config() do{ pin_i2c_scl = 1;\
SFRADDR = P0_OE; SFRDATA |= (0x01<<0);/* output enable*/ \
SFRADDR = P0_IE; SFRDATA |= (0x01<<0);/* input enable*/ \
SFRADDR = P0_OD; SFRDATA |= (0x01<<0);/* open drain enable*/ \
}while(0);
sbit pin_i2c_sda = P0^1;
#define _pin_i2c_sda_config() do{ pin_i2c_sda = 1;\
SFRADDR = P0_OE; SFRDATA |= (0x01<<1);/* output enable*/ \
SFRADDR = P0_IE; SFRDATA |= (0x01<<1);/* input enable*/ \
SFRADDR = P0_OD; SFRDATA |= (0x01<<1);/* open drain enable*/ \
}while(0);
#define _I2C_SCL_H() do{pin_i2c_scl = 1;}while(0)
#define _I2C_SCL_L() do{pin_i2c_scl = 0;}while(0)
#define _I2C_SDA_H() do{pin_i2c_sda = 1;}while(0)
#define _I2C_SDA_L() do{pin_i2c_sda = 0;}while(0)
#define _READ_I2C_SCL() (pin_i2c_scl)
#define _READ_I2C_SDA() (pin_i2c_sda)
#define I2C_SFR_ADDR 0x06
/******************************************************************************\
Variables definitions
\******************************************************************************/
#ifdef _DEBUG_ALL
//#define __I2C_SIMU_DEBUG__
#endif
#define __I2C_SPEED_FAST__
extern idata bool F_I2C_SIMU_INIT;
extern idata bool F_I2C_SIMU_ERROR;
/******************************************************************************\
Functions definitions
\******************************************************************************/
void I2C_delay(void );
void I2C_GPIOInit(void);
bool I2C_Start(void);
void I2C_Stop(void);
void I2C_Ack(void);
void I2C_NoAck(void);
void I2C_WaitAck(void);
void I2C_SendByte(u8 SendByte);
unsigned char I2C_ReadByte(void);
#endif
#endif

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

@ -0,0 +1,181 @@
/*
******************************************************************************
*
* @file Config.h
* @brief Config module
* @ic sy8835
*
* @version 1.0
* @date 2024/11/01 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 2024/11/01 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 4050 //电池复充电压4200mv - 150mv = 4050mv
#define CHG_CURRENT_400MA 0x05
#if 1
#if 0
/*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_5C 1260
#define T_8C 1200
#define T_10C 1178 //10℃(58.9KΩ * 20uA) NTC:209.7K
#define T_12C 1100
#define T_15C 1050
#define T_18C 996
#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(4250K) 电阻并联一个100K电阻后得到的电压值*/
#define T_N20C 1840 //-20℃(92KΩ * 20uA) NTC:1151K
#define T_N15C 1788 //-15℃(89.4KΩ * 20uA) NTC:846K
#define T_N10C 1724 //-10℃(86.2KΩ * 20uA) NTC:629K
#define T_0C 1562 //-0℃(78.1KΩ * 20uA) NTC:357K
#define T_3C 1502 //3℃(75.1KΩ * 20uA) NTC:303K
#define T_5C 1462 //5℃(73.1KΩ * 20uA) NTC:272K
#define T_8C 1396 //8℃(69.8KΩ * 20uA) NTC:232K
#define T_10C 1354 //10℃(67.7KΩ * 20uA) NTC:209.7K
#define T_12C 1308 //12℃(65.4KΩ * 20uA) NTC:189K
#define T_15C 1236 //15℃(61.8KΩ * 20uA) NTC:162K
#define T_18C 1166 //15℃(58.3KΩ * 20uA) NTC:140K
#define T_42C 634 //42℃(31.7KΩ * 20uA) NTC:46.5K
#define T_45C 580 //45℃(29 KΩ * 20uA) NTC:40.9K
#define T_47C 546 //47℃(27.3KΩ * 20uA) NTC:37.6K
#define T_48C 530
#define T_57C 400 //57℃(20 KΩ * 20uA) NTC:25K
#define T_60C 362 //60℃(18.1KΩ * 20uA) NTC:22.2K
#define T_75C 222 //75℃(11.1KΩ * 20uA) NTC:12.6K
#define T_80C 192 //80℃(9.6KΩ * 20uA) NTC:10.6K
#endif
#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_5C 1238 //5℃(61.9KΩ * 20uA) NTC:253K
#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_15C 1076 //15℃(53.8KΩ * 20uA) NTC:157K
#define T_18C 1026 //18℃(51.3KΩ * 20uA) NTC:137K
#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

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

@ -0,0 +1,157 @@
/*
******************************************************************************
*
* @file define.h
* @brief define module
* @ic sy8835
*
* @version 1.0
* @date 2024/11/01 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 2024/11/01 Alex build this file
******************************************************************************
*/
#ifndef __DEFINE_H__
#define __DEFINE_H__
#include "config.h"
/*Function Select功能选择宏定义*/
#define TIMER1_ENABLE 0 //Timer1 定时周期1ms。(120Bytes)
#define UART0_ENABLE 1 //UART0功能。(133Bytes)
#define UART1_ENABLE 0 //UART1功能
#define UART2_ENABLE 1 //UART2功能
#define WTG_ENABLE 0 //看门狗功能使能(7Bytes)
#define LED_DISPLAY //LED显示 ,4个灯显示 (1125Bytes)
#ifdef LED_DISPLAY
#define PWM_ENABLE //PWM功能用于呼吸灯(719Bytes)
#endif
#define GPIO_I2C_SIMULATE 1 //GPIO 模拟 I2C接口
#define HALL_ENABLE 1 //Hall功能。(Hall 46Bytes)
#define KEY_ENABLE 1 //Key功能(111Bytes)
#define VOX_ENABLE 1 //1080Bytes
#define VOX_FOLLOW_CHG 0
#if VOX_ENABLE
#define VOX_TX //959Bytes
#define VOX_TX_RST_PATTERN //BES Reset Pattern (118Bytes)
#define VOX_RX //739Bytes
#endif
#define CHARGER_ENABLE 1 //94Bytes
#define DISCHARGE_ENABLE 1 //75Bytes
#define SLEEP_ENABLE 1 //110Bytes
#define ADC_ENABLE 1 //587Bytes
#if ADC_ENABLE
#define NTC_JEITA 1
#define NTC_IEC 0
//#define NTC_ENABLE //513Bytes JEITA
#endif
#define GAUGE_ENABLE 0 //2001Bytes
#define BAT_VALUE 1 //171Bytes
#define _DEBUG_ALL //打开打印功能
#ifdef _DEBUG_ALL
#define _DEBUG_MAIN
#define _DEBUG_PMU
#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
#ifdef XIAOMI
#include "stdlib.h"
#endif
#include "reg3315.h"
#include "uart.h"
#include "pmu.h"
#include "user.h"
#include "charger_module.h"
#endif

306
UsrInc/inc/reg3315.h Normal file
View File

@ -0,0 +1,306 @@
/*
******************************************************************************
*
* @file reg3315.h
* @brief Header file for TP3315 microcontroller.
* @ic sy8835
*
* @version 1.0
* @date 2024/11/01 10:59:40
* @author Alex Xu
*
* Copyright (c) 2013-2099,Tkplusemi Technology Co.,Ltd.
* All Rights Reserved
*
* History:
* Revision Date Author Desc
* 1.0.0 2024/11/01 Alex Xu build this file
******************************************************************************
*/
#ifndef __REG3315_H__
#define __REG3315_H__
/*-------------------------PMU Registers------------------------------*/
#define FAULT_STA0 0x10
#define FAULT_STA1 0x11
#define FAULT_STA2 0x12
#define CHIP_STA 0x13
#define VOX_STA 0x14
#define VDPM_VDD_CHG_EN 0x20
#define CHG_VFLOAT_SET 0x21
#define CHG_ICC_SET 0x22
#define CHG_ITC_ITERM_SET 0x23
#define CHG_VPMID_SET 0x25
#define WDT1_CFG 0x26
#define WDT1_RST 0x5A
#define BST_COMM_EN 0x27
#define VOX_CFG 0x37
#define I2CR_RST_CFG 0x35
#define POWER_LED_CTRL0 0x39
#define XSEN_CTRL 0x31
#define IRQ_EN0 0x40
#define IRQ_EN1 0x41
#define POWER_CTRL_CMD 0x4F
#define SOFT_DAT5 0x5C
/*------------------------ Ext SFR Registers -------------------------*/
/*------ GPIO/MFP Registers ------*/
#define P0_PU 0x00
#define P0_PD 0x01
#define P0_OD 0x02
#define P0_IE 0x03
#define P0_OE 0x04
#define P1_PU 0x07
#define P1_PD 0x08
#define P1_OD 0x09
#define P1_IE 0x0A
#define P1_OE 0x0B
#define P1_DRV0 0x0C
#define MFP_CTL0 0x0E
#define MFP_CTL1 0x0F
#define GPIO_INT_EN0 0x22
#define GPIO_INT_EN1 0x23
sfr GPIO_FLAG0 = 0xE4;
sfr GPIO_FLAG1 = 0xE5;
/*------ PWM Registers ------*/
#define PWM_CTL 0x10
#define PWM_PRE 0x11
#define PWM_REL 0x12
sfr PWM0_CMP = 0xCE;
sfr PWM1_CMP = 0xCF;
sfr PWM2_CMP = 0xDE;
sfr PWM3_CMP = 0xDF;
/*------ LED Registers ------*/
#define LED_CTL 0x13
/*-------- ADC Registers --------*/
#define ADC_CTL0 0x30
sfr ADC_CTL1 =0xA3;
sfr ADC_IntFlag =0xA4;
#define ADC_CTL2 0x31
#define ADC_IntEn 0x32
#define ADC_CH0_L 0x35
#define ADC_CH0_H 0x36
#define ADC_CH1_L 0x37
#define ADC_CH1_H 0x38
#define ADC_CH2_L 0x39
#define ADC_CH2_H 0x3A
#define ADC_CH3_L 0x3B
#define ADC_CH3_H 0x3C
#define ADC_CH4_L 0x3D
#define ADC_CH4_H 0x3E
/*-------- SYS Registers --------*/
#define LDO08_CTL 0x50
#define LDO15_CTL0 0x51
#define LDO15_CTL1 0x52
#define HOSC_TRIM 0x53
#define CHIP_ID 0x70
#define CHIP_VER 0x71
#define CLKPRE 0x72
#define RST_CFG 0x73
#define IRQ_PIN_CFG 0x76
#define LDREG_PW 0x7F
sfr RST_FLAG = 0xE1;
sfr IRQ_FLAG = 0xE2;
sfr CHIP_STAT = 0xE3;
sfr SRST = 0xF7;
sfr SFRADDR = 0xFE;
sfr SFRDATA = 0xFF;
/*------- FLASH Registers ------*/
#define FLASH_STA0 0x60
#define FLASH_STA1 0x61
#define FLASH_STA2 0x62
#define FLASH_CRCL 0x63
#define FLASH_CRCH 0x64
#define FLASH_INIT 0x65
#define FLASH_INTF0 0x66
#define FLASH_INTF1 0x67
#define FLASH_DAT0 0x68
#define FLASH_DAT1 0x69
#define FLASH_DAT2 0x6A
#define FLASH_DAT3 0x6B
#define FLASH_ADDL 0x6C
#define FLASH_ADDH 0x6D
#define FLASH_OPTEN 0x6E
#define FLASH_DAT_KEY 0x6F
//------------------------- 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 S2CON = 0x96;
sfr S2BUF = 0x97;
sfr S0CON = 0x98;
sfr S0BUF = 0x99;
sfr IEN2 = 0x9A;
sfr S1CON = 0x9B;
sfr S1BUF = 0x9C;
sfr S1RELL = 0x9D;
sfr S2RELL = 0x9E;
sfr S2RELH = 0x9F;
sfr S2IOCFG = 0xF1;
sfr ADC_CTRL1 = 0xA3;
sfr ADC_INT_FLAG = 0xA4;
sfr OCP_CTL = 0xA7;
sfr IEN0 = 0xA8;
sfr IP0 = 0xA9;
sfr S0RELL = 0xAA;
sfr SOFT_DAT0 = 0xAB;
sfr SOFT_DAT1 = 0xAC;
sfr SOFT_DAT2 = 0xAD;
sfr SOFT_DAT3 = 0xAE;
sfr SOFT_DAT4 = 0xAF;
sfr IEN1 = 0xB8;
sfr IP1 = 0xB9;
sfr S0RELH = 0xBA;
sfr S1RELH = 0xBB;
sfr IRCON2 = 0xBF;
sfr IRCON = 0xC0;
sfr ADCON = 0xD8;
/*--- 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;//global IRQ enable
sbit WDT = 0xAE;//Watchdog timer refresh flag
sbit ET2 = 0xAD;//Timer2 IRQ enable
sbit ES0 = 0xAC;//Serial Port 0
sbit ET1 = 0xAB;//Timer1 overflow
sbit EX1 = 0xAA;//External 1
sbit ET0 = 0xA9;//Timer0 overflow
sbit EX0 = 0xA8;//External 0
/* IEN1 */
sbit EXEN2 = 0xBF;//Timer2 external reload
sbit SWDT = 0xBE;//Watchdog timer start/refresh flag.
sbit EX6 = 0xBD;//External 6
sbit EX5 = 0xBC;//External 5
sbit EX4 = 0xBB;//External 4
sbit EX3 = 0xBA;//External 3
sbit EX2 = 0xB9;//External 2
sbit EX7 = 0xB8;//External 7
/* IEN1 */
//sbit ES2 = 0x9B;
//sbit ES1 = 0x9A;
/* IRCON */
sbit EXF2 = 0xC7;//Timer 2 external reload flag
sbit TF2 = 0xC6;//Timer 2 overflow flag
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;
/* P0 */
sbit P10 = P1^0;
sbit P11 = P1^1;
sbit P12 = P1^2;
sbit P13 = P1^3;
sbit P14 = P1^4;
sbit P15 = P1^5;
//sbit P16 = P1^6;
//sbit P17 = P1^7;
#endif

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

@ -0,0 +1,62 @@
/*
******************************************************************************
*
* @file key.h
* @brief key module
* @ic sy8835
*
* @version 1.0
* @date 2024/11/01 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 2024/11/01 Alex build this file
******************************************************************************
*/
#ifndef __KEY_H__
#define __KEY_H__
/*_____ I N C L U D E S ____________________________________________________*/
#include "define.h"
/******************************************************************************\
Macro definitions
\******************************************************************************/
/******************************************************************************\
Variables definitions
\******************************************************************************/
#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;
/******************************************************************************\
Functions definitions
\******************************************************************************/
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
* @ic sy8835
*
* @version 1.0
* @date 2024/11/01 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 2024/11/01 Alex build this file
******************************************************************************
*/
#ifndef __LED_H__
#define __LED_H__
/*_____ I N C L U D E S ____________________________________________________*/
#include "define.h"
#ifdef LED_DISPLAY
#ifdef _DEBUG_LED
#define _DEBUG_LED_1
#define _DEBUG_LED_2
#endif
/******************************************************************************\
Macro definitions
\******************************************************************************/
#define LED_PLUS_TIME 1
sbit pin_LED_1 = P1^0;
sbit pin_LED_2 = P1^1;
sbit pin_LED_3 = P1^2;
sbit pin_LED_4 = P1^3;
// LED端口定义
#define LEDR_ON() pin_LED_1 = 1 //LED_1_ON()
#define LEDR_OFF() pin_LED_1 = 0 //LED_1_OFF()
#define LEDR_TOG() pin_LED_1 = !pin_LED_1 //LED_1_RUN()
//LED闪烁最小时间周期单位ms
#define LEDG_ON() pin_LED_2 = 1 //LED_2_ON()
#define LEDG_OFF() pin_LED_2 = 0 //LED_2_OFF()
#define LEDG_TOG() pin_LED_2 = !pin_LED_2 //LED_2_RUN()
#define LEDY_ON() pin_LED_3 = 1 //LED_3_ON()
#define LEDY_OFF() pin_LED_3 = 0 //LED_3_OFF()
#define LEDY_TOG() pin_LED_3 = !pin_LED_3 //LED_3_RUN()
#define LEDB_ON() pin_LED_4 = 1 //LED_4_ON()
#define LEDB_OFF() pin_LED_4 = 0 //LED_4_OFF()
#define LEDB_TOG() pin_LED_4 = !pin_LED_4 //LED_4_RUN()
/******************************************************************************\
Typedef definitions
\******************************************************************************/
//LED名称重定义顺序和上方的宏定义保持一致
enum LED_ID
{
LED_R = 0x00,
LED_G,
LED_Y,
LED_B,
LED_ID_MAX
};
//LED工作状态
enum LED_STATE
{
LED_OFF = 0x00,
LED_ON,
LED_FLASH,
LED_KEEP_FLASHING,
LED_BREATHING_LIGHT,
};
#ifdef PWM_ENABLE
enum LIGHT_DIR
{
SHOW_NONE = 0x00,
SLOW_DARK, //缓灭
SLOW_LIGHT, //缓亮
SHOW_NORMAL, //呼吸灯正常亮。
};
#endif
//LED控制结构体
typedef struct{
uint8_t State[LED_ID_MAX];//LED 的工作状态
uint8_t Light_Dir[LED_ID_MAX]; //呼吸灯亮的类型,缓亮、缓灭、正常亮。
uint16_t Flash_Duty[LED_ID_MAX];//LED占空比即点亮时间
uint16_t Flash_Period[LED_ID_MAX];//LED周期
uint16_t Flash_Times[LED_ID_MAX];//闪烁次数
uint16_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; // 显示状态
extern volatile uint8_t Display_BSta; // 显示状态
// LED显示相关定义
// LED显示逻辑
// -- 红色LED用于充电指示原则上充电时闪烁充电完常亮未充电熄灭
// -- 绿色LED用于操作指示原则上耳机放入、取出、开盖、关盖时闪烁一次即可
typedef enum {
DISPLAY_NONE,
DISPLAY_ON,
DISPLAY_OFF,
DISPLAY_FLASH,
DISPLAY_KEEP_FLASH,
DISPLAY_MAX
} TE_DISPLAY_STA;
#define Display_AllOff() {LED_R_OFF();LED_G_OFF();LED_Y_OFF();LED_B_OFF();Display_RSta=DISPLAY_OFF;Display_GSta=DISPLAY_OFF;Display_YSta=DISPLAY_OFF;Display_BSta=DISPLAY_OFF;}
#define Display_AllOn() {LED_R_ON();LED_G_ON();LED_Y_ON();LED_B_ON();Display_RSta=DISPLAY_ON;Display_GSta=DISPLAY_ON;Display_YSta=DISPLAY_ON;Display_BSta=DISPLAY_ON;}
#define Display_Red_On() {LED_R_ON();Display_RSta=DISPLAY_ON;}
#define Display_Red_Off() {LED_R_OFF();Display_RSta=DISPLAY_OFF;}
#define Display_Red_Flash(Fre,n) {LED_R_FLASH(Fre,n);Display_RSta=DISPLAY_FLASH;}
#define Display_Red_KeepFlash(Fre) {LED_R_KEEP_FLASHING(Fre);Display_RSta=DISPLAY_KEEP_FLASH;}
#define Display_Green_On() {LED_G_ON();Display_GSta=DISPLAY_ON;}
#define Display_Green_Off() {LED_G_OFF();Display_GSta=DISPLAY_OFF;}
#define Display_Green_Flash(Fre,n) {LED_G_FLASH(Fre,n);Display_GSta=DISPLAY_FLASH;}
#define Display_Green_KeepFlash(Fre) {LED_G_KEEP_FLASHING(Fre);Display_GSta=DISPLAY_KEEP_FLASH;}
#define Display_Yellow_On() {LED_Y_ON();Display_YSta=DISPLAY_ON;}
#define Display_Yellow_Off() {LED_Y_OFF();Display_YSta=DISPLAY_OFF;}
#define Display_Yellow_Flash(Fre,n) {LED_Y_FLASH(Fre,n);Display_YSta=DISPLAY_FLASH;}
#define Display_Yellow_KeepFlash(Fre) {LED_Y_KEEP_FLASHING(Fre);Display_YSta=DISPLAY_KEEP_FLASH;}
#define Display_Blue_On() {LED_B_ON();Display_BSta=DISPLAY_ON;}
#define Display_Blue_Off() {LED_B_OFF();Display_BSta=DISPLAY_OFF;}
#define Display_Blue_Flash(Fre,n) {LED_B_FLASH(Fre,n);Display_BSta=DISPLAY_FLASH;}
#define Display_Blue_KeepFlash(Fre) {LED_B_KEEP_FLASHING(Fre);Display_BSta=DISPLAY_KEEP_FLASH;}
/******************************************************************************\
Global variables and functions
\******************************************************************************/
/*
* : LED_Init
* : LED初始化
* : NONE
* : NONE
*/
/******************************************************************************/
extern void LED_Init(void);
/******************************************************************************/
/*
* : LED_Clr
* : LED
* : NONE
* : NONE
*/
/******************************************************************************/
extern void LED_Clr(void);
/******************************************************************************/
/*
* : LED_Service
* : LED驱动10ms时间片中
* : 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,uint16_t Period,uint16_t Times);
/******************************************************************************/
#ifdef PWM_ENABLE
extern void HuXiLED_Set(uint8_t LedId,uint8_t State,uint8_t Dir);
#endif
// 外部操作接口
#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_KEEP_FLASHING, Fre,0)
#ifdef PWM_ENABLE
#define LED_R_BREATHING_LIGHT(Dir) HuXiLED_Set(LED_R, LED_BREATHING_LIGHT, Dir)
#endif
#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_KEEP_FLASHING, Fre,0)
#ifdef PWM_ENABLE
#define LED_G_BREATHING_LIGHT(Dir) HuXiLED_Set(LED_G, LED_BREATHING_LIGHT, Dir)
#endif
#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_KEEP_FLASHING, Fre,0)
#ifdef PWM_ENABLE
#define LED_Y_BREATHING_LIGHT(Dir) HuXiLED_Set(LED_Y, LED_BREATHING_LIGHT, Dir)
#endif
#define LED_B_ON() LED_Set(LED_B, LED_ON, 0,0)
#define LED_B_OFF() LED_Set(LED_B, LED_OFF, 0,0)
#define LED_B_FLASH(Fre,n) LED_Set(LED_B, LED_FLASH, Fre,n)
#define LED_B_KEEP_FLASHING(Fre) LED_Set(LED_B, LED_KEEP_FLASHING, Fre,0)
#ifdef PWM_ENABLE
#define LED_B_BREATHING_LIGHT(Dir) HuXiLED_Set(LED_B, LED_BREATHING_LIGHT, Dir)
#endif
//------------------------------------------------------------------------------
#endif
#endif

479
UsrInc/pmu/pmu.h Normal file
View File

@ -0,0 +1,479 @@
/*
******************************************************************************
*
* @file pmu.h
* @brief pmu module
* @ic sy8835
*
* @version 1.0
* @date 2024/11/01 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 2024/11/01 Alex Xu build this file
******************************************************************************
*/
#ifndef __PMU_H__
#define __PMU_H__
/*_____ I N C L U D E S ____________________________________________________*/
#include "define.h"
/******************************************************************************\
Macro definitions
\******************************************************************************/
/* Power Ctrl CMD Setting. <4Fh>*/
#define POWER_CTRL_CMD_RECHG_ENABLE 0x11 //0x11:VIN正常是写入此命令IC将重新开启充电循环
#define POWER_CTRL_CMD_RST_CMD 0x17 //0x17:CMD_RST此命令将复位I2CR<0x20>~<0x4F>、VDD
#define POWER_CTRL_CMD_ENTER_SHIPMODE 0xAA //0xAA:EnterShipmode,当且仅当在standby mode状态下写入此命令IC进入ShipMode状态在Charge Mode状态时写入此命令无效
#define POWER_CTRL_CMD_RST_VDD 0x33 //0x33:RstVDD在任意状态下关闭VSYS 200ms然后在重启VDD。
/* Boost Comm Setting. <I2CR_27h_BST_COMM_En>*/
#define BST_COMM_EN_Boost_En_Pos (0U)
#define BST_COMM_EN_Boost_En_Msk (0x1UL << BST_COMM_EN_Boost_En_Pos)
#define BST_COMM_EN_Boost_En BST_COMM_EN_Boost_En_Msk
#define BST_COMM_EN_Vol_En_Pos (1U)
#define BST_COMM_EN_Vol_En_Msk (0x1UL << BST_COMM_EN_Vol_En_Pos)
#define BST_COMM_EN_Vol_En BST_COMM_EN_Vol_En_Msk
#define BST_COMM_EN_Vor_En_Pos (2U)
#define BST_COMM_EN_Vor_En_Msk (0x1UL << BST_COMM_EN_Vor_En_Pos)
#define BST_COMM_EN_Vor_En BST_COMM_EN_Vor_En_Msk
#define BST_COMM_EN_Vol_Comm_En_Pos (3U)
#define BST_COMM_EN_Vol_Comm_En_Msk (0x1UL << BST_COMM_EN_Vol_Comm_En_Pos)
#define BST_COMM_EN_Vol_Comm_En BST_COMM_EN_Vol_Comm_En_Msk
#define BST_COMM_EN_Vor_Comm_En_Pos (4U)
#define BST_COMM_EN_Vor_Comm_En_Msk (0x1UL << BST_COMM_EN_Vor_Comm_En_Pos)
#define BST_COMM_EN_Vor_Comm_En BST_COMM_EN_Vor_Comm_En_Msk
#define BST_COMM_EN_Vox_Dishold_Pos (6U)
#define BST_COMM_EN_Vox_Dishold_Msk (0x1UL << BST_COMM_EN_Vox_Dishold_Pos)
#define BST_COMM_EN_Vox_Dishold BST_COMM_EN_Vox_Dishold_Msk
#define BST_COMM_EN_Gate_Ctrl_Pos (7U)
#define BST_COMM_EN_Gate_Ctrl_Msk (0x1UL << BST_COMM_EN_Gate_Ctrl_Pos)
#define BST_COMM_EN_Gate_Ctrl BST_COMM_EN_Gate_Ctrl_Msk
/* Vox Config <37h>*/
#define VOX_CFG_Vox_Floating_Pos (0U)
#define VOX_CFG_Vox_Floating_Msk (0x1UL << VOX_CFG_Vox_Floating_Pos)
#define VOX_CFG_Vox_Floating VOX_CFG_Vox_Floating_Msk //Vox屏蔽自动识别功能时VOX的输出状态配置0VOX通过1K电阻下拉到GND1VOX浮空。
#define VOX_CFG_Vox_DisAdt_Pos (1U)
#define VOX_CFG_Vox_DisAdt_Msk (0x1UL << VOX_CFG_Vox_DisAdt_Pos)
#define VOX_CFG_Vox_DisAdt VOX_CFG_Vox_DisAdt_Msk
#define VOX_CFG_Comx_Rup_Pos (2U)
#define VOX_CFG_Comx_Rup_2K_Msk 0x01
#define VOX_CFG_Comx_Rup_5K_Msk 0x02
#define VOX_CFG_Comx_Rup_10K_Msk 0x03
#define VOX_CFG_Comx_Rup_2K (VOX_CFG_Comx_Rup_2K_Msk << VOX_CFG_Comx_Rup_Pos)
#define VOX_CFG_Comx_Rup_5K (VOX_CFG_Comx_Rup_5K_Msk << VOX_CFG_Comx_Rup_Pos)
#define VOX_CFG_Comx_Rup_10K (VOX_CFG_Comx_Rup_10K_Msk << VOX_CFG_Comx_Rup_Pos)
#define VOX_CFG_Vox_Rup_Pos (4U)
#define VOX_CFG_Vox_Rup_2K_Msk 0x01
#define VOX_CFG_Vox_Rup_5K_Msk 0x02
#define VOX_CFG_Vox_Rup_10K_Msk 0x03
#define VOX_CFG_Vox_Rup_2K (VOX_CFG_Vox_Rup_2K_Msk << VOX_CFG_Vox_Rup_Pos)
#define VOX_CFG_Vox_Rup_5K (VOX_CFG_Vox_Rup_5K_Msk << VOX_CFG_Vox_Rup_Pos)
#define VOX_CFG_Vox_Rup_10K (VOX_CFG_Vox_Rup_10K_Msk << VOX_CFG_Vox_Rup_Pos)
#define VOX_CFG_Vox_Vup_Pos (6U)
#define VOX_CFG_Vox_Vup_2_0V_Msk 0x00
#define VOX_CFG_Vox_Vup_VDD_Msk 0x01
#define VOX_CFG_Vox_Vup_VOXS_Msk 0x02
#define VOX_CFG_Vox_Vup_1_8V_Msk 0x03
#define VOX_CFG_Vox_Vup_2_0V (VOX_CFG_Vox_Vup_2_0V_Msk << VOX_CFG_Vox_Vup_Pos)
#define VOX_CFG_Vox_Vup_VDD (VOX_CFG_Vox_Vup_VDD_Msk << VOX_CFG_Vox_Vup_Pos)
#define VOX_CFG_Vox_Vup_VOXS (VOX_CFG_Vox_Vup_VOXS_Msk << VOX_CFG_Vox_Vup_Pos)
#define VOX_CFG_Vox_Vup_1_8V (VOX_CFG_Vox_Vup_1_8V_Msk << VOX_CFG_Vox_Vup_Pos)
/* VDPM VDD Charger En Setting.<20h> */
#define BUCK_CHG_EN_Pos (0U)
#define BUCK_CHG_EN_Pos_Msk (0x1UL << BUCK_CHG_EN_Pos)
#define BUCK_CHG_EN BUCK_CHG_EN_Pos_Msk
#define VIN_DIR_CHG_DISABLE_Pos (1U)
#define VIN_DIR_CHG_DISABLE_Pos_Msk (0x1UL << VIN_DIR_CHG_DISABLE_Pos)
#define VIN_DIR_CHG_DISABLE VIN_DIR_CHG_DISABLE_Pos_Msk
#define VDD_BYPASS_Pos (2U)
#define VDD_BYPASS_Pos_Msk (0x1UL << VDD_BYPASS_Pos)
#define VDD_BYPASS VDD_BYPASS_Pos_Msk
/* FAULT_STA0<10h> */
#define Fault_Sta0_VinUV_Pos (0U)
#define Fault_Sta0_VinUV_Pos_Msk (0x1UL << Fault_Sta0_VinUV_Pos)
#define Fault_Sta0_VinUV Fault_Sta0_VinUV_Pos_Msk
#define Fault_Sta0_VinOVP_Pos (1U)
#define Fault_Sta0_VinOVP_Pos_Msk (0x1UL << Fault_Sta0_VinOVP_Pos)
#define Fault_Sta0_VinOVP Fault_Sta0_VinOVP_Pos_Msk
#define Fault_Sta0_BoostUV_Pos (2U)
#define Fault_Sta0_BoostUV_Pos_Msk (0x1UL << Fault_Sta0_BoostUV_Pos)
#define Fault_Sta0_BoostUV Fault_Sta0_BoostUV_Pos_Msk
#define Fault_Sta0_VolOS_Pos (3U)
#define Fault_Sta0_VolOS_Pos_Msk (0x1UL << Fault_Sta0_VolOS_Pos)
#define Fault_Sta0_VolOS Fault_Sta0_VolOS_Pos_Msk
#define Fault_Sta0_VorOS_Pos (4U)
#define Fault_Sta0_VorOS_Pos_Msk (0x1UL << Fault_Sta0_VorOS_Pos)
#define Fault_Sta0_VorOS Fault_Sta0_VorOS_Pos_Msk
#define Fault_Sta0_WDTimeOut_Pos (5U)
#define Fault_Sta0_WDTimeOut_Pos_Msk (0x1UL << Fault_Sta0_WDTimeOut_Pos)
#define Fault_Sta0_WDTimeOut Fault_Sta0_WDTimeOut_Pos_Msk
#define Fault_Sta0_VINPlugInRstVDD_Pos (6U)
#define Fault_Sta0_VINPlugInRstVDD_Pos_Msk (0x1UL << Fault_Sta0_VINPlugInRstVDD_Pos)
#define Fault_Sta0_VINPlugInRstVDD Fault_Sta0_VINPlugInRstVDD_Pos_Msk
#define Fault_Sta0_KeyRstVDD_Pos (7U)
#define Fault_Sta0_KeyRstVDD_Pos_Msk (0x1UL << Fault_Sta0_KeyRstVDD_Pos)
#define Fault_Sta0_KeyRstVDD Fault_Sta0_KeyRstVDD_Pos_Msk
/* FAULT_STA2<12h> */
#define Fault_Sta2_VinUV_Pos (0U)
#define Fault_Sta2_VinUV_Pos_Msk (0x1UL << Fault_Sta2_VinUV_Pos)
#define Fault_Sta2_VinUV Fault_Sta2_VinUV_Pos_Msk
#define Fault_Sta2_VinOVP_Pos (1U)
#define Fault_Sta2_VinOVP_Pos_Msk (0x1UL << Fault_Sta2_VinOVP_Pos)
#define Fault_Sta2_VinOVP Fault_Sta2_VinOVP_Pos_Msk
#define Fault_Sta2_BoostUV_Pos (2U)
#define Fault_Sta2_BoostUV_Pos_Msk (0x1UL << Fault_Sta2_BoostUV_Pos)
#define Fault_Sta2_BoostUV Fault_Sta2_BoostUV_Pos_Msk
#define Fault_Sta2_VolOCP_Pos (3U)
#define Fault_Sta2_VolOCP_Pos_Msk (0x1UL << Fault_Sta2_VolOCP_Pos)
#define Fault_Sta2_VolOCP Fault_Sta2_VolOCP_Pos_Msk
#define Fault_Sta2_VorOCP_Pos (4U)
#define Fault_Sta2_VorOCP_Pos_Msk (0x1UL << Fault_Sta2_VorOCP_Pos)
#define Fault_Sta2_VorOCP Fault_Sta2_VorOCP_Pos_Msk
#define Fault_Sta2_PMID_OCP_SHP_Pos (5U)
#define Fault_Sta2_PMID_OCP_SHP_Pos_Msk (0x1UL << Fault_Sta2_PMID_OCP_SHP_Pos)
#define Fault_Sta2_PMID_OCP_SHP Fault_Sta2_PMID_OCP_SHP_Pos_Msk
#define Fault_Sta2_CHIP_OTP_Pos (6U)
#define Fault_Sta2_CHIP_OTP_Pos_Msk (0x1UL << Fault_Sta2_CHIP_OTP_Pos)
#define Fault_Sta2_CHIP_OTP Fault_Sta2_CHIP_OTP_Pos_Msk
#define Fault_Sta2_VDPM_Pos (7U)
#define Fault_Sta2_VDPM_Pos_Msk (0x1UL << Fault_Sta2_VDPM_Pos)
#define Fault_Sta2_VDPM Fault_Sta2_VDPM_Pos_Msk
/* ChipSTA<13h> */
#define ChipSTA_Standby 0x00
#define ChipSTA_ShipMode 0x01
#define ChipSTA_PMU_Error 0x02
#define ChipSTA_CHG_ITC 0x03
#define ChipSTA_CHG_ICC 0x04
#define ChipSTA_CHG_CV 0x05
#define ChipSTA_CHG_DONE 0x06
#define ChipSTA_DISCHG 0x07
#define ChipSTA_INIT_OK_Pos (3U)
#define ChipSTA_INIT_OK_Pos_Msk (0x1UL << ChipSTA_INIT_OK_Pos)
#define INIT_OK ChipSTA_INIT_OK_Pos_Msk
#define ChipSTA_Key_Sta_Pos (4U)
#define ChipSTA_Key_Sta_Pos_Msk (0x1UL << ChipSTA_Key_Sta_Pos)
#define KEY_STA ChipSTA_Key_Sta_Pos_Msk
#define ChipSTA_Hall_Sta_Pos (5U)
#define ChipSTA_Hall_Sta_Pos_Msk (0x1UL << ChipSTA_Hall_Sta_Pos)
#define HALL_STA ChipSTA_Hall_Sta_Pos_Msk
/*VOX_STA<14h>*/
#define VOX_Sta_Vol_Loadin_Pos (0U)
#define VOX_Sta_Vol_Loadin_Pos_Msk (0x1UL << VOX_Sta_Vol_Loadin_Pos)
#define VOL_LoadIn VOX_Sta_Vol_Loadin_Pos_Msk
#define VOX_Sta_Vor_Loadin_Pos (1U)
#define VOX_Sta_Vor_Loadin_Pos_Msk (0x1UL << VOX_Sta_Vor_Loadin_Pos)
#define VOR_LoadIn VOX_Sta_Vor_Loadin_Pos_Msk
#define VOX_Sta_Vol_Loadon_Pos (2U)
#define VOX_Sta_Vol_Loadon_Pos_Msk (0x1UL << VOX_Sta_Vol_Loadon_Pos)
#define VOL_LoadOn VOX_Sta_Vol_Loadon_Pos_Msk
#define VOX_Sta_Vor_Loadon_Pos (3U)
#define VOX_Sta_Vor_Loadon_Pos_Msk (0x1UL << VOX_Sta_Vor_Loadon_Pos)
#define VOR_LoadOn VOX_Sta_Vor_Loadon_Pos_Msk
#define VOX_Sta_Vol_Ioff_Pos (4U)
#define VOX_Sta_Vol_Ioff_Pos_Msk (0x1UL << VOX_Sta_Vol_Ioff_Pos)
#define VOL_Ioff VOX_Sta_Vol_Ioff_Pos_Msk
#define VOX_Sta_Vor_Ioff_Pos (5U)
#define VOX_Sta_Vor_Ioff_Pos_Msk (0x1UL << VOX_Sta_Vor_Ioff_Pos)
#define VOR_Ioff VOX_Sta_Vor_Ioff_Pos_Msk
/* Charger Parements Config.<21h> */
/* 1、V Float Setting */
#define CHG_VFLOAT_4_000V 0x00
#define CHG_VFLOAT_4_050V 0x01
#define CHG_VFLOAT_4_100V 0x02
#define CHG_VFLOAT_4_150V 0x03
#define CHG_VFLOAT_4_200V 0x04
#define CHG_VFLOAT_4_250V 0x05
#define CHG_VFLOAT_4_275V 0x06
#define CHG_VFLOAT_4_300V 0x07
#define CHG_VFLOAT_4_325V 0x08
#define CHG_VFLOAT_4_350V 0x09
#define CHG_VFLOAT_4_375V 0x0A
#define CHG_VFLOAT_4_400V 0x0B
#define CHG_VFLOAT_4_425V 0x0C
#define CHG_VFLOAT_4_450V 0x0D
#define CHG_VFLOAT_4_475V 0x0E
#define CHG_VFLOAT_4_500V 0x0F
/*2、Constant Current ICC Setting.<22h>*/
#define CHG_ICC_4_0MA 0x00
#define CHG_ICC_1_00MA 0x01
#define CHG_ICC_1_50MA 0x02
#define CHG_ICC_2_00MA 0x03
#define CHG_ICC_2_50MA 0x04
#define CHG_ICC_3_00MA 0x05
#define CHG_ICC_3_50MA 0x06
#define CHG_ICC_4_00MA 0x07
#define CHG_ICC_5_00MA 0x08
#define CHG_ICC_6_00MA 0x09
#define CHG_ICC_7_00MA 0x0A
#define CHG_ICC_8_00MA 0x0B
#define CHG_ICC_9_00MA 0x0C
#define CHG_ICC_10_00MA 0x0D
#define CHG_ICC_12_00MA 0x0E
#define CHG_ICC_15_00MA 0x0F
/*3、电池涓流充电电流设置,<23h><bit6:4>*/
#define CHG_ITC_20MA 0x00
#define CHG_ITC_30MA 0x01
#define CHG_ITC_40MA 0x02
#define CHG_ITC_50MA 0x03
#define CHG_ITC_60MA 0x04
#define CHG_ITC_70MA 0x05
#define CHG_ITC_80MA 0x06
#define CHG_ITC_100MA 0x07
/*4、电池充电截止电流设置,<23h><bit2:0>*/
#define CHG_ITERM_20MA 0x00
#define CHG_ITERM_30MA 0x01
#define CHG_ITERM_40MA 0x02
#define CHG_ITERM_50MA 0x03
#define CHG_ITERM_60MA 0x04
#define CHG_ITERM_70MA 0x05
#define CHG_ITERM_80MA 0x06
#define CHG_ITERM_100MA 0x07
/* BOOST输出的PMID电压值。<25h><5:0> */
#define BOOST_VPMID_3_7V 0x00
#define BOOST_VPMID_3_8V 0x04
#define BOOST_VPMID_3_9V 0x08
#define BOOST_VPMID_4_0V 0x0C
#define BOOST_VPMID_4_1V 0x10
#define BOOST_VPMID_4_2V 0x14
#define BOOST_VPMID_4_3V 0x18
#define BOOST_VPMID_4_4V 0x1C
#define BOOST_VPMID_4_5V 0x20
#define BOOST_VPMID_4_6V 0x24
#define BOOST_VPMID_4_7V 0x28
#define BOOST_VPMID_4_8V 0x2C
#define BOOST_VPMID_4_9V 0x30
#define BOOST_VPMID_5_0V 0x34
#define BOOST_VPMID_5_1V 0x38
#define BOOST_VPMID_5_2V 0x3C
/* IRQ_EN0<40h> */
#define Chip_Stat_IRQ_Pos (0U)
#define Chip_Stat_IRQ_Pos_Msk (0x1UL << Chip_Stat_IRQ_Pos)
#define Chip_Stat_IRQ Chip_Stat_IRQ_Pos_Msk
#define Boost_UV_IRQ_Pos (1U)
#define Boost_UV_IRQ_Pos_Msk (0x1UL << Boost_UV_IRQ_Pos)
#define Boost_UV_IRQ Boost_UV_IRQ_Pos_Msk
#define Vox_Load_Stat_IRQ_Pos (2U)
#define Vox_Load_Stat_IRQ_Pos_Msk (0x1UL << Vox_Load_Stat_IRQ_Pos)
#define Vox_Load_Stat_IRQ Vox_Load_Stat_IRQ_Pos_Msk
#define Vox_OS_IRQ_Pos (4U)
#define Vox_OS_IRQ_Pos_Msk (0x1UL << Vox_OS_IRQ_Pos)
#define Vox_OS_IRQ Vox_OS_IRQ_Pos_Msk
#define VDPM_IRQ_Pos (5U)
#define VDPM_IRQ_Pos_Msk (0x1UL << VDPM_IRQ_Pos)
#define VDPM_IRQ VDPM_IRQ_Pos_Msk
#define ReChg_IRQ_Pos (6U)
#define ReChg_IRQ_Pos_Msk (0x1UL << ReChg_IRQ_Pos)
#define ReChg_IRQ ReChg_IRQ_Pos_Msk
#define VINOK_IRQ_Pos (7U)
#define VINOK_IRQ_Pos_Msk (0x1UL << VINOK_IRQ_Pos)
#define VINOK_IRQ VINOK_IRQ_Pos_Msk
/* IRQ_EN1<41h> */
#define I2CWDT_IRQ_Pos (0U)
#define I2CWDT_IRQ_Pos_Msk (0x1UL << I2CWDT_IRQ_Pos)
#define I2CWDT_IRQ I2CWDT_IRQ_Pos_Msk
#define WDTimeOut_IRQ_Pos (1U)
#define WDTimeOut_IRQ_Pos_Msk (0x1UL << WDTimeOut_IRQ_Pos)
#define WDTimeOut_IRQ WDTimeOut_IRQ_Pos_Msk
#define KEY_IRQ_Pos (2U)
#define KEY_IRQ_Pos_Msk (0x1UL << KEY_IRQ_Pos)
#define KEY_IRQ KEY_IRQ_Pos_Msk
#define HALL_IRQ_Pos (3U)
#define HALL_IRQ_Pos_Msk (0x1UL << HALL_IRQ_Pos)
#define HALL_IRQ HALL_IRQ_Pos_Msk
#define ChipOTP_IRQ_Pos (4U)
#define ChipOTP_IRQ_Pos_Msk (0x1UL << ChipOTP_IRQ_Pos)
#define ChipOTP_IRQ ChipOTP_IRQ_Pos_Msk
#define PMID_OCP_OS_IRQ_Pos (5U)
#define PMID_OCP_OS_IRQ_Pos_Msk (0x1UL << PMID_OCP_OS_IRQ_Pos)
#define PMID_OCP_OS_IRQ PMID_OCP_OS_IRQ_Pos_Msk
/******************************************************************************\
Variables definitions
\******************************************************************************/
/*PMU相关状态信息*/
typedef struct {
uint8_t pmu_Fault_STA0; //Key、VIN Plug、WDT Timeout、VOX Output Short、BoostUV、VIN OVP、VINUV State
uint8_t pmu_Fault_STA1; //I2C Timeout
uint8_t pmu_Fault_STA2; //VDPM、Chip OT、PMID OCP、VOX OCP、BoostUV、VIN OVP
uint8_t pmu_Chip_STA; //HALL、KEY、INIT_OK、ChipSate[2:0]:000:standby001:shipmode;010:充电、放电的异常状态011:充电状态BUCK启动ITC充电100:充电状态BUCK启动ICC充电101:充电状态BUCK启动CV充电110:充电状态且电池充满111:VBAT放电状态包括BOOST和"VBAT直通PMID"
uint8_t pmu_VOX_STA; //VOX ioff、loadon、loadin
// uint8_t pmu_IRQ_STA;
} g_PMU_Info;
/*PMU相关配置信息*/
typedef struct {
uint8_t pmu_Rst_Cfg; //<35h> bit4:HALL极性选择bit3:Hall开盒HALL=1退出ShipMode功能bit2:KEY长按复位VDD使能bit1:WDT复位关联VDD复位使能bit0:VIN插入复位VDD使能
uint8_t pmu_PWR_Ctrl_Cmd; //<4Fh> 0x11:EnReChgVIN正常是写入此命令IC将重新开启充电循环0x17:CMD_RST此命令将复位I2CR<0x20>~<0x4F>、VDD0xAA:EnterShipmode,当且仅当在standby mode状态下写入此命令IC进入ShipMode状态在Charge Mode状态时写入此命令无效0x33:RstVDD在任意状态下关闭VSYS 200ms然后在重启VDD。
uint8_t pmu_VPMID_Cfg; //<25h> VPMID配置
uint8_t pmu_IRQ_En0; //<40h> pmu相关中断使能位0
uint8_t pmu_IRQ_En1; //<41h> pmu相关中断使能位1
uint8_t pmu_Xsen_Ctrl; //<31h> pmu相关ADC通道使能配置
uint8_t pmu_LED_Ctrl0; //<39h> Power LED控制位
uint8_t pmu_WDT1_Cfg; //<26h> bit3:短路和过流后保护模式选择bit2:pmu看门狗功能使能固定40sbit1:
uint8_t pmu_WDT1_Rst; //<5Ah> pmu喂狗
// uint8_t pmu_Soft_Dat5;
} g_PMU_Sys_Cfg;
typedef struct {
uint8_t pmu_VDPM_VDD_CHG_En; //电源配置bit6:VDPM使能bit5:充电自适应电压点选择bit<4:3>:自适应适配器电压bit2:VDD输出模式配置bit1:USB Adpter直充使能bit0:BUCK充电控制信号。
uint8_t pmu_Chg_VFLOAT_Cfg; //浮充电压VBF设置默认值4.35V。
uint8_t pmu_Chg_ICC_Cfg; //电池端恒流充电电流ICC设定值。
uint8_t pmu_Chg_ITC_Iterm_Cfg; //[6:4]电池端涓流ITC充电电流设定值[2:0]电池端充电截止电流ITERM设定值。
} g_PMU_CHG_Cfg;
typedef struct {
uint8_t pmu_BST_COMM_En; //bit0:Boost使能[7:1]:VOX通讯切换配置。
uint8_t pmu_VOX_Cfg; //Vox配置
} g_PMU_Vox_Cfg;
typedef enum
{
HAL_OK = 0x00U,
HAL_ERROR = 0x01U,
HAL_BUSY = 0x02U,
HAL_TIMEOUT = 0x03U
} HAL_StatusTypeDef;
typedef enum
{
DISCHG_ON = 0,
CHG_ON,
}g_chg_type;
extern g_PMU_Info pmu_Info; //pmu状态信息
extern g_PMU_Sys_Cfg pmu_Sys_Cfg;
extern g_PMU_CHG_Cfg pmu_Chg_Cfg;
extern g_PMU_Vox_Cfg pmu_Vox_Cfg;
/******************************************************************************\
Functions definitions
\******************************************************************************/
extern void pmu_Init(void);
extern HAL_StatusTypeDef Get_PMU_Info( g_PMU_Info *n_pmu_Info );
extern HAL_StatusTypeDef Set_PMU_Sys_Config( g_PMU_Sys_Cfg *n_PMU_Sys_Cfg );
extern HAL_StatusTypeDef Set_PMU_CHG_Config( g_PMU_CHG_Cfg *n_PMU_CHG_Cfg );
extern void Set_PMU_CHG(uint8_t Chg_En);
extern void Set_PMU_Boost(uint8_t Boost_En);
extern void Set_PMU_Boost_Vout(uint8_t Boost_Vout);
extern HAL_StatusTypeDef Set_PMU_VOX_Config( g_PMU_Vox_Cfg *n_PMU_Vox_Cfg );
#endif

59
UsrInc/pwm/pwm.h Normal file
View File

@ -0,0 +1,59 @@
/*
******************************************************************************
*
* @file pwm.h
* @brief pwm module
* @ic sy8835
*
* @version 1.0
* @date 2024/11/01 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 2024/11/01 Alex build this file
******************************************************************************
*/
#ifndef __PWM_H__
#define __PWM_H__
#include "define.h"
#ifdef PWM_ENABLE
/* PWM Channels */
typedef enum {
PWM_CH0 = 0x00,
PWM_CH1,
PWM_CH2,
PWM_CH3,
PWM_ALL
}Pwm_Channels_e;
/* PWM Parameters Config */
typedef struct {
uint8_t nPWM_PRE; //PWM Clock Precale Set --- clock divide 2^n(n:0-7)
uint8_t nPWM_REL; //PWM counter reload value --- Fre(0-255)
uint8_t nPWM_CMP; //PWM compare value --- duty (0-255)
}s_gPWM_Para_Cfg;
#define PWM_REL_VALUE 105 //Feq:KK ,PWM_REL = 255 - 1.5M / 6K = 255-250 = 5£¬nPWM_CMP = 5 + 250 * (1-50%) = 130¡£
#define PWM_REL_FULL 254
extern void PWM_Enable(void);
extern void PWM_Disable(Pwm_Channels_e nPWM_Ch);
extern void PWM_Init_Set(uint8_t nPWM_PRE,uint8_t nPWM_REL);
extern void PWM_Duty_Set(Pwm_Channels_e nPWM_Ch,uint8_t nPWM_CMP);
extern void HuXi_Led(Pwm_Channels_e nPWM_Ch, uint8_t Delay_Timer);
#endif
#endif

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

@ -0,0 +1,56 @@
/*
******************************************************************************
*
* @file sleep.h
* @brief sleep module
* @ic sy8835
*
* @version 1.0
* @date 2024/11/01 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 2024/11/01 Alex build this file
******************************************************************************
*/
#ifndef __SLEEP_H__
#define __SLEEP_H__
/*_____ I N C L U D E S ____________________________________________________*/
#include "define.h"
/******************************************************************************\
Macro definitions
\******************************************************************************/
/*Sleep Module Setting*/
/*Enter Sleep Time Debounce*/
#define ENTER_STANDBYMODE_CNT 15 //进入Standby Mode 延迟时间,单位:秒
#define ENTER_SHIPMODE_CNT 5 //进入ShipMode 延迟时间,单位:秒
/******************************************************************************\
Variables definitions
\******************************************************************************/
#if SLEEP_ENABLE
extern uint8_t Decnt_SleepDelay;
extern bit Enter_Sleep_Cnt_Restart_Flag;
extern uint8_t Enter_ShipMode_Debounce;
extern bit Enter_Ship_Mode_Flag;
/******************************************************************************\
Functions definitions
\******************************************************************************/
extern bit Check_Require_Sleep(void);
extern void Enter_Sleep(void);
#endif
#endif

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

@ -0,0 +1,63 @@
/*
******************************************************************************
*
* @file system.h
* @brief system module
* @ic sy8835
*
* @version 1.0
* @date 2024/11/01 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 2024/11/01 Alex build this file
******************************************************************************
*/
#ifndef __SYSTEM_H__
#define __SYSTEM_H__
/*_____ I N C L U D E S ____________________________________________________*/
#include "define.h"
/******************************************************************************\
Macro definitions
\******************************************************************************/
/*中断号计算方式:中断向量 = 中断号 * 8 + 3*/
#define Interrupt_Vector_IE0 0 //0x03,SY8836 IE0 use for wakeup
#define Interrupt_Vector_TF0 1 //0x0B,Timer 0 Overflow
#define Interrupt_Vector_IE1 2 //0x13
#define Interrupt_Vector_TF1 3 //0x1B,Timer 1 Overflow
#define Interrupt_Vector_RI_TI 4 //0x23,Serial Port0 Interrupt
#define Interrupt_Vector_TF2 5 //0x2B
#define Interrupt_Vector_IE7 8 //0x43,External Interrupt 7 / PWM
#define Interrupt_Vector_IE2 9 //0x4B,External Interrupt 2
#define Interrupt_Vector_IE3 10 //0x53,External Interrupt 3
#define Interrupt_Vector_IE4 11 //0x5B,External Interrupt 4
#define Interrupt_Vector_IE5 12 //0x63,External Interrupt 5
#define Interrupt_Vector_IE6 13 //0x6B,External Interrupt 6 / ADC中断
#define Interrupt_Vector_RI1_TI1 16 //0x83,Serial Port1 Interrupt
#define Interrupt_Vector_IE8 17 //0x8B,Serial Port2 Interrupt
/******************************************************************************\
Variables definitions
\******************************************************************************/
/******************************************************************************\
Functions definitions
\******************************************************************************/
extern void System_Init(void);
#endif

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

@ -0,0 +1,67 @@
/*
******************************************************************************
*
* @file sys_tim.h
* @brief system timer module
* @ic sy8835
*
* @version 1.0
* @date 2024/11/01 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 2024/11/01 Alex build this file
******************************************************************************
*/
#ifndef __sys_tim_H__
#define __sys_tim_H__
#include "define.h"
//#define FOSC 11059200L
#define T1MS 921
#define T100uS 91
#define T200uS 183
#define T300uS 275
#define T400uS 368
#define T500uS 460
#define T600uS 552
#define T800uS 736
#define T10MS 9215 //FOSC/11.0592/100
#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
#define C_TIM1_Reload (65535 - T1MS) //1ms
extern bit F_sys_tim1_tick;
extern void Sys_Tim1_Init(void );
#endif
extern bit F_sys_tim_1ms;
extern bit F_sys_tim_5ms;
extern bit F_sys_tim_10ms;
extern bit F_sys_tim_250ms;
extern bit F_sys_tim_100ms;
extern bit F_sys_tim_1s;
extern bit F_sys_tim1_tick;
extern bit F_sys_tim2_tick;
extern void Sys_Tim0_Init(void );
extern void Sys_Tim0_Handler(void );
#endif

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

@ -0,0 +1,92 @@
/*
******************************************************************************
*
* @file uart.h
* @brief uart module
* @ic sy8835
*
* @version 1.0
* @date 2024/11/01 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 2024/11/01 Alex build this file
******************************************************************************
*/
#ifndef __UART_H__
#define __UART_H__
/*_____ I N C L U D E S ____________________________________________________*/
#include "define.h"
/******************************************************************************\
Macro definitions
\******************************************************************************/
#define Baud_Rate0 9600//9600//19200//38400//93750
#define S0REL_VALUE (1024-345600/Baud_Rate0)
#define Baud_Rate1 9600//19200//38400//93750
#define S1REL_VALUE (1024-345600/Baud_Rate1)
#define Baud_Rate2 115200//19200//38400//93750
#define S2REL_VALUE (1024-345600/Baud_Rate2)
#define UART_REC_ENABLE_Pos (4U)
#define UART_REC_ENABLE_Pos_Msk (0x1UL << UART_REC_ENABLE_Pos)
#define UART_REC_ENABLE UART_REC_ENABLE_Pos_Msk
#ifdef _DEBUG_ALL
extern char putchar (char ch);
#endif
#define COM0_Data_Lenth 64
#ifdef VOX_RX
/******************************************************************************\
Variables definitions
\******************************************************************************/
extern idata uint8_t RX0_Buffer[COM0_Data_Lenth]; //½ÓÊÕ»º³å
extern bit Uart0_RX_Finish_Flag;
#endif
/******************************************************************************\
Functions definitions
\******************************************************************************/
#ifdef _DEBUG_ALL
extern char putchar (char ch);
#endif
extern void UART0_Init(void);
extern void Uart0SendData(uint8_t Txdata);
#ifdef VOX_TX
extern void Uart0SendPacket(uint16_t Length,uint8_t *TransBuf);
#endif
extern void UART1_Init(void);
extern void Uart1SendData(uint8_t Txdata);
extern void UART2_Init(void);
extern void Uart2SendData(uint8_t Txdata);
#endif

48
UsrInc/user/user.h Normal file
View File

@ -0,0 +1,48 @@
/*
******************************************************************************
*
* @file user.h
* @brief user module
* @ic sy8835
*
* @version 1.0
* @date 2024/11/01 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 2024/11/01 Alex Xu build this file
******************************************************************************
*/
#ifndef __USER_H__
#define __USER_H__
/*_____ I N C L U D E S ____________________________________________________*/
#include "i2c_simu.h"
/******************************************************************************\
Macro definitions
\******************************************************************************/
/******************************************************************************\
Variables definitions
\******************************************************************************/
/******************************************************************************\
Functions definitions
\******************************************************************************/
extern void ExtSfr_Write(u8 reg_addr,u8 _dat);
extern u8 ExtSfr_Read(u8 reg_addr);
extern void I2cSfr_Write(u8 reg_addr,u8 _dat);
extern u8 I2cSfr_Read(u8 reg_addr);
#endif

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

@ -0,0 +1,70 @@
/*
******************************************************************************
*
* @file userapp.h
* @brief userapp module
* @ic sy8835
*
* @version 1.0
* @date 2024/11/01 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 2024/11/01 Alex build this file
******************************************************************************
*/
#ifndef __USERAPP_H__
#define __USERAPP_H__
#include "define.h"
/******************************************************************************\
Macro definitions
\******************************************************************************/
#define BAT_LEVEL_LOW 20 //电池电量低报警值
/******************************************************************************\
Typedef definitions
\******************************************************************************/
typedef enum{
POWER_ON_STATE = 1,
AWAKE_STATE,
NORMAL_STATE,
SLEEP_STATE,
}SYS_STATE;
typedef struct {
uint8_t Next_State;
uint8_t Current_State;
uint8_t Pre_State;
}s_sys_state;
extern xdata s_sys_state Systerm_State;
extern bit Wkup_Earphone_Flag; //保护消失后,需要升压唤醒耳机标志位
/******************************************************************************\
Global variables and functions
\******************************************************************************/
extern uint8_t LED_On_Timer; //led亮时间计时
extern bit LED_On_Flag;
extern void UserAPP(void);
#endif

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

@ -0,0 +1,216 @@
/*
******************************************************************************
*
* @file VOX_Module.h
* @brief VOL/R module
* @ic sy8835
*
* @version 1.0
* @date 2024/11/01 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 2024/11/01 Alex build this file
******************************************************************************
*/
#ifndef __VOX_MODULE_H__
#define __VOX_MODULE_H__
/*_____ I N C L U D E S ____________________________________________________*/
#include "define.h"
/*耳机方案商选择*/
//#define QIANCHENG //岍丞
//#define ZHONGKELANXUN //中科蓝讯
#define XIAOMI //小米
/*硬件版本信息*/
#define HW_VER 0x01 //硬件版本信息范围0-9
/*软件版本信息*/
#define FW_VER 0x001 //程序版本
extern bit Vox_Vout_Enable;
extern bit Earphone_Chg_Flag; //耳机出入盒标志位
extern bit Vox_Output_Short_Flag;
#define IVOX_THN 20 //耳机跟随充电流下降阈值
#define IVOX_THP 200 //耳机跟随充电流上升阈值
#define VOL_TYPE 0x00
#define VOR_TYPE 0x01
#if 1
/*耳机配对状态*/
typedef enum {
VOX_PAIR_NONE = 0, //无效
VOX_PAIR_ING, //配对中
VOX_PAIR_OK, //配对完成
VOX_PAIR_KEEP, //不处理,保持当前状态
}e_Vox_Pairing_State;
/*耳机配对记录*/
typedef enum {
VOX_PAIRED_NONE = 0, //无配对过
VOX_PAIRED_OK, //有配对记录
}e_Vox_Paired_State;
#endif
#if VOX_ENABLE
/******************************************************************************\
Macro definitions
\******************************************************************************/
/*
VOX过流档位设置(Vox_init())VOX_CON0
SFRADDR = VOX_CON0; //设置VOX输出200mA负载识别电流2.5uA。
SFRDATA &= 0xE0;
SFRDATA |= (VOX_IOUT_200MA << 3) | VOX_ADT_Cur_2_5UA;
//Vox轻重载滤波时间配置
SFRADDR = VOX_CON2;
SFRDATA |= (VOX_LIGHT_TO_HAVEY_128 << 2) | VOX_HAVEY_TO_LIGHT_8;
*/
/*Vox输出电流过流保护阈值。*/
#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
/*轻载转重载滤波时间配置。*/
#define VOX_LIGHT_TO_HAVEY_1 0x00
#define VOX_LIGHT_TO_HAVEY_8 0x01
#define VOX_LIGHT_TO_HAVEY_128 0x02
#define VOX_LIGHT_TO_HAVEY_256 0x03
/*重载转轻载滤波时间配置。*/
#define VOX_HAVEY_TO_LIGHT_0_125 0x00
#define VOX_HAVEY_TO_LIGHT_1 0x01
#define VOX_HAVEY_TO_LIGHT_8 0x02
#define VOX_HAVEY_TO_LIGHT_64 0x03
#define BOXHEADER 0x55AA //VOX通讯数据包头
#define BOXIDCODE 0xFF //VOX通讯耳机->仓数据包头
#define Vox_TX_Interval 2 //Vox定时发送指令时间间隔
#define TIM_SHUTDOWN_DEBOUNCE 600 //关机前debounce时间
/******************************************************************************\
Variables definitions
\******************************************************************************/
/*耳机通道选择*/
#define TWS_VOL 0x04
#define TWS_VOR 0x05
#define TWS_BOX 0x02
#define TWS_PC 0x03
/*耳机通道选择*/
typedef enum {
VOL_CHAN = 0x00,
VOR_CHAN = 0x01,
VOX_BOTH = 0xFF,
}e_Vox_Chan;
/*耳机和充电仓进行双向通讯的协议命令ID。*/
typedef enum _VOX_BES_COMMAND_E
{
VHOUSE_CMD_PAIR = 0x01, //充电仓发起的配对信息
VHOUSE_CMD_EXCH_TWS_BTADDR = 0x02, //交换对耳的蓝牙地址信息。
VHOUSE_CMD_CLEAR_PAIR = 0x03, //清配对信息
VHOUSE_CMD_OPEN_BOX = 0x06, //开盖获取电量包
VHOUSE_CMD_CLOSE_WIN_GET_VBAT = 0x07, //关盖获取电量包
VHOUSE_CMD_RST = 0x08, //
VHOUSE_CMD_PWROFF = 0x80, //关机消息
VHOUSE_CMD_CLOSE_BOX = 0x81,
BES_RESET = 0xE1,
}VOX_BES_COMMAND_E;
/* Vox Channel Select. */
typedef enum {
VOL_CHAN_SET = 0x00,
VOR_CHAN_SET = 0x01,
VOX_BOTH_SET = 0x02,
}e_Vox_Chan_Set;
/* Vox Follow Charge State. */
typedef enum {
Vox_Follow_Chg_InitSta = 0x00,
Vox_Follow_Chg_Sta1,
Vox_Follow_Chg_Sta2,
}e_Vox_Follow_Chg_Sta;
/* VOX Enable Type */
typedef enum {
VOX_TRANS_Mode = 0x00, //VOx UART 透传功能使能
VOX_COMM_Mode_Uart, //VOx 通讯 UART Mode
VOX_COMM_Mode_Reg, //VOx 通讯 Register Mode
VOX_VOUT_Mode, //VOx 5V 输出使能
VOX_ADT_Mode, //VOx 负载接入、存在识别功能使能,负载自动识别
VOX_PUnK_Mode, //Vox上拉电阻配置上拉到VOX_Vup。
VOX_PD1K_Mode, //<SHIP_CTL[VOX_PD1K 5:4]> VOX 1K 电阻下拉使能 1: VOR 通过 1K 电阻下拉至 gnd
} VOX_Enable_Mode_e;
extern uint16_t Boost_Open_Atleast_Tim_Cnt;
extern bit Cover_Open_Flag;
#ifdef VOX_RX
extern uint8_t Vox_Get_Vbat_Flag[2]; //耳机配对状态VOL:低4bitVOR:高4bit。0是无效1是正在配对2是配对成功3不处理保持当前状态。
extern idata uint8_t Vox_Get_BES_Addr_Flag[2] ;
#endif
//extern uint8_t Box_To_Bes_Comm_Debounce;
/******************************************************************************\
UserCfg.Functions definitions
\******************************************************************************/
extern void HandleTxCommand(VOX_BES_COMMAND_E TxCommand, e_Vox_Chan nVox_Chn_Select);
extern void Vox_Det_Machine(void);
extern void VOX_EN_Type(VOX_Enable_Mode_e VOX_Enable_Mode);
#ifdef VOX_RX
extern void HandleVoxCommMsg(void);
#endif
#endif
#endif

View File

@ -0,0 +1,51 @@
/*
******************************************************************************
*
* @file watchdog.h
* @brief watchdog module
* @ic sy8835
*
* @version 1.0
* @date 2024/11/01 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 2024/11/01 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 sy8835
*
* @version 1.0
* @date 2024/11/01 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/11/01 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位置处小端模式存储。

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

@ -0,0 +1,222 @@
/*
******************************************************************************
*
* @file adc.c
* @brief adc module
* @ic sy8835
*
* @version 1.0
* @date 2024/11/01 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/11/01 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
\******************************************************************************/
uint8_t ADC_Chn_Num = 0;
idata uint16_t Vbat_Adc = 0;
idata uint16_t g_Vpmu_Adc = 0;
idata uint16_t g_Vntc_Adc = 0;
idata uint16_t g_Vbjt_Adc = 0;
idata uint16_t g_Vp13_Adc = 0;
idata uint16_t g_Vref_Adc = 0;
uint8_t g_PMU_ADC_Chn = 0;
idata uint16_t g_pmu_Adc_Ivol = 0;
idata uint16_t g_pmu_Adc_Vin = 0;
idata uint16_t g_pmu_Adc_Vpmid = 0;
idata uint16_t g_pmu_Adc_Vor = 0;
idata uint16_t g_pmu_Adc_Vol = 0;
idata uint16_t g_pmu_Adc_Vdd = 0;
idata uint16_t g_pmu_Adc_Ivor = 0;
/******************************************************************************\
Functions definitions
\******************************************************************************/
/*
*******************************************************************************
* void Adc_Init(void)
*
* Description : ADC Initialization. ---
*
* Arguments : NONE
* Returns : NONE
* Notes : NONE
*
*******************************************************************************
*/
void Adc_Init(void)
{
SFRADDR = ADC_CTL2; //ADC 2.5V Enable b[7];ADC1 Pullup 100K Enable b[0].
SFRDATA = 0x81;
SFRADDR = MFP_CTL0; //Set P14 As ADC1 For NTC
SFRDATA |= 0x10;
ExtSfr_Write(ADC_CTL0,0xAB); //0B10101001,0xA9--ADC EN;Average time:16; Single mode; ADC CLK divided by 24=460k
// ADC_CTL1 = (ADC_PMU_CH0 + 1) | (ADC_NTC_CH1 + 1) | 0x80; //ADC Start Enable,Set Channel N Enabel.
SFRADDR = ADC_IntEn; //Enable ADC Interrupt.b[4:0]:ADC4-ADC0
SFRDATA |= 0x03;
EX6 = 1; //ADC IRQ Enable
}
/*
*******************************************************************************
* void PMU_ADC_Chn_Data(PMU_ADC_CHANNELS_E pmu_Adc_Chn)
*
* Description : 使使ADC值
*
* Arguments : NONE
* Returns : NONE
* Notes : NONE
*
*******************************************************************************
*/
void PMU_ADC_Chn_Data(PMU_ADC_CHANNELS_E pmu_Adc_Chn)
{
I2cSfr_Write( XSEN_CTRL , (0x08 | pmu_Adc_Chn) );
g_PMU_ADC_Chn = pmu_Adc_Chn;
ADC_CTL1 = 0x81; //ADC Start Enable,Set Channel N Enabel.
SFRADDR = ADC_IntEn; //Enable ADC Interrupt.b[4:0]:ADC4-ADC0
SFRDATA = 0x01;
}
/*
*******************************************************************************
* void EX6_ADC_isr(void ) interrupt Interrupt_Vector_IE6
*
* Description : System External Intterupt 6 adc Interrupt.
*
* Arguments : NONE
* Returns : NONE
* Notes : NONE
*
*******************************************************************************
*/
void EX6_ADC_isr(void) interrupt Interrupt_Vector_IE6
{
uint8_t reg_addr_bk = 0;
reg_addr_bk = SFRADDR;
if(ADC_IntFlag & 0x01)
{
g_Vpmu_Adc = ExtSfr_Read(ADC_CH0_L);
g_Vpmu_Adc |= (uint16_t)( ( ExtSfr_Read(ADC_CH0_H) & 0x03 ) << 8 );
g_Vpmu_Adc = ((uint32_t)g_Vpmu_Adc * 2500) >> 10 ; //ADC的LSB = 2500mV / 1024 = 2.44mV
/*获取xSen对应的ADC值*/
switch (g_PMU_ADC_Chn)
{
case pmu_ADC_IVOL:
g_pmu_Adc_Ivol = g_Vpmu_Adc >> 2; //采样比例4mV/mA
break;
case pmu_ADC_VBAT:
Vbat_Adc = g_Vpmu_Adc << 1; //vbat的2分压
break;
case pmu_ADC_VIN:
g_pmu_Adc_Vin = g_Vpmu_Adc << 3; //vin的8分压
break;
case pmu_ADC_VPMID:
g_pmu_Adc_Vpmid = g_Vpmu_Adc << 2; //PMID的4分压
break;
case pmu_ADC_VOR:
g_pmu_Adc_Vor = g_Vpmu_Adc << 2; //vor的4分压
break;
case pmu_ADC_VOL:
g_pmu_Adc_Vol = g_Vpmu_Adc << 2; //vol的4分压
break;
case pmu_ADC_VDD:
g_pmu_Adc_Vdd = g_Vpmu_Adc << 1; //vdd的2分压
break;
case pmu_ADC_IVOR:
g_pmu_Adc_Ivor = g_Vpmu_Adc >> 2; //采样比例4mV/mA
break;
default:
break;
}
}
if(ADC_IntFlag & 0x02)
{
g_Vntc_Adc = ExtSfr_Read(ADC_CH1_L);
g_Vntc_Adc |= (uint16_t)( ( ExtSfr_Read(ADC_CH1_H) & 0x03 ) << 8 );
}
if(ADC_IntFlag & 0x04)
{
g_Vbjt_Adc = ExtSfr_Read(ADC_CH2_L);
g_Vbjt_Adc |= (uint16_t)( ( ExtSfr_Read(ADC_CH2_H) & 0x03 ) << 8 );
}
if(ADC_IntFlag & 0x08)
{
g_Vp13_Adc = ExtSfr_Read(ADC_CH3_L);
g_Vp13_Adc |= (uint16_t)( ( ExtSfr_Read(ADC_CH3_H) & 0x03 ) << 8 );
}
if(ADC_IntFlag & 0x10)
{
g_Vref_Adc = ExtSfr_Read(ADC_CH4_L);
g_Vref_Adc |= (uint16_t)( ( ExtSfr_Read(ADC_CH4_H) & 0x03 ) << 8 );
}
ADC_IntFlag = 0x0F;
SFRADDR = reg_addr_bk;
}
#endif

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

@ -0,0 +1,603 @@
/*
******************************************************************************
*
* @file bat.c
* @brief Voltage-based RC model gauge algorithm
* @ic sy8835
*
* @version 1.0
* @date 2024/11/01 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 2024/11/01 Alex build this file
******************************************************************************
*/
#include "bat.h"
#include "adc.h"
#include "pmu.h"
idata uint8_t bat_level = 0;
idata uint8_t bat_level_Pec = 0;
bit F_batlevel_low = 0; //电池低压
#if 0
#if GAUGE_ENABLE
/******************************************************************************\
Macro definitions
\******************************************************************************/
/******************************************************************************\
Variables definitions
\******************************************************************************/
static idata const uint16 ocv_zero = 3200;
static idata const uint16 ocv_full = 4200;
static idata uint8 ocv_delta[20] = {255 ,93 ,24 ,48 ,38 ,41 ,34 ,30 ,33 ,40 ,48 ,66 ,84 ,78 ,74 ,79 ,82 ,85 ,86 ,85};
//带插值版的参数
static idata const uint16 kint_0deg[5] = { 25, 32, 31, 27, 24}; //初值当小于0度时采用此值
static idata const uint8 Kint_soc0[6] = { 1, 22, 160, 255, 25, 20 }; //SOC=0~10%不同温度Kint的delta值每8度一个delta值*8如第一个值代表0~7度第二个值代表8~15度
static idata const uint8 Kint_soc1[6] = { 6, 0, 12, 110, 0, 0 }; //SOC=10~25%不同温度Kint的delta值每8度一个delta值*8如第一个值代表0~7度第二个值代表8~15度
static idata const uint8 Kint_soc2[6] = { 0, 10, 15, 40, 10, 0 }; //SOC=25~50%不同温度Kint的delta值每8度一个delta值*8如第一个值代表0~7度第二个值代表8~15度
static idata const uint8 Kint_soc3[6] = { 38, 18, 48, 160, 38, 29 }; //SOC=50~80%不同温度Kint的delta值每8度一个delta值*8如第一个值代表0~7度第二个值代表8~15度
static idata const uint8 Kint_soc4[6] = { 14, 45, 80, 210, 88, 29 }; //SOC=80~100%不同温度Kint的delta值每8度一个delta值*8如第一个值代表0~7度第二个值代表8~15度
//uint8 k_ratio_chg_fast[5];
//uint8 k_ratio_chg_norm[5];
static idata const uint8 k_ratio_chg_temp[7] = { 128, 54, 42, 32, 32, 46, 32 }; //20210304 充电kint各温度区间补偿系数
static idata const uint8 k_ratio_chg_temprange[6] = { 5, 10, 16, 35, 44, 55 }; //将温度划分成7个区间默认为5度以下5~9,10~14,15~34,35~44,45~55,55以上
//int8 fastchgth; //快充阈值当充电电流大于这个阈值时选择k_ratio_chg_fast否则选择k_ratio_chg_norm
//高位开始代表从15度开始SOC值是否需要减1如15度相比25度容量衰减超过1%则bit15=1然后14度和15度一样则bit14=0如果13度比15度容量小1%则bit13=1依次类推
//小于0度固定和0度补偿值一样此方式最大补偿值为每1度补1%16度以上不补偿
static idata uint16 c_delta = 0;
//用户写入参数
uint8 c_ratio_customer = 0; //客户参数区写入的值,客户预存各种场景容量损失,可以灵活补偿负载/温度/老化等多种场景
//电量计中间变量
static uint32 K_int = 0;
static uint16 OCV_int16 = 0;
static uint32 OCV_int32 = 0;
static uint8 SOC_int = 0; //直接从OCV表查表得到的SOC100-SOC_int*Qmax为到充满需要的容量SOC_int由于未补偿负载除非常温和负载大小和建模一致否则放电使用此SOC会有误差
static int8 SOC_dsg = 0; //放电时使用的SOC在不同温度下会有跳变SOC_dsg=SOC_int-c_ratio_0deg/c_ratio_10deg
uint8 SOC_report = 0; //上报的SOC值结合库仑计信息和SOC_int/SOC_dsg之间
//20210219 更新基于OCV的平滑算法
static uint16 OCV_deltahalf = 0; //用于追赶SOC的OCV累计溢出值取各SOC 0.5%对应的OCV delta值
static uint8 OCV_count = 0; //计算当前和上次更新SOC_report的差值
static uint16 OCV_lastupdate = 0; //记录上次更新SOC_report的OCV值
/******************************************************************************\
Functions definitions
\******************************************************************************/
//20210304新增对于充电温度补偿
/*
*******************************************************************************
* static uint8 Kint_Rate_chg(int8 temperature_s)
*
* Description :
* Arguments : NONE
* Returns : NONE
* Notes : NONE
*
*******************************************************************************
*/
static uint8 Kint_Rate_chg(int8 temperature_s)//查找不同温度下充电时Kint补偿系数
{
if(temperature_s > k_ratio_chg_temprange[5])
return k_ratio_chg_temp[6];
if(temperature_s > k_ratio_chg_temprange[4])
return k_ratio_chg_temp[5];
if(temperature_s > k_ratio_chg_temprange[3])
return k_ratio_chg_temp[4];
if(temperature_s > k_ratio_chg_temprange[2])
return k_ratio_chg_temp[3];
if(temperature_s > k_ratio_chg_temprange[1])
return k_ratio_chg_temp[2];
if(temperature_s > k_ratio_chg_temprange[0])
return k_ratio_chg_temp[1];
return k_ratio_chg_temp[0];
}
/*查表获得Kint值*/
/*
*******************************************************************************
* static uint16 Kint_Find_delta(int8 temperature_s)
*
* Description :
* Arguments : NONE
* Returns : NONE
* Notes : NONE
*
*******************************************************************************
*/
static uint16 Kint_Find_delta(int8 temperature_s, uint8 current_s)
{
uint8 temprange,i,temperature_use,tempindex;
// uint16 Kint_chg_temp = 0;
uint32 Kintsum = 0;
// uint16 Kint_temp = 0;
if (temperature_s < 0)
temperature_use = 0;
else if (temperature_s > 47)
temperature_use = 47;
else
temperature_use = temperature_s; //温度限定在0~63度超过63度或者低于0度则用63度和0度 temperature_s = 35
temprange = temperature_use >> 3; //找出温度区间 temperature_use/8 = 35/8 = 4 为何要用8取模和取余Kinit表是以8度为一个区间取值
tempindex = temperature_use - (temprange << 3); //对温度取余,得到某个区间第几个温度值 temperature_use%8 = 35 % 8 = 3
if (SOC_int > 80)
{
for (i = temprange; i > 0; i--)
{
Kintsum = Kintsum + (((uint32)Kint_soc4[i-1])<<3); //温度大于某个区间就从0区间到此区间的所有的delta值*8并累加例如35℃所在温度区间为32~39℃第四区间。
}
for (i = tempindex; i > 0; i--)
{
Kintsum = Kintsum + ((uint32)Kint_soc4[temprange]); //将不足一个区间0-8只间的值数据按照加法累加计算温度余数对应的kint累加值例如35℃在温度区间余数为35-32=3℃。
}
Kintsum = Kintsum >> 3; //由于delta放大了8倍这里要除以8
Kintsum = Kintsum + kint_0deg[4]; //得到此温度下的放电Kint值
}
else if (SOC_int > 50)
{
for (i = temprange; i > 0; i--)
{
Kintsum = Kintsum + (((uint32)Kint_soc3[i-1]) << 3); //温度大于某个区间就将区间的delta值*8
}
for (i = tempindex; i > 0; i--)
{
Kintsum = Kintsum + ((uint32)Kint_soc3[temprange]); //将不足一个区间8个值数据按照加法累加
}
Kintsum = Kintsum >> 3; //由于delta放大了8倍这里要除以8
Kintsum = Kintsum + kint_0deg[3]; //得到此温度下的放电Kint值
}
else if (SOC_int > 25)
{
for (i = temprange; i > 0; i--)
{
Kintsum = Kintsum + (((uint32)Kint_soc2[i-1]) << 3); //温度大于某个区间就将区间的delta值*8
}
for (i = tempindex; i > 0; i--)
{
Kintsum = Kintsum + ((uint32)Kint_soc2[temprange]); //将不足一个区间8个值数据按照加法累加
}
Kintsum = Kintsum >> 3; //由于delta放大了8倍这里要除以8
Kintsum = Kintsum + kint_0deg[2]; //得到此温度下的放电Kint值
}
else if (SOC_int > 10)
{
for (i = temprange; i > 0; i--)
{
Kintsum = Kintsum + (((uint32)Kint_soc1[i-1] )<< 3); //温度大于某个区间就将区间的delta值*8
}
for (i = tempindex; i > 0; i--)
{
Kintsum = Kintsum + ((uint32)Kint_soc1[temprange]); //将不足一个区间8个值数据按照加法累加
}
Kintsum = Kintsum >> 3; //由于delta放大了8倍这里要除以8
Kintsum = Kintsum + kint_0deg[1]; //得到此温度下的放电Kint值
}
else
{
for (i = temprange; i > 0; i--)
{
Kintsum = Kintsum + (((uint32)Kint_soc0[i-1]) << 3); //温度大于某个区间就将区间的delta值*8
}
for (i = tempindex; i > 0; i--)
{
Kintsum = Kintsum + ((uint32)Kint_soc0[temprange]); //将不足一个区间8个值数据按照加法累加
}
Kintsum = Kintsum >> 3; //由于delta放大了8倍这里要除以8
Kintsum = Kintsum + kint_0deg[0]; //得到此温度下的放电Kint值
}
if(current_s > 0)
{
Kintsum = Kintsum * Kint_Rate_chg(temperature_s);
}
return (uint16)Kintsum;
}
//2023/2/17以上代码为通过查表找出随SOC温度和充放电倍率变化的Kint值可以根据需要适当减少数组数量增加常温下不同SOC区间的Kint值以提高常温精度
//2023/2/17下面代码引入current_s标志位主要是为了解决没有充放电时SOC出现反弹的问题
//2023/2/17 如果对低温性能要求不高可以删掉SOC_dsgSOC_Dsg的只是单纯在SOC_int基础上低温时直接减去一个随温度变化的值SOC_dsg = SOC_int - c_ratio_customer;
//如果不对SOC_int做低温补偿就不会出现SOC_dsg这个值造成差异。那么这个代码就可以精简掉SOC_dsg
//这里代码还做了一个基于OCV_count的平滑如果OCV差值只要超过0.5%OCV_deltahalf就允许快速平滑SOC。
//实际应用例子因为我们的OCV-SOC_int表是基于常温的假设某个OCV值下SOC_int=20%,但是目前是低温状态查表得到c_ratio_customer=10%那么SOC_dsg=10%。即实际当前是只有10%
//电量但是SOC_int=20%这时上报的SOC_report就要从初始的20%(=SOC_int)平滑到放电截止的时0%SOC_dsg=0%SOC_int=10%因此SOC_report就要以2倍的速度下降所以引入OCV_deltahalf
//但还有一种场景是在低温下SOC_report=SOC——dsg但是此时恢复到常温比如低温下SOC_report=SOC_dsg=10%,但是回到常温对应电量有20%因此显示10%要更满速度到0%才能使电量充分放完
static void SOC_report_cal(uint8 current_s) //current_s在具体实现上用charger存在标志位取代即可
{
if(OCV_int16 > OCV_lastupdate) //取绝对值
OCV_count = OCV_int16 - OCV_lastupdate;
else
OCV_count = OCV_lastupdate - OCV_int16;
if (current_s > 0) //充电时建议改成charger插入状态
{
if((SOC_int == 100) && (SOC_report < 100)) //如果SOC_int已经到达100%则SOC_report快速趋近100%
{
SOC_report++;
OCV_lastupdate = OCV_int16;
}
else if((OCV_count > OCV_deltahalf) && (SOC_int > SOC_report))
{
SOC_report++;
OCV_lastupdate = OCV_int16;
}
}
else //放电时
{
if((SOC_dsg == 0) && (SOC_report > 0)) //如果SOC_dsg已经到达0%则SOC_report快速趋近0%
{
SOC_report--;
OCV_lastupdate = OCV_int16;
}
else if((OCV_count > OCV_deltahalf) && (SOC_report > SOC_dsg))
{
SOC_report--;
OCV_lastupdate = OCV_int16;
}
else if((OCV_count > (OCV_deltahalf << 2)) && (SOC_report < SOC_dsg)) //OCV变化2%SOC对应的Delta允许变化1%
{
if(SOC_report > 0)
{
SOC_report--;
OCV_lastupdate = OCV_int16;
}
}
}
if(SOC_report == 100)
OCV_lastupdate = ocv_full;
if(SOC_report == 0)
OCV_lastupdate = ocv_zero;
bat_level = SOC_report;
}
//20210108更新版的SOC_dsg计算方法计算出温度或者客户写入的容量损失后的容量
//20210118修正代码中bug
static void SOC_dsg_cal(int8 temperature_s)
{
int8 i;
uint16 k;
SOC_dsg = SOC_int;//大于16度保持不变
if (temperature_s < 16)//低于16度做补偿,按位补偿相减
{
k = 0x8000;
for (i=16; i > temperature_s; i--)
{
if (c_delta & k)
SOC_dsg--;
k = k >> 1;
}
}
if (c_ratio_customer != 0)
{
SOC_dsg = SOC_int - c_ratio_customer;
}
if (SOC_dsg < 0)
SOC_dsg = 0;
}
//2023/2/17 查OCV表计算SOC_int
static uint8 SOCint_Calc(uint16 ocv)
{
uint8 i = 0;
uint8 k, j;
uint16 ocv_sum;
uint16 ocv_now;
ocv_now = (uint16)ocv << 3;
ocv_sum = ocv_zero << 3;
for (k = 0; k < 20; k++)
{
for (j = 0; j < 5; j++)
{
//2021/04/01 避免OCV=OCV_zero时SOC=1%而不是0%
if ((ocv_sum) >=(ocv_now))
goto Findsoc;
ocv_sum = ocv_sum + ocv_delta[k];
i++;
}
}
Findsoc:
//20210219
OCV_deltahalf = ocv_delta[k] >> 4;//OCV_deltahalf取0.5%对应的OCV差值由于ocv_delta[k]为8倍的1%SOC OCV差值
return i;
}
/*
*******************************************************************************
* void Gauge_Init(int vbat_init, int current_init, int temp_init)
*
* Description : Gauge Initialization
*
* Arguments :int vbat_init:Bat Adc Value
* int current_init:Charger Exist Flag
* int temp_init: Bat NTC Adc Value
*
* Returns :None
* Notes :
*
*******************************************************************************
*/
static void Gauge_Init(int vbat_init, uint8 current_init, int temp_init)
{
if (vbat_init < (ocv_zero))
{
OCV_int16 = (ocv_zero);
}
else if(vbat_init > (ocv_full))
{
OCV_int16 = (ocv_full);
}
else
OCV_int16 = vbat_init;
OCV_int32 = ((uint32)OCV_int16) << 16;
SOC_int = SOCint_Calc((uint16)(OCV_int32 >> 16));
SOC_dsg_cal((int8)temp_init);
//testdata = SOC_dsg;
SOC_report_cal(current_init);//平滑处理返回 平滑后的SOC值SOC_report
}
/*
*******************************************************************************
* void Gauge_Update(int vbat_new, int current_new, int temp_new)
*
* Description : Gauge Updata
*
* Arguments : int vbat_new:Bat Adc Value
int current_new:Charge Current
int temp_new:Bat NTC Value
* Returns : None
* Notes :
*
*******************************************************************************
*/
static void Gauge_Update(int vbat_new, uint8 current_new, int temp_new)
{
K_int = Kint_Find_delta((int8)temp_new,current_new);
OCV_int32 = OCV_int32 - (K_int * (OCV_int32 >> 16)) + (K_int * vbat_new);
OCV_int16 = (OCV_int32 >> 16);
if (OCV_int16 > (ocv_full))
{
OCV_int32 = ((uint32) ocv_full ) << 16;
}
if (OCV_int16 < (ocv_zero))
{
OCV_int32 = ((uint32) ocv_zero) << 16;
}
//20210401 增加 OCV_int16 = (OCV_int32 >> 16);避免没有及时更新OCV_int16
OCV_int16 = (OCV_int32 >> 16);
SOC_int = SOCint_Calc(OCV_int16);
SOC_dsg_cal((int8)temp_new);
SOC_report_cal(current_new);//平滑处理返回 平滑后的SOC值SOC_report
}
void Bat_Cal_Init(void)
{
uint8 Charger_On = 0;
uint8 Vbat_Init = 0;
uint16 Vbat_NTC_Value = 0;
Charger_On = CHIP_STA4 & 0x07;
#if ADC_ENABLE
Vbat_Init = Vbat_Adc; //获取Bat电压
Vbat_NTC_Value = Vntc_Adc;
#endif
Gauge_Init(Vbat_Init,Charger_On,Vbat_NTC_Value);
#ifdef _DEBUG_BAT
printf("Gauge Init!\r\n");
#endif
}
void Bat_Gauge_Handle(void)
{
uint8 Charger_On = 0;
uint8 Vbat_Adc_Value = 0;
uint16 Vbat_NTC_Value = 0;
Charger_On = CHIP_STA4 & 0x07;
#if ADC_ENABLE
Vbat_Adc_Value = Vbat_Adc; //获取Bat电压
Vbat_NTC_Value = Vntc_Adc;
#endif
Gauge_Update(Vbat_Adc_Value,Charger_On,Vbat_NTC_Value);
}
#endif
#else
//bit F_batlevel_low = 0; //电池低压
#if BAT_VALUE
#define C_offset_bat_level_MAX 150
#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 20
/*充电电池电压会浮高,具体电压需要测试。*/
const uint16_t Boost_batlevel_Threshold[C_batLevel_SetMax] =
{
3000, //0%
3050, //5%
3100, //10%
3200, //15%
3250, //20%
3300, //25%
3350, //30%
3400, //4
3450,
3500, //5
3575,
3650, //6
3720,
3800, //7
3850,
3900, //8
3975,
4050, //9
4125,
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 0
if( Vbat_Adc < Boost_batlevel_Threshold[i] )
{
break;
}
#else
if(ChgStatus == CHG_STA_ING) //充电
{
if( Vbat_Adc < Boost_batlevel_Threshold[i] + 50 )
break;
}
else //放电
{
if( Vbat_Adc < Boost_batlevel_Threshold[i] )
{
break;
}
}
#endif
}
#endif
if( i > bat_level )
{
offset_bat_level++;
}
else
{
offset_bat_level--;
}
if( pmu_Info.pmu_Chip_STA & INIT_OK )
{
bat_level = i;
bat_level_Pec = 5 * bat_level;
}
//debounce
if( (offset_bat_level > C_offset_bat_level_MAX) || (offset_bat_level < C_offset_bat_level_MIN) )
{
//update
bat_level = i;
bat_level_Pec = 5 * bat_level;
offset_bat_level = ( C_offset_bat_level_MAX + C_offset_bat_level_MIN ) / 2;
}
#if 1
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
#endif

View File

@ -0,0 +1,523 @@
/*
******************************************************************************
*
* @file charger_module.c
* @brief charger module
* @ic sy8835
*
* @version 1.0
* @date 2024/11/01 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 2024/11/01 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;
#ifdef NTC_ENABLE
bit NTC_Pro_Flag = 0;
#endif
idata TE_CHG_STA ChgStatus; // CHG状态定义
#if CHARGER_ENABLE
/******************************************************************************\
Macro definitions
\******************************************************************************/
#define NTC_PRO_DEBOUNCE_TIM 10
/******************************************************************************\
Variables definitions
\******************************************************************************/
idata uint8_t gConstant_Cur_Max_Setting = CHG_ICC_2_00MA; //Charge最大充电电流。
idata s_gCharger_Cfg gCharge_Cfg;
/******************************************************************************\
Functions definitions
\******************************************************************************/
/*
*******************************************************************************
* void Charger_init(void)
*
* Description : Charger Initialization
*
* Arguments : NONE
* Returns : NONE
* Notes : NONE
*
*******************************************************************************
*/
void Charger_Init(void)
{
gCharge_Cfg.nTrickle_Cur = CHG_ITC_20MA;
gCharge_Cfg.nIterm_Cur = CHG_ITERM_20MA;
gCharge_Cfg.nConstant_Cur = gConstant_Cur_Max_Setting;
gCharge_Cfg.nVFloat = CHG_VFLOAT_4_200V;
I2cSfr_Write( IRQ_EN0, VDPM_IRQ );
}
#ifdef 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_Handle(uint8_t Charge_sta)
{
uint16_t NTC_Adc = 0;
uint8_t NTC_Flag = FALSE;
bit NTC_Change_CV_Chg_Flag;
static bit DisChg_NTC_Low_Pro_Flag;
static bit DisChg_NTC_High_Pro_Flag;
static bit CHG_NTC_Low_Pro_Flag;
static bit CHG_NTC_High_Pro_Flag;
static bit NTC_250mA_Chg_Flag;
static bit NTC_500mA_Chg_Flag;
#if ADC_ENABLE
NTC_Adc = g_Vntc_Adc;
#endif
if( NTC_Adc >= 2000 ) ////屏蔽NTC功能NTC浮空屏蔽 NTC 功能,并锁定。
{
return FALSE;
}
#if NTC_JEITA
if( Charge_sta ) //VBUS plugin status 充电模式
{
if( ( NTC_Adc <= T_0C ) && ( NTC_Adc > T_60C ) )
{
if( NTC_Adc > T_10C ) //0.5*ICC充电
{
NTC_250mA_Chg_Flag = 1;
gCharge_Cfg.nConstant_Cur = gConstant_Cur_Max_Setting / 2;
if( NTC_500mA_Chg_Flag )
{
if( NTC_Adc > T_8C )
{
NTC_500mA_Chg_Flag = 0;
//gCharge_Cur.nConstant_Cur = gConstant_Cur_Max_Setting / 2;
}
else
{
gCharge_Cfg.nConstant_Cur = gConstant_Cur_Max_Setting;
}
}
NTC_Flag = FALSE;
}
else
if( NTC_Adc <= T_10C && NTC_Adc > T_45C ) //1*ICC充电
{
NTC_500mA_Chg_Flag = 1;
gCharge_Cfg.nConstant_Cur = gConstant_Cur_Max_Setting;
if( NTC_250mA_Chg_Flag )
{
if( NTC_Adc <= T_12C )
{
NTC_250mA_Chg_Flag = 0;
// gCharge_Cur.nConstant_Cur = gConstant_Cur_Max_Setting;
}
else
{
gCharge_Cfg.nConstant_Cur = gConstant_Cur_Max_Setting / 2;
}
}
gCharge_Cfg.nVFloat = CHG_VFLOAT_4_200V;
if( NTC_Change_CV_Chg_Flag )
{
if( NTC_Adc <= T_42C )
{
NTC_Change_CV_Chg_Flag = 0;
// gCharge_Cur.nVFloat = CHG_VFLOAT_4_200V;
}
else
{
gCharge_Cfg.nVFloat = CHG_VFLOAT_4_050V;
}
}
NTC_Flag = FALSE;
}
else
if( NTC_Adc <= T_45C ) //浮充电压4.05V
{
NTC_Change_CV_Chg_Flag = 1;
gCharge_Cfg.nVFloat = CHG_VFLOAT_4_050V;
if( NTC_500mA_Chg_Flag )
{
if(NTC_Adc <= T_47C)
{
NTC_500mA_Chg_Flag = 0;
// gCharge_Cur.nVFloat = CHG_VFLOAT_4_050V;
}
else
{
gCharge_Cfg.nVFloat = CHG_VFLOAT_4_200V;
}
}
NTC_Flag = FALSE;
}
if( CHG_NTC_Low_Pro_Flag )
{
if( NTC_Adc < T_3C)
{
CHG_NTC_Low_Pro_Flag = 0;
NTC_Flag = FALSE;
}
else
{
NTC_Flag = TRUE;
}
}
if( CHG_NTC_High_Pro_Flag )
{
if( NTC_Adc > T_57C )
{
CHG_NTC_High_Pro_Flag = 0;
NTC_Flag = FALSE;
}
else
{
NTC_Flag = TRUE;
}
}
}
else
{
if( NTC_Adc > T_0C ) //不充电
{
CHG_NTC_Low_Pro_Flag = 1;
#ifdef _DEBUG_CHARGER
printf("NTC Low Pro!NTC_Adc:%d,(line:%d)\r\n",(uint16)NTC_Adc,(uint16)__LINE__);
#endif
NTC_Flag = TRUE;
}
else
if( NTC_Adc <= T_60C ) //不充电
{
CHG_NTC_High_Pro_Flag = 1;
NTC_Flag = TRUE;
#ifdef _DEBUG_CHARGER
printf("NTC High Pro!NTC_Adc:%d,(line:%d)\r\n",(uint16)NTC_Adc,(uint16)__LINE__);
#endif
}
}
DisChg_NTC_Low_Pro_Flag = 0;
DisChg_NTC_High_Pro_Flag = 0;
}
else //放电模式
{
CHG_NTC_Low_Pro_Flag = 0;
CHG_NTC_High_Pro_Flag = 0;
if( NTC_Adc <= T_N20C && NTC_Adc > T_80C ) //正常放电
{
if( DisChg_NTC_Low_Pro_Flag )
{
if( NTC_Adc < T_N15C )
{
DisChg_NTC_Low_Pro_Flag = 0;
NTC_Flag = FALSE;
}
else
{
NTC_Flag = TRUE;
}
}
if( DisChg_NTC_High_Pro_Flag )
{
if( NTC_Adc > T_75C )
{
DisChg_NTC_High_Pro_Flag = 0;
NTC_Flag = FALSE;
}
else
{
NTC_Flag = TRUE;
}
}
}
else //异常不放电
{
if( NTC_Adc > T_N20C )
{
DisChg_NTC_Low_Pro_Flag = 1;
}
else
if( NTC_Adc < T_80C )
{
DisChg_NTC_High_Pro_Flag = 1;
}
NTC_Flag = TRUE;
}
}
#elif NTC_IEC
if(Charge_sta) //VBUS plugin status 充电模式
{
if(NTC_Adc <= T_0C && NTC_Adc > T_45C) //正常充电
{
if(CHG_NTC_Low_Pro_Flag)
{
if( NTC_Adc < T_3C )
{
CHG_NTC_Low_Pro_Flag = 0;
NTC_Flag = FALSE;
}
else
{
NTC_Flag = TRUE;
}
}
if(CHG_NTC_High_Pro_Flag)
{
if( NTC_Adc > T_42C )
{
CHG_NTC_High_Pro_Flag = 0;
NTC_Flag = FALSE;
}
else
{
NTC_Flag = TRUE;
}
}
}
else //异常不充电
{
if(NTC_Adc > T_0C)
{
CHG_NTC_Low_Pro_Flag = 1;
}
else
if(NTC_Adc <= T_45C)
{
CHG_NTC_High_Pro_Flag = 1;
}
#ifdef _DEBUG_CHARGER
printf("NTC Pro!NTC_Adc:%d,CHG_CTL:0x%x,(line:%d)\r\n",(uint16)NTC_Adc,(uint16)CHG_CTL,(uint16)__LINE__);
#endif
NTC_Flag = TRUE;
}
DisChg_NTC_Low_Pro_Flag = 0;
DisChg_NTC_High_Pro_Flag = 0;
}
else //放电模式
{
CHG_NTC_Low_Pro_Flag = 0;
CHG_NTC_High_Pro_Flag = 0;
if( (NTC_Adc <= T_N20C) && (NTC_Adc > T_80C) ) //正常放电
{
if( DisChg_NTC_Low_Pro_Flag )
{
if( NTC_Adc < T_N15C )
{
DisChg_NTC_Low_Pro_Flag = 0;
NTC_Flag = FALSE;
}
else
{
NTC_Flag = TRUE;
}
}
if(DisChg_NTC_High_Pro_Flag)
{
if( NTC_Adc > T_75C )
{
DisChg_NTC_High_Pro_Flag = 0;
NTC_Flag = FALSE;
}
else
{
NTC_Flag = TRUE;
}
}
}
else //异常不放电
{
if(NTC_Adc > T_N20C)
{
DisChg_NTC_Low_Pro_Flag = 1;
}
else
if(NTC_Adc <= T_80C)
{
DisChg_NTC_High_Pro_Flag = 1;
}
NTC_Flag = TRUE;
}
}
#endif
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( pmu_Info.pmu_Fault_STA2 & ( Fault_Sta2_VinUV | Fault_Sta2_VinOVP | Fault_Sta2_CHIP_OTP | Fault_Sta2_PMID_OCP_SHP ) ) //检测到VIN异常、芯片过热、PMID异常,则关闭Charger使能后返回。
{
Set_PMU_CHG(OFF); //Disable Charger
ChgStatus = CHG_NONE;
Charger_Done = 0;
#ifdef _DEBUG_CHARGER
printf("No Chg\r\n");
#endif
return;
}
/*各项保护都无需软件处理只处理充电超时超时后需要等VBUS重新插拔后才重新开始Charger流程。*/
#ifdef NTC_ENABLE
/*NTC Handle*/ //使能Charger前先检测NTC温度异常就不开充电。(CHIP_STA4 & 0x80):PG
if( PMU_NTC_Handle(CHG_ON) ) //NTC保护不充电。
{
Set_PMU_CHG(OFF); //Disable Charger.
NTC_Pro_Flag = 1;
return;
}
NTC_Pro_Flag = 0;
#endif
if( (pmu_Info.pmu_Chip_STA & ChipSTA_DISCHG) == ChipSTA_CHG_DONE ) //Charg complete interrupt
{
#ifdef _DEBUG_CHARGER
printf("Chg Done\r\n");
#endif
Charger_Done = 1;
ChgStatus = CHG_STA_COMPLETED;
}
else
{
I2cSfr_Write( CHG_ICC_SET, gCharge_Cfg.nConstant_Cur );
I2cSfr_Write( CHG_VFLOAT_SET, gCharge_Cfg.nVFloat );
I2cSfr_Write( CHG_ITC_ITERM_SET, ( gCharge_Cfg.nTrickle_Cur << 4 ) | gCharge_Cfg.nIterm_Cur );
Set_PMU_CHG(ON); //Enable Charger
ChgStatus = CHG_STA_ING;
#ifdef _DEBUG_CHARGER
printf("Chg ing\r\n");
#endif
Charger_Done = 0;
}
}
#endif

View File

@ -0,0 +1,216 @@
/*
******************************************************************************
*
* @file discharge_module.c
* @brief discharge module
* @ic sy8835
*
* @version 1.0
* @date 2024/11/01 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 2024/11/01 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"
#include "bat.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( pmu_Info.pmu_Fault_STA2 & Fault_Sta2_CHIP_OTP )
{
gBoost_Prepared_Flag = 0;
return;
}
/*Boost Input UVLO 硬件实现*/
if( pmu_Info.pmu_Fault_STA2 & Fault_Sta2_BoostUV )
{
gBoost_Prepared_Flag = 0;
gBoost_UVLO_Flag = 1;
return;
}
#if BAT_VALUE
if( F_batlevel_protect )
{
Set_PMU_Boost(OFF);
gBoost_Prepared_Flag = 0;
return;
}
#endif
/*输出过流保护 (使用中断标志位Boost短路中断发生后会锁存需要写1清零。)-- 短路保护后一直打嗝或者打嗝BOOST_HICCUP_TIM次之后disable boost打嗝时间 250ms软件实现。*/
if( pmu_Info.pmu_Fault_STA2 & Fault_Sta2_PMID_OCP_SHP )
{
#ifdef _DEBUG_DISCHARGE
printf("Boost Pro Output Short!\r\n");
#endif
gBoost_Prepared_Flag = 0;
return;
}
#ifdef NTC_ENABLE
/*NTC Handle*/ //使能Boost前先检测NTC温度异常就不开放电。
if( PMU_NTC_Handle( DISCHG_ON ) ) //NTC保护不放电。
{
gBoost_Prepared_Flag = 0;
Set_PMU_Boost(OFF);
NTC_Pro_Flag = 1;
return;
}
NTC_Pro_Flag = 0;
#endif
gBoost_Prepared_Flag = 1;
/*
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( ChgStatus == CHG_STA_ING ) //充电中
{
if( Vbat_Adc >= OPEN_BOOST_VIN )
{
gBoost_Prepared_Flag = 1;
gBoost_UVLO_Flag = 0;
}
else
{
gBoost_Prepared_Flag = 0; //Boost Disable
}
}
}
#endif
}
#endif

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

@ -0,0 +1,66 @@
/*
******************************************************************************
*
* @file gpio.c
* @brief gpio module
* @ic sy8835
*
* @version 1.0
* @date 2024/11/01 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/11/01 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

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

@ -0,0 +1,105 @@
/*
******************************************************************************
*
* @file hall.c
* @brief hall module
* @ic sy8835
*
* @version 1.0
* @date 2024/11/01 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/11/01 Alex build this file
******************************************************************************/
/*_____ I N C L U D E S ____________________________________________________*/
#include "hall.h"
#include "key.h"
#include "led.h"
#include "vox_module.h"
#include "userapp.h"
#include "charger_module.h"
#include "sleep.h"
/******************************************************************************\
Macro definitions
\******************************************************************************/
/******************************************************************************\
Variables definitions
\******************************************************************************/
CoverStatus_E CoverStatus;
bit CoverEvent_Flg = 0; //Hall开关触发事件标志位
bit CoverEvent_Flg_led = 0;
#if HALL_ENABLE
uint8_t Hall_Sta_bk = 0xff;
/******************************************************************************\
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 = pmu_Info.pmu_Chip_STA & HALL_STA;
if( Hall_Sta != Hall_Sta_bk)
{
if( pmu_Info.pmu_Chip_STA & HALL_STA ) //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;
#ifdef LED_DISPLAY
LED_On_Flag = 1;
#endif
Hall_Sta_bk = Hall_Sta;
}
}
#endif

265
UsrSrc/i2c_simu/i2c_simu.c Normal file
View File

@ -0,0 +1,265 @@
/*
******************************************************************************
*
* @file i2c_simu.h
* @brief i2c gpio simu module
* @ic sy8835
*
* @version 1.0
* @date 2024/10/31 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 2024/10/31 Alex Xu build this file
******************************************************************************
*/
#include "i2c_simu.h"
#if GPIO_I2C_SIMULATE
/******************************************************************************\
Macro definitions
\******************************************************************************/
/******************************************************************************\
Variables definitions
\******************************************************************************/
idata bool F_I2C_SIMU_INIT = false;
idata bool F_I2C_SIMU_ERROR = false;
/******************************************************************************\
Functions definitions
\******************************************************************************/
void I2C_GPIOInit(void)
{
// if(F_I2C_SIMU_INIT)
// return;
_pin_i2c_scl_config();
_pin_i2c_sda_config();
F_I2C_SIMU_INIT = true;
}
/*******************************************************************************
* Function Name : I2C_delay
* Description : Simulation IIC Timing series delay
* Input : None
* Output : None
* Return : None
****************************************************************************** */
void I2C_delay(void)
{
uint8_t t = 0;
#ifdef __I2C_SPEED_FAST__
t = 1;
#else
t = 20;
#endif
while(t > 0)
{
t--;
}
}
/*******************************************************************************
* Function Name : I2C_Start
* Description : Master Start Simulation IIC Communication
* Input : None
* Output : None
* Return : Wheather Start
****************************************************************************** */
bool I2C_Start(void)
{
_I2C_SDA_H();
_I2C_SCL_H();
I2C_delay();
if(!_READ_I2C_SDA())
{
#ifdef __I2C_SIMU_DEBUG__
printf("\n\rThe I2C bus is busy!\r\n");
#endif
return FALSE; //SDA线为低电平则总线忙,退出
}
_I2C_SDA_L();
I2C_delay();
if(_READ_I2C_SDA())
{
#ifdef __I2C_SIMU_DEBUG__
printf("\n\rThe I2C bus is busy!\r\n");
#endif
return FALSE; //SDA线为高电平则总线出错,退出
}
return TRUE;
}
/*******************************************************************************
* Function Name : I2C_Stop
* Description : Master Stop Simulation IIC Communication
* Input : None
* Output : None
* Return : None
****************************************************************************** */
void I2C_Stop(void)
{
_I2C_SCL_L();
_I2C_SDA_L();
I2C_delay();
_I2C_SCL_H();
I2C_delay();
_I2C_SDA_H();
I2C_delay();
I2C_delay();
}
/*******************************************************************************
* Function Name : I2C_Ack
* Description : Master Send Acknowledge Single
* Input : None
* Output : None
* Return : None
****************************************************************************** */
void I2C_Ack(void)
{
_I2C_SCL_L();
I2C_delay();
_I2C_SDA_L();
I2C_delay();
_I2C_SCL_H();
I2C_delay();
I2C_delay();
_I2C_SCL_L();
I2C_delay();
}
/*******************************************************************************
* Function Name : I2C_NoAck
* Description : Master Send No Acknowledge Single
* Input : None
* Output : None
* Return : None
****************************************************************************** */
void I2C_NoAck(void)
{
_I2C_SCL_L();
I2C_delay();
_I2C_SDA_H();
I2C_delay();
_I2C_SCL_H();
I2C_delay();
_I2C_SCL_L();
I2C_delay();
}
/*******************************************************************************
* Function Name : I2C_WaitAck
* Description : Master Reserive Slave Acknowledge Single
The statue of the ACK will be output by the USART
* Input : None
* Output : None
* Return : none
****************************************************************************** */
void I2C_WaitAck(void)
{
_I2C_SCL_L();
I2C_delay();
_I2C_SDA_H();
I2C_delay();
_I2C_SCL_H();
I2C_delay();
I2C_delay();
if(_READ_I2C_SDA())
{
#ifdef __I2C_SIMU_DEBUG__
printf("No ACK from the I2Cbus\r\n");
#endif
}
_I2C_SCL_L();
I2C_delay();
}
/*******************************************************************************
* Function Name : I2C_SendByte
* Description : Master Send a Byte to Slave
* Input : Will Send Date
* Output : None
* Return : None
****************************************************************************** */
void I2C_SendByte(uint8_t SendByte) //数据从高位到低位//
{
uint8_t i = 8;
while(i--)
{
_I2C_SCL_L();
if( SendByte & 0x80 )
{
_I2C_SDA_H();
}
else
{
_I2C_SDA_L();
}
SendByte<<=1;
I2C_delay();
_I2C_SCL_H();
I2C_delay();
}
_I2C_SCL_L();
}
/*******************************************************************************
* Function Name : I2C_RadeByte
* Description : Master Reserive a Byte From Slave
* Input : None
* Output : None
* Return : Date From Slave
****************************************************************************** */
unsigned char I2C_ReadByte(void) //数据从高位到低位//
{
uint8_t i = 8;
uint8_t ReceiveByte = 0;
_I2C_SDA_H();
while(i--)
{
ReceiveByte<<=1;
_I2C_SCL_L();
I2C_delay();
_I2C_SCL_H();
I2C_delay();
if(_READ_I2C_SDA())
{
ReceiveByte |= 0x01;
}
}
_I2C_SCL_L();
return ReceiveByte;
}
#endif

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

@ -0,0 +1,303 @@
/*
******************************************************************************
*
* @file key.c
* @brief key module
* @ic sy8835
*
* @version 1.0
* @date 2024/11/01 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/11/01 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"
#include "vox_module.h"
#include "userapp.h"
#include "hall.h"
#if KEY_ENABLE
/******************************************************************************\
Macro definitions
\******************************************************************************/
#define KEY_PRESS_500MS_CNT 25 //按键按下500ms(调用周期20ms)
#define KEY_PRESS_2S_CNT 100 //按键按下计数2s(调用周期20ms)
#define KEY_PRESS_5S_CNT 250
#define KEY_PRESS_8S_CNT 400 //按键按下计数8s(调用周期20ms)
/******************************************************************************\
Variables definitions
\******************************************************************************/
bit Key_Press_short_irq = 0;
bit Key_Press_l_irq = 0;
bit Key_Press_ll_irq = 0;
idata KEY_EVENT_E Event_key = 0;
uint8_t Key_TWS_Pair_Tim = 0;
uint8_t Key_TWS_Pair_Cnt = 0;
uint16_t Key_Press_Debounce = 0;
#define KEY_TWS_PAIR_TIMER 20
#define KEY_TWS_PAIR_CNT 5
#define KEY_TWS_PAIR_CLEAR_CNT 30
/******************************************************************************\
Functions definitions
\******************************************************************************/
/*
*******************************************************************************
* void Key_Handler(void)
*
* Description : Key Handler --- 5ms(2s)
CoverStatus --- Key事件标志位
(20ms)
*
* Arguments : NONE
* Returns : NONE
* Notes : NONE
*
*******************************************************************************
*/
void Key_Handler(void)
{
static bit Key_Press_Flag;
static bit Key_Lift_Flag;
static bit nKey_Press_short_irq;
static bit nKey_Press_2s_Flag;
static bit nKey_Press_8s_Flag;
if( pmu_Info.pmu_Chip_STA & KEY_STA ) //Key的状态值1按下
{
Key_Press_Debounce++;
if( Key_Press_Debounce >= KEY_PRESS_2S_CNT ) //长按2s需要抬键判断
{
if( !nKey_Press_2s_Flag )
{
nKey_Press_2s_Flag = 1;
}
}
else
if( Key_Press_Debounce >= KEY_PRESS_8S_CNT ) //长按8sVOX掉电
{
if( !nKey_Press_8s_Flag )
{
nKey_Press_8s_Flag = 1;
Key_Press_ll_irq = 1;
}
}
Key_Press_Flag = 1;
Key_Lift_Flag = 0;
}
else
{
if( Key_Press_Flag )
{
Key_Press_Flag = 0;
Key_Lift_Flag = 1;
nKey_Press_8s_Flag = 0;
if( (Key_Press_Debounce <= KEY_PRESS_500MS_CNT) ) //松开按键按下时间小于500ms则识别为短按显示电量
{
Key_Press_short_irq = 1;
nKey_Press_short_irq = 1;
#ifdef LED_DISPLAY
LED_On_Flag = 1;
#endif
}
else
if( (Key_Press_Debounce < KEY_PRESS_5S_CNT) ) //按键时间大于2s小于5s则判断为长按2s。
{
if( nKey_Press_2s_Flag )
{
nKey_Press_2s_Flag = 0;
Key_Press_l_irq = 1;
}
}
}
Key_Press_Debounce = 0;
}
if( Key_Lift_Flag )
{
Key_Lift_Flag = 0;
if( Key_Press_l_irq )
{
Key_Press_l_irq = 0;
/*todo*/
Event_key = KEY_EVENT_L_2S;
Key_TWS_Pair_Tim = 0;
/*耳机配对*/
#ifdef _DEBUG_KEY
printf("long 2s press\r\n");
#endif
}
/*长按8s系统强制进shipmode.*/
if( Key_Press_ll_irq )
{
Key_Press_ll_irq = 0;
/*todo*/
Event_key = KEY_EVENT_LL_8S;
#ifdef _DEBUG_KEY
printf("supper long 8s press\r\n");
#endif
}
if( nKey_Press_short_irq )
{
nKey_Press_short_irq = 0;
/*todo*/
Event_key = KEY_EVENT_SHORT;
#ifdef _DEBUG_KEY
printf("short press\r\n");
#endif
}
}
else
{
Event_key = KEY_EVENT_Empty;
}
#if 1
if ( CoverStatus == OPEN )
{
if( Event_key == KEY_EVENT_L_2S ) //长按2s充电仓发送配对指令。
{
if( Key_TWS_Pair_Tim < 1 )
{
#ifdef VOX_TX
HandleTxCommand(VHOUSE_CMD_PAIR,VOR_CHAN); //右耳发配对指令,区分耳机通道。
#endif
Vox_Get_BES_Addr_Flag[VOL_TYPE] = 0x00;
Vox_Get_BES_Addr_Flag[VOR_TYPE] = 0x00;
}
else
{
if(Key_TWS_Pair_Cnt > KEY_TWS_PAIR_CNT) //耳机蓝牙地址置换超时10s关闭蓝牙地址置换开启VOX 5V。
{
Key_TWS_Pair_Cnt = 0;
#if VOX_ENABLE
VOX_EN_Type(VOX_VOUT_Mode);
#endif
return;
}
else
{
if( Vox_Get_BES_Addr_Flag[VOR_TYPE] == 0x01 ) /*收到右耳回复的CMD3指令。*/
{
#ifdef VOX_TX
HandleTxCommand(VHOUSE_CMD_EXCH_TWS_BTADDR,VOL_CHAN); /*获取到右耳回复的CMD3指令转发给左耳。*/
#endif
Vox_Get_BES_Addr_Flag[VOR_TYPE] = 0x02;
}
else
if( Vox_Get_BES_Addr_Flag[VOR_TYPE] == 0x02 )
{
if( Vox_Get_BES_Addr_Flag[VOL_TYPE] != 0x00 )
{
#ifdef VOX_TX
HandleTxCommand(VHOUSE_CMD_EXCH_TWS_BTADDR,VOR_CHAN); /*获取到右耳回复的CMD3指令转发给左耳。*/
#endif
Vox_Get_BES_Addr_Flag[VOL_TYPE] = 0x00;
Vox_Get_BES_Addr_Flag[VOR_TYPE] = 0x00;
Key_TWS_Pair_Tim = 0;
Event_key = KEY_EVENT_Empty;
VOX_EN_Type(VOX_VOUT_Mode);
return;
}
else
{
#ifdef VOX_TX
HandleTxCommand(VHOUSE_CMD_PAIR,VOL_CHAN);
#endif
}
}
}
}
if(Key_TWS_Pair_Tim > KEY_TWS_PAIR_TIMER) //3s重发一次。重发5次后超时
{
Key_TWS_Pair_Cnt++;
Key_TWS_Pair_Tim = 0;
}
else
{
Key_TWS_Pair_Tim++;
}
}
else
if( Event_key == KEY_EVENT_LL_8S )
{
if( Key_TWS_Pair_Tim < KEY_TWS_PAIR_CLEAR_CNT ) //每隔200ms发送一次持续时间3s。
{
if( Key_TWS_Pair_Tim % 2*Vox_TX_Interval )
{
#ifdef VOX_TX
HandleTxCommand(VHOUSE_CMD_CLEAR_PAIR,VOR_CHAN);
#endif
}
else
if( Key_TWS_Pair_Tim % Vox_TX_Interval )
{
#ifdef VOX_TX
HandleTxCommand(VHOUSE_CMD_CLEAR_PAIR,VOL_CHAN);
#endif
}
Key_TWS_Pair_Tim++;
}
else
{
Event_key = KEY_EVENT_Empty;
Key_TWS_Pair_Tim = 0;
}
}
}
#endif
}
#endif

353
UsrSrc/led/led.c Normal file
View File

@ -0,0 +1,353 @@
/*
******************************************************************************
*
* @file led.c
* @brief led module
* @ic sy8835
*
* @version 1.0
* @date 2024/11/01 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/11/01 Alex build this file
******************************************************************************/
/*_____ I N C L U D E S ____________________________________________________*/
#include "led.h"
#include "pwm.h"
#ifdef LED_DISPLAY
volatile uint8_t Display_RSta = LED_OFF; // 显示状态
volatile uint8_t Display_GSta = LED_OFF; // 显示状态
volatile uint8_t Display_YSta = LED_OFF; // 显示状态
volatile uint8_t Display_BSta = LED_OFF; // 显示状态
/******************************************************************************\
Macro definitions
\******************************************************************************/
/******************************************************************************\
Variables definitions
\******************************************************************************/
static TS_LED_INFO LED;
/******************************************************************************\
Functions definitions
\******************************************************************************/
/*
* : LED_Init
* : LED初始化
* : NONE
* : NONE
*/
/******************************************************************************/
void LED_Init(void)
/******************************************************************************/
{
SFRADDR = P1_OE;
SFRDATA = 0x0F;
LEDR_OFF();
LEDG_OFF();
LEDB_OFF();
LEDY_OFF();
}
/*
* : LED_On
* : LED
* : LED的ID
* : NONE
*/
/******************************************************************************/
static void LED_On(uint8_t LedId)
/******************************************************************************/
{
switch(LedId)
{
case LED_R:
LEDR_ON();
break;
case LED_G:
LEDG_ON();
break;
case LED_Y:
LEDY_ON();
break;
case LED_B:
LEDB_ON();
break;
default: break;
}
}
/*
* : LED_Off
* : LED
* : LED的ID
* : NONE
*/
/******************************************************************************/
static void LED_Off(uint8_t LedId)
/******************************************************************************/
{
switch(LedId)
{
case LED_R:
LEDR_OFF();
break;
case LED_G:
LEDG_OFF();
break;
case LED_Y:
LEDY_OFF();
break;
case LED_B:
LEDB_OFF();
break;
default: break;
}
}
/*
* : LED_Clr
* : LED
* : NONE
* : NONE
*/
/******************************************************************************/
void LED_Clr(void)
/******************************************************************************/
{
uint8_t i;
for(i=0;i<LED_ID_MAX;i++)
{
LED.State[i]=LED_OFF;
LED.Light_Dir[i] = SHOW_NONE;
LED.Flash_Duty[i]=0;
LED.Flash_Period[i]=0;
LED.Flash_Times[i]=0;
LED.Timer[i]=0;
}
}
/*
* : LED_Set
* : LED工作方式设置
* : State / Period:(ms) / Times:0xff
* : NONE
*/
/******************************************************************************/
void LED_Set(uint8_t LedId,uint8_t State,uint16_t Period,uint16_t Times)
/******************************************************************************/
{
LED.State[LedId] = State;
LED.Flash_Duty[LedId] = Period / 2;
LED.Flash_Period[LedId] = Period;
LED.Flash_Times[LedId] = Times;
LED.Timer[LedId] = 0;
}
#ifdef PWM_ENABLE
/*
* : HuXiLED_Set
* : LED工作方式设置
* : State / Period:(ms) / Times:0xff
* : NONE
*/
/******************************************************************************/
void HuXiLED_Set(uint8_t LedId,uint8_t State,uint8_t Dir)
/******************************************************************************/
{
LED.State[LedId] = State;
LED.Light_Dir[LedId] = Dir;
LED.Flash_Duty[LedId] = PWM_REL_VALUE;
LED.Timer[LedId] = 0;
}
#endif
/*
* : LED_Service
* : LED驱动100ms时间片中
* : NONE
* : NONE
*/
/******************************************************************************/
void LED_Drv(void)
/******************************************************************************/
{
uint8_t i = 0;
static bit PWM_Dir_Flag;
for(i = 0;i < LED_ID_MAX;i++)
{
switch(LED.State[i])
{
case LED_ON:
LED_On(i);
break;
case LED_OFF:
LED_Off(i);
break;
case LED_FLASH:
if(LED.Timer[i] < LED.Flash_Duty[i])
{
LED_On(i);
}
else
{
LED_Off(i);
}
if(LED.Timer[i] >= LED.Flash_Period[i]) //LED.Timer[i]表示累加的时间
{
LED.Timer[i] = 0;
if(LED.Flash_Times[i] > 0)
{
LED.Flash_Times[i]--;
}
if(LED.Flash_Times[i] == 0)
{
LED.State[i] = LED_OFF;
}
}
break;
case LED_KEEP_FLASHING:
if(LED.Timer[i] <= LED.Flash_Duty[i])
{
LED_On(i);
}
else
{
LED_Off(i);
}
if(LED.Timer[i] >= LED.Flash_Period[i])
{
LED.Timer[i] = 0;
}
break;
#ifdef PWM_ENABLE
case LED_BREATHING_LIGHT:
if( LED.Light_Dir[i] == SHOW_NONE )
{
PWM_Disable(i);
PWM_Dir_Flag = 0;
LED.State[i] = LED_OFF;
}
else
{
if( LED.Light_Dir[i] == SLOW_LIGHT )
{
if( !PWM_Dir_Flag )
{
PWM_Dir_Flag = 1;
LED.Flash_Duty[i] = PWM_REL_VALUE;
}
LED.Flash_Duty[i]++;
if( LED.Flash_Duty[i] >= PWM_REL_FULL )
{
LED.Light_Dir[i] = SHOW_NONE;
}
}
else
if( LED.Light_Dir[i] == SLOW_DARK )
{
if( !PWM_Dir_Flag )
{
PWM_Dir_Flag = 1;
LED.Flash_Duty[i] = PWM_REL_FULL;
}
LED.Flash_Duty[i]--;
if( LED.Flash_Duty[i] <= PWM_REL_VALUE )
{
LED.Light_Dir[i] = SHOW_NONE;
}
}
else
if( LED.Light_Dir[i] == SHOW_NORMAL )
{
if( LED.Flash_Duty[i] >= PWM_REL_FULL )
{
PWM_Dir_Flag = 1;
}
else
if( LED.Flash_Duty[i] <= (PWM_REL_VALUE + 1) )
{
PWM_Dir_Flag = 0;
}
if(PWM_Dir_Flag)
{
LED.Flash_Duty[i]--;
}
else
{
LED.Flash_Duty[i]++;
}
}
PWM_Duty_Set(i, LED.Flash_Duty[i]);
}
break;
#endif
default:
break;
}
if (i == LED_R)
{
Display_RSta = LED.State[i]; // LED_OFF == DISPLAY_OFF
}
else
if (i == LED_G)
{
Display_GSta = LED.State[i]; // LED_OFF == DISPLAY_OFF
}
else
if (i == LED_Y)
{
Display_YSta = LED.State[i]; // LED_OFF == DISPLAY_OFF
}
else
if (i == LED_B)
{
Display_BSta = LED.State[i]; // LED_OFF == DISPLAY_OFF
}
// printf("LED.Flash_Duty[%d]:%d,LED.State:%d,LED.Light_Dir:%d.\r\n",(u16)i,(u16)(LED.Flash_Duty[i]),(u16)(LED.State[i]),(u16)(LED.Light_Dir[i]));
}
for(i=0;i<LED_ID_MAX;i++)
{
LED.Timer[i] += LED_PLUS_TIME;
}
}
#endif

68
UsrSrc/main.c Normal file
View File

@ -0,0 +1,68 @@
/*
******************************************************************************
*
* @file main.c
* @brief main module
* @ic sy8835
*
* @version 1.0
* @date 2024/11/01 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 2024/11/01 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"
#include "vox_module.h"
/******************************************************************************\
Macro definitions
\******************************************************************************/
/******************************************************************************\
Variables definitions
\******************************************************************************/
/******************************************************************************\
Functions definitions
\******************************************************************************/
void main(void )
{
System_Init(); //ϵͳ³õʼ»¯
#ifdef _DEBUG_MAIN
printf("System Init.\r\n");
#endif
while(1)
{
#if WTG_ENABLE
WDT = 1;
SWDT = 1;
#endif
Sys_Tim0_Handler(); //¶¨Ê±Æ÷
UserAPP();
}
}

359
UsrSrc/pmu/pmu.c Normal file
View File

@ -0,0 +1,359 @@
/*
******************************************************************************
*
* @file pmu.c
* @brief pmu module
* @ic sy8835
*
* @version 1.0
* @date 2024/11/01 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 2024/11/01 Alex Xu build this file
******************************************************************************
*/
/*_____ I N C L U D E S ____________________________________________________*/
#include "pmu.h"
/******************************************************************************\
Macro definitions
\******************************************************************************/
/******************************************************************************\
Variables definitions
\******************************************************************************/
g_PMU_Info pmu_Info; //pmu状态信息
#if 0
g_PMU_Sys_Cfg pmu_Sys_Cfg;
g_PMU_CHG_Cfg pmu_Chg_Cfg;
g_PMU_Vox_Cfg pmu_Vox_Cfg;
#endif
/******************************************************************************\
Functions definitions
\******************************************************************************/
/*
*******************************************************************************
* void pmu_Init( void )
*
* Description : pmu Initialization
*
* Arguments : NONE
* Returns : NONE
* Notes : NONE
*
*******************************************************************************
*/
void pmu_Init(void)
{
//I2cSfr_Write(IRQ_EN0, 0x04);
//I2cSfr_Write(IRQ_EN1, 0x00);
/*1、配置HALL、KEY。*/
I2cSfr_Write(I2CR_RST_CFG, 0x08); //HALL开盒退出ShipMode功能KEY长按复位VDD若处于ShipMode模式则退出ShipMode模式
/*2、PMU中断边沿使能配置*/
ExtSfr_Write(IRQ_PIN_CFG, 0x0A); //配置PMU中断为下降沿触发。
I2cSfr_Write( VDPM_VDD_CHG_EN, VDD_BYPASS );
}
/*
*******************************************************************************
* HAL_StatusTypeDef Get_PMU_Info( g_PMU_Info *n_pmu_Info )
*
* Description : Get pmu Information
*
* Arguments : g_PMU_Info *n_pmu_Info
* Returns : HAL_StatusTypeDef
* Notes : NONE
*
*******************************************************************************
*/
HAL_StatusTypeDef Get_PMU_Info( g_PMU_Info *n_pmu_Info )
{
#if 0
if( n_pmu_Info == NULL )
{
return HAL_ERROR;
}
#endif
n_pmu_Info->pmu_Fault_STA0 = I2cSfr_Read( FAULT_STA0 );
n_pmu_Info->pmu_Fault_STA1 = I2cSfr_Read( FAULT_STA1 );
n_pmu_Info->pmu_Fault_STA2 = I2cSfr_Read( FAULT_STA2 );
n_pmu_Info->pmu_Chip_STA = I2cSfr_Read( CHIP_STA );
n_pmu_Info->pmu_VOX_STA = I2cSfr_Read( VOX_STA );
return HAL_OK;
}
#if 0
/*
*******************************************************************************
* HAL_StatusTypeDef Set_PMU_Config( g_PMU_Sys_Cfg *n_PMU_Sys_Cfg )
*
* Description : Set pmu Config
*
* Arguments : g_PMU_Sys_Cfg *n_PMU_Sys_Cfg
* Returns : HAL_StatusTypeDef
* Notes : NONE
*
*******************************************************************************
*/
HAL_StatusTypeDef Set_PMU_Sys_Config( g_PMU_Sys_Cfg *n_PMU_Sys_Cfg )
{
#if 0
if( n_PMU_Sys_Cfg == NULL )
{
return HAL_ERROR;
}
#endif
I2cSfr_Write( I2CR_RST_CFG, n_PMU_Sys_Cfg->pmu_Rst_Cfg );
I2cSfr_Write( POWER_CTRL_CMD, n_PMU_Sys_Cfg->pmu_PWR_Ctrl_Cmd );
I2cSfr_Write( CHG_VPMID_SET, n_PMU_Sys_Cfg->pmu_VPMID_Cfg );
I2cSfr_Write( IRQ_EN0, n_PMU_Sys_Cfg->pmu_IRQ_En0 );
I2cSfr_Write( IRQ_EN1, n_PMU_Sys_Cfg->pmu_IRQ_En1 );
I2cSfr_Write( XSEN_CTRL, n_PMU_Sys_Cfg->pmu_Xsen_Ctrl );
I2cSfr_Write( POWER_LED_CTRL0, n_PMU_Sys_Cfg->pmu_LED_Ctrl0 );
I2cSfr_Write( WDT1_CFG, n_PMU_Sys_Cfg->pmu_WDT1_Cfg );
I2cSfr_Write( WDT1_RST, n_PMU_Sys_Cfg->pmu_WDT1_Rst );
return HAL_OK;
}
/*
*******************************************************************************
* HAL_StatusTypeDef Set_PMU_CHG_Config( g_PMU_CHG_Cfg *n_PMU_CHG_Cfg )
*
* Description : Set pmu CHG Config
*
* Arguments : g_PMU_CHG_Cfg *n_PMU_CHG_Cfg
* Returns : HAL_StatusTypeDef
* Notes : NONE
*
*******************************************************************************
*/
HAL_StatusTypeDef Set_PMU_CHG_Config( g_PMU_CHG_Cfg *n_PMU_CHG_Cfg )
{
#if 0
if( n_PMU_CHG_Cfg == NULL )
{
return HAL_ERROR;
}
#endif
I2cSfr_Write( VDPM_VDD_CHG_EN, n_PMU_CHG_Cfg->pmu_VDPM_VDD_CHG_En );
I2cSfr_Write( CHG_VFLOAT_SET, n_PMU_CHG_Cfg->pmu_Chg_VFLOAT_Cfg );
I2cSfr_Write( CHG_ICC_SET, n_PMU_CHG_Cfg->pmu_Chg_ICC_Cfg );
I2cSfr_Write( CHG_ITC_ITERM_SET, n_PMU_CHG_Cfg->pmu_Chg_ITC_Iterm_Cfg );
return HAL_OK;
}
#endif
/*
*******************************************************************************
* void Set_PMU_CHG(uint8_t Chg_En)
*
* Description : Set PMU CHG Enable
*
* Arguments : NONE
* Returns : NONE
* Notes : NONE
*
*******************************************************************************
*/
void Set_PMU_CHG(uint8_t Chg_En)
{
uint8_t I2cSfr_Temp = 0;
I2cSfr_Temp = I2cSfr_Read( VDPM_VDD_CHG_EN );
if( Chg_En )
{
I2cSfr_Temp |= BUCK_CHG_EN;
}
else
{
I2cSfr_Temp &= ~BUCK_CHG_EN;
}
I2cSfr_Write( VDPM_VDD_CHG_EN, I2cSfr_Temp );
}
/*
*******************************************************************************
* void Set_PMU_Boost(uint8_t Boost_En)
*
* Description : Set PMU Boost Enable
*
* Arguments : NONE
* Returns : NONE
* Notes : NONE
*
*******************************************************************************
*/
void Set_PMU_Boost(uint8_t Boost_En)
{
uint8_t I2cSfr_Temp = 0;
I2cSfr_Temp = I2cSfr_Read( BST_COMM_EN );
if( Boost_En )
{
I2cSfr_Temp |= BST_COMM_EN_Boost_En;
}
else
{
I2cSfr_Temp &= ~BST_COMM_EN_Boost_En;
}
I2cSfr_Write( BST_COMM_EN, I2cSfr_Temp );
}
/*
*******************************************************************************
* void Set_PMU_Boost_Vout(uint8_t Boost_Vout)
*
* Description : Set PMU Boost Vout Value
*
* Arguments : NONE
* Returns : NONE
* Notes : NONE
*
*******************************************************************************
*/
void Set_PMU_Boost_Vout(uint8_t Boost_Vout)
{
uint8_t I2cSfr_Temp = 0;
I2cSfr_Temp = I2cSfr_Read( CHG_VPMID_SET ) & 0xC0;
I2cSfr_Write( CHG_VPMID_SET, I2cSfr_Temp | Boost_Vout );
}
/*
*******************************************************************************
* HAL_StatusTypeDef Set_PMU_VOX_Config( g_PMU_Vox_Cfg *n_PMU_Vox_Cfg )
*
* Description : Set pmu Vox Config
*
* Arguments : g_PMU_Vox_Cfg *n_PMU_Vox_Cfg
* Returns : HAL_StatusTypeDef
* Notes : NONE
*
*******************************************************************************
*/
HAL_StatusTypeDef Set_PMU_VOX_Config( g_PMU_Vox_Cfg *n_PMU_Vox_Cfg )
{
#if 0
if( n_PMU_Vox_Cfg == NULL )
{
return HAL_ERROR;
}
#endif
I2cSfr_Write( BST_COMM_EN, n_PMU_Vox_Cfg->pmu_BST_COMM_En );
I2cSfr_Write( VOX_CFG, n_PMU_Vox_Cfg->pmu_VOX_Cfg );
return HAL_OK;
}
/*
*******************************************************************************
* void Set_PMU_Enter_ShipMode(void)
*
* Description : Set PMU Enter ShipMode
*
* Arguments : NONE
* Returns : NONE
* Notes : NONE
*
*******************************************************************************
*/
void Set_PMU_Enter_ShipMode(void)
{
I2cSfr_Write( POWER_CTRL_CMD, POWER_CTRL_CMD_ENTER_SHIPMODE );
}
/*
*******************************************************************************
* void Set_PMU_En_ReChg(void)
*
* Description : Set PMU ReCharg.
*
* Arguments : NONE
* Returns : NONE
* Notes : NONE
*
*******************************************************************************
*/
void Set_PMU_En_ReChg(void)
{
I2cSfr_Write( POWER_CTRL_CMD, POWER_CTRL_CMD_RECHG_ENABLE );
}
/*
*******************************************************************************
* void Set_PMU_Rst(void)
*
* Description : Set PMU Reset.
*
* Arguments : NONE
* Returns : NONE
* Notes : NONE
*
*******************************************************************************
*/
void Set_PMU_Rst(void)
{
I2cSfr_Write( POWER_CTRL_CMD, POWER_CTRL_CMD_RST_VDD );
}

194
UsrSrc/pwm/pwm.c Normal file
View File

@ -0,0 +1,194 @@
/*
******************************************************************************
*
* @file pwm.c
* @brief pwm module
* @ic sy8835
*
* @version 1.0
* @date 2024/11/01 09:50:40
* @author Alex Xu
*
* Copyright (c) 2013-2099,Tkplusemi Technology Co.,Ltd.
* All Rights Reserved
*
* History:
* Revision Date Author Desc
* 1.0.0 2024/11/01 Alex build this file
* DescriptionPWM功能中4PWM_PRE0PWM0_RELPWMx_CMP设置不同通道PWM输出的占空比
******************************************************************************
*/
#include "pwm.h"
#ifdef PWM_ENABLE
/******************************************************************************\
Macro definitions
\******************************************************************************/
/******************************************************************************\
Variables definitions
\******************************************************************************/
/******************************************************************************\
Functions definitions
\******************************************************************************/
/*
*******************************************************************************
* void PWM_Disable(Pwm_Channels_e nPWM_Ch)
*
* Description : PWM Disable PWM按通道禁能
*
* Arguments : None
* Returns :
* Notes :
*
*******************************************************************************
*/
void PWM_Disable(Pwm_Channels_e nPWM_Ch)
{
SFRADDR = MFP_CTL1;
SFRDATA &= ~( 0x03 << (nPWM_Ch * 2) );
if(nPWM_Ch == PWM_ALL)
{
SFRADDR = MFP_CTL1;
SFRDATA = 0x00;
}
}
/*
*******************************************************************************
* void PWM_Init_Set(uint8_t nPWM_PRE,uint8_t nPWM_REL)
*
* Description : PWM Set1 PWM输出时钟分频
PWM输出PWM频率10kHz50%
PWM计数器时钟Fre(pwm) = Fre(sys)/PWM_PRE = 12M / n^PWM_PRE = 12M / 8 = 1.5MHz,
PWM_REL = 255 - 1.5M / 10K = 255-150 = 105
nPWM_CMP = 105 + 150 * (1-50%) = 180
*
* Arguments : uint8_t nPWM_PRE --- PWM counter reload value
* uint8_t nPWM_REL --- PWM compare value
*
* Returns : NONE
* Notes : NONE
*
*******************************************************************************
*/
void PWM_Init_Set(uint8_t nPWM_PRE,uint8_t nPWM_REL)
{
SFRADDR = PWM_PRE; //PWM clock divide setting
SFRDATA = nPWM_PRE & 0x07;
SFRADDR = PWM_REL; //PWM counter reload value
SFRDATA = nPWM_REL;
SFRADDR = PWM_CTL;
SFRDATA = 0x01;
}
/*
*******************************************************************************
* void PWM_Duty_Set(Pwm_Channels_e nPWM_Ch,uint8_t nPWM_CMP)
*
* Description : PWM Set PWM输出占空比参数
PWM输出PWM频率10kHz50%
PWM计数器时钟Fre(pwm) = Fre(sys)/PWM_PRE = 11.0592M / n^PWM_PRE = 11.0592M / 8 = 1.38MHz,
PWM_REL = 255 - 1.5M / 10K = 255-150 = 105
nPWM_CMP = 105 + 150 * (1-50%) = 180
*
* Arguments : nPWM_Ch (PWM0 ~ PWM3);
* uint8_t nPWM_CMP --- PWM compare value
*
* Returns : NONE
* Notes : NONE
*
*******************************************************************************
*/
void PWM_Duty_Set(Pwm_Channels_e nPWM_Ch,uint8_t nPWM_CMP)
{
SFRADDR = MFP_CTL1;
SFRDATA &=~( 0x03 << nPWM_Ch*2 );
SFRDATA |= 0x01 << nPWM_Ch*2;
SFRADDR = P1_OE;
SFRDATA |= 0x01 << nPWM_Ch;
if(nPWM_Ch == PWM_CH0)
{
PWM0_CMP = nPWM_CMP;
}
else if(nPWM_Ch == PWM_CH1)
{
PWM1_CMP = nPWM_CMP;
}
else if(nPWM_Ch == PWM_CH2)
{
PWM2_CMP = nPWM_CMP;
}
else if(nPWM_Ch == PWM_CH3)
{
PWM3_CMP = nPWM_CMP;
}
}
#if 0
/*
*******************************************************************************
* void HuXi_Led(Pwm_Channels_e nPWM_Ch, uint8_t Delay_Timer)
*
* Description :
*
* Arguments : Pwm_Channels_e nPWM_Ch:PWM通道
uint8_t Delay_Timer:PWM输出占空比所需的时间
* Returns : None
* Notes : PWM初始化设置中的PWM counter reload valuePWM compare value的大小
*
*******************************************************************************
*/
void HuXi_Led(Pwm_Channels_e nPWM_Ch, uint8_t Delay_Timer)
{
static uint8_t nHuXi_Cnt;
static uint8_t nHuXi_Timer_Cnt;
static bit HuXi_Dir_Flg;
nHuXi_Timer_Cnt++;
if(nHuXi_Timer_Cnt <= Delay_Timer)
return;
nHuXi_Timer_Cnt = 0;
if(!HuXi_Dir_Flg)
{
nHuXi_Cnt += 2;
if( nHuXi_Cnt >= 254 )
{
HuXi_Dir_Flg = 1;
nHuXi_Cnt = 3;
}
}
else
{
nHuXi_Cnt -= 2;
if(nHuXi_Cnt <= 3)
{
HuXi_Dir_Flg = 0;
nHuXi_Cnt = 3;
}
}
PWM_Duty_Set(nPWM_Ch, nHuXi_Cnt);
}
#endif
#endif

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

@ -0,0 +1,267 @@
/*
******************************************************************************
*
* @file sleep.c
* @brief sleep module
* @ic sy8835
*
* @version 1.0
* @date 2024/11/01 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 2024/11/01 Alex build this file
******************************************************************************
*/
#include "sleep.h"
#include "system.h"
#include "vox_module.h"
#include "sys_tim.h"
#if SLEEP_ENABLE
/******************************************************************************\
Macro definitions
\******************************************************************************/
/******************************************************************************\
Variables definitions
\******************************************************************************/
bit Enter_Ship_Mode_Flag = 0; //进shipmode标志
uint8_t Boot_ShipMode_Flg = 0; //Wake Up From ShipMode
uint16_t gAwake_Source = 0; //唤醒源标志位
uint8_t Decnt_SleepDelay = ENTER_STANDBYMODE_CNT;
uint8_t Enter_ShipMode_Debounce = 0;
bit Enter_Sleep_Cnt_Restart_Flag = 0;
/******************************************************************************\
Functions definitions
\******************************************************************************/
/*
*******************************************************************************
* void WakeUp_Init_Set(void)
*
* Description : 使
*
*
* Arguments : NONE
* Returns : NONE
* Notes : NONE
*
*******************************************************************************
*/
#if 0
void WakeUp_Init_Set(void)
{
//set wakeup
}
#endif
/*
*******************************************************************************
* void OutSleep_Handler(void)
*
* Description : Standby模式后开启中断和部分接口使能
*
* Arguments : NONE
* Returns : NONE
* Notes : NONE
*
*******************************************************************************
*/
void OutSleep_Handler(void)
{
ES0 = 1; //UART0 IRQ
IEN2 = 3; //UART1、UART2 IRQ
EX5 = 1;
EX6 = 1;
ET0 = 1; //timer0 IRQ
ET1 = 1; //timer1 IRQ
SFRADDR = ADC_CTL0;
SFRDATA |= 0x80; //ADC enable.
}
/*
*******************************************************************************
* void InSleep_Handler(void)
*
* Description : Standby模式前的准备工作使
*
* Arguments : NONE
* Returns : NONE
* Notes : NONE
*
*******************************************************************************
*/
void InSleep_Handler(void)
{
ES0 = 0; //UART0 IRQ Disable
IEN2 = 0; //UART1、UART2 IRQ Disable
EX5 = 0;
EX6 = 0;
ET0 = 0; //timer0 IRQ Disable
ET1 = 0; //timer1 IRQ Disable
SFRADDR = ADC_CTL0;
SFRDATA &= ~0x80; //ADC Disable.
}
#if 0
/*
*******************************************************************************
* bool Check_Shipmode_Wkup(void)
*
* Description : shipmode唤醒源标志位函数
*
* Arguments : None
* Returns : None
* Notes : bool Flag
*
*******************************************************************************
*/
bool Check_Shipmode_Wkup(void)
{
uint8_t Reg_Read_Value = 0;
Boot_ShipMode_Flg = 0;
// SFRADDR = SHIPWKUP_EN;
// Reg_Read_Value = SFRDATA;
if(Reg_Read_Value & 0xF0) //Wakeup From ShipMode. --- VBUS、Key、Hall.
{
if(Reg_Read_Value & 0x40) //VBUS
{
Boot_ShipMode_Flg |= 0x40;
}
if(Reg_Read_Value & 0x20) //Key
{
Boot_ShipMode_Flg |= 0x20;
}
if(Reg_Read_Value & 0x10) //Hall 问题此标志位在shipmode reset后如果将P06(HALL)切成gpio模式后会清零待查。
{
Boot_ShipMode_Flg |= 0x10;
}
return false;
}
return true;
}
#endif
/*
*******************************************************************************
* void Enter_Sleep(void)
*
* Description :
*
* Arguments : None
* Returns : None
* Notes : None
*
*******************************************************************************
*/
void Enter_Sleep(void)
{
//SHIP_CTL |= 0x30; //进入休眠模式后VOX 1K电阻下拉使能。是否应用根据实际测试情况定。
/*关盖boost没有使能VOL/R轻载vin没有---debounce 5s进入shipmode */
/* 在shipmodeVOX状态可配置为下拉 */
// if( (CoverStatus == CLOSE) && !(CHIP_STA4 & 0x80) && (CHIP_STA1 & 0x0C) == 0x0c ) //进入ShipMode的条件是什么
//if( (g_Plug_Irq_Flg == VBUS_PLGOUT_FLG) && (CHIP_STA1 & 0x0C) == 0x0c ) //进入ShipMode的条件是什么
if(Enter_Ship_Mode_Flag)
{
if(F_sys_tim_1s)
{
F_sys_tim_1s = 0;
Enter_ShipMode_Debounce++;
if(Enter_ShipMode_Debounce >= ENTER_SHIPMODE_CNT)
{
Boot_ShipMode_Flg = 0;
I2cSfr_Write(POWER_CTRL_CMD, POWER_CTRL_CMD_ENTER_SHIPMODE); //Enter ShipMode
Enter_ShipMode_Debounce = 0;
}
#ifdef _DEBUG_SLEEP
else
if(Enter_ShipMode_Debounce == ENTER_SHIPMODE_CNT - 1)
{
printf("Enter ShipMode!(line:%d)\r\n",__LINE__);
}
#endif
}
}
else
{
InSleep_Handler(); //Disable All IRQ
PCON |= 0x02; //Enter StandbyMode, Only int0 or int1 can wake up system
OutSleep_Handler(); //Enable IRQ
}
}
/*
*******************************************************************************
* bool Check_Require_Sleep(void )
*
* Description :
*
* Arguments : None
* Returns : None
* Notes : bool Flag
*
*******************************************************************************
*/
bit Check_Require_Sleep(void )
{
if( ( ChgStatus == CHG_STA_ING ) || ( ON == Vox_Vout_Enable ) || Enter_Sleep_Cnt_Restart_Flag ) /*VBUS plugin status存在、有中断、耳机处于充电状态情况下Boost重载输出系统不进休眠模式。 */
{
#ifdef _DEBUG_SLEEP
printf("Not Get Into Sleep(ChgStatus:%d,Vox_Vout:%d,Restart_Flag:%d).\r\n",(u16)ChgStatus,(u16)Vox_Vout_Enable,(u16)Enter_Sleep_Cnt_Restart_Flag);
#endif
Enter_Sleep_Cnt_Restart_Flag = 0;
/*处理对应的保护和中断唤醒事件。*/
return false;
}
return true;
}
#endif

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

@ -0,0 +1,170 @@
/*
******************************************************************************
*
* @file system.c
* @brief system module
* @ic sy8835
*
* @version 1.0
* @date 2024/11/01 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/11/01 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"
#include "pwm.h"
#include "pmu.h"
#include "user.h"
/******************************************************************************\
Macro definitions
\******************************************************************************/
/******************************************************************************\
Variables definitions
\******************************************************************************/
/******************************************************************************\
Functions definitions
\******************************************************************************/
/*
*******************************************************************************
* void System_Init(void)
*
* Description : System Initialization
*
* Arguments : NONE
* Returns : NONE
* Notes : NONE
*
*******************************************************************************
*/
void System_Init(void)
{
#if UART0_ENABLE
UART0_Init();
#endif
#if UART1_ENABLE
UART1_Init();
#endif
#if UART2_ENABLE
UART2_Init();
#endif
Sys_Tim0_Init();
#if TIMER1_ENABLE
Sys_Tim1_Init();
#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 ADC_ENABLE
Adc_Init();
#endif
/* Interrupt Enable 根据应用选择必要的中断 */
ExtSfr_Write(IRQ_PIN_CFG,0x08); //pmu 下降沿中断使能;双沿唤醒。
/* 开外部中断使能 */
EX0 = 1;
EAL = 1; //开总中断。
#if CHARGER_ENABLE
Charger_Init();
#endif
#ifdef PWM_ENABLE
PWM_Init_Set(3,PWM_REL_VALUE);
#endif
#ifdef LED_DISPLAY
LED_Init();
LED_Clr();
#endif
#if GAUGE_ENABLE
// Bat_Cal_Init(); //电池电量初始化
#endif
pmu_Init();
I2C_GPIOInit();
Systerm_State.Next_State = POWER_ON_STATE;
}
/*
*******************************************************************************
* 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
{
#if 0
if( IRQ_FLAG&0x01 ) //pmu irq negtive interrupt.
{
IRQ_FLAG = 0x01;
// Get_PMU_Info(&pmu_Info); //获取pmu状态
}
#endif
#if SLEEP_ENABLE
Enter_Sleep_Cnt_Restart_Flag = 1;
#endif
IRQ_FLAG = 0x0F;
}

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

@ -0,0 +1,246 @@
/*
******************************************************************************
*
* @file sys_tim.c
* @brief Timer module
* @ic sy8835
*
* @version 1.0
* @date 2024/11/01 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/11/01 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"
#include "pwm.h"
/******************************************************************************\
Macro definitions
\******************************************************************************/
/******************************************************************************\
Variables definitions
\******************************************************************************/
uint8_t cnt_sys_tim_5ms = 0;
uint8_t cnt_sys_tim_10ms = 0;
uint8_t cnt_sys_tim_250ms = 0;
uint16_t cnt_sys_tim_100ms = 0;
uint8_t cnt_sys_tim_1s = 0;
bit F_sys_tim_1ms = 0;
bit F_sys_tim_5ms = 0;
bit F_sys_tim_10ms = 0;
bit F_sys_tim_250ms = 0;
bit F_sys_tim_100ms = 0;
bit F_sys_tim_1s = 0;
uint8_t F_sys_tim_tick = 0;
bit F_sys_tim1_tick = 0;
bit F_sys_tim2_tick = 0;
/******************************************************************************\
Functions definitions
\******************************************************************************/
/*
*******************************************************************************
* void Sys_Tim_Handler(void )
*
* Description : Timer Handle
*
* Arguments : NONE
* Returns : NONE
* Notes : NONE
*
*******************************************************************************
*/
void Sys_Tim0_Handler(void)
{
if(F_sys_tim_tick == 0)
return;
F_sys_tim_tick = 0;
//system tick
F_sys_tim_1ms = 1;
//---------------5ms----------------------------------------
cnt_sys_tim_5ms++;
if(cnt_sys_tim_5ms >= 5)
{
cnt_sys_tim_5ms = 0;
F_sys_tim_5ms = 1;
}
//---------------10ms----------------------------------------
cnt_sys_tim_10ms++;
if(cnt_sys_tim_10ms >= 10)
{
cnt_sys_tim_10ms = 0;
F_sys_tim_10ms = 1;
}
//---------------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;
//-----------------250ms-------------------------
cnt_sys_tim_1s++;
if(cnt_sys_tim_1s >= 4)
{
cnt_sys_tim_1s = 0;
F_sys_tim_1s = 1;
}
}
}
/*
*******************************************************************************
* void Delay10ms(void) //@11.0592MHz
*
* Description : 10msÈí¨Ê±º¯Êý
*
* Arguments : NONE
* Returns : NONE
* Notes : NONE
*
*******************************************************************************
*/
#if 0
void Delay10ms(void) //@11.0592MHz
{
unsigned char i, j;
i = 108;
j = 145;
do
{
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_tim_tick = 1;
}
/*
*******************************************************************************
* void Sys_Tim0_Init(void)
*
* Description : TImer0 Mode1 16bit timer Initialization
*
* Arguments : NONE
* Returns : NONE
* Notes : NONE
*
*******************************************************************************
*/
void Sys_Tim0_Init(void)
{
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
/**
* @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;
F_sys_tim1_tick = 1;
}
/*
*******************************************************************************
* void Sys_Tim1_Init(void)
*
* Description : TImer1 Mode1 16bit timer Initialization
*
* Arguments : NONE
* Returns : NONE
* Notes : NONE
*
*******************************************************************************
*/
void Sys_Tim1_Init(void)
{
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

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

@ -0,0 +1,548 @@
/*
******************************************************************************
*
* @file uart.c
* @brief uart module
* @ic sy8835
*
* @version 1.0
* @date 2024/11/01 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/11/01 Alex build this file
******************************************************************************/
/*_____ I N C L U D E S ____________________________________________________*/
#include "uart.h"
#include "system.h"
#include "vox_module.h"
#include "sleep.h"
/******************************************************************************\
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
#if UART0_ENABLE
idata uint8_t RX0_Buffer[COM0_Data_Lenth] = 0; //接收缓冲
bit Uart0_RX_Finish_Flag = 0;
#endif
#if UART1_ENABLE
idata uint8_t RX1_Buffer[COM0_Data_Lenth] = 0; //接收缓冲
bit Uart1_RX_Finish_Flag = 0;
#endif
#endif
#if UART0_ENABLE
/*
*******************************************************************************
* void UART0_Init(void)
*
* Description : UART0 Initialization UART0用于debug
*
* Arguments : NONE
* Returns : NONE
* Notes : NONE
*
*******************************************************************************
*/
void UART0_Init(void)
{
#if 1
/* vor、vol都使用uart0进行分时通讯。 */
SFRADDR = P0_OE; //Set P02 And P03 As Output.
SFRDATA |= 0x0C;
SFRADDR = P0_IE; //Set P02 And P03 As Input.
SFRDATA |= 0x0C;
// SFRADDR = P0_PU; //Set P02 And P03 30K Pullup.
// SFRDATA |= 0x0C;
SFRADDR = MFP_CTL0; //VOR、VOL都使用UART0进行分时通讯。
SFRDATA &=~ 0x0F;
SFRDATA |= 0x09;
#else
/* vor、vol使用不同uart进行通讯 */
SFRADDR = P0_OE; //Set P02 As Output.
SFRDATA |= 0x04;
SFRADDR = P0_IE; //Set P02 As Input.
SFRDATA |= 0x04;
SFRADDR = MFP_CTL0; //VOR使用UART0进行通讯。
SFRDATA &=~ 0x03;
SFRDATA |= 0x01;
#endif
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 = 0x52; //SCON: MODE 1, 8-bit UART, RI enable
ES0 = 1; //Enable UART0 IRQ
}
/*
*******************************************************************************
* void Uart0SendPacket(uint8_t Length,uint8_t *TransBuf)
*
* Description : UART0 Send Packet
*
* Arguments : NONE
* Returns : NONE
* Notes : NONE
*
*******************************************************************************
*/
#ifdef VOX_TX
void Uart0SendPacket(uint16_t Length,uint8_t *TransBuf)
{
uint8_t i = 0;
S0CON &=~ UART_REC_ENABLE; //Disable UART0's RX
for(i=0;i<Length;i++)
{
while(busy0);
// ACC = *TransBuf++;
busy0 = 1;
S0BUF = *TransBuf++;
}
S0CON |= UART_REC_ENABLE; //Enabel UART0's RX
}
#endif
#define Vox_Comm_Data_Len 7
/*uart0中断处理函数*/
void uart0_Interrupt(void) interrupt Interrupt_Vector_RI_TI
{
static uint8_t Rx0Status;
static uint16_t RX0_Cnt;
static uint16_t RX0DataLen;
/*处理UART0发送中断*/
if(TI0)
{
TI0 = 0;
busy0 = 0;
}
/*处理UART0接收中断*/
if(RI0)
{
RI0 = 0;
#if SLEEP_ENABLE
Enter_Sleep_Cnt_Restart_Flag = 1;
#endif
#ifdef VOX_RX
switch(Rx0Status)
{
case 0:
if( S0BUF == (BOXHEADER >> 8) )
{
Rx0Status = 1;
RX0_Cnt = 0;
RX0_Buffer[RX0_Cnt] = S0BUF;
RX0_Cnt++;
}
else
{
Rx0Status = 0;
RX0_Cnt = 0;
}
break;
case 1:
if(S0BUF == BOXHEADER)
{
Rx0Status = 2;
RX0_Buffer[RX0_Cnt] = S0BUF;
RX0_Cnt++;
}
else
{
Rx0Status = 0;
RX0_Cnt = 0;
}
break;
case 2:
RX0_Buffer[RX0_Cnt] = S0BUF;
RX0_Cnt++;
if( RX0_Cnt == Vox_Comm_Data_Len )
{
RX0DataLen = RX0_Buffer[2] + 4; //获取数据长度
}
if( (RX0DataLen == RX0_Cnt) || (RX0_Cnt > COM0_Data_Lenth) ) //当接收到的data个数等于RX0DataLen这结束本次传输。
{
RX0_Cnt = 0;
Rx0Status = 0;
Uart0_RX_Finish_Flag = 1;
}
}
#endif
}
}
#endif
#if UART1_ENABLE
bit busy1 = 0;
/*
*******************************************************************************
* void UART1_Init(void)
*
* Description : UART1 Initialization UART1用于VOX通讯功能
*
* Arguments : NONE
* Returns : NONE
* Notes : NONE
*
*******************************************************************************
*/
void UART1_Init(void)
{
SFRADDR = P0_OE; //Set P03 As Output.
SFRDATA |= 0x08;
SFRADDR = P0_IE; //Set P03 As Input.
SFRDATA |= 0x08;
SFRADDR = MFP_CTL0; //VOL使用UART1进行通讯。
SFRDATA &=~ 0x0C;
SFRDATA |= 0x04;
//baudrate set
S1RELH = HIBYTE(S1REL_VALUE);
S1RELL = LOBYTE(S1REL_VALUE);//s1rel=1023, baudrate = fclk/32 = 187.5k
S1CON = 0x92; //S1CON: 8-bit UART1,REN1 、 RI1 、TI1 enable
IEN2 |= 1; //Enable UART1 IRQ
}
/*
*******************************************************************************
* void Uart1SendPacket(uint16_t Length,uint8_t *TransBuf)
*
* Description : UART1 Send Packet
*
* Arguments : NONE
* Returns : NONE
* Notes : NONE
*
*******************************************************************************
*/
void Uart1SendPacket(uint16_t Length,uint8_t *TransBuf)
{
uint8_t i = 0;
S1CON &=~ UART_REC_ENABLE; //Disable UART0's RX
for(i=0;i<Length;i++)
{
while(busy1);
//ACC = *TransBuf++;
busy1 = 1;
S1BUF = *TransBuf++;
}
S1CON |= UART_REC_ENABLE; //Enabel UART0's RX
}
/*
*******************************************************************************
* void Uart1SendString(char *s)
*
* Description : UART1 Send String
*
* Arguments : NONE
* Returns : NONE
* Notes : NONE
*
*******************************************************************************
*/
void Uart1SendString(char *s)
{
while(*s) //检测字符串结束标志
{
Uart1SendData(*s++); //发送当前字符
}
}
/*uart1中断处理函数*/
void uart1_Interrupt(void) interrupt Interrupt_Vector_RI1_TI1
{
static uint8_t Rx1Status;
static uint16_t RX1_Cnt;
static uint16_t RX1DataLen;
/*处理UART1发送中断*/
if(S1CON & 0x02) //TI1 = 1
{
S1CON &= ~0x02; //TI1 = 0
busy1 = 0;
}
/*处理UART1接收中断*/
if(S1CON & 0x01) //RI1 = 1
{
S1CON &= ~0x01;
#if SLEEP_ENABLE
Enter_Sleep_Cnt_Restart_Flag = 1;
#endif
#ifdef VOX_RX
switch(Rx1Status)
{
case 0:
if(S1BUF == 0xAA)
{
Rx1Status = 1;
RX1_Cnt = 0;
RX1_Buffer[RX1_Cnt] = S1BUF;
RX1_Cnt++;
}
else
{
Rx1Status = 0;
RX1_Cnt = 0;
}
break;
case 1:
RX1_Buffer[RX1_Cnt] = S1BUF;
RX1_Cnt++;
if( RX1_Cnt == Vox_Comm_Data_Len )
{
RX1DataLen = RX1_Buffer[5] | (RX1_Buffer[6] << 8) + 9; //获取数据长度Headr(1Byte) + Trandsmit Dir(1Byte) + CMD(2Bytes) + datalen(2Bytes) + CRC16(2Bytes)
}
if( (RX1DataLen == RX1_Cnt) || (RX1_Cnt > COM0_Data_Lenth) ) //当接收到的data个数等于RX0DataLen这结束本次传输。
{
RX1_Cnt = 0;
Rx1Status = 0;
Uart1_RX_Finish_Flag = 1;
}
}
#endif
}
}
#endif
#if UART2_ENABLE
bit busy2 = 0;
#ifdef _DEBUG_ALL
char putchar(char c)
{
#if 0
while(!TI0);
TI0 = 0;
return (S0BUF = c);
#else
Uart2SendData(c);
return(c);
#endif
}
#endif
/*
*******************************************************************************
* void UART2_Init(void)
*
* Description : UART2 Initialization UART1用于VOX通讯功能
*
* Arguments : NONE
* Returns : NONE
* Notes : NONE
*
*******************************************************************************
*/
void UART2_Init(void)
{
S2IOCFG = 0x0A;
//baudrate set
S2RELH = HIBYTE(S2REL_VALUE);
S2RELL = LOBYTE(S2REL_VALUE);//s1rel=1023, baudrate = fclk/32 = 187.5k
S2CON = 0x92; //S1CON: 8-bit UART1,REN1 、 RI1 、TI1 enable
IEN2 = 0x02; //Enable UART2 IRQ
}
/*
*******************************************************************************
* void Uart2SendData(uint8_t Txdata)
*
* Description : UART2 Send Data
*
* Arguments : NONE
* Returns : NONE
* Notes : NONE
*
*******************************************************************************
*/
void Uart2SendData(uint8_t Txdata)
{
while(busy2);
busy2 = 1;
S2BUF = Txdata;
}
#if 0
/*
*******************************************************************************
* void Uart2SendPacket(uint16_t Length,uint8_t *TransBuf)
*
* Description : UART2 Send Packet
*
* Arguments : NONE
* Returns : NONE
* Notes : NONE
*
*******************************************************************************
*/
void Uart2SendPacket(uint16_t Length,uint8_t *TransBuf)
{
uint16_t i = 0;
for(i=0;i<Length;i++)
{
Uart2SendData(*TransBuf++);
}
}
/*
*******************************************************************************
* void Uart2SendString(char *s)
*
* Description : UART2 Send String
*
* Arguments : NONE
* Returns : NONE
* Notes : NONE
*
*******************************************************************************
*/
void Uart2SendString(char *s)
{
while(*s) //检测字符串结束标志
{
Uart2SendData(*s++); //发送当前字符
}
}
#endif
/*uart2中断处理函数*/
void uart2_Interrupt(void) interrupt Interrupt_Vector_IE8
{
/*处理UART1发送中断*/
if(S2CON & 0x02) //TI2 = 1
{
S2CON &= ~0x02; //TI2 = 0
busy2 = 0;
}
/*处理UART1接收中断*/
if(S2CON & 0x01) //RI2 = 1
{
S2CON &= ~0x01;
}
}
#endif

131
UsrSrc/user/user.c Normal file
View File

@ -0,0 +1,131 @@
/*
******************************************************************************
*
* @file user.c
* @brief user module
* @ic sy8835
*
* @version 1.0
* @date 2024/11/01 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 2024/11/01 Alex Xu build this file
******************************************************************************
*/
/*_____ I N C L U D E S ____________________________________________________*/
#include "user.h"
/******************************************************************************\
Macro definitions
\******************************************************************************/
/******************************************************************************\
Variables definitions
\******************************************************************************/
/******************************************************************************\
Functions definitions
\******************************************************************************/
/*******************************************************************************
* Function Name : ExtSfr_Write
* Description : ExtSfr Write a Byte
* Input : Will Send Date
* Output : None
* Return : None
******************************************************************************
*/
void ExtSfr_Write(u8 reg_addr,u8 _dat)
{
SFRADDR = reg_addr;
SFRDATA = _dat;
}
/*******************************************************************************
* Function Name : ExtSfr_Read
* Description : ExtSfr Read a Byte
* Input : Will Send Date
* Output : None
* Return : None
******************************************************************************
*/
u8 ExtSfr_Read(u8 reg_addr)
{
u8 Data = 0;
SFRADDR = reg_addr;
Data = SFRDATA;
return Data;
}
/*******************************************************************************
* Function Name : I2cSfr_Write
* Description : I2cSfr Write a Byte
* Input : Will Send Date
* Output : None
* Return : None
******************************************************************************
*/
void I2cSfr_Write(u8 reg_addr,u8 _dat)
{
I2C_Start();
//device address
I2C_SendByte(I2C_SFR_ADDR<<1);//send the address for write
I2C_WaitAck();
//Register address
I2C_SendByte(reg_addr);
I2C_WaitAck();
//data
I2C_SendByte(_dat);
I2C_WaitAck();
I2C_Stop();
}
/*******************************************************************************
* Function Name : I2cSfr_Read
* Description : I2cSfr Read a Byte
* Input : Will Send Date
* Output : None
* Return : None
******************************************************************************
*/
u8 I2cSfr_Read(u8 reg_addr)
{
uint8_t readdata = 0;
I2C_Start();
//device address
I2C_SendByte(I2C_SFR_ADDR<<1);//send the address for write
I2C_WaitAck();
//Register address
I2C_SendByte(reg_addr);
I2C_WaitAck();
I2C_Start();
//device address
I2C_SendByte((I2C_SFR_ADDR<<1) | 1);//send the address for read
I2C_WaitAck();
//data
readdata = I2C_ReadByte();
I2C_NoAck();
I2C_Stop();
return readdata;
}

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

@ -0,0 +1,689 @@
/*
******************************************************************************
*
* @file UserApp.c
* @brief UserApp module
* @ic sy8835
*
* @version 1.0
* @date 2024/11/01 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/11/01 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
\******************************************************************************/
#define LED_ON_CNT 100 //10s
#define LED_PRO_TIM 40
#define LED_OFF_CNT 1
/******************************************************************************\
Variables definitions
\******************************************************************************/
xdata s_sys_state Systerm_State = {SLEEP_STATE,AWAKE_STATE,AWAKE_STATE};
uint8_t LED_On_Timer = 0; //led亮时间计时
bit LED_On_Flag = 0;
bit Wkup_Earphone_Flag = 0; //保护消失后,需要升压唤醒耳机标志位
uint8_t Wkup_Source_Flag = 0; //唤醒源标志
#ifdef PWM_ENABLE
uint8_t Breathing_Light_Cnt = 0;
#endif
/******************************************************************************\
Functions definitions
\******************************************************************************/
/*****************************************************************************
* Function : void LED_Display_App(void)
* Description : 100ms调用周期
* Input : None
* Output : None
* Return : None
* Note : None
*****************************************************************************/
/*
11Hz闪烁
2
1使4s后灭1Hz闪4s后灭
2使4s后灭
34s后灭1Hz闪4s后灭
4
*/
#ifdef LED_DISPLAY
void LED_Breating_Light_Off(void)
{
#ifdef PWM_ENABLE
LED_R_BREATHING_LIGHT(SHOW_NONE);
LED_G_BREATHING_LIGHT(SHOW_NONE);
LED_Y_BREATHING_LIGHT(SHOW_NONE);
LED_B_BREATHING_LIGHT(SHOW_NONE);
#endif
}
void LED_Display_App(void)
{
#ifdef NTC_ENABLE
static bit LED_On_Flag1;
#endif
static bit LED_On_Chg_Flag;
static bit LED_On_ChgDone_Flag;
static bit Disp_Bat_Lev;
#ifdef NTC_ENABLE
/*NTC保护4灯一直快闪(2Hz)*/
if( NTC_Pro_Flag || Vox_Output_Short_Flag )
{
if( !LED_On_Flag1 )
{
LED_On_Flag1 = 1;
LED_On_Flag = 1;
}
else
{
if( Display_RSta != LED_KEEP_FLASHING )
{
Display_Red_Flash(20,10);
}
if( Display_GSta != LED_KEEP_FLASHING )
{
Display_Green_Flash(20,10);
}
if( Display_YSta != LED_KEEP_FLASHING )
{
Display_Yellow_Flash(20,10);
}
if( Display_BSta != LED_KEEP_FLASHING )
{
Display_Blue_Flash(20,10);
}
}
#if SLEEP_ENABLE
Enter_Sleep_Cnt_Restart_Flag = 1;
#endif
return;
}
/* 保护消失后需要开启5V升压一段时间。 */
if( LED_On_Flag1 )
{
LED_On_Flag1 = 0;
LED_On_ChgDone_Flag = 0;
LED_On_Chg_Flag = 0;
Wkup_Earphone_Flag = 1;
}
#endif
if (ChgStatus == CHG_STA_ING) //ChgStatus = CHG_STA_ING
{
if ( Charger_Done ) // 充电完成4个LED常亮
{
if( !LED_On_ChgDone_Flag )
{
LED_On_ChgDone_Flag = 1;
LED_Breating_Light_Off();
}
Display_AllOn();
}
else
{
if( !LED_On_Chg_Flag )
{
LED_On_Chg_Flag = 1;
LED_On_Flag = 1;
Breathing_Light_Cnt = LED_R;
}
else
{
#ifdef PWM_ENABLE
if( LED_On_Timer < LED_OFF_CNT )
{
LED_On_Timer++;
switch ( Breathing_Light_Cnt )
{
case LED_R:
if( Display_RSta != LED_BREATHING_LIGHT )
{
LED_R_BREATHING_LIGHT(SLOW_DARK);
}
break;
case LED_G:
if( Display_GSta != LED_BREATHING_LIGHT )
{
LED_G_BREATHING_LIGHT(SLOW_DARK);
}
break;
case LED_Y:
if( Display_YSta != LED_BREATHING_LIGHT )
{
LED_Y_BREATHING_LIGHT(SLOW_DARK);
}
break;
case LED_B:
if( Display_BSta != LED_BREATHING_LIGHT )
{
LED_B_BREATHING_LIGHT(SLOW_DARK);
}
break;
default:
break;
}
}
else
if( LED_On_Timer < 15 ) //LED显示1.5s。
{
LED_On_Timer++;
}
else
{
LED_On_Timer = 0;
Breathing_Light_Cnt++;
if( Breathing_Light_Cnt >= LED_ID_MAX )
{
Breathing_Light_Cnt = LED_R;
}
}
#endif
}
}
CoverEvent_Flg_led = 0;
Earphone_Chg_Flag = 0;
Key_Press_short_irq = 0;
Disp_Bat_Lev = 1;
}
else
{
if( LED_On_Chg_Flag )
{
LED_On_Chg_Flag = 0;
LED_Breating_Light_Off();
LED_On_Flag = 1;
Wkup_Earphone_Flag = 1;
return;
}
if( LED_On_Flag )
{
LED_On_Timer = 0;
LED_On_Flag = 0;
Display_AllOff();
return;
}
if( CoverEvent_Flg_led || Disp_Bat_Lev || Earphone_Chg_Flag || Key_Press_short_irq )
{
if( LED_On_Timer < LED_OFF_CNT )
{
LED_On_Timer++;
}
else
if( LED_On_Timer < LED_ON_CNT ) //LED显示5s后灭。
{
LED_On_Timer++;
/*电量显示25%电量左侧第1个灯闪25%-50%电量2个灯常亮50%-75%电量3个灯常亮75%-100%电量4个灯常量。*/
if(bat_level_Pec < 25)
{
if (Display_RSta != LED_KEEP_FLASHING)
{
Display_Red_KeepFlash(100);
Display_Green_Off();
Display_Yellow_Off();
Display_Blue_Off();
}
}
else
if(bat_level_Pec < 50)
{
Display_Red_On();
Display_Green_On();
Display_Yellow_Off();
Display_Blue_Off();
}
else
if(bat_level_Pec < 75)
{
Display_Red_On();
Display_Green_On();
Display_Yellow_On();
Display_Blue_Off();
}
else
if(bat_level_Pec < 100)
{
Display_AllOn();
}
}
else
{
CoverEvent_Flg_led = 0;
Disp_Bat_Lev = 0;
Earphone_Chg_Flag = 0;
Key_Press_short_irq = 0;
LED_On_Flag = 1; //清LED显示
}
}
}
}
#endif
/*
*******************************************************************************
* uint8_t ADC_GetValue_Machine(void)
*
* Description : ADC值获取函数使使UserAPP周期 (5ms调用周期)
*
* Arguments : NONE
* Returns : 1:
* Notes : NONE
*
*******************************************************************************
*/
uint8_t ADC_GetValue_Machine(void)
{
#ifdef _DEBUG_ADC
printf("adc chn:%d,pmu:%d,Ivol:%d,Vbat:%d,Vin:%d,Vpmid:%d,Vor:%d,Vol:%d,Vdd:%d,Ivor:%d.\r\n",(u16)ADC_Chn_Num,(u16)g_Vpmu_Adc,(u16)g_pmu_Adc_Ivol,(u16)Vbat_Adc,(u16)g_pmu_Adc_Vin,(u16)g_pmu_Adc_Vpmid,(u16)g_pmu_Adc_Vor,(u16)g_pmu_Adc_Vol,(u16)g_pmu_Adc_Vdd,(u16)g_pmu_Adc_Ivor);
#endif
PMU_ADC_Chn_Data(ADC_Chn_Num++);
if( ADC_Chn_Num >= pmu_ADC_MAX )
{
ADC_Chn_Num = 0;
return 1;
}
return 0;
}
/*
*******************************************************************************
* void System_Drivers_Machine(void)
*
* Description : (5ms调用周期)
*
* Arguments : NONE
* Returns : NONE
* Notes : NONE
*
*******************************************************************************
*/
void System_Drivers_Machine(void)
{
#if CHARGER_ENABLE
Charger_Handler();
#endif
#if DISCHARGE_ENABLE
DisCharge_Handler();
#endif
#if HALL_ENABLE
Hall_Handler();
#endif
#if KEY_ENABLE
Key_Handler();
#endif
#ifdef VOX_RX
HandleVoxCommMsg();
#endif
if ( F_sys_tim_100ms )
{
F_sys_tim_100ms = 0;
#if BAT_VALUE
check_bat_level();
#endif
#ifdef LED_DISPLAY
LED_Display_App();
#endif
#if VOX_ENABLE
Vox_Det_Machine();
#endif
}
}
/*****************************************************************************
* Function : PMU_State_Machine
* Description : PMU Handle
* Input : None
* Output : None
* Return : None
* Note : None
*****************************************************************************/
void PMU_State_Machine(void)
{
Get_PMU_Info( &pmu_Info ); //获取pmu状态
}
/*****************************************************************************
* Function : SysTerm_State_Machine
* Description : System State Handle
* Input : None
* Output : None
* Return : None
* Note : None
*****************************************************************************/
uint8_t Power_index = 0;
void SysTem_State_Machine(void)
{
uint8_t ret = 0;
if(Systerm_State.Current_State != Systerm_State.Next_State)
{
Systerm_State.Pre_State = Systerm_State.Current_State ;
Systerm_State.Current_State = Systerm_State.Next_State ;
switch(Systerm_State.Current_State)
{
case POWER_ON_STATE:
/*
LED显示UI;
LED显示闪烁2次
*/
#ifdef LED_DISPLAY
LED_R_FLASH(100,3);
LED_G_FLASH(100,3);
#endif
#ifdef _DEBUG_MAIN
printf("Power On State!Hall(0x%x) (line:%d)\r\n", (uint16_t)CoverStatus,(uint16_t)__LINE__);
#endif
break;
case AWAKE_STATE:
/*
1使
*/
#ifdef _DEBUG_MAIN
printf("Awake State (line:%d)\r\n", (uint16_t)__LINE__);
#endif
break;
case NORMAL_STATE:
/*系统正常工作中需要处理的功能;
1Sleep的定时器
*/
#if SLEEP_ENABLE
Decnt_SleepDelay = ENTER_STANDBYMODE_CNT;
#endif
#ifdef _DEBUG_MAIN
printf("Normal State (line:%d)\r\n", (uint16_t)__LINE__);
#endif
break;
case SLEEP_STATE:
/*
Sleep模式前的一些准备工作
1使
*/
#ifdef _DEBUG_MAIN
printf("Sleep State (line:%d)\r\n", (uint16_t)__LINE__);
#endif
break;
default:
break;
}
}
else
{
switch(Systerm_State.Current_State)
{
case POWER_ON_STATE:
/*上电初始化需要处理的功能;
1
2shipmode唤醒后的唤醒标志位
*/
Power_index++;
if( Power_index >= pmu_ADC_MAX ) //上电启动后需要采集完ADC所有通道的值后再进去下一个状态机
{
Systerm_State.Next_State = AWAKE_STATE;
Power_index = 0;
}
else
{
return;
}
if(bat_level == 0)
{
Systerm_State.Next_State = SLEEP_STATE; //电量为0进入睡眠模式。
}
break;
case AWAKE_STATE:
Systerm_State.Next_State = NORMAL_STATE;
break;
case NORMAL_STATE:
/*1、唤醒后工作N ms后进入Sleep Mode,N需要大于100ms。
2VIN存在VOX放电sleep mode
*/
#if SLEEP_ENABLE
if(F_sys_tim_1s)
{
F_sys_tim_1s = 0;
#ifdef _DEBUG_PMU
printf("STA0:0x%x,STA1:0x%x,STA2:0x%x,Chip_STA:0x%x,VOX_STA:0x%x.Dec_Sleep:%d\r\n",(u16)(pmu_Info.pmu_Fault_STA0),(u16)(pmu_Info.pmu_Fault_STA1),(u16)(pmu_Info.pmu_Fault_STA2),(u16)(pmu_Info.pmu_Chip_STA),(u16)(pmu_Info.pmu_VOX_STA),(u16)Decnt_SleepDelay);
// printf("Chg Sta:0x%x.,batPec:%d.\r\n",(u16)ChgStatus,(u16)bat_level_Pec);
// printf("Ivol:%d,Vbat:%d,Vin:%d,Vpmid:%d,Vor:%d,Vol:%d,Vdd:%d,Ivor:%d.\r\n",(u16)g_pmu_Adc_Ivol,(u16)Vbat_Adc,(u16)g_pmu_Adc_Vin,(u16)g_pmu_Adc_Vpmid,(u16)g_pmu_Adc_Vor,(u16)g_pmu_Adc_Vol,(u16)g_pmu_Adc_Vdd,(u16)g_pmu_Adc_Ivor);
#endif
if(Decnt_SleepDelay > 0)
{
Decnt_SleepDelay--;
/*倒数进Sleep Mode过程中出现了中断则重新计时。*/
if(Enter_Sleep_Cnt_Restart_Flag)
{
Enter_Sleep_Cnt_Restart_Flag = 0;
Decnt_SleepDelay = ENTER_STANDBYMODE_CNT;
printf("Decnt_SleepDelay Reload.\r\n");
}
}
else
{
#ifdef _DEBUG_MAIN
printf("Enter Standby Mode!\r\n");
#endif
Systerm_State.Next_State = SLEEP_STATE; //进入Sleep Mode
Enter_ShipMode_Debounce = 0;
/*清标志位*/
}
}
#endif
break;
case SLEEP_STATE:
/*
1
2
*/
#if SLEEP_ENABLE
if(Check_Require_Sleep())
{
Enter_Sleep();
}
else
{
Systerm_State.Next_State = AWAKE_STATE;
}
#endif
break;
default:
break;
}
}
}
/*****************************************************************************
* Function : UserAPP
* Description : main()45ms调用周期
* Input : None
* Output : None
* Return : None
* Note : None
*****************************************************************************/
uint8_t Step_Cnt = 0;
void UserAPP(void)
{
//static uint8_t Step_Cnt;
if(F_sys_tim_5ms)
{
F_sys_tim_5ms = 0;
switch( Step_Cnt++ )
{
case 0:
ADC_GetValue_Machine(); //用于获取各个通道的ADC值程序
break;
case 1:
PMU_State_Machine(); //用于PMU处理。
break;
case 2:
System_Drivers_Machine(); //用于执行芯片驱动程序
break;
case 3:
SysTem_State_Machine(); //用于应用程序
Step_Cnt = 0;
break;
default:
break;
}
}
if ( F_sys_tim_10ms )
{
F_sys_tim_10ms = 0;
LED_Drv();
}
}

1231
UsrSrc/vox/vox_module.c Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,96 @@
/*
******************************************************************************
*
* @file watchdog.c
* @brief watchdog module
* @ic sy8835
*
* @version 1.0
* @date 2024/11/01 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/11/01 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

View File

@ -0,0 +1,11 @@
---- POWER_CTRL_CMD Matches (14 in 4 files) ----
pmu.c (UsrSrc\pmu) line 135 : I2cSfr_Write( POWER_CTRL_CMD, n_PMU_Sys_Cfg->pmu_PWR_Ctrl_Cmd );
Set_PMU_Enter_ShipMode in pmu.c (UsrSrc\pmu) : I2cSfr_Write( POWER_CTRL_CMD, POWER_CTRL_CMD_ENTER_SHIPMODE );
Set_PMU_En_ReChg in pmu.c (UsrSrc\pmu) : I2cSfr_Write( POWER_CTRL_CMD, POWER_CTRL_CMD_RECHG_ENABLE );
Set_PMU_Rst in pmu.c (UsrSrc\pmu) : I2cSfr_Write( POWER_CTRL_CMD, POWER_CTRL_CMD_RST_VDD );
pmu.h (UsrInc\pmu) line 31 : #define POWER_CTRL_CMD_RECHG_ENABLE 0x11 //0x11:VIN正常是写入此命令IC将重新开启充电循环
pmu.h (UsrInc\pmu) line 33 : #define POWER_CTRL_CMD_RST_CMD 0x17 //0x17:CMD_RST此命令将复位I2CR<0x20>~<0x4F>、VDD
pmu.h (UsrInc\pmu) line 35 : #define POWER_CTRL_CMD_ENTER_SHIPMODE 0xAA //0xAA:EnterShipmode,当且仅当在standby mode状态下写入此命令IC进入ShipMode状态在Charge Mode状态时写入此命令无效
pmu.h (UsrInc\pmu) line 37 : #define POWER_CTRL_CMD_RST_VDD 0x33 //0x33:RstVDD在任意状态下关闭VSYS 200ms然后在重启VDD。
reg3315.h (UsrInc\inc) line 53 : #define POWER_CTRL_CMD 0x4F
Enter_Sleep in sleep.c (UsrSrc\sleep) : I2cSfr_Write(POWER_CTRL_CMD, POWER_CTRL_CMD_ENTER_SHIPMODE); //Enter ShipMode

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.

Some files were not shown because too many files have changed in this diff Show More