diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..0486ec2 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,6 @@ +{ + "files.associations": { + "ens1_gpio.h": "c", + "ens1_boost.h": "c" + } +} \ No newline at end of file diff --git a/ENS001_BASIC_PRJ.uvguix.26971 b/ENS001_BASIC_PRJ.uvguix.26971 index 9dbfd0f..257a1c3 100644 --- a/ENS001_BASIC_PRJ.uvguix.26971 +++ b/ENS001_BASIC_PRJ.uvguix.26971 @@ -93,25 +93,25 @@ 2 3 - -1 - -1 + -32000 + -32000 -1 -1 - 0 - -8 - 1499 - 839 + 376 + 222 + 1729 + 1215 0 - 390 - 01000000040000000100000001000000010000000100000000000000020000000000000001000000010000000000000028000000280000000100000003000000000000000100000023453A5C576F726B73706163655C54494D45525F44454D4F5C555345525C6D69616E2E6300000000066D69616E2E6300000000C5D4F200FFFFFFFF31453A5C576F726B73706163655C54494D45525F44454D4F5C46574C49425C736F757263655C454E53315F54494D45522E63000000000C454E53315F54494D45522E6300000000FFDC7800FFFFFFFF32453A5C576F726B73706163655C54494D45525F44454D4F5C46574C49425C696E636C7564655C454E53315F54494D45522E68000000000C454E53315F54494D45522E6800000000BECEA100FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD500010000000000000002000000040100006600000000080000CB030000 + 708 + 01000000040000000100000001000000010000000100000000000000020000000000000001000000010000000000000028000000280000000100000007000000050000000100000023453A5C576F726B73706163655C54494D45525F44454D4F5C555345525C6D69616E2E6300000000066D69616E2E6300000000C5D4F200FFFFFFFF31453A5C576F726B73706163655C54494D45525F44454D4F5C46574C49425C736F757263655C454E53315F54494D45522E63000000000C454E53315F54494D45522E6300000000FFDC7800FFFFFFFF32453A5C576F726B73706163655C54494D45525F44454D4F5C46574C49425C696E636C7564655C454E53315F54494D45522E68000000000C454E53315F54494D45522E6800000000BECEA100FFFFFFFF33453A5C576F726B73706163655C54494D45525F44454D4F5C46574C49425C736F757263655C454E53315F5741564547454E2E63000000000E454E53315F5741564547454E2E6300000000F0A0A100FFFFFFFF30453A5C576F726B73706163655C54494D45525F44454D4F5C46574C49425C736F757263655C454E53315F554152542E63000000000B454E53315F554152542E6300000000BCA8E100FFFFFFFF31453A5C576F726B73706163655C54494D45525F44454D4F5C46574C49425C696E636C7564655C454E53315F554152542E68000000000B454E53315F554152542E68000000009CC1B600FFFFFFFF32453A5C576F726B73706163655C54494D45525F44454D4F5C46574C49425C696E636C7564655C454E53315F424F4F53542E68000000000C454E53315F424F4F53542E6800000000F7B88600FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD500010000000000000002000000040100006600000000080000BA020000 @@ -150,7 +150,7 @@ 0 16 - 0300000066000000FD0000009B030000 + 0300000066000000FD0000008A020000 16 @@ -170,7 +170,7 @@ 0 16 - 0300000066000000FD0000009B030000 + 0300000066000000FD0000008A020000 16 @@ -450,7 +450,7 @@ 0 16 - 0300000066000000FD0000009B030000 + 0300000066000000FD0000008A020000 16 @@ -470,7 +470,7 @@ 0 16 - 0300000066000000FD0000009B030000 + 0300000066000000FD0000008A020000 16 @@ -490,7 +490,7 @@ 0 16 - 03000000CF030000FD0700003D040000 + 03000000BE020000FD0700003D040000 16 @@ -530,7 +530,7 @@ 0 16 - 03000000CF030000FD0700003D040000 + 03000000BE020000FD0700003D040000 16 @@ -1150,7 +1150,7 @@ 0 16 - 0300000066000000FD000000C0020000 + 0300000066000000FD0000009B030000 16 @@ -1170,7 +1170,7 @@ 0 16 - 03000000CF030000FD0700003D040000 + 03000000BE020000FD0700003D040000 16 @@ -1190,7 +1190,7 @@ 0 16 - 03000000CF030000D20500003D040000 + 03000000BE020000FD0700002C030000 16 @@ -1250,7 +1250,7 @@ 0 16 - 03000000CF030000D20500003D040000 + 03000000BE020000FD0700002C030000 16 @@ -1270,7 +1270,7 @@ 0 16 - 03000000CF030000D20500003D040000 + 03000000BE020000FD0700002C030000 16 @@ -1799,14 +1799,14 @@ 3312 - 000000000B000000000000000020000000000000FFFFFFFFFFFFFFFF04010000EE000000F0050000F2000000000000000100000004000000010000000000000000000000FFFFFFFF08000000CB00000057010000CC000000F08B00005A01000079070000D601000045890000FFFF02000B004354616262656450616E6500200000000000000401000066000000F005000005010000040100004F000000F0050000EE0000000000000040280046080000000B446973617373656D626C7900000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFF0F53797374656D20416E616C797A657200000000D601000001000000FFFFFFFFFFFFFFFF104576656E742053746174697374696373000000004589000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFFEC0400004F000000F004000066020000000000000200000004000000010000000000000000000000FFFFFFFF2B000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000050C3000051C3000052C3000053C3000054C3000055C3000056C3000057C3000058C3000059C300005AC300005BC300005CC300005DC300005EC300005FC3000060C3000061C3000062C3000063C3000001800040000000000000F004000066000000F00500007D020000F00400004F000000F00500006602000000000000404100462B0000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFF000000000050C3000001000000FFFFFFFFFFFFFFFF000000000051C3000001000000FFFFFFFFFFFFFFFF000000000052C3000001000000FFFFFFFFFFFFFFFF000000000053C3000001000000FFFFFFFFFFFFFFFF000000000054C3000001000000FFFFFFFFFFFFFFFF000000000055C3000001000000FFFFFFFFFFFFFFFF000000000056C3000001000000FFFFFFFFFFFFFFFF000000000057C3000001000000FFFFFFFFFFFFFFFF000000000058C3000001000000FFFFFFFFFFFFFFFF000000000059C3000001000000FFFFFFFFFFFFFFFF00000000005AC3000001000000FFFFFFFFFFFFFFFF00000000005BC3000001000000FFFFFFFFFFFFFFFF00000000005CC3000001000000FFFFFFFFFFFFFFFF00000000005DC3000001000000FFFFFFFFFFFFFFFF00000000005EC3000001000000FFFFFFFFFFFFFFFF00000000005FC3000001000000FFFFFFFFFFFFFFFF000000000060C3000001000000FFFFFFFFFFFFFFFF000000000061C3000001000000FFFFFFFFFFFFFFFF000000000062C3000001000000FFFFFFFFFFFFFFFF000000000063C3000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFF000100004F00000004010000B4030000010000000200001004000000010000000000000000000000FFFFFFFF05000000ED0300006D000000C3000000C40000007394000001800010000001000000000000006600000000010000F0020000000000004F00000000010000B40300000000000040410056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73010000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7301000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657301000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273000000007394000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000000000000FFFFFFFFFFFFFFFF0000000052020000F00500005602000000000000010000000400000001000000000000000000000000000000000000000000000001000000C6000000FFFFFFFF0F0000008F070000930700009407000095070000960700009007000091070000B5010000B801000038030000B9050000BA050000BB050000BC050000CB09000001800080000000000000000000006D020000F0050000200300000000000056020000F00500000903000000000000404100460F0000001343616C6C20537461636B202B204C6F63616C73000000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031000000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF09554C494E4B706C7573000000003803000001000000FFFFFFFFFFFFFFFF084D656D6F7279203100000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFFFFFFFFFF0000000001000000000000000000000001000000FFFFFFFFF802000056020000FC0200000903000000000000020000000400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF8F07000001000000FFFFFFFF8F07000001000000C6000000000000000080000001000000FFFFFFFFFFFFFFFF00000000B403000000080000B803000001000000010000100400000001000000A1FCFFFF9D000000FFFFFFFF06000000C5000000C7000000B4010000D2010000CF010000779400000180008000000100000000000000F4020000D50500009203000000000000B803000000080000560400000000000040820056060000000C4275696C64204F757470757401000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657301000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0E536F757263652042726F7773657200000000D201000001000000FFFFFFFFFFFFFFFF0E416C6C205265666572656E63657300000000CF01000001000000FFFFFFFFFFFFFFFF0742726F77736572010000007794000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000000000000000000 + 000000000B000000000000000020000000000000FFFFFFFFFFFFFFFF04010000EE000000F0050000F2000000000000000100000004000000010000000000000000000000FFFFFFFF08000000CB00000057010000CC000000F08B00005A01000079070000D601000045890000FFFF02000B004354616262656450616E6500200000000000000401000066000000F005000005010000040100004F000000F0050000EE0000000000000040280046080000000B446973617373656D626C7900000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFF0F53797374656D20416E616C797A657200000000D601000001000000FFFFFFFFFFFFFFFF104576656E742053746174697374696373000000004589000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFFEC0400004F000000F004000066020000000000000200000004000000010000000000000000000000FFFFFFFF2B000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000050C3000051C3000052C3000053C3000054C3000055C3000056C3000057C3000058C3000059C300005AC300005BC300005CC300005DC300005EC300005FC3000060C3000061C3000062C3000063C3000001800040000000000000F004000066000000F00500007D020000F00400004F000000F00500006602000000000000404100462B0000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFF000000000050C3000001000000FFFFFFFFFFFFFFFF000000000051C3000001000000FFFFFFFFFFFFFFFF000000000052C3000001000000FFFFFFFFFFFFFFFF000000000053C3000001000000FFFFFFFFFFFFFFFF000000000054C3000001000000FFFFFFFFFFFFFFFF000000000055C3000001000000FFFFFFFFFFFFFFFF000000000056C3000001000000FFFFFFFFFFFFFFFF000000000057C3000001000000FFFFFFFFFFFFFFFF000000000058C3000001000000FFFFFFFFFFFFFFFF000000000059C3000001000000FFFFFFFFFFFFFFFF00000000005AC3000001000000FFFFFFFFFFFFFFFF00000000005BC3000001000000FFFFFFFFFFFFFFFF00000000005CC3000001000000FFFFFFFFFFFFFFFF00000000005DC3000001000000FFFFFFFFFFFFFFFF00000000005EC3000001000000FFFFFFFFFFFFFFFF00000000005FC3000001000000FFFFFFFFFFFFFFFF000000000060C3000001000000FFFFFFFFFFFFFFFF000000000061C3000001000000FFFFFFFFFFFFFFFF000000000062C3000001000000FFFFFFFFFFFFFFFF000000000063C3000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFF000100004F00000004010000A3020000010000000200001004000000010000000000000000000000FFFFFFFF05000000ED0300006D000000C3000000C40000007394000001800010000001000000000000006600000000010000CB030000000000004F00000000010000A30200000000000040410056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73010000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7301000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657301000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273000000007394000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000000000000FFFFFFFFFFFFFFFF0000000052020000F00500005602000000000000010000000400000001000000000000000000000000000000000000000000000001000000C6000000FFFFFFFF0F0000008F070000930700009407000095070000960700009007000091070000B5010000B801000038030000B9050000BA050000BB050000BC050000CB09000001800080000000000000000000006D020000F0050000200300000000000056020000F00500000903000000000000404100460F0000001343616C6C20537461636B202B204C6F63616C73000000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031000000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF09554C494E4B706C7573000000003803000001000000FFFFFFFFFFFFFFFF084D656D6F7279203100000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFFFFFFFFFF0000000001000000000000000000000001000000FFFFFFFFF802000056020000FC0200000903000000000000020000000400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF8F07000001000000FFFFFFFF8F07000001000000C6000000000000000080000001000000FFFFFFFFFFFFFFFF00000000A302000000080000A702000001000000010000100400000001000000A0FCFFFF9C000000FFFFFFFF06000000C5000000C7000000B4010000D2010000CF010000779400000180008000000100000000000000CF030000000800006D04000000000000A702000000080000560400000000000040820056060000000C4275696C64204F757470757401000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657301000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0E536F757263652042726F7773657200000000D201000001000000FFFFFFFFFFFFFFFF0E416C6C205265666572656E63657300000000CF01000001000000FFFFFFFFFFFFFFFF0742726F77736572010000007794000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000000000000000000 59392 File 2733 - 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000004000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE8030000000000000000000000000000000000000000000000010000000100000096000000020020500000000010434D53444B5F74696D65725F496E697496000000000000000C0010434D53444B5F74696D65725F496E69740E54494D4552305F48616E646C65720B467573655F726573756C7404626F6F6C0C436C6F636B496E697453657405313536323505636F756E740B54696D6572305F696E6974044750494F044354524C0D4750494F5F4F547970655F505015434D53444B5F74696D65725F456E61626C65495251000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65C6030000 + 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE8030000000000000000000000000000000000000000000000010000000100000096000000020020500000000010434D53444B5F74696D65725F496E697496000000000000000C0010434D53444B5F74696D65725F496E69740E54494D4552305F48616E646C65720B467573655F726573756C7404626F6F6C0C436C6F636B496E697453657405313536323505636F756E740B54696D6572305F696E6974044750494F044354524C0D4750494F5F4F547970655F505015434D53444B5F74696D65725F456E61626C65495251000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000400160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65C6030000 1423 @@ -1822,7 +1822,7 @@ Build 992 - 00200000010000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000000001D000000000000000000000000000000000100000001000000018030800000000000001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000000006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0100000000000000000000000100000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA000000000000000000000000000000000000000000000000010000000100000096000000030020500000000010454E533030315F42415349435F50524A9600000000000000010010454E533030315F42415349435F50524A000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000000004E00000000000000000000000000000000010000000100000001807202000000000000530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64DC010000 + 00200000010000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000004001C0000000000000000000000000000000001000000010000000180D07F0000000000001D000000000000000000000000000000000100000001000000018030800000000002001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000000006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0100000000000000000000000100000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA000000000000000000000000000000000000000000000000010000000100000096000000030020500000000010454E533030315F42415349435F50524A9600000000000000010010454E533030315F42415349435F50524A000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000000004E00000000000000000000000000000000010000000100000001807202000000000000530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64DC010000 583 @@ -1838,7 +1838,7 @@ Debug 2373 - 00200000000000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000000002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000000000002D0000000000000000000000000000000001000000010000000180F07F0000000000002E0000000000000000000000000000000001000000010000000180E8880000000000003700000000000000000000000000000000010000000100000001803B010000000000002F0000000000000000000000000000000001000000010000000180BB8A00000000000030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000000000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720000000000000000010000000000000001000000000000000000000001000000000013800F01000000000000320000000E4D656D6F72792057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000000000000330000000E53657269616C2057696E646F77730000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000007200000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7200000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720000000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720000000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000000000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730000000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72000000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000 + 00200000000000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000000002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000000000002D0000000000000000000000000000000001000000010000000180F07F0000000000002E0000000000000000000000000000000001000000010000000180E8880000000000003700000000000000000000000000000000010000000100000001803B010000000000002F0000000000000000000000000000000001000000010000000180BB8A00000000000030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000000000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720100000000000000010000000000000001000000000000000000000001000000000013800F01000000000000320000000E4D656D6F72792057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000000000000330000000E53657269616C2057696E646F77730000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000007200000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7201000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720100000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720100000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000000000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730100000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72010000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000 898 @@ -1862,21 +1862,21 @@ 0 100 - 0 + 5 .\USER\mian.c 11 - 58 - 81 + 1 + 31 1 0 .\FWLIB\source\ENS1_TIMER.c - 31 - 426 - 427 + 1 + 434 + 459 1 0 @@ -1884,12 +1884,48 @@ .\FWLIB\include\ENS1_TIMER.h 0 - 21 + 38 12 1 0 + + .\FWLIB\source\ENS1_WAVEGEN.c + 29 + 256 + 257 + 1 + + 0 + + + .\FWLIB\source\ENS1_UART.c + 52 + 302 + 42 + 1 + + 0 + + + .\FWLIB\include\ENS1_UART.h + 76 + 152 + 177 + 1 + + 0 + + + .\FWLIB\include\ENS1_BOOST.h + 36 + 5 + 31 + 1 + + 0 + diff --git a/ENS001_BASIC_PRJ.uvoptx b/ENS001_BASIC_PRJ.uvoptx index 397da40..0267cd1 100644 --- a/ENS001_BASIC_PRJ.uvoptx +++ b/ENS001_BASIC_PRJ.uvoptx @@ -152,6 +152,22 @@ 0 0 + 36 + 1 +
0
+ 0 + 0 + 0 + 0 + 0 + 0 + .\USER\mian.c + + +
+ + 1 + 0 283 1
268441304
@@ -166,7 +182,7 @@ \\ENS001_BASIC_PRJ\FWLIB/source/ENS1_UART.c\283
- 1 + 2 0 36 1 @@ -289,7 +305,7 @@ 2 2 1 - 1 + 0 0 0 .\FWLIB\source\ENS1_UART.c @@ -349,7 +365,7 @@ 2 7 1 - 1 + 0 0 0 .\FWLIB\source\ENS1_TIMER.c diff --git a/FWLIB/include/ENS1_BOOST.h b/FWLIB/include/ENS1_BOOST.h index 96553b6..5060be3 100644 --- a/FWLIB/include/ENS1_BOOST.h +++ b/FWLIB/include/ENS1_BOOST.h @@ -34,4 +34,4 @@ void boost_voltage_select_45V(void); //32MHz频率下,设置升压电压为55V void boost_voltage_select_55V(void); -#endif \ No newline at end of file +#endif diff --git a/FWLIB/include/ENS1_GPIO.h b/FWLIB/include/ENS1_GPIO.h index 9c8b1b8..0a926be 100644 --- a/FWLIB/include/ENS1_GPIO.h +++ b/FWLIB/include/ENS1_GPIO.h @@ -19,13 +19,14 @@ History: 1.V1.0 Date: Author: -Modification: +Modification: ���� */ #ifndef ENS1_GPIO_H #define ENS1_GPIO_H #include "my_header.h" #include "CMSDK_CM0.h" extern uint8_t GPIO_AltFunction(GPIO_NUM GPIO_X , GPIO_AltFuncSel GPIO_AltFuncSelx); +extern int8_t GPIO_IO_Init(GPIO_NUM GPIO_X, I_O_SELECT INorOUT ,GPIOOType_TypeDef GPIO_OType,GPIO_PUPD_TypeDef GPIO_PUPD,OUTPUT_SPEED_TypeDef OUTPUT_SPEED,OUTPUT_PDRV_TypeDef OUTPUT_PDRV,FunctionalState ENABLEorNOT); extern int8_t GPIO_IO_Select(GPIO_NUM GPIO_X, I_O_SELECT INorOUT ,FunctionalState ENABLEorNOT); extern uint8_t GPIO_GetInputValue(GPIO_NUM GPIO_X); extern uint8_t GPIO_GetOutputValue(GPIO_NUM GPIO_X); diff --git a/FWLIB/include/ENS1_UART.h b/FWLIB/include/ENS1_UART.h index de5e53d..ff395dc 100644 --- a/FWLIB/include/ENS1_UART.h +++ b/FWLIB/include/ENS1_UART.h @@ -14,7 +14,7 @@ History: 1.V1.0 Date: Author: -Modification: +Modification: ���� */ #ifndef _ENS1_UART_H_ #define _ENS1_UART_H_ @@ -37,7 +37,38 @@ Modification: #define InterruptEnable __enable_irq typedef enum uartRcvfifoTrigger{byte_1=0 , bytes_4=1,bytes_8=2,bytes_14=3}uartRcvTrigger; typedef enum {OverSamp_16 = 0,OverSamp_13}UART_OverSamp; -/*uartýṹ*/ + + + +typedef enum { +StopLen_1 = 0, +StopLen_Other +}UART_StopLen; + +typedef enum { +WordLen_5, +WordLen_6, +WordLen_7, +WordLen_8 +}UART_WordLen; + + +typedef enum { +Stick_RESET = 0, +Stick_SET +}UART_Stick_EN; + +typedef enum { +Odd_SET = 0, +Even_SET +}UART_Even_EN; + +typedef enum { +Parity_RESET = 0, +Parity_SET +}UART_Parity_EN; + +/*uart�������ýṹ��*/ typedef struct uart_fifo{ uartRcvTrigger level; @@ -48,8 +79,13 @@ typedef struct uart_fifo{ typedef struct uart_para{ uint8_t UART_OverSampMode; uint32_t UART_BaudRate; - uint8_t UART_HardwareFlowControl; //ӲǷ + uint8_t UART_HardwareFlowControl; //Ӳ�������Ƿ��� UART_FifoStructrue* FifoSetting ; + UART_StopLen stop_len; //停止位长度 + UART_WordLen Word_len; //数据位长度 + UART_Stick_EN Stick_EN; //固定奇偶校验使能 + UART_Even_EN Even_EN; //奇偶校验选择 + UART_Parity_EN Parity_EN; //奇偶校验使能 }UART_InitStructure; extern UART_FifoStructrue UART0_Fifo; @@ -58,19 +94,19 @@ extern UART_FifoStructrue UART1_Fifo; extern UART_InitStructure UART1_Init; /* -жԴ˵ -1THREINT THRͼĴFIFO -2RDAINT ռĴݿ FIFOģʽ´ֵ -3RTOINT FIFOģʽ½ճʱĸֽʱûֽƳ룬ʱһֽڽFIFO -4RLSINT ·״̬У֡ж -5MSIINT ƽ״̬CTS״̬autoflowDSR/RI/DCD״̬ +�ж���Դ˵���� +1��THREINT THR���ͼĴ�������FIFO�� +2��RDAINT ���ռĴ������ݿ��� ��FIFOģʽ�´���������ֵ +3��RTOINT FIFOģʽ�½��ճ�ʱ��������ĸ��ֽ�ʱ����û���ֽ��Ƴ��������룬�����ʱ����������һ���ֽ��ڽ���FIFO�� +4��RLSINT ������·״̬���������������У�����֡��������ж� +5��MSIINT ���ƽ����״̬��CTS����״̬������autoflow����DSR/RI/DCD����״̬ */ -/*жʹ*/ +/*�ж�ʹ��*/ #define MSI_EN (uint8_t)0X8 #define RLSI_EN (uint8_t)0X4 #define THRE_EN (uint8_t)0X2 #define RDAI_EN (uint8_t)0X1 -/*жϢ*/ +/*�ж���Ϣ*/ #define INT_MODEM_STATUS (uint8_t)0X0 #define INT_THR_EMPTY (uint8_t)0X1 #define INT_RCV_DATA_AVAILABLE (uint8_t)0X2 @@ -78,8 +114,8 @@ extern UART_InitStructure UART1_Init; #define INT_CHAR_TIMEOUT_INDICATION (uint8_t)0X6 typedef struct uart_it_para{ - uint8_t UartIntModel ; //ѡжϵģʽ - uint8_t UartDMAEnable; //ѡǷDMA + uint8_t UartIntModel ; //ѡ���жϵ�ģʽ + uint8_t UartDMAEnable; //ѡ���Ƿ���DMA }UART_ITStructure; extern UART_ITStructure UART0_ITSet; @@ -91,34 +127,34 @@ extern UART_ITStructure UART1_ITSet; #define UART_WordLength_8b ((uint8_t)0x03) #define UART_NO_PARITY ((uint8_t)0x00 & 0xff) -#define UART_LOGIC_1_ODD_NUM ((uint8_t)0x08 & 0xff) //߼1 -#define UART_LOGIC_1_EVEN_NUM ((uint8_t)0x18 & 0xff) //߼1ż -#define UART_STICK_PARITY_AS1 ((uint8_t)0x28 & 0xff) //̶żУΪ1 +#define UART_LOGIC_1_ODD_NUM ((uint8_t)0x08 & 0xff) //�߼�1������ +#define UART_LOGIC_1_EVEN_NUM ((uint8_t)0x18 & 0xff) //�߼�1ż���� +#define UART_STICK_PARITY_AS1 ((uint8_t)0x28 & 0xff) //�̶���żУ��Ϊ1 #define UART_STICK_PARITY_AS0 ((uint8_t)0x38 & 0xff) -/*жϢȡ*/ -/*жϹ*/ -uint8_t UART_INT_PEND(CMSDK_UART_TypeDef* UARTx); //Ϊ0ʱUARTжϹ -/*ж״̬ж*/ +/*�ж���Ϣ��ȡ*/ +/*�жϹ���*/ +uint8_t UART_INT_PEND(CMSDK_UART_TypeDef* UARTx); //Ϊ0ʱ��UART���жϹ��� +/*�ж�״̬�ж�*/ uint8_t UART_INT_TYPE(CMSDK_UART_TypeDef* UARTx); -/*fifo ʹָʾ*/ -uint8_t UART_FIFO_USE(CMSDK_UART_TypeDef* UARTx); //0:fifoģʽ 1fifo ʹ -/*FIFO*/ +/*fifo ʹ��ָʾ��*/ +uint8_t UART_FIFO_USE(CMSDK_UART_TypeDef* UARTx); //0:��fifoģʽ 1��fifo ʹ�� +/*�������FIFO*/ void UART_TXCLR(CMSDK_UART_TypeDef* UARTx); -/*FIFO*/ +/*�������FIFO*/ void UART_RXCLR(CMSDK_UART_TypeDef* UARTx); -/*FIFOʹ*/ +/*FIFOʹ��*/ void UART_FIFOEnable(CMSDK_UART_TypeDef* UARTx); -/*FIFOر*/ +/*FIFO�ر�*/ void UART_FIFODisable(CMSDK_UART_TypeDef* UARTx); -/**/ +/*��������*/ uint8_t READ_UART_RCVBuff(CMSDK_UART_TypeDef* UARTx ); -/**/ +/*��������*/ void WRITE_UART_THRBuff(CMSDK_UART_TypeDef* UARTx ,uint8_t data); -/*FIFO״̬ȡ*/ +/*FIFO״̬��ȡ*/ uint8_t UART_RX_FIFO_LEN(CMSDK_UART_TypeDef* UARTx) ; uint8_t UART_TX_FIFO_LEN(CMSDK_UART_TypeDef* UARTx) ; uint8_t UART_RX_FIFO_FULL(CMSDK_UART_TypeDef* UARTx) ; @@ -126,19 +162,20 @@ uint8_t UART_RX_FIFO_EMPTY(CMSDK_UART_TypeDef* UARTx) ; uint8_t UART_TX_FIFO_FULL(CMSDK_UART_TypeDef* UARTx) ; uint8_t UART_TX_FIFO_EMPTY(CMSDK_UART_TypeDef* UARTx) ; -/*շ״̬ȡ*/ +/*�շ���״̬��ȡ*/ uint8_t UARTLine_RCVError(CMSDK_UART_TypeDef* UARTx); -/*жϷͻǷΪ*/ +/*�жϷ��ͻ����Ƿ�Ϊ��*/ uint8_t UARTLine_TRANSEmpty(CMSDK_UART_TypeDef* UARTx); -/*жTHRǷΪ*/ +/*�ж�THR�Ƿ�Ϊ��*/ uint8_t UARTLine_THREmpty(CMSDK_UART_TypeDef* UARTx); -/*UARTʼ*/ +/*UART��ʼ��*/ void UART_Init(CMSDK_UART_TypeDef *CMSDK_UART, UART_InitStructure* uart_paraX); void UART_ITConfig(CMSDK_UART_TypeDef *CMSDK_UART, UART_ITStructure* uart_paraX); unsigned char UartPutc(CMSDK_UART_TypeDef *CMSDK_UART ,unsigned char my_ch); +void Uart_Send(CMSDK_UART_TypeDef *CMSDK_UART ,uint8_t *data, uint8_t len); diff --git a/FWLIB/include/ENS1_WAVEGEN.h b/FWLIB/include/ENS1_WAVEGEN.h index 14a4091..b7282c5 100644 --- a/FWLIB/include/ENS1_WAVEGEN.h +++ b/FWLIB/include/ENS1_WAVEGEN.h @@ -42,6 +42,12 @@ typedef struct { uint16_t intensity; // 强度 (0-255) uint16_t rest_time; // 休息时间 (ms) uint16_t silent_time; // 静默时间 (ms) + + // 缓进缓出控制参数 + uint8_t ramp_up_time; // 缓进时间:2秒 + uint8_t hold_time; // 保持时间:6秒 + uint8_t ramp_down_time; // 缓出时间:2秒 + uint8_t enable_ramp; // 启用渐进控制 } EMS_Config_TypeDef; // 电刺激控制函数 @@ -50,5 +56,6 @@ void EMS_Start(void); void EMS_Stop(void); void EMS_UpdateIntensity(uint16_t intensity); void EMS_Process(void); +void EMS_Process_Ramp(void); // 缓进缓出处理函数 #endif diff --git a/FWLIB/source/ENS1_IIC.c b/FWLIB/source/ENS1_IIC.c index 91e312a..af55a9c 100644 --- a/FWLIB/source/ENS1_IIC.c +++ b/FWLIB/source/ENS1_IIC.c @@ -11,7 +11,7 @@ History: 1.V1.0 Date: Author: - Modification: + Modification: ���� */ #include "ENS1_IIC.h" @@ -33,37 +33,37 @@ IIC_ConfigStructure IIC1_Config = }; -//bus error жϣITERRENʹܣ +//bus error �жϣ�ITERRENʹ�ܣ� bool IIC_BUS_ERROR(CMSDK_I2C_TypeDef* CMSDK_I2Cx){return (bool)(((CMSDK_I2Cx->I2C_STS >> 8)&0x1) ? true :false);} -//Ӧж +//Ӧ������ж� bool IIC_ACK_ERROR(CMSDK_I2C_TypeDef* CMSDK_I2Cx){return (bool)(((CMSDK_I2Cx->I2C_STS >> 10)&0x1) ? true :false);} -//ٲ +//�ٲ� bool IIC_ARBITRAT_ERROR(CMSDK_I2C_TypeDef* CMSDK_I2Cx){return (bool)(((CMSDK_I2Cx->I2C_STS >> 9)&0x1) ? true :false);} -/// +//���/������� bool IIC_OVERRUN_ERROR(CMSDK_I2C_TypeDef* CMSDK_I2Cx){return (bool)(((CMSDK_I2Cx->I2C_STS >> 11)&0x1) ? true :false);} -//ITEVFENʹܺ¼ -//ʼ״̬ʼλͣģʽ +//ITEVFENʹ�ܺ��������¼� +//��ʼ״̬����ʼλ���ͣ�����ģʽ�� bool IIC_SB_EVENT(CMSDK_I2C_TypeDef* CMSDK_I2Cx){return (bool)(((CMSDK_I2Cx->I2C_STS)&0x1) ? true :false);} -//ַͣģʽ / ַƥ䣨ӻ¼ +//��ַ���ͣ�����ģʽ�� / ��ַƥ�䣨�ӻ��¼��� bool IIC_ADDR_EVENT(CMSDK_I2C_TypeDef* CMSDK_I2Cx){return (bool)(((CMSDK_I2Cx->I2C_STS >> 1)&0x1) ? true :false);} -//ģʽ£ѷ10bitַݵĵһֽڣ +//����ģʽ�£������ѷ���10bit��ַ���ݵĵ�һ���ֽڣ����� bool IIC_ADD10_EVENT(CMSDK_I2C_TypeDef* CMSDK_I2Cx){return (bool)(((CMSDK_I2Cx->I2C_STS >> 3)&0x1) ? true :false);} -//ӻģʽ£ֹͣյ +//�ӻ�ģʽ�£�ֹͣ���������յ� bool IIC_STOPF_EVENT(CMSDK_I2C_TypeDef* CMSDK_I2Cx){return (bool)(((CMSDK_I2Cx->I2C_STS >> 4)&0x1) ? true :false);} -//ֽڴɹ +//�����ֽڴ���ɹ� bool IIC_BTF_EVENT(CMSDK_I2C_TypeDef* CMSDK_I2Cx){return (bool)(((CMSDK_I2Cx->I2C_STS >> 2)&0x1) ? true :false);} -//ITEVFEN ITBUFEN ʹܺ¼ -//ݼĴǿգݣ +//ITEVFEN �� ITBUFEN ʹ�ܺ��������¼� +//���ݼĴ����ǿգ��������������ݣ� bool IIC_RxNE_EVENT(CMSDK_I2C_TypeDef* CMSDK_I2Cx){return (bool)(((CMSDK_I2Cx->I2C_STS >> 5)&0x1) ? true :false);} -//ݼĴգݣ +//���ݼĴ����գ����������ݣ� bool IIC_TxE_EVENT(CMSDK_I2C_TypeDef* CMSDK_I2Cx){return (bool)(((CMSDK_I2Cx->I2C_STS >> 6)&0x1) ? true :false);} -//״̬æ +//����״̬����æ��� uint8_t IIC_Bus_BUSY(CMSDK_I2C_TypeDef* CMSDK_I2Cx){return (uint8_t)(((CMSDK_I2Cx->I2C_STS >> 13)&0x1) ? 1 :0);}; -//ģʽȷ +//ģʽȷ�� bool IIC_MASTER_MODE(CMSDK_I2C_TypeDef* CMSDK_I2Cx){return (bool)(((CMSDK_I2Cx->I2C_STS >> 12)&0x1) ? true :false);} uint8_t IIC_Config_init(CMSDK_I2C_TypeDef* CMSDK_I2Cx ,IIC_ConfigStructure* IIC_Para ) @@ -80,7 +80,7 @@ uint8_t IIC_Config_init(CMSDK_I2C_TypeDef* CMSDK_I2Cx ,IIC_ConfigStructure* II } if(IIC_Para->MODE == IIC_SLAVE) { - // CMSDK_I2Cx->I2C_CR2|=(1<<7);//|(1<<8);//жʹ--bit8bufferж / bit7¼ж / bit6ж + // CMSDK_I2Cx->I2C_CR2|=(1<<7);//|(1<<8);//�ж�ʹ��--bit8��buffer�ж� / bit7���¼��ж� / bit6�������ж� CMSDK_I2Cx->I2C_CR1|=(1); CMSDK_I2Cx->I2C_OAR = IIC_Para->OWN_ADDRESS ; if(IIC_Para->ACK_EN == true) @@ -90,9 +90,9 @@ uint8_t IIC_Config_init(CMSDK_I2C_TypeDef* CMSDK_I2Cx ,IIC_ConfigStructure* II { /* IIC master transmitter: - IIC_CR2:жʱƵ - IIC_CR1:ʹIICӿ - IIC_CR1:START λ IIC + IIC_CR2:�����ж�ʱ��Ƶ�� + IIC_CR1:ʹ��IIC�ӿ� + IIC_CR1:����START λ IIC���� */ CMSDK_I2Cx->I2C_CR2 |= IIC_Para->IIC_SPEED ; CMSDK_I2Cx->I2C_CR1 |= (1) ; @@ -125,7 +125,7 @@ void IIC_ITConfig(CMSDK_I2C_TypeDef* CMSDK_I2Cx ,uint16_t IIC_IT_SEL ,Functional } } -void IIC_Cmd(CMSDK_I2C_TypeDef* CMSDK_I2Cx ,FunctionalState NewState) //ʹIIC +void IIC_Cmd(CMSDK_I2C_TypeDef* CMSDK_I2Cx ,FunctionalState NewState) //ʹ��IIC���� { if(CMSDK_I2Cx ==CMSDK_I2C0) { @@ -157,8 +157,8 @@ void IIC_GenerateSTOP(CMSDK_I2C_TypeDef* CMSDK_I2Cx) CMSDK_I2Cx->I2C_CR1 |= (1<<4); } -//general call 豸Ϣڳʼ豸豸ͬ -//豸ͨ߷0x00ַGENERAL CALL +//general call ���������������豸������Ϣ�����ڳ�ʼ�����豸���豸ͬ�� +//���豸ͨ�������߷���0x00��ַ������GENERAL CALL void IIC_GeneralCallCmd(CMSDK_I2C_TypeDef* CMSDK_I2Cx) { @@ -172,7 +172,7 @@ void IIC_Send7bitAddress(CMSDK_I2C_TypeDef* CMSDK_I2Cx ,uint8_t Address) void IIC_SendData(CMSDK_I2C_TypeDef* CMSDK_I2Cx , uint8_t data) { CMSDK_I2Cx->I2C_DR = data; - while(IIC_BTF_EVENT(CMSDK_I2Cx) == false); //ֽڴ + while(IIC_BTF_EVENT(CMSDK_I2Cx) == false); //�ֽڴ������ } uint8_t IIC_ReadData(CMSDK_I2C_TypeDef* CMSDK_I2Cx) @@ -211,9 +211,9 @@ void I2C0_Event_Handler(void) } if(IIC_STOPF_EVENT(CMSDK_I2C0) == true) { - //ٽգرIIC!!! + //������ٽ��գ���ر�IIC!!! IIC_Cmd(CMSDK_I2C0 ,DISABLE) ; - CMSDK_I2C0->I2C_CR2|=(1<<7); //жʹ--bit8bufferж / bit7¼ж / bit6ж + CMSDK_I2C0->I2C_CR2|=(1<<7); //�ж�ʹ��--bit8��buffer�ж� / bit7���¼��ж� / bit6�������ж� CMSDK_I2C0->I2C_CR1|=(1); CMSDK_I2C0->I2C_OAR = 0X78 ; CMSDK_I2C0->I2C_CR1 |= (1<<5); @@ -230,7 +230,6 @@ void I2C0_Event_Handler(void) if(IIC_RxNE_EVENT(CMSDK_I2C0) == true) { uint8_t read_data = (uint8_t)(CMSDK_I2C0->I2C_DR & 0xff); - printf("%d\n", read_data); } if(IIC_TxE_EVENT(CMSDK_I2C0) == true) @@ -246,25 +245,21 @@ void I2C0_Error_Handler(void) if(IIC_BUS_ERROR(CMSDK_I2C0) == true) { - printf("bus error\n"); return ; } if(IIC_ACK_ERROR(CMSDK_I2C0) == true) { - printf("IIC_ACK_ERROR\n"); return ; } if(IIC_ARBITRAT_ERROR(CMSDK_I2C0) == true) { - printf("IIC_ARBITRAT_ERROR\n"); return ; } if(IIC_OVERRUN_ERROR(CMSDK_I2C0) == true) { - printf("IIC_OVERRUN_ERROR\n"); return ; } @@ -293,17 +288,16 @@ void I2C1_Event_Handler(void) } else { - if(IIC_ADDR_EVENT(CMSDK_I2C1) == true) //Ϊӻ˴ַƥ䣡 + if(IIC_ADDR_EVENT(CMSDK_I2C1) == true) //��Ϊ�ӻ�������˴����ַƥ�䣡 { return ; } - if(IIC_STOPF_EVENT(CMSDK_I2C1) == true) //ΪӻյSTOPź + if(IIC_STOPF_EVENT(CMSDK_I2C1) == true) //��Ϊ�ӻ������յ�STOP�ź� { - printf("get stop\n"); - //ٽգرIIC!!! + //������ٽ��գ���ر�IIC!!! IIC_Cmd(CMSDK_I2C1 ,DISABLE) ; - CMSDK_I2C1->I2C_CR2|=(1<<7); //жʹ--bit8bufferж / bit7¼ж / bit6ж + CMSDK_I2C1->I2C_CR2|=(1<<7); //�ж�ʹ��--bit8��buffer�ж� / bit7���¼��ж� / bit6�������ж� CMSDK_I2C1->I2C_CR1|=(1); CMSDK_I2C1->I2C_OAR = 0X78 ; CMSDK_I2C1->I2C_CR1 |= (1<<5); @@ -317,10 +311,9 @@ void I2C1_Event_Handler(void) { } - if((IIC_RxNE_EVENT(CMSDK_I2C1) == true)) //ΪӻbufferǿգIIC_DRе + if((IIC_RxNE_EVENT(CMSDK_I2C1) == true)) //��Ϊ�ӻ���buffer�ǿգ���IIC_DR�е����� { uint8_t read_data = (uint8_t)(CMSDK_I2C1->I2C_DR & 0xff); - printf("%d\n", read_data); } if(IIC_TxE_EVENT(CMSDK_I2C1) == true) { @@ -335,25 +328,21 @@ void I2C1_Error_Handler(void) if(IIC_BUS_ERROR(CMSDK_I2C1) == true) { - printf("bus error\n"); return ; } if(IIC_ACK_ERROR(CMSDK_I2C1) == true) { - printf("IIC_ACK_ERROR\n"); return ; } if(IIC_ARBITRAT_ERROR(CMSDK_I2C1) == true) { - printf("IIC_ARBITRAT_ERROR\n"); return ; } if(IIC_OVERRUN_ERROR(CMSDK_I2C1) == true) { - printf("IIC_OVERRUN_ERROR\n"); return ; } diff --git a/FWLIB/source/ENS1_MTP.c b/FWLIB/source/ENS1_MTP.c index 063f4cd..92e55b4 100644 --- a/FWLIB/source/ENS1_MTP.c +++ b/FWLIB/source/ENS1_MTP.c @@ -11,14 +11,14 @@ History: 1.V1.0 Date: Author: -Modification: +Modification: ���� */ /* -MTP˵ -1MTPֻܰд,ÿ1024ֽڴС -ıţ +MTP˵�� +1��MTP����ֻ�ܰ���д��,ÿ����1024�ֽڴ�С +��ı�ţ� SECTOR 0 : 0000H - 03FFH SECTOR 1 : 0400H - 07FFH SECTOR 2 : 0800H - 0BFFH @@ -34,8 +34,8 @@ SECTOR 7 : 1C00H - 1FFFH uint16_t write_current_data[4]={0,0,0,0}; STRUCT_MTP_TRIM MTP_FT_SET= { - .OSCA_FT = 0x10, //ĬֵΪ 0X10 - .OSC32K_RTRIM = 0x10, //ĬֵΪ 0X10 + .OSCA_FT = 0x10, //Ĭ��ֵΪ 0X10 + .OSC32K_RTRIM = 0x10, //Ĭ��ֵΪ 0X10 .BG_TRIM = 0x88, }; @@ -52,30 +52,29 @@ uint8_t MTP_init(void) -//MTPڱĵݶȡ +//MTP�ڱ���ĵ���������ݶ�ȡ void flash_read(uint32_t start_addr,uint16_t *test_i){ uint16_t result = 0; result = HW16_REG(start_addr); *test_i = result ; } -//MTPдݣûԶд룡 -//ԶдΪMTPĵ0x1BC0飨MTP_BASE_ADDR + 0x6F00 +//��MTP��д�����ݣ����������û��Զ����д�룡������ +//���Զ����д������ΪMTP�ĵ�0x1BC0�飨MTP_BASE_ADDR + 0x6F00�� int8_t flash_buff_write(uint32_t start_addr, uint16_t *buff) { HW32_REG(start_addr) = ((uint32_t)((*(buff+1)<<16)&0xffff0000) + ((*buff)&0x0000ffff)); // while(!(CMSDK_MTPREG->MTP_SR&0x00000002)){}; if(HW32_REG(start_addr) != ((uint32_t)(*(buff+1)<<16) + *buff )) { - printf("write error\n"); return -1; } return 0; } int8_t flash_write_ctrl(uint16_t *buff , uint32_t start_addr){ - CMSDK_MTPREG->MTP_CLR = 0xffffffff; //SRĴ - CMSDK_MTPREG->MTP_CR = 0x00000002; //2ȴ - CMSDK_MTPREG->MTP_ACLR = 0x00000000; //дsector0 -sector 6 sector7 Ϊbootloader + CMSDK_MTPREG->MTP_CLR = 0xffffffff; //SR�Ĵ��� + CMSDK_MTPREG->MTP_CR = 0x00000002; //2�ȴ����� + CMSDK_MTPREG->MTP_ACLR = 0x00000000; //����������д��sector0 -sector 6 ��sector7 ��Ϊbootloader���� CMSDK_MTPREG->MTP_KEYR = 0x5a5a5a5a; //key return flash_buff_write(start_addr, buff); } @@ -83,8 +82,8 @@ int8_t flash_write_ctrl(uint16_t *buff , uint32_t start_addr){ int8_t write_data(void){ uint16_t *wr_data = (uint16_t *)malloc(8*sizeof(uint8_t)); memcpy(wr_data , write_current_data, 8); - int8_t val = flash_write_ctrl(wr_data,DATA_SAVE_ADDR); // 0x1BC0 + int8_t val = flash_write_ctrl(wr_data,DATA_SAVE_ADDR); //�� 0x1BC0�� val = flash_write_ctrl(wr_data+2, DATA_SAVE_ADDR + 4); return val; -} +} diff --git a/FWLIB/source/ENS1_SPI.c b/FWLIB/source/ENS1_SPI.c index 3a5a167..ab73a2e 100644 --- a/FWLIB/source/ENS1_SPI.c +++ b/FWLIB/source/ENS1_SPI.c @@ -11,13 +11,13 @@ History: 1.V1.0 Date: Author: - Modification: + Modification: 2023-11-15 */ #include "ENS1_SPI.h" #include "ENS1_GPIO.h" -/*---------------------------------------------------fifoصĺͷ--------------------------------------------------*/ -/*FIFOͼ0*/ +/*---------------------------------------------------fifo????????--------------------------------------------------*/ +/* Clear FIFO and reset to 0 */ uint8_t CLR_TX_FIFO( CMSDK_SPI_TypeDef* SPIx) { return (uint8_t)(SPIx->FCR>>8 & 0x1); @@ -27,47 +27,47 @@ uint8_t CLR_RX_FIFO(CMSDK_SPI_TypeDef* SPIx) { return (uint8_t)(SPIx->FCR>>1 & 0x1); } -/*FIFO ״̬ȡ*/ +/*FIFO ?????*/ uint8_t RX_FIFO_LEN(CMSDK_SPI_TypeDef* SPIx) { - return (uint8_t)(((SPIx->FCR & 0x1) == 0x1) ? ((uint8_t)((SPIx->FSR & 0x001f0000)>>16)):0); //ȡǰFIFOݳ + return (uint8_t)(((SPIx->FCR & 0x1) == 0x1) ? ((uint8_t)((SPIx->FSR & 0x001f0000)>>16)):0); //??????????FIFO??????? } uint8_t TX_FIFO_LEN(CMSDK_SPI_TypeDef* SPIx) { - return (uint8_t)(((SPIx->FCR & 0x1) == 0x1) ? ((uint8_t)((SPIx->FSR & 0x00001f00)>>8)):0); //ȡǰFIFOݳ + return (uint8_t)(((SPIx->FCR & 0x1) == 0x1) ? ((uint8_t)((SPIx->FSR & 0x00001f00)>>8)):0); //??????????FIFO??????? } SPI_BUSY_STATE BUSY_STATE(CMSDK_SPI_TypeDef* SPIx) { - return (SPI_BUSY_STATE)((((SPIx->FSR & 0x10) >> 4)==1) ? ( BUSY ) : ( NOTBUSY )); //ȡǰSPIǷæ + return (SPI_BUSY_STATE)((((SPIx->FSR & 0x10) >> 4)==1) ? ( BUSY ) : ( NOTBUSY )); //??????SPI???? } uint8_t RX_FIFO_FULL(CMSDK_SPI_TypeDef* SPIx) { - return (uint8_t)((((SPIx->FSR & 0x8)>> 3 )==1) ? (1) : (0)) ; //ǰȡFIFOǷΪ + return (uint8_t)((((SPIx->FSR & 0x8)>> 3 )==1) ? (1) : (0)) ; //??????FIFO???????? } uint8_t RX_FIFO_EMPTY(CMSDK_SPI_TypeDef* SPIx) { - return (uint8_t)((((SPIx->FSR & 0x4) >> 2)==1) ? (1) : (0) ) ; //ǰȡFIFOǷΪգ + return (uint8_t)((((SPIx->FSR & 0x4) >> 2)==1) ? (1) : (0) ) ; //??????FIFO??????? } uint8_t TX_FIFO_FULL(CMSDK_SPI_TypeDef* SPIx) { - return (uint8_t)((((SPIx->FSR & 0x2) >> 1)==1) ? (1) : (0)) ; //ǰFIFOǷΪ + return (uint8_t)((((SPIx->FSR & 0x2) >> 1)==1) ? (1) : (0)) ; //???????FIFO???????? } uint8_t TX_FIFO_EMPTY(CMSDK_SPI_TypeDef* SPIx) { - return (uint8_t)(((SPIx->FSR & 0x1)==1) ? (1) : (0)) ; //ǰFIFOǷΪգ + return (uint8_t)(((SPIx->FSR & 0x1)==1) ? (1) : (0)) ; //???????FIFO??????? } -/*FIFOʹ/DMAʹ*/ -uint8_t SPI_FIFO_STATE(CMSDK_SPI_TypeDef* SPIx) //FIFO +/*FIFO???/DMA???*/ +uint8_t SPI_FIFO_STATE(CMSDK_SPI_TypeDef* SPIx) //??FIFO???? { return (uint8_t)(SPIx->FCR & 0x1) ; } @@ -97,16 +97,16 @@ uint8_t SPI_FIFODMA_SET(CMSDK_SPI_TypeDef* SPIx ,bool TXDMA_SET ,bool RXDMA_SET) return (uint8_t)((SPIx->CTRL2>>4)&0x3); } -/*------------------------------------------------------fifoصĺβ--------------------------------------------------*/ +/*------------------------------------------------------fifo???????��--------------------------------------------------*/ -/*----------------------------------------------------------SPI-------------------------------------------------------*/ -//ȡǰSPIģʽ +/*----------------------------------------------------------SPI????-------------------------------------------------------*/ +//????????SPI?? uint8_t READ_SPI_MODE(CMSDK_SPI_TypeDef* SPIx) { return ((SPIx->CTRL1 & 0x7000) >> 12); } -//NSSͨѡ +//NSS?????? uint8_t SPI_NSS_CHANNEL(CMSDK_SPI_TypeDef* SPIx ,NSS_CHANNEL_SEL NSSx ,FunctionalState ENorDIS) { if(ENorDIS == ENABLE) @@ -117,12 +117,12 @@ uint8_t SPI_NSS_CHANNEL(CMSDK_SPI_TypeDef* SPIx ,NSS_CHANNEL_SEL NSSx ,Functiona return (uint8_t)((SPIx->CTRL2 & 0x0f00) >> 8); } -//spiIJ +//spi????????? uint8_t SPI_Config_init(CMSDK_SPI_TypeDef* SPIx , struct SPI_ModeConfig_Struct SPI_Config, struct SPI_FIFO_Struct FIFO_Struct) { -/*1GPIO ALTER*/ +/*1??GPIO ALTER*/ if(SPIx == CMSDK_SPI1) { @@ -144,21 +144,21 @@ uint8_t SPI_Config_init(CMSDK_SPI_TypeDef* SPIx , } /* - 2дSPI_CTRL1Ĵ - 1ʱӲBAUD_RATE[2:0] - 2ʱӼԺλ CPOL and CPHA bits - 3ѡģʽ BIDI_EN, BIDI_MODE, UNIDI_MODE bits - 4LSB_SELλ֡ʽ - 5ͨNSS_TOGGLENSS_MST_CTRLNSS_MST_SW bitsѡNSSƷʽ bit11 9 8 - 6ͨMST_SLV_SELλѡģʽģʽ + 2??��SPI_CTRL1????? + ??1??????????????BAUD_RATE[2:0] + ??2???????????????�� CPOL and CPHA bits + ??3????????? BIDI_EN, BIDI_MODE, UNIDI_MODE bits + ??4??????LSB_SEL��?????????? + ??5?????????NSS_TOGGLE??NSS_MST_CTRL??NSS_MST_SW bits?????NSS?????? bit11 9 8 + ??6?????????MST_SLV_SEL��???????????? */ SPIx->CTRL1 = (SPIx->CTRL1&~ 0xffff) | ( SPI_Config.BAUD_FPCLKdivx << 4); SPIx->CTRL1 |= (SPI_Config.SPI_MODE << 2); SPIx->CTRL1 |= (SPI_Config.SPI_TRANS_MODE << 12 ); - SPIx->CTRL1 &=~ (0x1 << 7); //֡ʽĬϴģʽ - SPIx->CTRL1 &=~ (0x1 << 8); //֡ʽĬϴģʽ + SPIx->CTRL1 &=~ (0x1 << 7); //??????????? + SPIx->CTRL1 &=~ (0x1 << 8); //??????????? SPIx->CTRL1 &=~ (1 << 11); - SPIx->CTRL1 |= (1 << 11) ; // ĬӲNSS + SPIx->CTRL1 |= (1 << 11) ; // ??????????NSS if(SPI_Config.MS_SEL == MASTER) { @@ -169,12 +169,12 @@ uint8_t SPI_Config_init(CMSDK_SPI_TypeDef* SPIx , SPIx->CTRL1 &=~ (1<<1); } /* - 3дSPI_CTRL2Ĵ - 1CHAR_LEN[3:0]λѡݳ - 2ѡNSS˿ڡ NSS0_EN, NSS1_EN, NSS2_EN - 3ͨѡʵRXݲɼ׶ SAMP_PHASE(1:0)λ - 4ͨC2T_DELAYT2C_DELAYλԸݴ豸ѡʵC2T/T2Cӳ - 5ͨTXDMA_ENRXDMA_ENλʹܻʹFIFOģʽTX/RX DMA + 3??��SPI_CTRL2????? + ??1??????CHAR_LEN[3:0]��??????????????? + ??2?????NSS???? NSS0_EN, NSS1_EN, NSS2_EN + ??3????????????????????RX????????? SAMP_PHASE(1:0)�� + ??4?????????C2T_DELAY??T2C_DELAY��???????????��?????????????C2T/T2C??? + ??5?????????TXDMA_EN??RXDMA_EN��???????FIFO????TX/RX DMA?? */ SPIx->CTRL2 = (SPIx->CTRL2&~ 0xffff); if(SPI_Config.CHAR_LEN < 4) @@ -190,22 +190,22 @@ uint8_t SPI_Config_init(CMSDK_SPI_TypeDef* SPIx , } SPI_NSS_CHANNEL(SPIx ,SPI_Config.NSSx ,ENABLE); - //rxɼλ ģʽЧĬѡnormal - //C2T_DELAY ,ģʽЧ - //T2C_DELAY, ģʽЧ + //rx???????��?? ??????????????��??????normal + //C2T_DELAY ,????????????�� + //T2C_DELAY, ????????????�� if(SPI_Config.MS_SEL == MASTER) { SPIx->CTRL2 |= (SPI_Config.SAMP_PHASE << 6); - //T2C Transmit-end-to-chip-inactive ӳʱ䣬ĬΪ1T SCK - //C2T Chip-select-active-to-transmit-start ʱ Ĭ1T SCK ,û + //T2C ??Transmit-end-to-chip-inactive ????????????1T SCK + //C2T ??Chip-select-active-to-transmit-start ????? ???1T SCK ,???????????????????? } /* - 4дFIFO Ĵ - 1TX_FIFO_THRX_FIFO_TH崥ֵ - 2ͨTX_FIFO_CLRRX_FIFO_CLRλTX/RX FIFO - 3ͨfif_enλʹܻFIFOģʽ + 4??��FIFO ????? + ??1??????TX_FIFO_TH??RX_FIFO_TH?????��????????? + ??2?????????TX_FIFO_CLR??RX_FIFO_CLR��???TX/RX FIFO + ??3?????????fif_en��???????FIFO?? */ SPIx->FCR |= (FIFO_Struct.TX_FIFO_TH << 9 ); SPIx->FCR |= (FIFO_Struct.RX_FIFO_TH << 2 ); @@ -217,7 +217,7 @@ uint8_t SPI_Config_init(CMSDK_SPI_TypeDef* SPIx , return 0; } -/*---------------------------------------------SPIֹͣ-------------------------------------------------*/ +/*---------------------------------------------SPI????????-------------------------------------------------*/ uint8_t SPI_START(CMSDK_SPI_TypeDef* SPIx ) { SPIx->CTRL1 |= (1); @@ -230,7 +230,7 @@ uint8_t SPI_STOP(CMSDK_SPI_TypeDef* SPIx) { if(SPI_FIFO_STATE(SPIx) == 1) { - // RXFIFO ֱ FIFOΪ 0 + //?? RX??FIFO ??? FIFO????? 0 while((RX_FIFO_LEN(SPIx) != 0) || (BUSY_STATE(SPIx) == BUSY)) { //save_data = READ_SPI_RCVBuff(SPIx); @@ -249,7 +249,7 @@ uint8_t SPI_STOP(CMSDK_SPI_TypeDef* SPIx) { while((TX_FIFO_LEN(SPIx)!= 0) || (BUSY_STATE(SPIx) == BUSY)); SPIx->CTRL1 &=~ (1); - // RXFIFO ֱ FIFOΪ 0 + //?? RX??FIFO ??? FIFO????? 0 while(RX_FIFO_LEN(SPIx) != 0) { uint16_t save_data = READ_SPI_RCVBuff(SPIx); @@ -264,21 +264,21 @@ uint8_t SPI_STOP(CMSDK_SPI_TypeDef* SPIx) return (uint8_t)(SPIx->CTRL1*0x1); } -/*----------------------------------------- / д SPI BUFFER-------------------------------------------------*/ -//յ 16bits +/*-----------------------------------------?? / �� SPI BUFFER??????-------------------------------------------------*/ +//????????????? ???16bits uint16_t READ_SPI_RCVBuff(CMSDK_SPI_TypeDef* SPIx) { return (uint16_t)(SPIx->RBR & 0xffff); } -//д +//��???? void WRITE_SPI_THRBuff(CMSDK_SPI_TypeDef* SPIx,uint8_t data) { SPIx->THR = data; while(BUSY_STATE(SPIx) == BUSY); } -/*------------------------------------------------------SPIж------------------------------------------------------*/ +/*------------------------------------------------------SPI?��?------------------------------------------------------*/ uint8_t SPI_INT_SET(IRQn_Type IRQn, bool SPI_INT_ENABLE, uint8_t SPI_INT_BIT_SET) { NVIC_DisableIRQ(IRQn); @@ -303,22 +303,22 @@ uint8_t SPI_INT_SET(IRQn_Type IRQn, bool SPI_INT_ENABLE, uint8_t SPI_INT_BIT_SET return 0; } -//жϴ +//?��???????? /* -жͣ -1Ͳ жϣû -2ղ жϣ -3շжϣ -4ͻ ж -5ջǿ ж +?��???????????? +1??????????? ???? ?��????????????????? +2??????????? ??? ?��?????????? +3?????????��?? +4????????????? ?��? +5?????????????? ?��? */ void SPI1_Handler(void) { NVIC_ClearPendingIRQ(SPI1_IRQn); uint8_t read_fifo=0; - if((CMSDK_SPI1->INTSTATUS & 0x10 )== UNDERRUN_INT) //-ʱΪʱ + if((CMSDK_SPI1->INTSTATUS & 0x10 )== UNDERRUN_INT) //????-??????????????????????? { - CMSDK_SPI1->INTCLEAR |= (1<<4); //ж + CMSDK_SPI1->INTCLEAR |= (1<<4); //????��? } if((CMSDK_SPI1->INTSTATUS & 0x8) ==OVERRUN_INT) { @@ -338,7 +338,6 @@ void SPI1_Handler(void) while(!RX_FIFO_EMPTY(CMSDK_SPI1)) { read_fifo = READ_SPI_RCVBuff(CMSDK_SPI1); - printf("masterrcv:%d\n",read_fifo); } } @@ -349,9 +348,9 @@ void SPI0_Handler(void) { NVIC_ClearPendingIRQ(SPI0_IRQn); uint8_t read_fifo=0; - if((CMSDK_SPI0->INTSTATUS & 0x10 )== UNDERRUN_INT) //-ʱΪʱ + if((CMSDK_SPI0->INTSTATUS & 0x10 )== UNDERRUN_INT) //????-??????????????????????? { - CMSDK_SPI0->INTCLEAR |= (1<<4); //ж + CMSDK_SPI0->INTCLEAR |= (1<<4); //????��? } if((CMSDK_SPI0->INTSTATUS & 0x8) ==OVERRUN_INT) { @@ -371,7 +370,6 @@ void SPI0_Handler(void) while(!RX_FIFO_EMPTY(CMSDK_SPI0)) { read_fifo = READ_SPI_RCVBuff(CMSDK_SPI0); - printf("masterrcv:%d\n",read_fifo); } } } diff --git a/FWLIB/source/ENS1_TIMER.c b/FWLIB/source/ENS1_TIMER.c index b64fc07..d25d1d2 100644 --- a/FWLIB/source/ENS1_TIMER.c +++ b/FWLIB/source/ENS1_TIMER.c @@ -1,6 +1,7 @@ #include "ENS1_TIMER.h" #include "ENS_CURRENT_CALIBRATION.h" #include "ENS1_CLOCK.h" +#include void TIMER0_Init(uint32_t Int_Period) //定时器中断周期 单位ms { @@ -9,12 +10,9 @@ void TIMER0_Init(uint32_t Int_Period) //定时器中断周期 单位ms NVIC_ClearPendingIRQ(TIMER0_IRQn); uint32_t reload_value = (uint32_t)(APB_Clock_Freq / 1000 * Int_Period); - printf("TIMER0重装载值: %d\n", reload_value); CMSDK_timer_Init(CMSDK_TIMER0, reload_value, 1); // NVIC_EnableIRQ(TIMER0_IRQn); - - printf("TIMER0_Init完成,中断周期: %d ms\n", Int_Period); } void TIMER1_Init(uint32_t Int_Period) diff --git a/FWLIB/source/ENS1_UART.c b/FWLIB/source/ENS1_UART.c index 7a2e693..347fe07 100644 --- a/FWLIB/source/ENS1_UART.c +++ b/FWLIB/source/ENS1_UART.c @@ -35,13 +35,18 @@ ENS1 uart特性说明 #include "ENS1_GPIO.h" UART_FifoStructrue UART1_Fifo = { .level = bytes_8 , - .DMA_Enable = 0 , - .FIFO_Enable = 1 , + .DMA_Enable =0 , + .FIFO_Enable =1 , }; UART_InitStructure UART1_Init = { - .UART_BaudRate = 115200 , //计算出来的DLL DLH不为整数, 1、需要校准RC精确度,2、需要调整此处的波特率 - .UART_HardwareFlowControl = 0, + .UART_BaudRate = 110000 , //计算出来的DLL DLH不为整数, 1、需要校准RC精确度,2、需要调整此处的波特率 + .UART_HardwareFlowControl =0, .FifoSetting = &UART1_Fifo , + .stop_len = StopLen_1, //固定停止位1位 + .Word_len = WordLen_8, //数据位8位 + .Stick_EN = Stick_RESET, //禁用固定奇偶校验 + .Even_EN = Even_SET, //奇偶校验选择 + .Parity_EN = Parity_RESET, //禁用奇偶检验 }; UART_ITStructure UART1_ITSet = { .UartIntModel = RLSI_EN | RDAI_EN , @@ -185,19 +190,36 @@ void UART_Init(CMSDK_UART_TypeDef *CMSDK_UART, UART_InitStructure* uart_paraX){ { overSamp_mode = 13; } + //波特率校准,反推处DLL和DLH,(外设时钟主频/设置波特率/过采样模式)-1, divisor_value = (uint16_t)((uint32_t)(APB_Clock_Freq / uart_paraX->UART_BaudRate / overSamp_mode) - 1); - CMSDK_UART->DLL = (uint8_t)(divisor_value & 0x0011); - CMSDK_UART->DLH = (uint8_t)((divisor_value & 0x1100)>>8); + CMSDK_UART->DLL = (uint8_t)(divisor_value & 0x00FF); + CMSDK_UART->DLH = (uint8_t)((divisor_value & 0xFF00)>>8); /*FCR配置 FIFO control*/ - CMSDK_UART->FCR |= (uart_paraX->FifoSetting->level <<6); + CMSDK_UART->FCR |= (uart_paraX->FifoSetting->level <<6);//接收多少字节后触发中断 if(uart_paraX->FifoSetting->FIFO_Enable == 1) { CMSDK_UART->FCR |= (1); } + //配置停止位 + CMSDK_UART->LCR &= ~(0x01 << 2); + CMSDK_UART->LCR |= uart_paraX->stop_len<<2; - /*LCR配置,不做配置,默认N 8 1 */ + //配置数据位 + CMSDK_UART->LCR &= ~(0x03 << 0); + CMSDK_UART->LCR |= uart_paraX->Word_len<<0; + //配置是否启用校验位 + CMSDK_UART->LCR &= ~(0x01 << 3); + CMSDK_UART->LCR |= uart_paraX->Parity_EN<<3; + + //启用校验位 + if(uart_paraX->Parity_EN==Parity_SET) + { + CMSDK_UART->LCR &= ~(0x03 << 4); + CMSDK_UART->LCR |= uart_paraX->Even_EN<<4; + CMSDK_UART->LCR |= uart_paraX->Stick_EN<<5; + } /*MCR自动流控配置*/ if(uart_paraX->UART_HardwareFlowControl == 1) @@ -239,6 +261,18 @@ unsigned char UartPutc(CMSDK_UART_TypeDef *CMSDK_UART ,unsigned char my_ch) WRITE_UART_THRBuff(CMSDK_UART,my_ch); return (my_ch); } +//串口发送一定字节的数据 +void Uart_Send(CMSDK_UART_TypeDef *CMSDK_UART ,uint8_t *data, uint8_t len) +{ + uint8_t t; + for(t=0;tWAVE_GEN_DRV_REST_T_REG = 100; //死区时间10ms //交替模式下,死区时间失效,即使CONFIG_REG使能了死区时间也无效 - //CMSDK_WAVEGEN_DRVA->WAVE_GEN_DRV_SILENT_T_REG = 200; //静默时间20ms - CMSDK_WAVEGEN_DRVA->WAVE_GEN_DRV_CLK_FREQ_REG = 0x00000020; //32MHz ==PCLK - - CMSDK_WAVEGEN_DRVA->WAVE_GEN_DRV_CLK_FREQ_REG = 32; //32MHz ==PCLK //MHz为单位 - CMSDK_WAVEGEN_DRVA->WAVE_GEN_DRV_HLF_WAVE_PRD_REG = 100; //正半周期脉宽10ms,有交替方波 - CMSDK_WAVEGEN_DRVA->WAVE_GEN_DRV_NEG_HLF_WAVE_PRD_REG = 100; //负半周期脉宽10ms,无交替方波 - - #if 1//无需静默时间 - CMSDK_WAVEGEN_DRVA->WAVE_GEN_DRV_CONFIG_REG = 0x00000050; //bit 0:rest enable , 正半周期和负半周期中间的休息时间 - //1:negative enable , 负半周期发生使能,如果不使能,则没有负半周期的波形(注意交替模式只会对正半周期起作用) - //2: silent enable , 负半周期结束后的静默时间 - //3: source B enable ,负脉宽方向使能位,1负脉宽在负半周期,0负脉宽在正半周期 - - //4: alternating the positive side ,正极交替产生包络 - //5: continue mode ,连续模式 - //6: multi-electrode ,多电极模式 - #else //需要静默时间 - /*交替模式下config寄存器说明: - 正脉宽交替,无负脉宽,无死区时间,无静默时间:0x50 或 0x51 或 0x58 或 0x59 - 正脉宽交替,无死区时间,无负脉宽,有静默时间:0x54 或 0x55 或 0x5C 或 0x5D - 正脉宽交替,无死区时间,负脉宽不交替但有波形,无静默时间 :0x5A 或 0x5B - 正脉宽交替,无死区时间,负脉宽不交替但有波形且波形在正脉宽上(因为源B失能了),无静默时间 :0x52 或 0x53 - 正脉宽交替,无死区时间,负脉宽不交替但有波形且波形在正脉宽上(因为源B失能了),有静默时间 :0x56 或 0x57 - 正脉宽交替,无死区时间,负脉宽不交替但有波形,有静默时间 : 0x5E 或 0x5F - */ - // CMSDK_WAVEGEN_DRVA->WAVE_GEN_DRV_CONFIG_REG = 0x5F; //bit 0:rest enable , 正半周期和负半周期中间的死区时间 - //1:negative enable , 负半周期发生使能,如果不使能,则没有负半周期的波形 - //2: silent enable , 负半周期结束后的静默时间 - //3: source B enable - //4: alternating the positive side ,正极交替产生包络 - //5: continue mode ,连续模式 - CMSDK_WAVEGEN_DRVA->WAVE_GEN_DRV_CONFIG_REG = 0x34; //静默时间、交替模式和多电极使能 //6: multi-electrode ,多电极模式 + printf("\n驱动器A正弦波测试\n"); - #endif - - CMSDK_WAVEGEN_DRVA ->WAVE_GEN_DRV_ISEL_REG = 0x04; // 总电流 = 单元电流ISEL * WAVE_GEN_DRV_IN_WAVE_REG + CMSDK_WAVEGEN_DRVA->WAVE_GEN_DRV_REST_T_REG = 100; // 死区时间10ms //交替模式下,死区时间失效,即使CONFIG_REG使能了死区时间也无效 + // CMSDK_WAVEGEN_DRVA->WAVE_GEN_DRV_SILENT_T_REG = 200; //静默时间20ms + CMSDK_WAVEGEN_DRVA->WAVE_GEN_DRV_CLK_FREQ_REG = 0x00000020; // 32MHz ==PCLK - for(int i=0; i<64; i++){ - CMSDK_WAVEGEN_DRVA->WAVE_GEN_DRV_IN_WAVE_ADDR_REG = i; - //CMSDK_WAVEGEN_DRVA->WAVE_GEN_DRV_IN_WAVE_REG = sine_data[i]; //正弦波数据数组,根据数组中的点描绘正半周期的波形 - // CMSDK_WAVEGEN_DRVA->WAVE_GEN_DRV_IN_WAVE_REG = saw_data[i]; //三角波数据 - CMSDK_WAVEGEN_DRVA->WAVE_GEN_DRV_IN_WAVE_REG = incount; //方波数据(固定值0x80) + CMSDK_WAVEGEN_DRVA->WAVE_GEN_DRV_CLK_FREQ_REG = 32; // 32MHz ==PCLK //MHz为单位 + CMSDK_WAVEGEN_DRVA->WAVE_GEN_DRV_HLF_WAVE_PRD_REG = 100; // 正半周期脉宽10ms,有交替方波 + CMSDK_WAVEGEN_DRVA->WAVE_GEN_DRV_NEG_HLF_WAVE_PRD_REG = 100; // 负半周期脉宽10ms,无交替方波 + +#if 1 // 无需静默时间 + CMSDK_WAVEGEN_DRVA->WAVE_GEN_DRV_CONFIG_REG = 0x00000050; // bit 0:rest enable , 正半周期和负半周期中间的休息时间 + // 1:negative enable , 负半周期发生使能,如果不使能,则没有负半周期的波形(注意交替模式只会对正半周期起作用) + // 2: silent enable , 负半周期结束后的静默时间 + // 3: source B enable ,负脉宽方向使能位,1负脉宽在负半周期,0负脉宽在正半周期 + + // 4: alternating the positive side ,正极交替产生包络 + // 5: continue mode ,连续模式 + // 6: multi-electrode ,多电极模式 +#else // 需要静默时间 + /*交替模式下config寄存器说明: + 正脉宽交替,无负脉宽,无死区时间,无静默时间:0x50 或 0x51 或 0x58 或 0x59 + 正脉宽交替,无死区时间,无负脉宽,有静默时间:0x54 或 0x55 或 0x5C 或 0x5D + 正脉宽交替,无死区时间,负脉宽不交替但有波形,无静默时间 :0x5A 或 0x5B + 正脉宽交替,无死区时间,负脉宽不交替但有波形且波形在正脉宽上(因为源B失能了),无静默时间 :0x52 或 0x53 + 正脉宽交替,无死区时间,负脉宽不交替但有波形且波形在正脉宽上(因为源B失能了),有静默时间 :0x56 或 0x57 + 正脉宽交替,无死区时间,负脉宽不交替但有波形,有静默时间 : 0x5E 或 0x5F + */ + // CMSDK_WAVEGEN_DRVA->WAVE_GEN_DRV_CONFIG_REG = 0x5F; //bit 0:rest enable , 正半周期和负半周期中间的死区时间 + // 1:negative enable , 负半周期发生使能,如果不使能,则没有负半周期的波形 + // 2: silent enable , 负半周期结束后的静默时间 + // 3: source B enable + // 4: alternating the positive side ,正极交替产生包络 + // 5: continue mode ,连续模式 + CMSDK_WAVEGEN_DRVA->WAVE_GEN_DRV_CONFIG_REG = 0x34; // 静默时间、交替模式和多电极使能 //6: multi-electrode ,多电极模式 + +#endif + + CMSDK_WAVEGEN_DRVA->WAVE_GEN_DRV_ISEL_REG = 0x04; // 总电流 = 单元电流ISEL * WAVE_GEN_DRV_IN_WAVE_REG + + for (int i = 0; i < 64; i++) + { + CMSDK_WAVEGEN_DRVA->WAVE_GEN_DRV_IN_WAVE_ADDR_REG = i; + // CMSDK_WAVEGEN_DRVA->WAVE_GEN_DRV_IN_WAVE_REG = sine_data[i]; //正弦波数据数组,根据数组中的点描绘正半周期的波形 + // CMSDK_WAVEGEN_DRVA->WAVE_GEN_DRV_IN_WAVE_REG = saw_data[i]; //三角波数据 + CMSDK_WAVEGEN_DRVA->WAVE_GEN_DRV_IN_WAVE_REG = incount; // 方波数据(固定值0x80) } - - CMSDK_WAVEGEN_DRVA->WAVE_GEN_DRV_ALT_LIM_REG = 3200;// 3200 需要设置一个正半周期下需要再生成多少个周期波形。设置10kHz=0.1ms=100us,100us=A*(1/32us),所以A=3200。 - CMSDK_WAVEGEN_DRVA->WAVE_GEN_DRV_ALT_SILENT_LIM_REG = 0; // 交替后静默的时钟数(无死区时间设置)。在这种情况下,驱动器B连续交替。//包络下波形的静默时间 - CMSDK_WAVEGEN_DRVA->WAVE_GEN_DRV_DELAY_LIM_REG = 0x00000000; // 延迟时钟数 - - CMSDK_WAVEGEN_DRVA->WAVE_GEN_DRV_NEG_SCALE_REG = 0x00000001; //负半周期幅值倍乘系数,如超过255,则从0开始增长 - CMSDK_WAVEGEN_DRVA->WAVE_GEN_DRV_NEG_OFFSET_REG = 0x00000000; //负半周期幅值偏移量,如超过255,则从0开始增长, - //如正半周期幅值为250,此处设置为10,则负半周期幅值为5 !!! - - CMSDK_WAVEGEN_DRVA->WAVE_GEN_DRV_INT_REG = 0x0;// 中断寄存器设置为0 - CMSDK_WAVEGEN_DRVA->WAVE_GEN_DRV_CTRL_REG = 0x00000001; //使能驱动器 + + CMSDK_WAVEGEN_DRVA->WAVE_GEN_DRV_ALT_LIM_REG = 3200; // 3200 需要设置一个正半周期下需要再生成多少个周期波形。设置10kHz=0.1ms=100us,100us=A*(1/32us),所以A=3200。 + CMSDK_WAVEGEN_DRVA->WAVE_GEN_DRV_ALT_SILENT_LIM_REG = 0; // 交替后静默的时钟数(无死区时间设置)。在这种情况下,驱动器B连续交替。//包络下波形的静默时间 + CMSDK_WAVEGEN_DRVA->WAVE_GEN_DRV_DELAY_LIM_REG = 0x00000000; // 延迟时钟数 + + CMSDK_WAVEGEN_DRVA->WAVE_GEN_DRV_NEG_SCALE_REG = 0x00000001; // 负半周期幅值倍乘系数,如超过255,则从0开始增长 + CMSDK_WAVEGEN_DRVA->WAVE_GEN_DRV_NEG_OFFSET_REG = 0x00000000; // 负半周期幅值偏移量,如超过255,则从0开始增长, + // 如正半周期幅值为250,此处设置为10,则负半周期幅值为5 !!! + + CMSDK_WAVEGEN_DRVA->WAVE_GEN_DRV_INT_REG = 0x0; // 中断寄存器设置为0 + CMSDK_WAVEGEN_DRVA->WAVE_GEN_DRV_CTRL_REG = 0x00000001; // 使能驱动器 /* 生成返回值 */ - if (err_code != 0) { - puts("\n错误 : 驱动器A测试失败\n"); - return_val = 1; - err_code = 0; + if (err_code != 0) + { + printf("\n错误 : 驱动器A测试失败\n"); + return_val = 1; + err_code = 0; } - return(return_val); + return (return_val); } void wavegen_Stop(CMSDK_WAVE_GEN_TypeDef *CMSDK_WAVEGEN_DRVA) { - CMSDK_WAVEGEN_DRVA ->WAVE_GEN_DRV_ISEL_REG = 0; //范围 0x00 - 0x07 - - for(int i=0; i<64; i++){ - CMSDK_WAVEGEN_DRVA->WAVE_GEN_DRV_IN_WAVE_ADDR_REG = i; - CMSDK_WAVEGEN_DRVA->WAVE_GEN_DRV_IN_WAVE_REG = 0; //最大值0xff + CMSDK_WAVEGEN_DRVA->WAVE_GEN_DRV_ISEL_REG = 0; // 范围 0x00 - 0x07 + + for (int i = 0; i < 64; i++) + { + CMSDK_WAVEGEN_DRVA->WAVE_GEN_DRV_IN_WAVE_ADDR_REG = i; + CMSDK_WAVEGEN_DRVA->WAVE_GEN_DRV_IN_WAVE_REG = 0; // 最大值0xff } } @@ -118,18 +127,20 @@ void wavegen_Init(void) { // 设置MTP等待周期 CMSDK_MTPREG->MTP_CR = 0x00000002; - + // 注意:时钟配置已在ClockInit()中完成,这里不再重复配置 // 使用HSI作为主频 32MHz // CMSDK_SYSCON->HSI_CTRL = (CMSDK_SYSCON->HSI_CTRL & ~CMSDK_SYSCON_HSI_FREQ_Msk) | (0x3 << CMSDK_SYSCON_HSI_FREQ_Pos); //HSI=32MHz - + // 使能UART和WAVE_GEN外设时钟(不覆盖TIMER0时钟) - CMSDK_SYSCON->APB_CLKEN |= 0x1003|0x4000; // 使用|=而不是=,避免覆盖其他时钟使能 - + CMSDK_SYSCON->APB_CLKEN |= 0x1003 | 0x4000; // 使用|=而不是=,避免覆盖其他时钟使能 + // 升压电压选择 - boost_voltage_select_26V(); - - puts("ENS1 - WAVE_GENERATOR_DRIVER_A_Test - $Revision: R001\n"); + //boost_voltage_select_11V(); + //boost_voltage_select_15V(); + //boost_voltage_select_26V(); + //boost_voltage_select_45V(); + boost_voltage_select_55V(); } // 启动波形生成器 @@ -137,12 +148,26 @@ void wavegen_Start(void) { g_ems_running = 1; g_ems_count = 0; + + // 初始化缓进缓出控制 + if (g_ems_config.enable_ramp) + { + g_current_intensity = 0; // 从0开始 + g_ramp_phase = 0; // 缓进阶段 + g_wave_counter = 0; // 重置方波计数器 + g_ramp_step_counter = 0; // 重置步进计数器 + } + else + { + g_current_intensity = g_ems_config.intensity; // 直接使用设定强度 + } } // 电刺激参数配置 void EMS_Configure(EMS_Config_TypeDef *config) { - if(config != NULL) { + if (config != NULL) + { g_ems_config = *config; } } @@ -151,16 +176,18 @@ void EMS_Configure(EMS_Config_TypeDef *config) void EMS_Start(void) { wavegen_Start(); - printf("电刺激已启动\n"); } // 停止电刺激 void EMS_Stop(void) { g_ems_running = 0; - g_ems_count = 0; // 重置计数器 + g_ems_count = 0; // 重置计数器 + g_current_intensity = 0; // 重置强度 + g_ramp_phase = 0; // 重置渐进阶段 + g_wave_counter = 0; // 重置方波计数器 + g_ramp_step_counter = 0; // 重置步进计数器 wavegen_Stop(WAVE_GEN_DRVA_BLK0); - printf("电刺激已停止\n"); } // 更新电刺激强度 @@ -169,23 +196,125 @@ void EMS_UpdateIntensity(uint16_t intensity) g_ems_config.intensity = intensity; } +// 缓进缓出处理函数(在电刺激处理中调用) +void EMS_Process_Ramp(void) +{ + if (!g_ems_config.enable_ramp || !g_ems_running) + { + return; // 如果未启用缓进缓出或未运行,直接返回 + } + + // 计算每个强度步进需要的方波周期数 + // 2秒 = 2000000微秒,每个方波周期100微秒,所以2秒内有20000个方波周期 + // 需要从0增加到128,所以每156.25个方波周期增加1个强度单位 + uint32_t waves_per_step = 0; + uint32_t total_waves_ramp_up = g_ems_config.ramp_up_time * 5; // 缓进阶段总方波周期数 + uint32_t total_waves_ramp_down = g_ems_config.ramp_down_time * 1; // 缓出阶段总方波周期数 + uint32_t total_waves_hold = g_ems_config.hold_time * 5; // 保持阶段总方波周期数 + + if (g_ems_config.intensity > 0) + { + waves_per_step = total_waves_ramp_up / g_ems_config.intensity; // 每个强度步进需要的方波周期数 + } + + g_wave_counter++; // 每次调用增加一个方波周期计数 + + switch (g_ramp_phase) + { + case 0: // 缓进阶段 + if (g_ramp_step_counter < total_waves_ramp_up) + { + // 检查是否需要增加强度 + if (g_wave_counter >= waves_per_step) + { + g_wave_counter = 0; // 重置方波计数器 + if (g_current_intensity < g_ems_config.intensity) + { + g_current_intensity++; + } + } + g_ramp_step_counter++; + } + else + { + // 缓进完成,进入保持阶段 + g_ramp_phase = 1; + g_ramp_step_counter = 0; + g_current_intensity = g_ems_config.intensity; // 确保达到最大强度 + } + break; + + case 1: // 保持阶段 + if (g_ramp_step_counter < total_waves_hold) + { + // 保持最大强度 + g_current_intensity = g_ems_config.intensity; + g_ramp_step_counter++; + } + else + { + // 保持完成,进入缓出阶段 + g_ramp_phase = 2; + g_ramp_step_counter = 0; + g_wave_counter = 0; // 重置方波计数器 + } + break; + + case 2: // 缓出阶段 + if (g_ramp_step_counter < total_waves_ramp_down) + { + // 检查是否需要减少强度 + if (g_wave_counter >= waves_per_step) + { + g_wave_counter = 0; // 重置方波计数器 + if (g_current_intensity > 0) + { + g_current_intensity--; + } + } + g_ramp_step_counter++; + } + else + { + // 缓出完成,停止电刺激 + g_current_intensity = 0; + + // 这里不直接停止,让主循环控制停止 + } + break; + } +} + // 电刺激主循环处理函数(在主循环中调用) void EMS_Process(void) { - if(g_ems_running) { + if (g_ems_running) + { g_ems_count++; - + + // 处理缓进缓出控制 + EMS_Process_Ramp(); + + // 使用当前缓进缓出的强度 + uint16_t current_intensity = g_current_intensity; + // 根据配置生成不同强度的方波 - if(g_ems_count < 1280) { - wavegen_driverA_sine_test(WAVE_GEN_DRVA_BLK0, g_ems_config.intensity); - } else if(g_ems_count < 1280*256) { + if (g_ems_count < 1280) + { + wavegen_driverA_sine_test(WAVE_GEN_DRVA_BLK0, current_intensity); + } + else if (g_ems_count < 1280 * 256) + { // 休息时间 - } else if(g_ems_count < 1280*2) { - wavegen_driverA_sine_test(WAVE_GEN_DRVA_BLK0, g_ems_config.intensity); - } else { + } + else if (g_ems_count < 1280 * 2) + { + wavegen_driverA_sine_test(WAVE_GEN_DRVA_BLK0, current_intensity); + } + else + { // 重置计数器,开始新的周期 g_ems_count = 0; } } } - diff --git a/FWLIB/source/ENS_ADC.c b/FWLIB/source/ENS_ADC.c index d222ba1..973b9ca 100644 --- a/FWLIB/source/ENS_ADC.c +++ b/FWLIB/source/ENS_ADC.c @@ -11,86 +11,86 @@ History: 1.V1.0 Date: Author: -Modification: +Modification: ���� */ #include "ENS1_ADC.h" #include "ENS1_GPIO.h" #include "ENS1_CLOCK.h" #include "ENS1_ANAC.h" -/* һĴ˵ -ADCãתģʽ ݸģʽ ȴģʽ -ADCƣ ADCʹ ADC -ADCжʹܣ EOCжʹ ݸжʹ -ADCж״̬ EOCжϷ ݸжϷ -ADC״̬ EOC־ ADCлæ״̬ -ADCʱӷƵ Ƶֵ 2 4 6 8 10 12 16 32 -ADCʱ ADCʱʱ 2 3 4 5 -ADCݣ -ADCͨѡ -ADCEOC ģʽ ǷڽյEOC־´ת +/* һ���Ĵ���˵���� +ADC���ã�ת��ģʽ ���ݸ���ģʽ �ȴ�ģʽ +ADC���ƣ� ADCʹ�� �� ADC���� +ADC�ж�ʹ�ܣ� EOC�ж�ʹ�� ���ݸ����ж�ʹ�� +ADC�ж�״̬�� EOC�жϷ��� ���ݸ����жϷ��� +ADC״̬ �� EOC��־ ADC���л�æ״̬ +ADCʱ�ӷ�Ƶ ����Ƶֵ 2 4 6 8 10 12 16 32 +ADC����ʱ�� ��ADC����ʱ��ʱ���� 2 3 4 5 +ADC���ݣ� +ADCͨ��ѡ�� �� +ADCEOC���� ��������ģʽ�� �� �Ƿ��ڽ��յ�EOC��־�����´�ת�� */ -/* תģʽ - *ADC ADC_START λ0 յEOCEOC_WAIT_COUNT_DONE һȵ - *ֱEOC_WAIT_COUNT_DONE ûнյEOC ݽᱻ - *ADCֹͣתͨûADC_CTRL_REG ADC_EN λ Ϊ1 - *ڲתڼ䣬ADC_EN λΪ0 ڽеתȻ EOC/EOC_WAIT_COUNT_DONE ֹͣת - *ݻEOC +/* ��������ת��ģʽ + *ADC�������� ��ADC_START λ��0 �����յ�EOC����EOC_WAIT_COUNT_DONE �� ������һ���ȵ��� + *���ֱ��EOC_WAIT_COUNT_DONE ��û�н��յ�EOC �����ݽ����ᱻ���� + *ADC��ֹͣת����ͨ���û�����ADC_CTRL_REG �� ADC_EN λ Ϊ1 + *����ڲ�����ת���ڼ䣬ADC_EN λ��Ϊ0 ����������������ڽ��е�ת����Ȼ����� EOC/EOC_WAIT_COUNT_DONE ֹͣת�� + *���ݻ���EOC ��������� -ADCת̣ -1õת޵ȴģʽ -2ADC_CONFIG_reg bit0 = 0 bit2 = 0 -3ת -4ת ݱADC_Data register -5һADC_EOC_IEжɣ -6ʹ IERĴ EOC_INT_EN OVER_RUN_INT_EN λϵͳж -7ӲֹͣADC +ADC����ת�����̣� +1�����õ���ת�����޵ȴ�ģʽ�� +2������ADC_CONFIG_reg bit0 = 0 bit2 = 0 +3������ת������ +4��ת�������� ���ݱ�����ADC_Data register +5��һ��ADC_EOC_IE�ж����ɣ� +6�����ʹ���� IER�Ĵ����� EOC_INT_EN ��OVER_RUN_INT_EN λ����ϵͳ�����ж� +7��Ӳ��ֹͣADC */ -/*תģʽ -1ADC_CONFIG_reg bit0 = 1 -2λ1 ADC_EN bit and ADC_START bits -3ÿת֮󣬻adc_eoc_config_regsiter[0] ´ת - Adc_eoc_config_register[0] =1 յEOCʼ´ת - ݱ浽Ĵ -4ADC_EOC_IE ж -5ʹ IERĴ EOC_INT_EN OVER_RUN_INT_EN λϵͳж +/*��������ת��ģʽ +1������ADC_CONFIG_reg bit0 = 1 +2������λ��1 ADC_EN bit and ADC_START bits +3����ÿ��ת�����֮�󣬻���adc_eoc_config_regsiter[0] �����´�ת���� + ���Adc_eoc_config_register[0] =1 �� ����յ�EOC��ʼ�´�ת�� + ���ݱ��浽�Ĵ����� +4��ADC_EOC_IE �ж����� +5�����ʹ���� IER�Ĵ����� EOC_INT_EN ��OVER_RUN_INT_EN λ����ϵͳ�����ж� -ע⣺ADC_eoc_config_regĴ-ǵȴģʽЧ 0ģʽEOCʼһת - 1ģʽյEOCʼһת --ȴģʽ£ADC_eoc_config_regӦñΪ0 +ע�⣺ADC_eoc_config_reg�Ĵ�����������������-�ǵȴ�ģʽ����Ч ����0������ģʽ������EOC����ʼ������һ��ת�� + 1������ģʽ���յ�EOC��ʼ������һ��ת�� +����������-�ȴ�ģʽ�£�ADC_eoc_config_regӦ�ñ�����Ϊ0 ������ */ -/*ġȴģʽ -1ADC_CONFIG_reg bit2 = 1 ʹܵȴģʽ -2ת -3תɺ - ADCݵӦĴ - ADC_EOC_IE ж - ʹ IERĴ EOC_INT_EN OVER_RUN_INT_EN λϵͳж -4ADC뵽ADC_WAIT ȴ״ֱ̬EOCжϱ ADCݱϵͳ -5һEOCжϱADCʼһεת +/*�ġ��ȴ�ģʽ +1������ADC_CONFIG_reg bit2 = 1 ��ʹ�ܵȴ�ģʽ�� +2����������ת�� +3����ת����ɺ� + ��ADC���ݵ���Ӧ�Ĵ����� + ADC_EOC_IE �ж����� + ���ʹ���� IER�Ĵ����� EOC_INT_EN ��OVER_RUN_INT_EN λ����ϵͳ�����ж� +4��ADC���������뵽ADC_WAIT �ȴ�״ֱ̬��EOC�жϱ���� ���� ADC���ݱ�ϵͳ���� +5��һ��EOC�жϱ������ADC��ʼ��һ�ε�ת�� */ -/*塢 -1ADCյEOCݽ -2 OVERRUNģʽʹܣµתݽᱻ overrun ״̬ +/*�塢���������� +1����ADC���������յ�EOC�����ݽ������� +2����� OVERRUNģʽ��ʹ�ܣ��µ�ת�����ݽ��ᱻ���� ���� overrun ����״̬��� -ע⣺ overrun ģʽûбʹܣ µĻ߾ɵתݽoverrun ״̬ѡ - overrun ݽᱻ - ûoverrun ݽ +ע�⣺ ���overrun ģʽû�б�ʹ�ܣ� �µĻ��߾ɵ�ת�����ݽ�����overrun ����״̬ѡ�������� + ���� ���overrun �����������ݽ����ᱻ���� + ���û��overrun �������������ݽ������� */ -/*ж˵ -1յEOC EOC_IR -2OVERRUNOVERRUN_IR -3EOC_IR overrun ΪADCжϱ ͨϵͳ - ϵͳͨ data_reg ȡadcݺ EOC_IR EOC_IR_CLEAR +/*�����ж�˵�� +1�����յ�EOC�� EOC_IR ���� +2��OVERRUN��������OVERRUN_IR ���� +3��EOC_IR ��overrun ��ΪADC�жϱ� ͨ����ϵͳ + ��ϵͳͨ�� data_reg ��ȡ��adc���ݺ� EOC_IR �� EOC_IR_CLEAR ��� */ -/*overrun - ˴ָǣ ADCϵͳȡADCǰһEOC_IRǰյµEOC +/*overrun ���� + �˴���ָ���ǣ� ADC��������ϵͳ��ȡ��ADC����ǰ�����������һ��EOC_IRǰ�������յ��µ�EOC */ @@ -148,13 +148,13 @@ uint8_t ENS1_ADC_CONFIG(ENS_ADC_SEL channelx , CMSDK_ADC->ADC_SAMP_TIME = (CMSDK_ADC->ADC_SAMP_TIME &~ 0x3) | SIMLING_TIME; - //ADC_eoc_config_regĴ-ǵȴģʽЧ + //����ADC_eoc_config_reg�Ĵ���������������������-�ǵȴ�ģʽ����Ч�� if( ((MODE_SEL & 0X1 )== 1 ) && (MODE_SEL & 0X4) == 0) { CMSDK_ADC->ADC_EOC_CONFG = (CMSDK_ADC->ADC_EOC_CONFG &~ (0x1)) | EOC_CONFIG; } - //жʹ + //�ж�ʹ�� CMSDK_ADC->ADC_IER = (CMSDK_ADC->ADC_IER &~ (0x3)) | ( INT_MODE_SEL ); return CMSDK_ADC->ADC_CONFG; } @@ -176,11 +176,11 @@ uint8_t ENS1_ADC_STOP(ENS_ADC_SEL channelx) return 0; } -//ȡ -//ADCڲͬģʽвͬIJɼʽAdc_config_registeròͬ8ģʽ +//������ȡ���� +//ADC�ڲ�ͬģʽ���в�ͬ�IJɼ���ʽ������Adc_config_register�����ò�ͬ����8��ģʽ uint16_t save_data; uint8_t ADC_CONFIG_READ; -//˺δɣʹɼ+жģʽ˺ʱò +//�˺���δ��ɣ�����ʹ�������ɼ�+�ж�ģʽ���˺�����ʱ�ò��� uint16_t ADC_READ_DATA(void) { @@ -188,8 +188,8 @@ uint16_t ADC_READ_DATA(void) ADC_CONFIG_READ = CMSDK_ADC->ADC_CONFG; switch(ADC_CONFIG_READ & 0x7) { case single_mode_without_overrun_without_wait : - while(ADC_READ_STATUS == ADC_READ_DATA_IS_WAITING); //ȴжEOCĵ - ADC_READ_STATUS = ADC_READ_DATA_IS_WAITING; //жϷѾADCˣʱٽ״̬лȴһ + while(ADC_READ_STATUS == ADC_READ_DATA_IS_WAITING); //�ȴ����ж���EOC�ĵ��� + ADC_READ_STATUS = ADC_READ_DATA_IS_WAITING; //�жϷ������Ѿ���ADC�������ˣ���ʱ�ٽ�״̬�л����ȴ���һ������ break; @@ -230,12 +230,11 @@ uint16_t ADC_READ_DATA(void) //ADC interrupt handler void ADC_Handler(void) __irq { - if((CMSDK_ADC->ADC_ISR & 0x01) == 0x01) //յEOC + if((CMSDK_ADC->ADC_ISR & 0x01) == 0x01) //���յ�EOC { CMSDK_ADC->ADC_INT_CLR = (0x01<<0); ADC_READ_STATUS = ADC_READ_DATA_IS_READY; - save_data = (CMSDK_ADC->ADC_DATA & 0x0fff); //ݺ󣬿Խһβɼ - printf("%d\n",save_data); + save_data = (CMSDK_ADC->ADC_DATA & 0x0fff); //�������ݺ󣬿��Խ�����һ�βɼ� ADC_UART_BYTE_LOW = save_data&0xff; ADC_UART_BYTE_HIGH = (save_data&0x0f00)>>8; } diff --git a/FWLIB/source/ENS_CURRENT_CALIBRATION.c b/FWLIB/source/ENS_CURRENT_CALIBRATION.c index 55829d4..261f443 100644 --- a/FWLIB/source/ENS_CURRENT_CALIBRATION.c +++ b/FWLIB/source/ENS_CURRENT_CALIBRATION.c @@ -11,106 +11,106 @@ History: 1.V1.0 Date: Author: - Modification: + Modification: ���� */ #include "ENS_CURRENT_CALIBRATION.h" #include "ENS1_MTP.h" #include "ENS1_UART.h" #include "ENS1_TIMER.h" -/*--------------------------------βijʼֵṹ-----------------------------*/ +/*--------------------------------���β����ij�ʼ����ֵ�ṹ��-----------------------------*/ STRUCT_WAVEFORM_PARA ParaSet_waveform[4] = { - /*ͨ1 -- ST0 ST1 */ + /*ͨ��1 -- ST0 ST1 */ { - .Type = SQUARE_WAVE , //ѡ - .PositivePulseWidth = 100 , //-΢ - .DeadTime = 10, //ʱ-΢ - .NegativePulseWidth = 100 , //-΢ - .ClientTime = 1000 , //Ĭʱ-΢ - .DelayOutputTime_US = 0, //ӳʱ-΢ - .OtherWaveformPara.AlternatingFreq_HZ = 0, //沨Ƶ // - .OtherWaveformPara.TotalOutputTime_S = 0, //ʱ - .OtherWaveformPara.NumOfPulseGroups = 0, //Ⱥģʽµÿ - .OtherWaveformPara.TimeOfPulseGroups_MS = 0, //Ⱥģʽµʱ + .Type = SQUARE_WAVE , //��������ѡ�� + .PositivePulseWidth = 100 , //������������-΢�� + .DeadTime = 10, //����ʱ��-΢�� + .NegativePulseWidth = 100 , //������������-΢�� + .ClientTime = 1000 , //��Ĭʱ��-΢�� + .DelayOutputTime_US = 0, //�ӳ����ʱ��-΢�� + .OtherWaveformPara.AlternatingFreq_HZ = 0, //���沨��Ƶ�� // + .OtherWaveformPara.TotalOutputTime_S = 0, //���������ʱ�� �� + .OtherWaveformPara.NumOfPulseGroups = 0, //����Ⱥģʽ�µ�ÿ���������� + .OtherWaveformPara.TimeOfPulseGroups_MS = 0, //����Ⱥģʽ�µ�����ʱ�� ���� }, - /*ͨ2 -- ST2 ST3 */ + /*ͨ��2 -- ST2 ST3 */ { - .Type = TRIANGULAR_WAVE , //ѡ - .PositivePulseWidth = 0 , //-΢ - .DeadTime = 0, //ʱ-΢ - .NegativePulseWidth = 0 , //-΢ - .ClientTime = 0 , //Ĭʱ-΢ - .DelayOutputTime_US = 0, //ӳʱ-΢ - .OtherWaveformPara.AlternatingFreq_HZ = 0, //沨Ƶ // - .OtherWaveformPara.TotalOutputTime_S = 0, //ʱ - .OtherWaveformPara.NumOfPulseGroups = 0, //Ⱥģʽµÿ - .OtherWaveformPara.TimeOfPulseGroups_MS = 0, //Ⱥģʽµʱ + .Type = TRIANGULAR_WAVE , //��������ѡ�� + .PositivePulseWidth = 0 , //������������-΢�� + .DeadTime = 0, //����ʱ��-΢�� + .NegativePulseWidth = 0 , //������������-΢�� + .ClientTime = 0 , //��Ĭʱ��-΢�� + .DelayOutputTime_US = 0, //�ӳ����ʱ��-΢�� + .OtherWaveformPara.AlternatingFreq_HZ = 0, //���沨��Ƶ�� // + .OtherWaveformPara.TotalOutputTime_S = 0, //���������ʱ�� �� + .OtherWaveformPara.NumOfPulseGroups = 0, //����Ⱥģʽ�µ�ÿ���������� + .OtherWaveformPara.TimeOfPulseGroups_MS = 0, //����Ⱥģʽ�µ�����ʱ�� ���� }, - /*ͨ3 -- ST4 ST5 */ + /*ͨ��3 -- ST4 ST5 */ { - .Type = TRIANGULAR_WAVE , //ѡ - .PositivePulseWidth = 0 , //-΢ - .DeadTime = 0, //ʱ-΢ - .NegativePulseWidth = 0 , //-΢ - .ClientTime = 0 , //Ĭʱ-΢ - .DelayOutputTime_US = 0, //ӳʱ-΢ - .OtherWaveformPara.AlternatingFreq_HZ = 0, //沨Ƶ // - .OtherWaveformPara.TotalOutputTime_S = 0, //ʱ - .OtherWaveformPara.NumOfPulseGroups = 0, //Ⱥģʽµÿ - .OtherWaveformPara.TimeOfPulseGroups_MS = 0, //Ⱥģʽµʱ + .Type = TRIANGULAR_WAVE , //��������ѡ�� + .PositivePulseWidth = 0 , //������������-΢�� + .DeadTime = 0, //����ʱ��-΢�� + .NegativePulseWidth = 0 , //������������-΢�� + .ClientTime = 0 , //��Ĭʱ��-΢�� + .DelayOutputTime_US = 0, //�ӳ����ʱ��-΢�� + .OtherWaveformPara.AlternatingFreq_HZ = 0, //���沨��Ƶ�� // + .OtherWaveformPara.TotalOutputTime_S = 0, //���������ʱ�� �� + .OtherWaveformPara.NumOfPulseGroups = 0, //����Ⱥģʽ�µ�ÿ���������� + .OtherWaveformPara.TimeOfPulseGroups_MS = 0, //����Ⱥģʽ�µ�����ʱ�� ���� }, - /*ͨ4 -- ST6 ST7 */ + /*ͨ��4 -- ST6 ST7 */ { - .Type = TRIANGULAR_WAVE , //ѡ - .PositivePulseWidth = 0 , //-΢ - .DeadTime = 0, //ʱ-΢ - .NegativePulseWidth = 0 , //-΢ - .ClientTime = 0 , //Ĭʱ-΢ - .DelayOutputTime_US = 0, //ӳʱ-΢ - .OtherWaveformPara.AlternatingFreq_HZ = 0, //沨Ƶ // - .OtherWaveformPara.TotalOutputTime_S = 0, //ʱ - .OtherWaveformPara.NumOfPulseGroups = 0, //Ⱥģʽµÿ - .OtherWaveformPara.TimeOfPulseGroups_MS = 0, //Ⱥģʽµʱ + .Type = TRIANGULAR_WAVE , //��������ѡ�� + .PositivePulseWidth = 0 , //������������-΢�� + .DeadTime = 0, //����ʱ��-΢�� + .NegativePulseWidth = 0 , //������������-΢�� + .ClientTime = 0 , //��Ĭʱ��-΢�� + .DelayOutputTime_US = 0, //�ӳ����ʱ��-΢�� + .OtherWaveformPara.AlternatingFreq_HZ = 0, //���沨��Ƶ�� // + .OtherWaveformPara.TotalOutputTime_S = 0, //���������ʱ�� �� + .OtherWaveformPara.NumOfPulseGroups = 0, //����Ⱥģʽ�µ�ÿ���������� + .OtherWaveformPara.TimeOfPulseGroups_MS = 0, //����Ⱥģʽ�µ�����ʱ�� ���� }, }; /*-------------------------------------------------------------------------------------*/ -/*-------------------------ȡFTԺʵʲԪֵ---------------------------*/ -uint16_t FT_CURRENT_SAVE[4]={0,0,0,0}; //ڱFTȡ -uint8_t CUSTOM_UNIT_CURRENT[4]={33,33,33,33}; //Զ嵥Ԫֵ -uint8_t unit_current[4] ={0,0,0,0}; //õʵʵԪֵ -uint8_t GET_FT_CURRENT(void) //ã208*4 +/*-------------------------��ȡ��FT���Ժ��ʵ�ʲ�����Ԫ����ֵ---------------------------*/ +uint16_t FT_CURRENT_SAVE[4]={0,0,0,0}; //���ڱ���FT��ȡ�������� +uint8_t CUSTOM_UNIT_CURRENT[4]={33,33,33,33}; //�����Զ��嵥Ԫ����ֵ +uint8_t unit_current[4] ={0,0,0,0}; //�������õ�ʵ�ʵ�Ԫ����ֵ +uint8_t GET_FT_CURRENT(void) //�������ã�208*4 { - //ҪʹFTоƬʱעͣ ʱԶ㵥Ԫ - //ֶУ׼ʱ޸CUSTOM_UNIT_CURRENT[4] еݣ4ע͵ -// flash_read(DATA_SAVE_ADDR ,&FT_CURRENT_SAVE[0]);//MTPеʵʼֵڼʵʵԪ -// flash_read(DATA_SAVE_ADDR+2 ,&FT_CURRENT_SAVE[1]);//MTPеʵʼֵڼʵʵԪ -// flash_read(DATA_SAVE_ADDR+4 ,&FT_CURRENT_SAVE[2]);//MTPеʵʼֵڼʵʵԪ -// flash_read(DATA_SAVE_ADDR+6 ,&FT_CURRENT_SAVE[3]);//MTPеʵʼֵڼʵʵԪ + //����Ҫʹ��FT���оƬʱ����ע�ͣ� ��ʱ�Զ����㵥Ԫ���� + //���ֶ�У׼ʱ���޸�CUSTOM_UNIT_CURRENT[4] �����е����ݣ���������4��ע�͵� +// flash_read(DATA_SAVE_ADDR ,&FT_CURRENT_SAVE[0]);//����������MTP�е�ʵ�ʼ�����ֵ���ڼ���ʵ�ʵ�Ԫ���� +// flash_read(DATA_SAVE_ADDR+2 ,&FT_CURRENT_SAVE[1]);//����������MTP�е�ʵ�ʼ�����ֵ���ڼ���ʵ�ʵ�Ԫ���� +// flash_read(DATA_SAVE_ADDR+4 ,&FT_CURRENT_SAVE[2]);//����������MTP�е�ʵ�ʼ�����ֵ���ڼ���ʵ�ʵ�Ԫ���� +// flash_read(DATA_SAVE_ADDR+6 ,&FT_CURRENT_SAVE[3]);//����������MTP�е�ʵ�ʼ�����ֵ���ڼ���ʵ�ʵ�Ԫ���� for(int i = 0 ;i<4;i++) { if(FT_CURRENT_SAVE[i] != 0) - unit_current[i] = (uint8_t)(FT_CURRENT_SAVE[i] /( 208 * 4 )) ; //ʵʵԪ + unit_current[i] = (uint8_t)(FT_CURRENT_SAVE[i] /( 208 * 4 )) ; //����ʵ�ʵ�Ԫ���� else unit_current[i] = CUSTOM_UNIT_CURRENT[i] ; } return 0; } -/*-------------------------------------С--------------------------------*/ -//Ҳֵ +/*-------------------------------------���������С����--------------------------------*/ +//���Ҳ������������ֵ double sin_cal(uint8_t angle) //0-180 { double radian = angle*PI/180; return sin(radian); } -//㲻ͬµĵ64ֵǰзҲDz -uint16_t unit_t[4]; //ĵԪϵ0-7 ĸͨ -uint32_t isel_t[4][64]; //õĵλ0-255ĸͨ +//���㲻ͬ�����µĵ�64�����ֵ����ǰ�з��������Ҳ������Dz� +uint16_t unit_t[4]; //��������ĵ�Ԫ����ϵ����0-7�� ���ĸ�ͨ�� +uint32_t isel_t[4][64]; //��������õ��ĵ�����λ��0-255�����ĸ�ͨ�� BasicWaveformType wavePara_type[4]; uint8_t cal_output_current_mA(CHANNEL_NUM CHANNEL_X,float mA,BasicWaveformType type, uint16_t* unit , uint32_t (*isel)[64]) // uint16_t read_current_data { @@ -134,7 +134,7 @@ uint8_t cal_output_current_mA(CHANNEL_NUM CHANNEL_X,float mA,BasicWaveformType t { if(type == SQUARE_WAVE) { - //,ڸصļĴֵ + //���������,���ڸ�������صļĴ�����ֵ *(unit+CHANNEL_X) = (uint16_t)(mA * 1000 / (unit_current[CHANNEL_X] * 255)); // 0 - 7 for(int i = 0 ;i<64;i++) { @@ -143,37 +143,35 @@ uint8_t cal_output_current_mA(CHANNEL_NUM CHANNEL_X,float mA,BasicWaveformType t } else if(type== SINE_WAVE) { - //,ڸصļĴֵ + //���������,���ڸ�������صļĴ�����ֵ *(unit+CHANNEL_X) = (uint16_t)(mA * 1000 / (unit_current[CHANNEL_X] * 255)); // 0 - 7 for(int i = 0 ;i<64;i++) { *(isel[0]+CHANNEL_X*64+i) = (uint16_t)(mA * 1000 / ((*(unit+CHANNEL_X) + 1)*unit_current[CHANNEL_X])*sin_cal(i*2.85714)); // 0 - 255 } } - else //Dzֵ(type == TRIANGULAR_WAVE ) + else //���Dz���ֵ(type == TRIANGULAR_WAVE ) { - //,ڸصļĴֵ + //���������,���ڸ�������صļĴ�����ֵ *(unit+CHANNEL_X) = (uint16_t)(mA * 1000 / (unit_current[CHANNEL_X] * 255)); // 0 - 7 *(isel[0]+CHANNEL_X*64) = 0; *(isel[0]+CHANNEL_X*64+63) = 0; for(int j = 1 ; j<32 ; j++) { - *(isel[0]+CHANNEL_X*64+j) = (uint16_t)(mA * 1000 / ((*(unit+CHANNEL_X)+1)*unit_current[CHANNEL_X]) * 0.033258*j); // 0 - 255 - // printf("%d\n",*(isel[0]+CHANNEL_X*64+j)); + *(isel[0]+CHANNEL_X*64+j) = (uint16_t)(mA * 1000 / ((*(unit+CHANNEL_X)+1)*unit_current[CHANNEL_X]) * 0.033258*j); // 0 - 255 } for(int k = 32 ; k<63 ; k++) { - *(isel[0]+CHANNEL_X*64+k) =*(isel[0]+CHANNEL_X*64+(63-k)) ; - // printf("%d\n",*(isel[0]+CHANNEL_X*64+k)); + *(isel[0]+CHANNEL_X*64+k) =*(isel[0]+CHANNEL_X*64+(63-k)) ; } } } return 0; } -/*ʼ*/ -/*CONFIGĴ*/ +/*��ʼ������*/ +/*CONFIG�Ĵ�������*/ uint8_t ENS_STIMU_CONFIG_BIT_ENABLE(CHANNEL_NUM CHANNEL_X , DRV_CONFIG BIT) { CMSDK_WAVE_GEN_TypeDef* WAVE_GEN_BLK; @@ -223,7 +221,7 @@ uint8_t ENS_STIMU_CONFIG_BIT_DISABLE(CHANNEL_NUM CHANNEL_X , DRV_CONFIG BIT) } -/*---------------------------̼йصļĴijʼ--------------------------------*/ +/*---------------------------��̼��йصļĴ����ij�ʼ��--------------------------------*/ uint32_t StimulatorInit(CHANNEL_NUM CHANNEL_X) { //uint32_t WaveformFreq=0; @@ -232,9 +230,9 @@ uint32_t StimulatorInit(CHANNEL_NUM CHANNEL_X) else if(CHANNEL_X == CHANNEL_1) WAVE_GEN_BLK=WAVE_GEN_DRVA_BLK1; else if(CHANNEL_X == CHANNEL_2) WAVE_GEN_BLK=WAVE_GEN_DRVA_BLK2; else WAVE_GEN_BLK = WAVE_GEN_DRVA_BLK3; - //config + //config ���� ENS_STIMU_CONFIG_BIT_ENABLE(CHANNEL_X,DISABLE_ALL_BIT); - //1 ʱ䲻Ϊ0βΪsine ,ʹREST + //1 �� ����ʱ�䲻Ϊ0�����β�Ϊsine�� ,ʹ��REST if((ParaSet_waveform[CHANNEL_X].DeadTime > 0)){ ENS_STIMU_CONFIG_BIT_ENABLE(CHANNEL_X,REST_BIT); } @@ -242,13 +240,13 @@ uint32_t StimulatorInit(CHANNEL_NUM CHANNEL_X) { ENS_STIMU_CONFIG_BIT_DISABLE(CHANNEL_X,REST_BIT); } - //2 0 ʹ NEGATIVE_BIT SOURCE_B_BIT + //2 �� ����������������0 ʹ�� NEGATIVE_BIT �� SOURCE_B_BIT if(ParaSet_waveform[CHANNEL_X].NegativePulseWidth > 0) { - ENS_STIMU_CONFIG_BIT_ENABLE(CHANNEL_X,SOURCE_B_BIT ); //SOURCEBʹ򸺰ڵЧ=0 + ENS_STIMU_CONFIG_BIT_ENABLE(CHANNEL_X,SOURCE_B_BIT ); //SOURCEB��ʹ���򸺰����ڵ�������Ч��=0�� ENS_STIMU_CONFIG_BIT_ENABLE(CHANNEL_X,NEGATIVE_BIT ); } - //3Ĭʱ䲻Ϊ0SILENT_BIT + //3����Ĭʱ�䲻Ϊ0������SILENT_BIT if(ParaSet_waveform[CHANNEL_X].ClientTime>0) { ENS_STIMU_CONFIG_BIT_ENABLE(CHANNEL_X,SILENT_BIT); @@ -258,13 +256,13 @@ uint32_t StimulatorInit(CHANNEL_NUM CHANNEL_X) ENS_STIMU_CONFIG_BIT_DISABLE(CHANNEL_X,SILENT_BIT); } - //4ģʽALTERNATING_POSITIVE_BIT + //4������ģʽALTERNATING_POSITIVE_BIT if(ParaSet_waveform[CHANNEL_X].OtherWaveformPara.AlternatingFreq_HZ > 0 ) { ENS_STIMU_CONFIG_BIT_ENABLE(CHANNEL_X,ALTERNATING_POSITIVE_BIT); ENS_STIMU_CONFIG_BIT_DISABLE(CHANNEL_X,SOURCE_B_BIT); ENS_STIMU_CONFIG_BIT_DISABLE(CHANNEL_X,NEGATIVE_BIT); - //ʱƵй,IJΪƵʣҪתΪʱӸʱӸܳ2^16 + //����ʱ������Ƶ�й�,����IJ���Ϊ����Ƶ�ʣ���Ҫת��Ϊʱ�Ӹ�����ʱ�Ӹ������ܳ���2^16 WAVE_GEN_BLK ->WAVE_GEN_DRV_ALT_LIM_REG =(uint16_t)(ParaSet_waveform[CHANNEL_X].PositivePulseWidth / (uint16_t)ParaSet_waveform[CHANNEL_X].OtherWaveformPara.AlternatingFreq_HZ * (uint16_t)(APB_Clock_Freq/1000000)) ; ParaSet_waveform[CHANNEL_X].NegativePulseWidth = 0; } @@ -274,37 +272,37 @@ uint32_t StimulatorInit(CHANNEL_NUM CHANNEL_X) } ENS_STIMU_CONFIG_BIT_ENABLE(CHANNEL_X,CONTINUE_REPEATING_BIT); - //ӳʱ λus + //�ӳ����ʱ����� ��λus WAVE_GEN_BLK->WAVE_GEN_DRV_DELAY_LIM_REG = (uint8_t)(APB_Clock_Freq/1000000)*ParaSet_waveform[CHANNEL_X].DelayOutputTime_US; - //ݳʼSTRUCT_WAVEFORM_PARAṹӦļĴֵ + //���ݳ�ʼ�����STRUCT_WAVEFORM_PARA�ṹ�����Ӧ�ļĴ�����ֵ WAVE_GEN_BLK->WAVE_GEN_DRV_NEG_HLF_WAVE_PRD_REG = ParaSet_waveform[CHANNEL_X].NegativePulseWidth; WAVE_GEN_BLK->WAVE_GEN_DRV_HLF_WAVE_PRD_REG = ParaSet_waveform[CHANNEL_X].PositivePulseWidth; WAVE_GEN_BLK->WAVE_GEN_DRV_CLK_FREQ_REG = (uint32_t)(APB_Clock_Freq/1000000); // WAVE_GEN_BLK->WAVE_GEN_DRV_SILENT_T_REG = ParaSet_waveform[CHANNEL_X].ClientTime; WAVE_GEN_BLK->WAVE_GEN_DRV_REST_T_REG = ParaSet_waveform[CHANNEL_X].DeadTime; - WAVE_GEN_BLK->WAVE_GEN_DRV_NEG_SCALE_REG = 1; //ĴĬΪ0 д0 + WAVE_GEN_BLK->WAVE_GEN_DRV_NEG_SCALE_REG = 1; //�Ĵ���Ĭ��Ϊ0�� ����д����0���� WAVE_GEN_BLK->WAVE_GEN_DRV_NEG_OFFSET_REG = 0; //WaveformFreq = (uint32_t)(1000000 / (wavePara.ClientTime + wavePara.DeadTime +wavePara.NegativePulseWidth + wavePara.PositivePulseWidth)); - //沨 + //���沨���������� wavePara_type[CHANNEL_X] = ParaSet_waveform[CHANNEL_X].Type; TOTAL_TIME_THRESHOLD_VALUE[CHANNEL_X] = ParaSet_waveform[CHANNEL_X].OtherWaveformPara.TotalOutputTime_S * 1000; if( (ParaSet_waveform[CHANNEL_X].OtherWaveformPara.TimeOfPulseGroups_MS > 0) || (ParaSet_waveform[CHANNEL_X].OtherWaveformPara.NumOfPulseGroups >0)) { - TRIGGER_TIME_COUNT[CHANNEL_X] = 0; //ʱ + TRIGGER_TIME_COUNT[CHANNEL_X] = 0; //���ʱ������ TRIGGER_TIME_THRESHOLD_VALUE[CHANNEL_X]=ParaSet_waveform[CHANNEL_X].OtherWaveformPara.TimeOfPulseGroups_MS ; NUM_OF_PULSES_THRESHOLD[CHANNEL_X] = ParaSet_waveform[CHANNEL_X].OtherWaveformPara.NumOfPulseGroups ; WAVE_GEN_BLK->WAVE_GEN_DRV_INT_REG = 0x001f0001; } uint8_t returnValue = cal_output_current_mA(CHANNEL_X,0, wavePara_type[CHANNEL_X], unit_t , isel_t) ; - return (uint32_t)(WAVE_GEN_BLK->WAVE_GEN_DRV_CONFIG_REG); //زεƵ + return (uint32_t)(WAVE_GEN_BLK->WAVE_GEN_DRV_CONFIG_REG); //���ز��ε�Ƶ�� } -/*-------------------------------------------------------------------------------*/ -volatile uint8_t statics_config=0; //ȷǰмͨ 0 / 1 / 2 /4 / 8 +/*--------------------------------------�������-----------------------------------------*/ +volatile uint8_t statics_config=0; //��ȷ��ǰ�м���ͨ������� 0 / 1 / 2 /4 / 8 void StartStimulatorOut(CHANNEL_NUM CHANNEL_X) { CMSDK_WAVE_GEN_TypeDef* WAVE_GEN_BLK; @@ -314,11 +312,11 @@ void StartStimulatorOut(CHANNEL_NUM CHANNEL_X) else {WAVE_GEN_BLK = WAVE_GEN_DRVA_BLK3; statics_config |= (1<<3) ;} if(statics_config > 1) { - ENS_STIMU_CONFIG_BIT_ENABLE(CHANNEL_X,MULTI_ELECTRODE_BIT); //缫ʹ + ENS_STIMU_CONFIG_BIT_ENABLE(CHANNEL_X,MULTI_ELECTRODE_BIT); //��缫ʹ�� } WAVE_GEN_BLK->WAVE_GEN_DRV_CTRL_REG = 1; } -/*--------------------------------------ֹͣ----------------------------------------*/ +/*--------------------------------------ֹͣ���----------------------------------------*/ void StopStimulatorOut(CHANNEL_NUM CHANNEL_X) { CMSDK_WAVE_GEN_TypeDef* WAVE_GEN_BLK; @@ -333,8 +331,8 @@ void StopStimulatorOut(CHANNEL_NUM CHANNEL_X) } } -/*-----------------------------̼еĵƵ-------------------------------*/ -/*С޸*/ +/*-----------------------------��̼������еĵ�����Ƶ������-------------------------------*/ +/*���������С�޸�*/ uint8_t CURRENT_AMPLITUDE_MODIFY(CHANNEL_NUM CHANNEL_X , float mA) { CMSDK_WAVE_GEN_TypeDef* WAVE_GEN_BLK; @@ -347,18 +345,18 @@ uint8_t CURRENT_AMPLITUDE_MODIFY(CHANNEL_NUM CHANNEL_X , float mA) WAVE_GEN_BLK->WAVE_GEN_DRV_INT_REG = 0; StopStimulatorOut(CHANNEL_X); cal_output_current_mA(CHANNEL_X,mA, wavePara_type[CHANNEL_X], unit_t , isel_t) ; - WAVE_GEN_BLK ->WAVE_GEN_DRV_ISEL_REG = unit_t[CHANNEL_X]; //Χ 0x00 - 0x07 Ԫ + WAVE_GEN_BLK ->WAVE_GEN_DRV_ISEL_REG = unit_t[CHANNEL_X]; //��Χ 0x00 - 0x07 ��Ԫ���� for(int i=0; i<64; i++){ WAVE_GEN_BLK->WAVE_GEN_DRV_IN_WAVE_ADDR_REG = i; - WAVE_GEN_BLK->WAVE_GEN_DRV_IN_WAVE_REG = isel_t[CHANNEL_X][i]; //0xff λ + WAVE_GEN_BLK->WAVE_GEN_DRV_IN_WAVE_REG = isel_t[CHANNEL_X][i]; //���0xff ������λ } WAVE_GEN_BLK->WAVE_GEN_DRV_INT_REG = 0x001f0001; NVIC_EnableIRQ(WG_DRV_IRQn); StartStimulatorOut(CHANNEL_X); - return (uint8_t)(WAVE_GEN_BLK->WAVE_GEN_DRV_CTRL_REG); //״̬ + return (uint8_t)(WAVE_GEN_BLK->WAVE_GEN_DRV_CTRL_REG); //����״̬ } -/*Ƶʵʵʱ޸ģʱƵ=(1000000/( + + ʱ + Ĭʱ))*/ +/*�������Ƶ�ʵ�ʵʱ�޸ģ����ʱ������Ƶ��=(1000000/(������������ + ������������ + ����ʱ�� + ��Ĭʱ��))*/ uint32_t CURRENT_FREQ_MODIFY(CHANNEL_NUM CHANNEL_X , uint32_t freq) { uint32_t Pulse_Width = 0; @@ -371,16 +369,16 @@ uint32_t CURRENT_FREQ_MODIFY(CHANNEL_NUM CHANNEL_X , uint32_t freq) freq = 50000; else if(freq < 10) freq = 10; - //ֵĶĬʱ䲻Ϊ0 ͨ޸ľĬʱ޸IJƵ ĬʱΪ0޸/޸Ƶ + //������ֵ���Ķ��������Ĭʱ�䲻Ϊ0 ����ͨ���޸ľ�Ĭʱ���޸IJ���Ƶ�� �������Ĭʱ��Ϊ0�����޸���������/�������������޸�Ƶ�� if(ParaSet_waveform[CHANNEL_X].ClientTime > 0) { - Pulse_Width/*Ĭʱ*/ = (uint32_t)((1000000/freq) - ParaSet_waveform[CHANNEL_X].DeadTime - ParaSet_waveform[CHANNEL_X].PositivePulseWidth - ParaSet_waveform[CHANNEL_X].NegativePulseWidth); + Pulse_Width/*��Ĭʱ��*/ = (uint32_t)((1000000/freq) - ParaSet_waveform[CHANNEL_X].DeadTime - ParaSet_waveform[CHANNEL_X].PositivePulseWidth - ParaSet_waveform[CHANNEL_X].NegativePulseWidth); WAVE_GEN_BLK->WAVE_GEN_DRV_SILENT_T_REG = Pulse_Width; return Pulse_Width; } else if(ParaSet_waveform[CHANNEL_X].ClientTime == 0) { - Pulse_Width/*+*/ = (uint32_t)((1000000/freq) - ParaSet_waveform[CHANNEL_X].DeadTime) ; + Pulse_Width/*��+������*/ = (uint32_t)((1000000/freq) - ParaSet_waveform[CHANNEL_X].DeadTime) ; if(ParaSet_waveform[CHANNEL_X].NegativePulseWidth == 0) WAVE_GEN_BLK->WAVE_GEN_DRV_HLF_WAVE_PRD_REG = Pulse_Width; else @@ -397,7 +395,7 @@ uint32_t CURRENT_FREQ_MODIFY(CHANNEL_NUM CHANNEL_X , uint32_t freq) } -//̼ʱʱ +//��̼�ʱ���ʱ uint32_t StimuTimeCount_S(CHANNEL_NUM CHANNEL_X , TIME_COUNT_MODE MODE) { @@ -406,20 +404,20 @@ uint32_t StimuTimeCount_S(CHANNEL_NUM CHANNEL_X , TIME_COUNT_MODE MODE) { count_time = *(CHANNEL_TIME_COUNT+CHANNEL_X) ; } - else //MODE == TRIGGER_TIME_MODE ʱ + else //MODE == TRIGGER_TIME_MODE ���ʱ�� { count_time = *(TRIGGER_TIME_COUNT+CHANNEL_X); } return count_time; } -//صǰη˶ٴΣҪηжϣ +//���ص�ǰ���η����˶��ٴΣ���Ҫ�������η��������жϣ� uint32_t waveformOccurreCount(CHANNEL_NUM CHANNEL_X) { return (uint32_t)(wave_gen_irq_occurred[CHANNEL_X]/4); } -/*-------------------------------̼жϴ-----------------------*/ +/*-------------------------------��̼��������жϴ�������-----------------------*/ volatile uint32_t NUM_OF_PULSES_THRESHOLD[4]={0,0,0,0}; volatile uint32_t wave_gen_irq_occurred[4]={0,0,0,0}; void WG_DRV_Handler(void) @@ -433,9 +431,9 @@ void WG_DRV_Handler(void) else if(i==2){ DRVA= WAVE_GEN_DRVA_BLK2; } else if(i==3){ DRVA= WAVE_GEN_DRVA_BLK3; } - if((DRVA->WAVE_GEN_DRV_INT_REG & CMSDK_WAVE_GEN_DRV_INT_READ_DRIVER_NUM_Msk) == i) //жĸͨж + if((DRVA->WAVE_GEN_DRV_INT_REG & CMSDK_WAVE_GEN_DRV_INT_READ_DRIVER_NUM_Msk) == i) //�ж��ĸ�ͨ���������ж� { - if((DRVA->WAVE_GEN_DRV_INT_REG & CMSDK_WAVE_GEN_DRV_INT_FIRSTADDR_STS_Msk) == CMSDK_WAVE_GEN_DRV_INT_FIRSTADDR_STS_Msk)//һжϵ㷢ж + if((DRVA->WAVE_GEN_DRV_INT_REG & CMSDK_WAVE_GEN_DRV_INT_FIRSTADDR_STS_Msk) == CMSDK_WAVE_GEN_DRV_INT_FIRSTADDR_STS_Msk)//��һ�жϵ㷢���ж� { if(((DRVA->WAVE_GEN_DRV_INT_REG & CMSDK_WAVE_GEN_DRV_INT_READ_FIRST_ADDR_Msk)>>CMSDK_WAVE_GEN_DRV_INT_READ_FIRST_ADDR_Pos) == 0) { @@ -448,7 +446,7 @@ void WG_DRV_Handler(void) { DRVA->WAVE_GEN_DRV_INT_REG = (31 << CMSDK_WAVE_GEN_DRV_INT_SECOND_ADDR_Pos) | (0 << CMSDK_WAVE_GEN_DRV_INT_FIRST_ADDR_Pos) | CMSDK_WAVE_GEN_DRV_INT_FIRSTADDR_CLR_Msk | CMSDK_WAVE_GEN_DRV_INT_EN_Msk; } - if((NUM_OF_PULSES_THRESHOLD[i] > 0)) //Ҫܲſ + if((NUM_OF_PULSES_THRESHOLD[i] > 0)) //��Ҫ����������ܲſ������� wave_gen_irq_occurred[i]++; @@ -459,8 +457,8 @@ void WG_DRV_Handler(void) DRVA->WAVE_GEN_DRV_INT_REG = CMSDK_WAVE_GEN_DRV_INT_SECONDADDR_CLR_Msk | CMSDK_WAVE_GEN_DRV_INT_EN_Msk; NVIC_DisableIRQ(WG_DRV_IRQn); DRVA->WAVE_GEN_DRV_INT_REG = 0; - TRIGGER_TIME_COUNT_FLAG |= (1<Output: *** Using Compiler 'V5.06 update 6 (build 750)', folder: 'D:\Keil_v5\ARM\ARM_Compiler_5.06u7\Bin' -Build target 'ENS001_BASIC_PRJ' +Rebuild target 'ENS001_BASIC_PRJ' +assembling startup_CMSDK_CM0.s... compiling mian.c... -USER\mian.c(31): warning: #223-D: function "GPIO_IO_Init" declared implicitly - GPIO_IO_Init(GPIO_19, OUTPUT, 0x00, 0x02, 0x00, 0x00, ENABLE); -USER\mian.c: 1 warning, 0 errors +compiling ENS1_GPIO.c... +compiling system_CMSDK_CM0.c... +compiling retarget.c... +compiling ENS1_BOOST.c... +compiling ENS1_CLOCK.c... +compiling ENS1_MTP.c... +compiling ENS1_UART.c... compiling ENS1_WAVEGEN.c... -.\FWLIB\include\ENS1_BOOST.h(37): warning: #1-D: last line of file ends without a newline - #endif -FWLIB\source\ENS1_WAVEGEN.c: 1 warning, 0 errors +compiling ENS1_TIMER.c... linking... -Program Size: Code=8028 RO-data=380 RW-data=100 ZI-data=524 +Program Size: Code=7956 RO-data=388 RW-data=120 ZI-data=528 FromELF: creating hex file... -".\Objects\ENS001_BASIC_PRJ.axf" - 0 Error(s), 2 Warning(s). +".\Objects\ENS001_BASIC_PRJ.axf" - 0 Error(s), 0 Warning(s).

Software Packages used:

diff --git a/Objects/ENS001_BASIC_PRJ.hex b/Objects/ENS001_BASIC_PRJ.hex index 601893a..ab84ac7 100644 --- a/Objects/ENS001_BASIC_PRJ.hex +++ b/Objects/ENS001_BASIC_PRJ.hex @@ -1,19 +1,19 @@ :020000041000EA -:1000000070020020D5000010DD000010DF0000109D +:1000000088020020D5000010DD000010DF00001085 :1000100000000000000000000000000000000000E0 :10002000000000000000000000000000E1000010DF :100030000000000000000000E3000010E5000010D8 :10004000E7000010E7000010E7000010E7000010D4 :10005000E7000010E7000010E7000010E7000010C4 :10006000E7000010E7000010E7000010E7000010B4 -:10007000610E0010CD0E0010E7000010E700001028 +:10007000210F00108D0F0010E7000010E7000010A6 :10008000E7000010E7000010E7000010E700001094 -:10009000E7000010B50C0010690D0010E70000101B +:10009000E7000010C90D0010290E0010E700001045 :1000A000E7000010E7000010000000000000000062 :1000B0000000000000000000000000000000000040 -:1000C0000348854600F0BAFA00480047891300103B -:1000D000700200200448804704480047FEE7FEE71E -:1000E000FEE7FEE7FEE7FEE7A50C0010C1000010EA +:1000C0000348854600F0BAFA004800476113001063 +:1000D000880200200448804704480047FEE7FEE706 +:1000E000FEE7FEE7FEE7FEE7B90D0010C1000010D5 :1000F00030B50B46014600202022012409E00D46C0 :10010000D5409D4205D31D469540491B2546954047 :1001100040191546521E002DF1DC30BD03460B433D @@ -49,7 +49,7 @@ :1002F0000843194610BD10B5002B08DA0024401C35 :10030000614192185B411A4301D14008400010BD81 :10031000F0B51FB482B005460C0003D0084600F0CB -:10032000B3FE02E000F0B0FE20300246009021460D +:1003200037FF02E000F034FF203002460090214603 :10033000284600F095F9049B059A04460F46184399 :100340001143084314D0184610431BD00098402195 :100350000A1A18460599FFF7BDFF05460E46009A92 @@ -100,7 +100,7 @@ :100620008C412146002B04DB1C460123DB07524290 :10063000A341994200D1904210BD0000064C012513 :10064000064E05E0E36807CC2B430C3C984710347A -:10065000B442F7D3FFF738FDB8200010D8200010BF +:10065000B442F7D3FFF738FD78200010982000103F :1006600010B5202A04DB0146203A9140002010BD3D :10067000914020239C1A0346E3401943904010BD4B :1006800010B5202A06DBCB170846203A1041C117C7 @@ -118,418 +118,415 @@ :100740007141FFF7D8FDB6E710B5134600224160AE :100750008160002B01D0082422430124224302603F :1007600010BD000010B5034800F008F80249086009 -:1007700010BD0000200000201C000020F0B587B054 +:1007700010BD00002800002024000020F0B587B044 :100780000446002754480068217809040843524968 :100790000860207800281AD108464068617809016D :1007A00008434D4948606178881CFFF753FD0246B5 -:1007B0000B460591049000200121890700F05EFEA0 +:1007B0000B460591049000200121890700F04CFEB2 :1007C0000546FFF769FDC7B244494F4328E020784A :1007D000012803D1A77841494F4321E0207802281E :1007E00001D187031CE02078032801D1A78817E0F6 :1007F00039484068617809010843374948606178A1 :10080000881CFFF727FD02460B4605910490002047 -:100810000121890700F032FE0546FFF73DFDC7B212 +:100810000121890700F020FE0546FFF73DFDC7B224 :100820002D480068A17908432B49086000BF2A4879 :1008300000684007C00F0028F9D127480068217AD6 :10084000090208432449086008460068E179090361 :10085000084321490860207A00281BDD217AC81E40 :10086000FFF7F8FC05462A460B46002001218907C0 -:1008700000F004FE039102903846FFF7FFFC01915F +:1008700000F0F2FD039102903846FFF7FFFC019172 :100880000090039B029AFFF76DFC05910490FFF71F :1008900003FD0746E07900281BDDE179C81EFFF75C :1008A000D9FC05462A460B4600200121890700F0A5 -:1008B000E5FD039102903846FFF7E0FC01910090BE +:1008B000D3FD039102903846FFF7E0FC01910090D0 :1008C000039B029AFFF74EFC05910490FFF7E4FCAE :1008D0000746384607B0F0BD0000024040420F0016 -:1008E00010B50446002C04D00A2221460148FFF727 -:1008F00015FC10BD6400002010B5154800780028D4 -:1009000024D014480068401C12490860084600685A -:1009100005210902884205D20F4881880F4801F05D -:1009200029FB13E00B4800680521090488420DD318 -:1009300008480068C911884205D2074881880748DD -:1009400001F018FB02E000200249086010BD000021 -:1009500050000020540000206400002000C000402F -:1009600010B501F0EFFA02A000F07EFB10BD000010 -:10097000E794B5E588BAE6BF80E5B7B2E590AFE5A4 -:100980008AA85C6E0000000010B5002005490870C0 -:1009900005490860054801F0E1FA05A000F064FB94 -:1009A00010BD0000500000205400002000C0004096 -:1009B000E794B5E588BAE6BF80E5B7B2E5819CE685 -:1009C000ADA25C6E0000000010B502460F2A14DDD7 -:1009D0001348806B1346103B5C000323A3409843ED -:1009E0000F4B98631846806B1346103B5C000B4618 -:1009F000A34018430A4B98630FE00948406B54002A -:100A00000323A3409843064B58631846406B540099 -:100A10000B46A3401843024B5863002010BD000052 -:100A20000010024001460448406801228A401040FC -:100A3000C840C0B27047000000100240FFB5044635 -:100A40000D461E460B9F00212046FFF7BDFF012DDE -:100A500010D1012F0ED14F4800690121A1408843D8 -:100A60004C490861084640690121A14008434949B1 -:100A700048613BE0012D10D1002F0ED1454800699F -:100A80000121A1408843434908610846406901218A -:100A9000A14088433F49486128E0002D14D1012F2F -:100AA00012D13C4840690121A1408843394948613D -:100AB000084600690121A1400843364908610998A8 -:100AC00048620298086311E0002D0FD1002F0DD16C -:100AD000304800690121A14088432E490861084639 -:100AE00040690121A14088432A494861022E0ED164 -:100AF000284880690121A140884326498861084629 -:100B0000C1690120A04081432248C1611FE0002E3D -:100B10000ED1204880690121A14008431D49886108 -:100B20000846C0690121A14088431A49C8610EE006 -:100B3000012E0CD1174881690120A040814315483E -:100B40008161C0690121A14008431249C86111486F -:100B5000816A0120A04081430E488162806A0A991F -:100B6000C907C90FA14008430A4988620846C06AFC -:100B70000121A14088430749C8620846C06A0A9912 -:100B80008907C90FA14008430249C862002004B088 -:100B9000F0BD000000100240012907D1074A526849 -:100BA000012383401A43054B5A6006E0034A52680A -:100BB000012383409A43014B5A6070470010024062 -:100BC00000B503461846FFF72DFF012803D118464C -:100BD00000F00AF807E01846FFF724FF002802D1CA -:100BE000184600F00BF800BD034949680122824015 -:100BF0009143014A5160704700100240034949681F -:100C0000012282401143014A5160704700100240A6 -:100C100000207047C206D20E01219140014A1160A6 -:100C20007047000080E200E0C206D20E0121914030 -:100C3000014A11607047000080E200E0C206D20E57 -:100C400001219140014A11607047000080E100E0FD -:100C5000C206D20E01219140014A11607047000086 -:100C600080E100E0C206D20E01219140014A1160EC -:100C70007047000000E100E0C206D20E0121914061 -:100C8000014A11607047000000E100E0014604489D -:100C9000406901228A401043014A50610020704798 -:100CA00000000240014802490860704700E1F50574 -:100CB0005C00002000B501200449C86004480068B9 -:100CC000401C0349086000F06FF800BD0080004040 -:100CD0004400002070B504460820FFF7D7FF152018 -:100CE000FFF7B6FF1520FFF79FFF7D21C9000B48D6 -:100CF0000068FFF7FDF960430546294608A000F0AB -:100D0000B3F9012229460C48FFF71EFD1520FFF715 -:100D1000B3FF214609A000F0A7F970BD1C00002018 -:100D200054494D455230E9878DE8A385E8BDBDE5BE -:100D300080BC3A2025640A000080004054494D459B -:100D400052305F496E6974E5AE8CE68890EFBC8CDA -:100D5000E4B8ADE696ADE591A8E69C9F3A202564FF -:100D6000206D730A0000000001200449C860044897 -:100D70000068401C02490860704700000090004075 -:100D80004C000020004870473400002010B50621B8 -:100D90000348FFF7DCF908210248FFF7D8F910BD36 -:100DA000340000203A0000202B480078401C2A49DB -:100DB000087008464078401C487008468078401CFF -:100DC00088700846C078401CC87008460079401CEE -:100DD00008710846C088401CC88008460078022870 -:100DE00004DB0020087001201C4908701A48407874 -:100DF000062805DB00201849487001201749487073 -:100E0000154880780A2805DB0020134988700120E6 -:100E1000124988701048C078142805DB00200E495C -:100E2000C87001200D49C8700B480079642805DBA3 -:100E30000020094908710120084908710648C08846 -:100E40007D21C900884205DB00200349C8800120BC -:100E500002494871704700003A0000203400002029 -:100E600010B500240C20FFF7D5FE0120800700F00C -:100E700062F8032806D101208007406804218843D6 -:100E8000090748600120800700F055F8022805D0C6 -:100E90000120800700F04FF8062816D101208007B6 -:100EA0004068400840000121890748600846006802 -:100EB000C4B221460120800700F0C4F80120800759 -:100EC0004068012108438907486010BD10B500241F -:100ED0000D20FFF79FFE144800F02DF8032805D1E0 -:100EE00011484068042188430F4948600E4800F0CB -:100EF00022F8022804D00C4800F01DF8062812D170 -:100F000009484068400840000749486008460068B2 -:100F1000C4B22146044800F095F803484068012116 -:100F200008430149486010BD00100040014648696F -:100F30008006C00F7047014688680007400F704761 -:100F400070B504460D461348844206D10D20FFF7C4 -:100F500075FE0D20FFF75EFE09E001208007844248 -:100F600005D10C20FFF76AFE0C20FFF753FE6068E6 -:100F70002978084360600748844203D10D20FFF7B9 -:100F800071FE06E001208007844202D10C20FFF7A9 -:100F900069FE70BD00100040F8B504460D46012002 -:100FA000800784420BD10020FFF770FE0121022050 -:100FB000FFF70AFD01210320FFF706FD0DE01F48A2 -:100FC00084420AD10120FFF761FE01210C20FFF7C6 -:100FD000FBFC01210D20FFF7F7FC606BC007C00F81 -:100FE000002801D1102700E00D2715486968006826 -:100FF000FFF77EF839460090FFF77AF8401E86B278 -:101000001120304020621120000230400012606246 -:10101000A068E968097889010843A060E8688078D9 -:10102000012803D1A06801210843A060287A012883 -:1010300003D12069202108432061F8BD0010004041 -:101040001C00002000B503460A4600BF1846FFF703 -:101050006DFF0028FAD01146184600F002F810463D -:1010600000BD0160704700000FB410B503A9044B28 -:10107000044A029800F0CCF810BC08BC04B0184731 -:10108000751300102C0000202021020C01D010212B -:101090001046020A01D010460839020901D0104654 -:1010A000091F820801D01046891E420801D0881EFF -:1010B0007047081A704700004900CA020243100036 -:1010C00000D004204A0D01D001221043044A490DEA -:1010D000914201D102210843012800D10520704727 -:1010E000FF070000F8B504464F1EC8000838211855 -:1010F00015461E46086849683A4606239A4310D0AA -:101100002A463346FFF708FA3A46D200083AA318AF -:101110001A687F1E5B68FFF74DF906223B46934332 -:10112000EED1022F23D0042F11D0062F2FD12A4623 -:101130003346FFF7F1F9E36AA26AFFF73BF92A4663 -:101140003346FFF7E9F9636A226AFFF733F92A4663 -:101150003346FFF7E1F9E369A269FFF72BF92A4665 -:101160003346FFF7D9F963692269FFF723F92A4665 -:101170003346FFF7D1F9E368A268FFF71BF92A4667 -:101180003346FFF7C9F963682268FFF713F9F8BD22 -:10119000002210B5134610460149FEF7E3FF10BDCB -:1011A0000000F03F10B5FFF705F910BD002210B5A3 -:1011B000134610461146FEF7D5FF10BD10B50721A6 -:1011C000024A00200907FFF70FFA10BD01030000D3 -:1011D000034A10B500201107FFF706FA10BD000002 -:1011E00001FDFFFF02E008C8121F08C1002AFAD162 -:1011F00070477047002001E001C1121F002AFBD197 -:10120000704700000149086070470000600000203E -:10121000FFB58DB00446002506E025280AD0109AB7 -:101220000F999047641C6D1C20780028F5D1284642 -:1012300011B0F0BD00270121484A009700E00743A4 -:10124000641C23780846203B98401042F7D1207850 -:101250002E2817D1042007436078641C2A280CD15B -:101260000E98641C02C800910E900BE000990A22AF -:10127000514330394018641C0090207801463039C1 -:101280000929F3D920780028D1D0642808D069280A -:1012900006D075281ED0109A0F9990476D1C5BE000 -:1012A0000A200E99019001C90E91002802DA4042ED -:1012B0002D2102E0390504D52B216A461172012146 -:1012C00003E0F90704D02021F7E70BAE0B910DE006 -:1012D0000021FAE70A200E99019001C90E91F7E763 -:1012E0000199FEF705FF3031761E31700028F7D1E5 -:1012F00003A8801B20300190780701D5009801E0F9 -:10130000012000900199884201DD401A00E0002090 -:101310000027009006E002A8109AC05D0F99904740 -:101320006D1C7F1C0B988742F5DB04E0109A30207F -:101330000F9990476D1C0099481E00900029F5DC1C -:1013400005E03078109A761C0F9990476D1C019932 -:10135000481E01900029F4DC641C65E7092801009F -:101360000248034948611020086170471372070062 -:1013700000E0004070B504460D46E1B20148FFF7B9 -:1013800061FE70BD0010004086B0FFF741FCFFF722 -:10139000E9F901200021009102230A4601910290FF -:1013A0001320FFF74BFB00211320FFF7F5FB2D491E -:1013B0002D48FFF7F1FD2D492B48FFF7C1FD012016 -:1013C000FFF788FCFFF7E2FC00F08AFD284A07CA15 -:1013D00003AB07C303A8FFF783FAFFF7C1FA40E0A6 -:1013E000FFF7D0FC04462078002801D000202070B0 -:1013F000A078002801D00020A0702079002801D01A -:1014000000202071607900282AD01A480078401CFA -:1014100018490870084600780A280BDC164800783E -:10142000002804D1012014490870FFF799FAFFF74A -:1014300063FA10E00F480078142809DC0E480078A1 -:10144000012808D100200C490870FFF79DFA02E03E -:101450000020084908701320FFF7B2FB00206071DC -:1014600000BFBDE708000020001000401800002069 -:101470001C2000100000002001000020F0B51FB467 -:1014800096B084460C460246199D18980390490070 -:1014900068006300490840080193002A01D0012632 -:1014A00000E000269E19FE4BF6185B109E422BD3DF -:1014B0006E00039F0296002F00D00127F719F84E07 -:1014C000F84BBE199E421FD3039E0346F64F33438B -:1014D00009D03B469C4201D1002A04D0019B002A3E -:1014E00005D0012604E0002039461BB0F0BD0026DF -:1014F0009E19EE4B9E4207D8039F029E002F00D0FC -:101500000127F6199E4207D92B4660462146189AB4 -:10151000FFF748FE1BB0F0BD0023002C29DAE44E93 -:10152000B04226DAE34EB04201DB022321E0DE4E78 -:10153000B0421EDBE04E070DBE19142E09DD342724 -:10154000BF1B039EFE400196BE40039FBE420BD0D0 -:101550000FE0039F002F0CD11427BF1B0646FE404F -:101560000196BE40864204D1019BDE07F60F02239E -:101570009B1B0E46164318D1002D16DA002C03D003 -:10158000022B01D0012B06D00220FFF73BFEFFF714 -:10159000FFFD1BB0F0BD0220FFF734FEFFF7F8FDA2 -:1015A0000122D20751401BB0F0BD039E002E61D135 -:1015B000BF4EB04220D1C148844201D1002A08D098 -:1015C000B948814209DB002D10DB189829461BB071 -:1015D000F0BD0020B4491BB0F0BD002D06DA012299 -:1015E0002946D207189851401BB0F0BDB449794440 -:1015F000086849681BB0F0BDAB4FB84225D1002D3B -:101600001FDA002904D0B14212D1002A09D018E013 -:10161000002A72D1A649E20F0020D20711431BB065 -:10162000F0BD0020E20F0146D20711431BB0F0BD10 -:10163000B14206DA234600203946FEF793FD1BB07F -:10164000F0BD104621461BB0F0BDB14212DA0126B2 -:10165000B607B54203D1234610461946FEE3994E1C -:10166000B54207D1261E05DB1046314600F014FCBA -:101670001BB0F0BD67007F081646002A40D1002944 -:101680000AD08B4A914229D1002C0EDD002D1CDBA3 -:10169000002011461BB0F0BD022B16D0002C14D038 -:1016A000012B12D1002C14DB0FE0002C28DA002DC6 -:1016B00009DB012B03D000207D491BB0F0BD0020C9 -:1016C00081491BB0F0BD012B03D0002001461BB0A7 -:1016D000F0BD00200121C9071BB0F0BD724A914244 -:1016E0000ED1002C01DA002B17D0022B06D00020DF -:1016F000C043FEF7AFFD1BB0F0BD90E20120F8E75C -:10170000E217521C94461A4307D000220892664CF6 -:1017100062465B1E1A4307D009E00120FFF772FD05 -:10172000FFF744FD1BB0F0BD0022644C0892674AED -:1017300090427DDD664B674A98421FDD914202DC94 -:10174000002D05DB4DE05848814217DB002D48DDB8 -:101750000220FFF757FDFFF731FD05460E46002238 -:10176000534B21460898FEF7D7FE084671004908FA -:10177000C00FC007014328461BB0F0BD914215DAE7 -:10178000002D2EDA0220FFF73DFDFFF717FD05467D -:101790000E460022464B21460898FEF7BDFE720019 -:1017A0005208C80FC0070243114617E03E4B99424A -:1017B00023DD002D15DD0220FFF724FDFFF7FEFCE1 -:1017C00005460E4600223A4B21460898FEF7A4FE35 -:1017D000084671004908C00FC007014328461BB0E6 -:1017E000F0BD0220FFF70EFDFFF7F2FC49004908AB -:1017F000E20FD20711431BB0F0BD0022304639463C -:10180000FEF77CFE012205460E46D243FEF7ECFEB3 -:10181000314A324BFEF778FE2A463346FEF77CFE0D -:101820000022284BFEF770FE07462A46334600E0AA -:1018300064E0039110461946FEF76EFE3A46039B9C -:10184000FEF76AFE0746032209915207244B2846F9 -:101850003146FEF761FE07910C90224A204B384634 -:101860000999FEF759FE074601911F4A1F4B28466A -:101870003146FEF751FE3A46019BFEF73FFE074612 -:101880000B460246099107990C98FEF793FD002537 -:101890000E462846079B0C9AFEF730FE3A4627E094 -:1018A000FFFF1F00FFFF0F000000F03F0000E0FF00 -:1018B0000000F07F0000404301FCFFFF0000F0BF8C -:1018C000BE0A00000000E03F0000F0FF0000E04121 -:1018D0000000F043FFFFEF3F555555555555D53F97 -:1018E0004715F73FFE822B6544DF5DF80BAE543E93 -:1018F000099BFEF709FE02460B4652E10125002036 -:101900002D05A94207DA352230463946FEF76CFE2E -:1019100006463420C0430A151218FE4810180390DA -:101920000803FD49000B01430F46FC49884201DCD6 -:10193000002003E0FA49884202DA0120119005E014 -:10194000002011900398401C7F1B0390119805976D -:10195000C200F4480F927844801843680268394600 -:1019600030460D930292FEF7C9FD07910C90304668 -:101970000D9B029A0599FEF71DFD02460B460020BD -:10198000E549FEF7EFFB09910490079B0C9AFEF7DF -:10199000C3FD129000201090E3480D467844006883 -:1019A0000E90012178104907084311990D9B890475 -:1019B00040180121C90447183946029A0E98FEF7CB -:1019C0009DFD3246059BFEF79FFD02460B462946CC -:1019D0001098FEF7A1FD064602913B4629460E9A55 -:1019E0001098FEF799FD079B0C9AFEF78DFD324685 -:1019F000029BFEF783FD099B049AFEF78DFD05917E -:101A0000129A0A902B4610461946FEF785FD0646A7 -:101A10000246C6480F460B4606217844FFF762FB94 -:101A200032463B460091049010461946FEF774FD7D -:101A3000009B049AFEF770FD06460F462B4619469A -:101A4000129A1098FEF7B6FC059B0A9AFEF764FD01 -:101A500032463B46FEF7AEFC109A079104902B46A7 -:101A600010461946FEF758FDB14E00223346099143 -:101A70000290FEF79FFC079B049AFEF79BFC002058 -:101A80000746024633460091FEF738FD099B029A4D -:101A9000FEF734FD079B049AFEF736FD06460D91CE -:101AA0003A462946009B1098FEF736FD07910C90A8 -:101AB0002B463046129A0D99FEF72EFD05460E462E -:101AC0003A46009B05990A98FEF726FD33462A46BA -:101AD000FEF770FC02460B460746099107990C98E1 -:101AE000FEF768FC00250E462846079B0C9AFEF779 -:101AF00005FD3A46099BFEF707FD074607220991B7 -:101B000052078C4B31462846FEF706FD07910090A0 -:101B1000894A884B38460999FEF7FEFC0746019131 -:101B2000864A874B31462846FEF7F6FC3A46019B2B -:101B3000FEF740FC834B7B440F9A9B181A685B6846 -:101B4000FEF738FC029009910398FEF783FB05919C -:101B50000490099B029A07990098FEF72BFC7A4B98 -:101B60007B440F9A9B181A685B6817460393FEF72D -:101B700021FC059B049AFEF71DFC0E462846059B9A -:101B8000049AFEF7BBFC3A46039BFEF7B7FC079BA3 -:101B9000009AFEF7B3FC099B029AFEF7B5FC0246D9 -:101BA0000B46199900200C900F461898FEF7B4FCCC -:101BB000029104903B460C9A19991898FEF79EFCE6 -:101BC0002A463346FEF7A8FC029B049AFEF7F2FB76 -:101BD00009910E902A46334639460C98FEF79CFC34 -:101BE00006460F46099B0E9AFEF7E4FB574A0D4640 -:101BF000914220DB5242AA18024310D132463B46A2 -:101C0000FEF77CFC04900391514A524B09990E98BF -:101C1000FEF7D0FB039B049AFEF7FCFC1ED20220C9 -:101C2000FFF7F0FAFFF7CAFA49004908E20FD207B6 -:101C300011431BB0F0BD6A00474B52089A420DD3C6 -:101C4000464AAA18024300D0CBE532463B46FEF78F -:101C500055FC099B0E9AFEF7DDFCF5D968000023C0 -:101C600040082C490393020D3D4B5218984223DD46 -:101C700001200005521CD04042195000400D401870 -:101C800038497944096813468C463749C1408B432B -:101C900012030121120B090551181422101AC14018 -:101CA0000391002D01DA48420390624630463946DE -:101CB000FEF724FC06460F4632463B4609990E982D -:101CC000FEF778FB00252A46284B28460591FEF7AB -:101CD00023FC07910C90264A264B28460599FEF7CF -:101CE0001BFC0091029032463B4628460599FEF7C0 -:101CF00005FC099B0E9AFEF707FC1F4A1F4BFEF7D7 -:101D00000BFC009B029AFEF755FB07460B4602466A -:101D1000099135E001FCFFFF0000F03F8E980300C1 -:101D20007AB60B00CE060000100700003A0600004D -:101D30000000084009C7EE3FFD033ADCF5015B14E3 -:101D4000E02F3EBE0E050000D404000000009040CD -:101D5000FE822B654715973C00CC904000346F3FC6 -:101D60000000E03F2A040000FFFF0F00432EE63F83 -:101D7000396CA80C615C20BEEF39FAFE422EE63FBA -:101D800007990C98FEF716FB05460E46079B0C9A22 -:101D9000FEF7B4FB3A46099BFEF7B6FB09912A46CB -:101DA00033460E9010461946FEF7B6FB074602462C -:101DB0002F480B46059105217844FFF793F93A46E1 -:101DC000059BFEF7A9FB2A463346FEF79DFB074617 -:101DD000019128463146099B0E9AFEF79DFB099B0F -:101DE0000E9AFEF7E7FA012304910C9000229B075C -:101DF00038460199FEF782FB05910E903A46284637 -:101E00003146019BFEF788FB059B0E9AFEF7AAF967 -:101E1000049B0C9AFEF772FB2A463346FEF76EFBD4 -:101E20000022144BFEF770FB064603980D46000592 -:101E300041190915002912DC30462946039AFEF79C -:101E4000D3FBFFF739F9042801D1FFF7C1F9304678 -:101E50002946039AFEF7C8FB064601E004E029186C -:101E60000B46324621460898FEF756FB1BB0F0BDE4 -:101E7000CC0200000000F03F10B5044601E0FFF77F -:101E800079FA2078641C03490028F8D10A20FFF76A -:101E900071FA10BD2C000020F8B506460C46FEF77E -:101EA00002FC051E0F4600D00120014349000B48EB -:101EB0004908411AC90F0DD0002E01D0012100E0C0 -:101EC00000210C4361004908401AC00F02D10120D3 -:101ED000FFF798F928463946F8BD00000000F07F6A -:101EE00010B50220064908600648406906490843C3 -:101EF00004494861FFF734FA04A0FFF7BDFF10BDA5 -:101F0000003002400000024003500000454E5331B3 -:101F1000202D20574156455F47454E455241544F6D -:101F2000525F4452495645525F415F546573742075 -:101F30002D20245265766973696F6E3A20523030D5 -:101F4000310A00000120034908700020024908609E -:101F50007047000050000020540000200021C163A1 -:101F600000BF03E0C16100220262491C4029F9DB85 -:101F700070470000F8B504460D460026002716A05D -:101F8000FFF77AFF6420A0602020A061A061642098 -:101F900020616061502020600420E063002002E0A6 -:101FA000E0612562401C4028FADB1920C001606214 -:101FB0000020A062E0620120206300206063A06333 -:101FC00001206060002F04D00BA0FFF755FF012611 -:101FD00000273046F8BD00000AE9A9B1E58AA8E566 -:101FE00099A841E6ADA3E5BCA6E6B3A2E6B58BE8A9 -:101FF000AF955C6E000000000AE99499E8AFAF204D -:102000003A20E9A9B1E58AA8E599A841E6B58BE8A7 -:10201000AF95E5A4B1E8B4A50A0000006400E803A8 -:102020008000640032000000000000000000F03F6B -:10203000000000000000F83F000000000000000069 -:102040000000004003B8E23F000000000000000074 -:1020500006D0CF43EBFD4C3E033333333333E33F02 -:10206000FFAB6FDBB66DDB3F4D268F515555D53F2E -:1020700001411DA96074D13F65DBC9934A86CD3FFC -:10208000EF4E454A287ECA3F3E5555555555C53FEA -:1020900093BDBE166CC166BF2CDE25AF6A56113FDC -:1020A000F16BD2C541BDBBBED0A4BE726937663EDE -:1020B0000000000000000000D820001000000020F8 -:1020C00064000000E41100103C21001064000020B6 -:1020D0000C020000F41100100000000002000100DA -:1020E0000000000000C20100000000000400002009 -:1020F00005000000000000000003000000000000D8 -:1021000000000000000000000000000000000000CF -:1021100000000000000000000000000000000000BF -:1021200000000000000000000000000000000000AF -:0C21300000E1F50500E1F50500000000ED +:1008E00010B50446002C04D00E2221460148FFF723 +:1008F00015FC10BD7800002010B5164800780028BF +:1009000027D015480068401C1349086000F02AF8F9 +:10091000124804881048006805210902884204D260 +:1009200021460F4801F002FB12E00B480068052148 +:10093000090488420CD308480068C911884204D2CF +:100940002146074801F0F2FA02E00020024908605F +:1009500000BF10BD580000205C0000206000002097 +:1009600000C00040F8B54548407B002803D044480B +:100970000078002800D1F8BD00244048807A81002A +:1009800045183E48067BC07A810047183B4880885E +:10099000002805DD394881882846FFF7A9FB044671 +:1009A00038480068401C37490860374800780028FC +:1009B00004D0012829D002285CD13DE033480068EA +:1009C000A84217D22F480068A0420DD300202D491D +:1009D00008602A4880882E490988884204DD2C480E +:1009E0000088401C2A49088028480068401C274984 +:1009F000086009E0012024490870002023490860AC +:100A00001E4880882249088034E020480068B842A7 +:100A100009D21A4880881E4908801C480068401C7A +:100A20001A49086007E0022017490870002017499A +:100A30000860144908601DE014480068B04215D2EF +:100A400010480068A0420BD300200E4908601048EF +:100A50000088002804DD0E480088401E0C490880EC +:100A60000A480068401C0949086002E00020084963 +:100A7000088000BF00BF00BF7DE7000078000020B5 +:100A80005800002064000020620000206800002060 +:100A90006000002000B501F015FA00BD00B500208F +:100AA0000749087007490860074908800749087026 +:100AB0000749086007490860074801F02BFA00BDA4 +:100AC000580000205C000020600000206200002030 +:100AD000640000206800002000C0004010B50246FD +:100AE0000F2A14DD1348806B1346103B5C00032370 +:100AF000A34098430F4B98631846806B1346103BF6 +:100B00005C000B46A34018430A4B98630FE009486A +:100B1000406B54000323A3409843064B5863184688 +:100B2000406B54000B46A3401843024B586300200F +:100B300010BD000000100240014604484068012238 +:100B40008A401040C840C0B2704700000010024008 +:100B5000FFB504460D461E460B9F00212046FFF7B9 +:100B6000BDFF012D10D1012F0ED14F480069012189 +:100B7000A14088434C490861084640690121A140D1 +:100B80000843494948613BE0012D10D1002F0ED1A7 +:100B9000454800690121A14088434349086108464E +:100BA00040690121A14088433F49486128E0002D68 +:100BB00014D1012F12D13C4840690121A140884342 +:100BC00039494861084600690121A1400843364976 +:100BD0000861099848620298086311E0002D0FD15E +:100BE000002F0DD1304800690121A14088432E49D2 +:100BF0000861084640690121A14088432A494861AB +:100C0000022E0ED1284880690121A140884326493F +:100C100088610846C1690120A04081432248C16122 +:100C20001FE0002E0ED1204880690121A140084319 +:100C30001D4988610846C0690121A14088431A49BD +:100C4000C8610EE0012E0CD1174881690120A04037 +:100C5000814315488161C0690121A14008431249BF +:100C6000C8611148816A0120A04081430E48816219 +:100C7000806A0A99C907C90FA14008430A498862D6 +:100C80000846C06A0121A14088430749C862084656 +:100C9000C06A0A998907C90FA14008430249C8627E +:100CA000002004B0F0BD000000100240012907D16F +:100CB000074A5268012383401A43054B5A6006E0F5 +:100CC000034A5268012383409A43014B5A6070479C +:100CD0000010024000B503461846FFF72DFF01281B +:100CE00003D1184600F00AF807E01846FFF724FF82 +:100CF000002802D1184600F00BF800BD03494968EE +:100D0000012282409143014A516070470010024025 +:100D100003494968012282401143014A51607047EA +:100D20000010024000207047C206D20E01219140FF +:100D3000014A11607047000080E200E0C206D20E56 +:100D400001219140014A11607047000080E200E0FB +:100D5000C206D20E01219140014A11607047000085 +:100D600080E100E0C206D20E01219140014A1160EB +:100D70007047000080E100E0C206D20E01219140E0 +:100D8000014A11607047000000E100E0C206D20E87 +:100D900001219140014A11607047000000E100E02C +:100DA00001460448406901228A401043014A5061CB +:100DB0000020704700000240014802490860704767 +:100DC00000E1F5057000002000B501200449C8606D +:100DD00004480068401C0349086000F045F800BD65 +:100DE000008000404C00002070B504460820FFF74A +:100DF000D7FF1520FFF7B6FF1520FFF79FFF7D21D6 +:100E0000C90007480068FFF773F9604305460122EF +:100E100029460448FFF798FC1520FFF7B7FF70BD7F +:100E2000240000200080004001200449C8600448DC +:100E30000068401C024908607047000000900040B4 +:100E400054000020004870473C00002010B50621E7 +:100E50000348FFF77CF908210248FFF778F910BD35 +:100E60003C000020420000202B480078401C2A490A +:100E7000087008464078401C487008468078401C3E +:100E800088700846C078401CC87008460079401C2D +:100E900008710846C088401CC880084600780228AF +:100EA00004DB0020087001201C4908701A484078B3 +:100EB000062805DB002018494870012017494870B2 +:100EC000154880780A2805DB002013498870012026 +:100ED000124988701048C078142805DB00200E499C +:100EE000C87001200D49C8700B480079642805DBE3 +:100EF0000020094908710120084908710648C08886 +:100F00007D21C900884205DB00200349C8800120FB +:100F10000249487170470000420000203C00002058 +:100F200010B500240C20FFF7FFFE0120800700F021 +:100F300062F8032806D10120800740680421884315 +:100F4000090748600120800700F055F8022805D005 +:100F50000120800700F04FF8062816D101208007F5 +:100F60004068400840000121890748600846006841 +:100F7000C4B221460120800700F0EEF8012080076E +:100F80004068012108438907486010BD10B500245E +:100F90000D20FFF7C9FE144800F02DF8032805D1F5 +:100FA00011484068042188430F4948600E4800F00A +:100FB00022F8022804D00C4800F01DF8062812D1AF +:100FC00009484068400840000749486008460068F2 +:100FD000C4B22146044800F0BFF80348406801212C +:100FE00008430149486010BD0010004001464869AF +:100FF0008006C00F7047014688680007400F7047A1 +:1010000070B504460D461348844206D10D20FFF703 +:101010009FFE0D20FFF788FE09E001208007844233 +:1010200005D10C20FFF794FE0C20FFF77DFE6068D1 +:101030002978084360600748844203D10D20FFF7F8 +:101040009BFE06E001208007844202D10C20FFF7BE +:1010500093FE70BD00100040F8B504460D46012017 +:10106000800784420BD10020FFF79AFE0121022065 +:10107000FFF734FD01210320FFF730FD0DE0344878 +:1010800084420AD10120FFF78BFE01210C20FFF7DB +:1010900025FD01210D20FFF721FD606BC007C00F6A +:1010A000002801D1102700E00D272A486968006850 +:1010B000FFF71EF839460090FFF71AF8401E86B277 +:1010C000F0B22062FF200002304000126062A0688F +:1010D000E968097889010843A060E86880780128F8 +:1010E00003D1A06801210843A060E068042188437F +:1010F000E060E068297C89000843E060E0688008DF +:101100008000E060E068697C0843E060E0680821F6 +:101110008843E060E068297DC9000843E060287DDD +:1011200001280DD1E06830218843E060E068E97C67 +:1011300009010843E060E068A97C49010843E060D8 +:10114000287A012803D12069202108432061F8BDB5 +:10115000001000402400002000B503460A4600BFEE +:101160001846FFF743FF0028FAD01146184600F052 +:1011700002F8104600BD01607047000010B5024A39 +:10118000024900F0C9F810BD4D13001034000020D2 +:101190002021020C01D010211046020A01D0104675 +:1011A0000839020901D01046091F820801D01046F3 +:1011B000891E420801D0881E7047081A7047000037 +:1011C0004900CA020243100000D004204A0D01D099 +:1011D00001221043044A490D914201D102210843E2 +:1011E000012800D105207047FF070000F8B504462C +:1011F0004F1EC8000838211815461E460868496861 +:101200003A4606239A4310D02A463346FFF784F91C +:101210003A46D200083AA3181A687F1E5B68FFF7A7 +:10122000C9F806223B469343EED1022F23D0042F68 +:1012300011D0062F2FD12A463346FFF76DF9E36A06 +:10124000A26AFFF7B7F82A463346FFF765F9636AE3 +:10125000226AFFF7AFF82A463346FFF75DF9E369E4 +:10126000A269FFF7A7F82A463346FFF755F96369E5 +:101270002269FFF79FF82A463346FFF74DF9E368E6 +:10128000A268FFF797F82A463346FFF745F96368E7 +:101290002268FFF78FF8F8BD002210B513461046FC +:1012A0000149FEF75FFF10BD0000F03F10B5FFF7EA +:1012B00081F810BD002210B5134610461146FEF706 +:1012C00051FF10BD10B50721024A00200907FFF7A2 +:1012D0008BF910BD01030000034A10B5002011076F +:1012E000FFF782F910BD000001FDFFFF02E008C812 +:1012F000121F08C1002AFAD170477047002001E090 +:1013000001C1121F002AFBD170470000014908608B +:101310007047000074000020F8B516460F460446DA +:10132000002503E03946B047641C6D1C2078002876 +:10133000F8D12846F8BD0000024803494861102052 +:10134000086170471377090000E0004070B504465B +:101350000D46E1B20148FFF7FFFE70BD00100040EE +:1013600088B0FFF7DFFCFFF7FDF9012000210091B5 +:1013700002230A46019102901320FFF7E9FB0021A6 +:101380001320FFF793FC2E492E48FFF765FE2E49E8 +:101390002C48FFF735FE0120FFF726FDFFF756FD2D +:1013A00000F07CFD294B0FCB079304AB07C304A8C7 +:1013B000FFF796FAFFF76EFB40E0FFF743FD0446A8 +:1013C0002078002801D000202070A078002801D0CB +:1013D0000020A0702079002801D0002020716079C1 +:1013E00000282AD01A480078401C1949087008467D +:1013F00000780A280BDC17480078002804D1012067 +:1014000014490870FFF746FBFFF776FA10E0104822 +:101410000078142809DC0F480078012808D1002042 +:101420000C490870FFF73AFB02E0002008490870F9 +:101430001320FFF74FFC0020607100BFBDE70000E4 +:10144000080000200010004020000020D41F0010E1 +:101450000000002001000020F0B51FB496B08446C3 +:101460000C460246199D18980390490068006300D5 +:10147000490840080193002A01D0012600E0002617 +:101480009E19FE4BF6185B109E422BD36E00039FF5 +:101490000296002F00D00127F719F84EF84BBE191D +:1014A0009E421FD3039E0346F64F334309D03B466B +:1014B0009C4201D1002A04D0019B002A05D00126BC +:1014C00004E0002039461BB0F0BD00269E19EE4B0B +:1014D0009E4207D8039F029E002F00D00127F619D5 +:1014E0009E4207D92B4660462146189AFFF7DEFE3A +:1014F0001BB0F0BD0023002C29DAE44EB04226DAFE +:10150000E34EB04201DB022321E0DE4EB0421EDB9F +:10151000E04E070DBE19142E09DD3427BF1B039EB4 +:10152000FE400196BE40039FBE420BD00FE0039FDA +:10153000002F0CD11427BF1B0646FE400196BE406B +:10154000864204D1019BDE07F60F02239B1B0E4649 +:10155000164318D1002D16DA002C03D0022B01D02F +:10156000012B06D00220FFF7D1FEFFF795FE1BB03E +:10157000F0BD0220FFF7CAFEFFF78EFE0122D20760 +:1015800051401BB0F0BD039E002E61D1BF4EB04252 +:1015900020D1C148844201D1002A08D0B9488142F3 +:1015A00009DB002D10DB189829461BB0F0BD002088 +:1015B000B4491BB0F0BD002D06DA01222946D2073E +:1015C000189851401BB0F0BDB44979440868496887 +:1015D0001BB0F0BDAB4FB84225D1002D1FDA00295A +:1015E00004D0B14212D1002A09D018E0002A72D1E9 +:1015F000A649E20F0020D20711431BB0F0BD002026 +:10160000E20F0146D20711431BB0F0BDB14206DA2A +:10161000234600203946FEF7A5FD1BB0F0BD10465D +:1016200021461BB0F0BDB14212DA0126B607B54221 +:1016300003D1234610461946FEE3994EB54207D121 +:10164000261E05DB1046314600F004FC1BB0F0BD41 +:1016500067007F081646002A40D100290AD08B4A2D +:10166000914229D1002C0EDD002D1CDB00201146FB +:101670001BB0F0BD022B16D0002C14D0012B12D1C0 +:10168000002C14DB0FE0002C28DA002D09DB012BE5 +:1016900003D000207D491BB0F0BD002081491BB064 +:1016A000F0BD012B03D0002001461BB0F0BD00208F +:1016B0000121C9071BB0F0BD724A91420ED1002C26 +:1016C00001DA002B17D0022B06D00020C043FEF712 +:1016D000C1FD1BB0F0BD90E20120F8E7E217521CFB +:1016E00094461A4307D000220892664C62465B1E5D +:1016F0001A4307D009E00120FFF708FEFFF7DAFDE3 +:101700001BB0F0BD0022644C0892674A90427DDD18 +:10171000664B674A98421FDD914202DC002D05DBD3 +:101720004DE05848814217DB002D48DD0220FFF7CD +:10173000EDFDFFF7C7FD05460E460022534B21463F +:101740000898FEF7E9FE084671004908C00FC00777 +:10175000014328461BB0F0BD914215DA002D2EDA68 +:101760000220FFF7D3FDFFF7ADFD05460E46002230 +:10177000464B21460898FEF7CFFE72005208C80F6C +:10178000C0070243114617E03E4B994223DD002D6E +:1017900015DD0220FFF7BAFDFFF794FD05460E4662 +:1017A00000223A4B21460898FEF7B6FE0846710023 +:1017B0004908C00FC007014328461BB0F0BD0220F6 +:1017C000FFF7A4FDFFF788FD49004908E20FD207A3 +:1017D00011431BB0F0BD002230463946FEF78EFEA5 +:1017E000012205460E46D243FEF7FEFE314A324B39 +:1017F000FEF78AFE2A463346FEF78EFE0022284B6D +:10180000FEF782FE07462A46334600E064E0039175 +:1018100010461946FEF780FE3A46039BFEF77CFE13 +:101820000746032209915207244B28463146FEF70A +:1018300073FE07910C90224A204B38460999FEF717 +:101840006BFE074601911F4A1F4B28463146FEF7A3 +:1018500063FE3A46019BFEF751FE07460B460246E1 +:10186000099107990C98FEF7A5FD00250E4628461C +:10187000079B0C9AFEF742FE3A4627E0FFFF1F0047 +:10188000FFFF0F000000F03F0000E0FF0000F07FCE +:101890000000404301FCFFFF0000F0BFA20A00006F +:1018A0000000E03F0000F0FF0000E0410000F043D6 +:1018B000FFFFEF3F555555555555D53F4715F73F58 +:1018C000FE822B6544DF5DF80BAE543E099BFEF7AC +:1018D0001BFE02460B4652E1012500202D05A942C0 +:1018E00007DA352230463946FEF77EFE06463420BA +:1018F000C0430A151218FE48101803900803FD494A +:10190000000B01430F46FC49884201DC002003E044 +:10191000FA49884202DA0120119005E00020119076 +:101920000398401C7F1B039011980597C200F44850 +:101930000F927844801843680268394630460D9308 +:101940000292FEF7DBFD07910C9030460D9B029A48 +:101950000599FEF72FFD02460B460020E549FEF7EC +:1019600001FC09910490079B0C9AFEF7D5FD12909B +:1019700000201090E3480D46784400680E90012145 +:1019800078104907084311990D9B890440180121DB +:10199000C90447183946029A0E98FEF7AFFD324641 +:1019A000059BFEF7B1FD02460B4629461098FEF74F +:1019B000B3FD064602913B4629460E9A1098FEF763 +:1019C000ABFD079B0C9AFEF79FFD3246029BFEF78C +:1019D00095FD099B049AFEF79FFD0591129A0A90C6 +:1019E0002B4610461946FEF797FD06460246C648A6 +:1019F0000F460B4606217844FFF7F8FB32463B467C +:101A00000091049010461946FEF786FD009B049A4B +:101A1000FEF782FD06460F462B461946129A10988D +:101A2000FEF7C8FC059B0A9AFEF776FD32463B4658 +:101A3000FEF7C0FC109A079104902B4610461946F9 +:101A4000FEF76AFDB14E0022334609910290FEF77F +:101A5000B1FC079B049AFEF7ADFC00200746024646 +:101A600033460091FEF74AFD099B029AFEF746FDB8 +:101A7000079B049AFEF748FD06460D913A46294613 +:101A8000009B1098FEF748FD07910C902B463046BE +:101A9000129A0D99FEF740FD05460E463A46009B08 +:101AA00005990A98FEF738FD33462A46FEF782FC70 +:101AB00002460B460746099107990C98FEF77AFCF7 +:101AC00000250E462846079B0C9AFEF717FD3A465E +:101AD000099BFEF719FD07460722099152078C4B17 +:101AE00031462846FEF718FD07910090894A884B39 +:101AF00038460999FEF710FD07460191864A874B43 +:101B000031462846FEF708FD3A46019BFEF752FC97 +:101B1000834B7B440F9A9B181A685B68FEF74AFC5C +:101B2000029009910398FEF795FB05910490099B9B +:101B3000029A07990098FEF73DFC7A4B7B440F9A76 +:101B40009B181A685B6817460393FEF733FC059BE6 +:101B5000049AFEF72FFC0E462846059B049AFEF7D2 +:101B6000CDFC3A46039BFEF7C9FC079B009AFEF7A3 +:101B7000C5FC099B029AFEF7C7FC02460B46199961 +:101B800000200C900F461898FEF7C6FC02910490B6 +:101B90003B460C9A19991898FEF7B0FC2A46334632 +:101BA000FEF7BAFC029B049AFEF704FC09910E9022 +:101BB0002A46334639460C98FEF7AEFC06460F46D9 +:101BC000099B0E9AFEF7F6FB574A0D46914220DB21 +:101BD0005242AA18024310D132463B46FEF78EFC11 +:101BE00004900391514A524B09990E98FEF7E2FB7B +:101BF000039B049AFEF70EFD1ED20220FFF786FB20 +:101C0000FFF760FB49004908E20FD20711431BB000 +:101C1000F0BD6A00474B52089A420DD3464AAA18B3 +:101C2000024300D0CBE532463B46FEF767FC099BFA +:101C30000E9AFEF7EFFCF5D96800002340082C4906 +:101C40000393020D3D4B5218984223DD01200005FD +:101C5000521CD04042195000400D40183849794478 +:101C6000096813468C463749C1408B431203012152 +:101C7000120B090551181422101AC1400391002DAE +:101C800001DA48420390624630463946FEF736FC98 +:101C900006460F4632463B4609990E98FEF78AFBE8 +:101CA00000252A46284B28460591FEF735FC07916A +:101CB0000C90264A264B28460599FEF72DFC0091EC +:101CC000029032463B4628460599FEF717FC099BD1 +:101CD0000E9AFEF719FC1F4A1F4BFEF71DFC009BD6 +:101CE000029AFEF767FB07460B460246099135E06C +:101CF00001FCFFFF0000F03F8E9803007AB60B0056 +:101D0000B2060000F40600001E06000000000840B5 +:101D100009C7EE3FFD033ADCF5015B14E02F3EBE40 +:101D2000F2040000B804000000009040FE822B6521 +:101D30004715973C00CC904000346F3F0000E03FD7 +:101D40000E040000FFFF0F00432EE63F396CA80C85 +:101D5000615C20BEEF39FAFE422EE63F07990C98EF +:101D6000FEF728FB05460E46079B0C9AFEF7C6FBBE +:101D70003A46099BFEF7C8FB09912A4633460E9066 +:101D800010461946FEF7C8FB074602462F480B4689 +:101D9000059105217844FFF729FA3A46059BFEF79D +:101DA000BBFB2A463346FEF7AFFB074601912846A8 +:101DB0003146099B0E9AFEF7AFFB099B0E9AFEF780 +:101DC000F9FA012304910C9000229B0738460199EF +:101DD000FEF794FB05910E903A4628463146019B4A +:101DE000FEF79AFB059B0E9AFEF7BCF9049B0C9A32 +:101DF000FEF784FB2A463346FEF780FB0022144B95 +:101E0000FEF782FB064603980D46000541190915A9 +:101E1000002912DC30462946039AFEF7E5FBFFF75E +:101E2000CFF9042801D1FFF757FA30462946039A23 +:101E3000FEF7DAFB064601E004E029180B463246BD +:101E400021460898FEF768FB1BB0F0BDB002000009 +:101E50000000F03FF8B506460C46FEF724FC051ED0 +:101E60000F4600D00120014349000B484908411AA0 +:101E7000C90F0DD0002E01D0012100E000210C433C +:101E800061004908401AC00F02D10120FFF73EFA55 +:101E900028463946F8BD00000000F07F10B502204A +:101EA00005490860054840690549084303494861F8 +:101EB000FFF742FA10BD000000300240000002406F +:101EC0000350000001200C49087000200B490860F5 +:101ED0000B48407B002809D000200A4908800A49A5 +:101EE00008700A4908600A49086003E004488088CD +:101EF0000449088070470000580000205C00002062 +:101F000078000020600000206200002064000020B3 +:101F1000680000200021C16300BF03E0C16100220E +:101F20000262491C4029F9DB70470000F8B50446FD +:101F30000D460026002716A0FFF720F96420A060B8 +:101F40002020A061A0616420206160615020206099 +:101F50000420E063002002E0E0612562401C40288C +:101F6000FADB1920C00160620020A062E06201205B +:101F7000206300206063A06301206060002F04D014 +:101F80000BA0FFF7FBF8012600273046F8BD000044 +:101F90000AE9A9B1E58AA8E599A841E6ADA3E5BC9F +:101FA000A6E6B3A2E6B58BE8AF955C6E0000000034 +:101FB0000AE99499E8AFAF203A20E9A9B1E58AA8E7 +:101FC000E599A841E6B58BE8AF95E5A4B1E8B4A5DD +:101FD0000A0000006400E80380006400320002068A +:101FE0000201000000000000000000000000F03FBF +:101FF000000000000000F83F0000000000000000AA +:102000000000004003B8E23F0000000000000000B4 +:1020100006D0CF43EBFD4C3E033333333333E33F42 +:10202000FFAB6FDBB66DDB3F4D268F515555D53F6E +:1020300001411DA96074D13F65DBC9934A86CD3F3C +:10204000EF4E454A287ECA3F3E5555555555C53F2A +:1020500093BDBE166CC166BF2CDE25AF6A56113F1C +:10206000F16BD2C541BDBBBED0A4BE726937663E1E +:102070000000000000000000982000100000002078 +:1020800078000000EC1200101021001078000020F1 +:1020900010020000FC12001000000000020001000D +:1020A00000000000B0AD01000000000004000020AE +:1020B0000003000100000000050000000000000017 +:1020C000000300000000000000000000000000000D +:1020D0000000000000000000000000000000000000 +:1020E00000000000000000000000000000000000F0 +:1020F00000000000000000000000000000000000E0 +:102100000000000000E1F50500E1F5050000000019 :04000005100000C126 :00000001FF diff --git a/Objects/ENS001_BASIC_PRJ.htm b/Objects/ENS001_BASIC_PRJ.htm index 36eebfa..95d0111 100644 --- a/Objects/ENS001_BASIC_PRJ.htm +++ b/Objects/ENS001_BASIC_PRJ.htm @@ -3,9 +3,9 @@ Static Call Graph - [.\Objects\ENS001_BASIC_PRJ.axf]

Static Call Graph for image .\Objects\ENS001_BASIC_PRJ.axf


-

#<CALLGRAPH># ARM Linker, 5060750: Last Updated: Wed Aug 20 11:01:24 2025 +

#<CALLGRAPH># ARM Linker, 5060750: Last Updated: Fri Aug 29 11:28:15 2025

-

Maximum Stack Usage = 360 bytes + Unknown(Cycles, Untraceable Function Pointers)

+

Maximum Stack Usage = 368 bytes + Unknown(Cycles, Untraceable Function Pointers)

Call chain for Maximum Stack Depth:

main ⇒ ClockInit ⇒ ClockInitSet ⇒ pow ⇒ __kernel_poly ⇒ __aeabi_dmul ⇒ _double_epilogue ⇒ _double_round

@@ -56,7 +56,7 @@ Function Pointers

  • UART1_Handler from ens1_uart.o(i.UART1_Handler) referenced from startup_cmsdk_cm0.o(RESET)
  • WG_DRV_Handler from startup_cmsdk_cm0.o(.text) referenced from startup_cmsdk_cm0.o(RESET)
  • __main from entry.o(.ARM.Collect$$$$00000000) referenced from startup_cmsdk_cm0.o(.text) -
  • fputc from retarget.o(i.fputc) referenced from printf1.o(i.__0printf$1) +
  • fputc from retarget.o(i.fputc) referenced from printfb.o(i.__0printf$bare)
  • main from mian.o(i.main) referenced from entry9a.o(.ARM.Collect$$$$0000000B)

    @@ -196,12 +196,12 @@ Global Symbols

    __aeabi_uidiv (Thumb, 0 bytes, Stack size 12 bytes, uidiv.o(.text), UNUSED) -

    __aeabi_uidivmod (Thumb, 44 bytes, Stack size 12 bytes, uidiv.o(.text)) +

    __aeabi_uidivmod (Thumb, 44 bytes, Stack size 12 bytes, uidiv.o(.text))

    [Stack]

    • Max Depth = 12
    • Call Chain = __aeabi_uidivmod

    [Called By]
    • >>   UART_Init -
    • >>   TIMER0_Init -
    • >>   _printf_core +
    • >>   TIMER0_Init +
    • >>   EMS_Process_Ramp

    __aeabi_memcpy (Thumb, 36 bytes, Stack size 0 bytes, memcpya.o(.text)) @@ -399,7 +399,7 @@ Global Symbols

    CMSDK_timer_Init (Thumb, 26 bytes, Stack size 8 bytes, ens1_timer.o(i.CMSDK_timer_Init))

    [Stack]

    • Max Depth = 8
    • Call Chain = CMSDK_timer_Init
    -
    [Called By]
    • >>   TIMER0_Init +
      [Called By]
      • >>   TIMER0_Init

      ClockInit (Thumb, 14 bytes, Stack size 8 bytes, ens1_clock.o(i.ClockInit)) @@ -430,47 +430,54 @@ Global Symbols
      [Called By]

      • >>   main
      -

      EMS_Process (Thumb, 86 bytes, Stack size 8 bytes, ens1_wavegen.o(i.EMS_Process)) -

      [Stack]

      • Max Depth = 60
      • Call Chain = EMS_Process ⇒ wavegen_driverA_sine_test ⇒ puts ⇒ fputc ⇒ UartPutc +

        EMS_Process (Thumb, 92 bytes, Stack size 8 bytes, ens1_wavegen.o(i.EMS_Process)) +

        [Stack]

        • Max Depth = 44
        • Call Chain = EMS_Process ⇒ EMS_Process_Ramp ⇒ __aeabi_uidivmod
        -
        [Calls]
        • >>   wavegen_driverA_sine_test +
          [Calls]
          • >>   wavegen_driverA_sine_test +
          • >>   EMS_Process_Ramp

          [Called By]
          • >>   main
          -

          EMS_Start (Thumb, 14 bytes, Stack size 8 bytes, ens1_wavegen.o(i.EMS_Start)) -

          [Stack]

          • Max Depth = 32
          • Call Chain = EMS_Start ⇒ __2printf +

            EMS_Process_Ramp (Thumb, 278 bytes, Stack size 24 bytes, ens1_wavegen.o(i.EMS_Process_Ramp)) +

            [Stack]

            • Max Depth = 36
            • Call Chain = EMS_Process_Ramp ⇒ __aeabi_uidivmod
            -
            [Calls]
            • >>   __2printf -
            • >>   wavegen_Start +
              [Calls]
              • >>   __aeabi_uidivmod +
              +
              [Called By]
              • >>   EMS_Process +
              + +

              EMS_Start (Thumb, 8 bytes, Stack size 4 bytes, ens1_wavegen.o(i.EMS_Start)) +

              [Stack]

              • Max Depth = 4
              • Call Chain = EMS_Start +
              +
              [Calls]
              • >>   wavegen_Start

              [Called By]
              • >>   main
              -

              EMS_Stop (Thumb, 26 bytes, Stack size 8 bytes, ens1_wavegen.o(i.EMS_Stop)) -

              [Stack]

              • Max Depth = 32
              • Call Chain = EMS_Stop ⇒ __2printf +

                EMS_Stop (Thumb, 36 bytes, Stack size 4 bytes, ens1_wavegen.o(i.EMS_Stop)) +

                [Stack]

                • Max Depth = 4
                • Call Chain = EMS_Stop
                -
                [Calls]
                • >>   __2printf -
                • >>   wavegen_Stop +
                  [Calls]
                  • >>   wavegen_Stop

                  [Called By]
                  • >>   main
                  -

                  GPIO_AltFunction (Thumb, 86 bytes, Stack size 8 bytes, ens1_gpio.o(i.GPIO_AltFunction)) +

                  GPIO_AltFunction (Thumb, 86 bytes, Stack size 8 bytes, ens1_gpio.o(i.GPIO_AltFunction))

                  [Stack]

                  • Max Depth = 8
                  • Call Chain = GPIO_AltFunction

                  [Called By]
                  • >>   UART_Init -
                  • >>   GPIO_IO_Init +
                  • >>   GPIO_IO_Init
                  -

                  GPIO_GetOutputValue (Thumb, 18 bytes, Stack size 0 bytes, ens1_gpio.o(i.GPIO_GetOutputValue)) -

                  [Called By]

                  • >>   GPIO_Overturn +

                    GPIO_GetOutputValue (Thumb, 18 bytes, Stack size 0 bytes, ens1_gpio.o(i.GPIO_GetOutputValue)) +

                    [Called By]

                    • >>   GPIO_Overturn
                    -

                    GPIO_IO_Init (Thumb, 342 bytes, Stack size 36 bytes, ens1_gpio.o(i.GPIO_IO_Init)) +

                    GPIO_IO_Init (Thumb, 342 bytes, Stack size 36 bytes, ens1_gpio.o(i.GPIO_IO_Init))

                    [Stack]

                    • Max Depth = 44
                    • Call Chain = GPIO_IO_Init ⇒ GPIO_AltFunction
                    -
                    [Calls]
                    • >>   GPIO_AltFunction +
                      [Calls]
                      • >>   GPIO_AltFunction

                      [Called By]
                      • >>   main
                      @@ -479,31 +486,31 @@ Global Symbols

                      [Called By]
                      • >>   main
                      -

                      GPIO_Overturn (Thumb, 40 bytes, Stack size 4 bytes, ens1_gpio.o(i.GPIO_Overturn)) +

                      GPIO_Overturn (Thumb, 40 bytes, Stack size 4 bytes, ens1_gpio.o(i.GPIO_Overturn))

                      [Stack]

                      • Max Depth = 4
                      • Call Chain = GPIO_Overturn
                      -
                      [Calls]
                      • >>   GPIO_SetOutput -
                      • >>   GPIO_ResetOutput -
                      • >>   GPIO_GetOutputValue +
                        [Calls]
                        • >>   GPIO_SetOutput +
                        • >>   GPIO_ResetOutput +
                        • >>   GPIO_GetOutputValue

                        [Called By]
                        • >>   main
                        -

                        GPIO_ResetOutput (Thumb, 16 bytes, Stack size 0 bytes, ens1_gpio.o(i.GPIO_ResetOutput)) -

                        [Called By]

                        • >>   GPIO_Overturn +

                          GPIO_ResetOutput (Thumb, 16 bytes, Stack size 0 bytes, ens1_gpio.o(i.GPIO_ResetOutput)) +

                          [Called By]

                          • >>   GPIO_Overturn
                          -

                          GPIO_SetOutput (Thumb, 16 bytes, Stack size 0 bytes, ens1_gpio.o(i.GPIO_SetOutput)) -

                          [Called By]

                          • >>   GPIO_Overturn +

                            GPIO_SetOutput (Thumb, 16 bytes, Stack size 0 bytes, ens1_gpio.o(i.GPIO_SetOutput)) +

                            [Called By]

                            • >>   GPIO_Overturn

                            MTP_init (Thumb, 4 bytes, Stack size 0 bytes, ens1_mtp.o(i.MTP_init))

                            [Called By]

                            • >>   main
                            -

                            PCLK_Enable (Thumb, 20 bytes, Stack size 0 bytes, ens1_clock.o(i.PCLK_Enable)) +

                            PCLK_Enable (Thumb, 20 bytes, Stack size 0 bytes, ens1_clock.o(i.PCLK_Enable))

                            [Called By]

                            • >>   UART_Init -
                            • >>   TIMER0_Init +
                            • >>   TIMER0_Init

                            SystemInit (Thumb, 8 bytes, Stack size 0 bytes, system_cmsdk_cm0.o(i.SystemInit)) @@ -512,20 +519,19 @@ Global Symbols

                            TIMER0_Handler (Thumb, 24 bytes, Stack size 4 bytes, ens1_timer.o(i.TIMER0_Handler))

                            [Stack]

                            • Max Depth = 4
                            • Call Chain = TIMER0_Handler
                            -
                            [Calls]
                            • >>   Time_Manager_Process +
                              [Calls]
                              • >>   Time_Manager_Process

                              [Address Reference Count : 1]
                              • startup_cmsdk_cm0.o(RESET)
                              -

                              TIMER0_Init (Thumb, 72 bytes, Stack size 16 bytes, ens1_timer.o(i.TIMER0_Init)) -

                              [Stack]

                              • Max Depth = 40
                              • Call Chain = TIMER0_Init ⇒ __2printf +

                                TIMER0_Init (Thumb, 56 bytes, Stack size 16 bytes, ens1_timer.o(i.TIMER0_Init)) +

                                [Stack]

                                • Max Depth = 28
                                • Call Chain = TIMER0_Init ⇒ __aeabi_uidivmod

                                [Calls]
                                • >>   CMSDK_timer_Init
                                • >>   NVIC_EnableIRQ -
                                • >>   NVIC_DisableIRQ -
                                • >>   NVIC_ClearPendingIRQ -
                                • >>   PCLK_Enable -
                                • >>   __2printf -
                                • >>   __aeabi_uidivmod +
                                • >>   NVIC_DisableIRQ +
                                • >>   NVIC_ClearPendingIRQ +
                                • >>   PCLK_Enable +
                                • >>   __aeabi_uidivmod

                                [Called By]
                                • >>   main
                                @@ -546,7 +552,7 @@ Global Symbols
                                [Called By]
                                • >>   main
                                -

                                Time_Manager_Process (Thumb, 174 bytes, Stack size 0 bytes, ens1_timer.o(i.Time_Manager_Process)) +

                                Time_Manager_Process (Thumb, 174 bytes, Stack size 0 bytes, ens1_timer.o(i.Time_Manager_Process))

                                [Called By]

                                • >>   TIMER0_Handler
                                @@ -587,12 +593,12 @@ Global Symbols
                                [Called By]
                                • >>   main
                                -

                                UART_Init (Thumb, 164 bytes, Stack size 24 bytes, ens1_uart.o(i.UART_Init)) +

                                UART_Init (Thumb, 248 bytes, Stack size 24 bytes, ens1_uart.o(i.UART_Init))

                                [Stack]

                                • Max Depth = 36
                                • Call Chain = UART_Init ⇒ __aeabi_uidivmod
                                -
                                [Calls]
                                • >>   PCLK_Enable -
                                • >>   GPIO_AltFunction -
                                • >>   __aeabi_uidivmod +
                                  [Calls]
                                  • >>   PCLK_Enable +
                                  • >>   GPIO_AltFunction +
                                  • >>   __aeabi_uidivmod

                                  [Called By]
                                  • >>   main
                                  @@ -612,18 +618,16 @@ Global Symbols

                                  [Called By]
                                  • >>   UartPutc
                                  -

                                  __0printf$1 (Thumb, 24 bytes, Stack size 24 bytes, printf1.o(i.__0printf$1), UNUSED) +

                                  __0printf$bare (Thumb, 12 bytes, Stack size 8 bytes, printfb.o(i.__0printf$bare), UNUSED)

                                  [Calls]

                                  • >>   _printf_core
                                  -

                                  __1printf$1 (Thumb, 0 bytes, Stack size 24 bytes, printf1.o(i.__0printf$1), UNUSED) +

                                  __1printf$bare (Thumb, 0 bytes, Stack size 8 bytes, printfb.o(i.__0printf$bare), UNUSED) -

                                  __2printf (Thumb, 0 bytes, Stack size 24 bytes, printf1.o(i.__0printf$1)) -

                                  [Stack]

                                  • Max Depth = 24
                                  • Call Chain = __2printf +

                                    __2printf (Thumb, 0 bytes, Stack size 8 bytes, printfb.o(i.__0printf$bare)) +

                                    [Stack]

                                    • Max Depth = 8
                                    • Call Chain = __2printf
                                    -
                                    [Called By]
                                    • >>   TIMER0_Init -
                                    • >>   EMS_Stop -
                                    • >>   EMS_Start +
                                      [Called By]
                                      • >>   wavegen_driverA_sine_test

                                      __ARM_clz (Thumb, 46 bytes, Stack size 0 bytes, depilogue.o(i.__ARM_clz)) @@ -694,7 +698,7 @@ Global Symbols

                                    • >>   pow
                                    -

                                    boost_voltage_select_26V (Thumb, 12 bytes, Stack size 0 bytes, ens1_boost.o(i.boost_voltage_select_26V)) +

                                    boost_voltage_select_55V (Thumb, 12 bytes, Stack size 0 bytes, ens1_boost.o(i.boost_voltage_select_55V))

                                    [Called By]

                                    • >>   wavegen_Init
                                    @@ -703,25 +707,23 @@ Global Symbols

                                  [Calls]
                                  • >>   UartPutc
                                  -
                                  [Called By]
                                  • >>   puts +
                                    [Address Reference Count : 1]
                                    • printfb.o(i.__0printf$bare)
                                    -
                                    [Address Reference Count : 1]
                                    • printf1.o(i.__0printf$1) -
                                    -

                                    main (Thumb, 220 bytes, Stack size 24 bytes, mian.o(i.main)) -

                                    [Stack]

                                    • Max Depth = 360
                                    • Call Chain = main ⇒ ClockInit ⇒ ClockInitSet ⇒ pow ⇒ __kernel_poly ⇒ __aeabi_dmul ⇒ _double_epilogue ⇒ _double_round +

                                      main (Thumb, 222 bytes, Stack size 32 bytes, mian.o(i.main)) +

                                      [Stack]

                                      • Max Depth = 368
                                      • Call Chain = main ⇒ ClockInit ⇒ ClockInitSet ⇒ pow ⇒ __kernel_poly ⇒ __aeabi_dmul ⇒ _double_epilogue ⇒ _double_round

                                      [Calls]
                                      • >>   wavegen_Init
                                      • >>   UART_Init
                                      • >>   UART_ITConfig
                                      • >>   Time_Manager_Init
                                      • >>   Time_Manager_GetFlags -
                                      • >>   TIMER0_Init +
                                      • >>   TIMER0_Init
                                      • >>   MTP_init -
                                      • >>   GPIO_Overturn +
                                      • >>   GPIO_Overturn
                                      • >>   GPIO_Output -
                                      • >>   GPIO_IO_Init -
                                      • >>   EMS_Stop -
                                      • >>   EMS_Start +
                                      • >>   GPIO_IO_Init +
                                      • >>   EMS_Stop +
                                      • >>   EMS_Start
                                      • >>   EMS_Process
                                      • >>   EMS_Configure
                                      • >>   ClockInit @@ -752,15 +754,6 @@ Global Symbols
                                        [Called By]
                                        • >>   ClockInitSet
                                        -

                                        puts (Thumb, 28 bytes, Stack size 8 bytes, puts.o(i.puts)) -

                                        [Stack]

                                        • Max Depth = 28
                                        • Call Chain = puts ⇒ fputc ⇒ UartPutc -
                                        -
                                        [Calls]
                                        • >>   fputc -
                                        -
                                        [Called By]
                                        • >>   wavegen_Init -
                                        • >>   wavegen_driverA_sine_test -
                                        -

                                        sqrt (Thumb, 66 bytes, Stack size 24 bytes, sqrt.o(i.sqrt))

                                        [Stack]

                                        • Max Depth = 64
                                        • Call Chain = sqrt ⇒ _dsqrt ⇒ _double_round
                                        @@ -770,27 +763,26 @@ Global Symbols
                                        [Called By]
                                        • >>   pow
                                        -

                                        wavegen_Init (Thumb, 32 bytes, Stack size 8 bytes, ens1_wavegen.o(i.wavegen_Init)) -

                                        [Stack]

                                        • Max Depth = 36
                                        • Call Chain = wavegen_Init ⇒ puts ⇒ fputc ⇒ UartPutc +

                                          wavegen_Init (Thumb, 26 bytes, Stack size 8 bytes, ens1_wavegen.o(i.wavegen_Init)) +

                                          [Stack]

                                          • Max Depth = 8
                                          • Call Chain = wavegen_Init
                                          -
                                          [Calls]
                                          • >>   boost_voltage_select_26V -
                                          • >>   puts +
                                            [Calls]
                                            • >>   boost_voltage_select_55V

                                            [Called By]
                                            • >>   main
                                            -

                                            wavegen_Start (Thumb, 14 bytes, Stack size 0 bytes, ens1_wavegen.o(i.wavegen_Start)) -

                                            [Called By]

                                            • >>   EMS_Start +

                                              wavegen_Start (Thumb, 50 bytes, Stack size 0 bytes, ens1_wavegen.o(i.wavegen_Start)) +

                                              [Called By]

                                              • >>   EMS_Start
                                              -

                                              wavegen_Stop (Thumb, 22 bytes, Stack size 0 bytes, ens1_wavegen.o(i.wavegen_Stop)) -

                                              [Called By]

                                              • >>   EMS_Stop +

                                                wavegen_Stop (Thumb, 22 bytes, Stack size 0 bytes, ens1_wavegen.o(i.wavegen_Stop)) +

                                                [Called By]

                                                • >>   EMS_Stop
                                                -

                                                wavegen_driverA_sine_test (Thumb, 98 bytes, Stack size 24 bytes, ens1_wavegen.o(i.wavegen_driverA_sine_test)) -

                                                [Stack]

                                                • Max Depth = 52
                                                • Call Chain = wavegen_driverA_sine_test ⇒ puts ⇒ fputc ⇒ UartPutc +

                                                  wavegen_driverA_sine_test (Thumb, 98 bytes, Stack size 24 bytes, ens1_wavegen.o(i.wavegen_driverA_sine_test)) +

                                                  [Stack]

                                                  • Max Depth = 32
                                                  • Call Chain = wavegen_driverA_sine_test ⇒ __2printf
                                                  -
                                                  [Calls]
                                                  • >>   puts +
                                                    [Calls]
                                                    • >>   __2printf

                                                    [Called By]
                                                    • >>   EMS_Process
                                                    @@ -812,22 +804,20 @@ Local Symbols

                                                    [Called By]
                                                    • >>   UART_ITConfig
                                                    -

                                                    NVIC_ClearPendingIRQ (Thumb, 14 bytes, Stack size 0 bytes, ens1_timer.o(i.NVIC_ClearPendingIRQ)) -

                                                    [Called By]

                                                    • >>   TIMER0_Init +

                                                      NVIC_ClearPendingIRQ (Thumb, 14 bytes, Stack size 0 bytes, ens1_timer.o(i.NVIC_ClearPendingIRQ)) +

                                                      [Called By]

                                                      • >>   TIMER0_Init
                                                      -

                                                      NVIC_DisableIRQ (Thumb, 14 bytes, Stack size 0 bytes, ens1_timer.o(i.NVIC_DisableIRQ)) -

                                                      [Called By]

                                                      • >>   TIMER0_Init +

                                                        NVIC_DisableIRQ (Thumb, 14 bytes, Stack size 0 bytes, ens1_timer.o(i.NVIC_DisableIRQ)) +

                                                        [Called By]

                                                        • >>   TIMER0_Init

                                                        NVIC_EnableIRQ (Thumb, 14 bytes, Stack size 0 bytes, ens1_timer.o(i.NVIC_EnableIRQ)) -

                                                        [Called By]

                                                        • >>   TIMER0_Init +

                                                          [Called By]
                                                          • >>   TIMER0_Init
                                                          -

                                                          _printf_core (Thumb, 332 bytes, Stack size 88 bytes, printf1.o(i._printf_core), UNUSED) -

                                                          [Calls]

                                                          • >>   __aeabi_uidivmod -
                                                          -
                                                          [Called By]
                                                          • >>   __0printf$1 +

                                                            _printf_core (Thumb, 30 bytes, Stack size 24 bytes, printfb.o(i._printf_core), UNUSED) +

                                                            [Called By]

                                                            • >>   __0printf$bare

                                                            diff --git a/Objects/ENS001_BASIC_PRJ_ENS001_BASIC_PRJ.dep b/Objects/ENS001_BASIC_PRJ_ENS001_BASIC_PRJ.dep index e15f30c..b0b9a8e 100644 --- a/Objects/ENS001_BASIC_PRJ_ENS001_BASIC_PRJ.dep +++ b/Objects/ENS001_BASIC_PRJ_ENS001_BASIC_PRJ.dep @@ -1,8 +1,9 @@ Dependencies for Project 'ENS001_BASIC_PRJ', Target 'ENS001_BASIC_PRJ': (DO NOT MODIFY !) CompilerVersion: 5060750::V5.06 update 6 (build 750)::.\ARM_Compiler_5.06u7 -F (.\USER\mian.c)(0x68A53A7B)(--c99 -c --cpu Cortex-M0 -D__MICROLIB --li -g -O0 --apcs=interwork --split_sections -I .\CORE\INCLUDE -I .\USER -I .\FWLIB\include -ID:\Keil_v5\ARM\Packs\ARM\Cortex_DFP\1.1.0\Device\ARMCM0\Include -ID:\Keil_v5\ARM\Packs\ARM\Cortex_DFP\1.1.0\Device\ARM\ARMCM0\Include -D__UVISION_VERSION="538" -DARMCM0 -o .\objects\mian.o --omf_browse .\objects\mian.crf --depend .\objects\mian.d) -I (USER\my_header.h)(0x689C4B9B) +F (.\USER\mian.c)(0x68B11E1F)(--c99 -c --cpu Cortex-M0 -D__MICROLIB --li -g -O0 --apcs=interwork --split_sections -I .\CORE\INCLUDE -I .\USER -I .\FWLIB\include -ID:\Keil_v5\ARM\Packs\ARM\Cortex_DFP\1.1.0\Device\ARMCM0\Include -ID:\Keil_v5\ARM\Packs\ARM\Cortex_DFP\1.1.0\Device\ARM\ARMCM0\Include -D__UVISION_VERSION="538" -DARMCM0 -o .\objects\mian.o --omf_browse .\objects\mian.crf --depend .\objects\mian.d) +I (USER\my_header.h)(0x68B11CC5) I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\stdio.h)(0x599ECD2C) +I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\string.h)(0x599ECD2C) I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\math.h)(0x599ECD2E) I (.\CORE\INCLUDE\CMSDK_CM0.h)(0x64D5ADE8) I (.\CORE\INCLUDE\core_cm0.h)(0x63648DE6) @@ -11,17 +12,17 @@ I (.\CORE\INCLUDE\core_cmInstr.h)(0x63648DE6) I (.\CORE\INCLUDE\core_cmFunc.h)(0x63648DE6) I (.\CORE\INCLUDE\system_CMSDK_CM0.h)(0x63648DE6) I (.\FWLIB\include\ENS1_TIMER.h)(0x68A5333E) -I (.\USER\my_header.h)(0x689C4B9B) +I (.\USER\my_header.h)(0x68B11CC5) I (.\FWLIB\include\ENS1_MTP.h)(0x65605CD6) I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\stdlib.h)(0x599ECD2C) -I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\string.h)(0x599ECD2C) I (.\FWLIB\include\ENS1_CLOCK.h)(0x68358097) -I (.\FWLIB\include\ENS1_UART.h)(0x689C4BC8) -I (.\FWLIB\include\ENS1_GPIO.h)(0x656546CE) -I (.\FWLIB\include\ENS1_WAVEGEN.h)(0x68A53A7B) -F (.\FWLIB\source\ENS1_UART.c)(0x689C4BE6)(--c99 -c --cpu Cortex-M0 -D__MICROLIB --li -g -O0 --apcs=interwork --split_sections -I .\CORE\INCLUDE -I .\USER -I .\FWLIB\include -ID:\Keil_v5\ARM\Packs\ARM\Cortex_DFP\1.1.0\Device\ARMCM0\Include -ID:\Keil_v5\ARM\Packs\ARM\Cortex_DFP\1.1.0\Device\ARM\ARMCM0\Include -D__UVISION_VERSION="538" -DARMCM0 -o .\objects\ens1_uart.o --omf_browse .\objects\ens1_uart.crf --depend .\objects\ens1_uart.d) -I (.\USER\my_header.h)(0x689C4B9B) +I (.\FWLIB\include\ENS1_UART.h)(0x68B10579) +I (.\FWLIB\include\ENS1_GPIO.h)(0x68B11DDD) +I (.\FWLIB\include\ENS1_WAVEGEN.h)(0x68A53F9C) +F (.\FWLIB\source\ENS1_UART.c)(0x68B117BC)(--c99 -c --cpu Cortex-M0 -D__MICROLIB --li -g -O0 --apcs=interwork --split_sections -I .\CORE\INCLUDE -I .\USER -I .\FWLIB\include -ID:\Keil_v5\ARM\Packs\ARM\Cortex_DFP\1.1.0\Device\ARMCM0\Include -ID:\Keil_v5\ARM\Packs\ARM\Cortex_DFP\1.1.0\Device\ARM\ARMCM0\Include -D__UVISION_VERSION="538" -DARMCM0 -o .\objects\ens1_uart.o --omf_browse .\objects\ens1_uart.crf --depend .\objects\ens1_uart.d) +I (.\USER\my_header.h)(0x68B11CC5) I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\stdio.h)(0x599ECD2C) +I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\string.h)(0x599ECD2C) I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\math.h)(0x599ECD2E) I (.\CORE\INCLUDE\CMSDK_CM0.h)(0x64D5ADE8) I (.\CORE\INCLUDE\core_cm0.h)(0x63648DE6) @@ -30,12 +31,13 @@ I (.\CORE\INCLUDE\core_cmInstr.h)(0x63648DE6) I (.\CORE\INCLUDE\core_cmFunc.h)(0x63648DE6) I (.\CORE\INCLUDE\system_CMSDK_CM0.h)(0x63648DE6) I (.\FWLIB\include\ENS1_TIMER.h)(0x68A5333E) -I (.\FWLIB\include\ENS1_UART.h)(0x689C4BC8) +I (.\FWLIB\include\ENS1_UART.h)(0x68B10579) I (.\FWLIB\include\ENS1_CLOCK.h)(0x68358097) -I (.\FWLIB\include\ENS1_GPIO.h)(0x656546CE) +I (.\FWLIB\include\ENS1_GPIO.h)(0x68B11DDD) F (.\FWLIB\source\ENS1_GPIO.c)(0x689C4B85)(--c99 -c --cpu Cortex-M0 -D__MICROLIB --li -g -O0 --apcs=interwork --split_sections -I .\CORE\INCLUDE -I .\USER -I .\FWLIB\include -ID:\Keil_v5\ARM\Packs\ARM\Cortex_DFP\1.1.0\Device\ARMCM0\Include -ID:\Keil_v5\ARM\Packs\ARM\Cortex_DFP\1.1.0\Device\ARM\ARMCM0\Include -D__UVISION_VERSION="538" -DARMCM0 -o .\objects\ens1_gpio.o --omf_browse .\objects\ens1_gpio.crf --depend .\objects\ens1_gpio.d) -I (.\USER\my_header.h)(0x689C4B9B) +I (.\USER\my_header.h)(0x68B11CC5) I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\stdio.h)(0x599ECD2C) +I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\string.h)(0x599ECD2C) I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\math.h)(0x599ECD2E) I (.\CORE\INCLUDE\CMSDK_CM0.h)(0x64D5ADE8) I (.\CORE\INCLUDE\core_cm0.h)(0x63648DE6) @@ -44,8 +46,8 @@ I (.\CORE\INCLUDE\core_cmInstr.h)(0x63648DE6) I (.\CORE\INCLUDE\core_cmFunc.h)(0x63648DE6) I (.\CORE\INCLUDE\system_CMSDK_CM0.h)(0x63648DE6) I (.\FWLIB\include\ENS1_TIMER.h)(0x68A5333E) -I (.\FWLIB\include\ENS1_GPIO.h)(0x656546CE) -F (.\FWLIB\source\ENS1_MTP.c)(0x680B4E85)(--c99 -c --cpu Cortex-M0 -D__MICROLIB --li -g -O0 --apcs=interwork --split_sections -I .\CORE\INCLUDE -I .\USER -I .\FWLIB\include -ID:\Keil_v5\ARM\Packs\ARM\Cortex_DFP\1.1.0\Device\ARMCM0\Include -ID:\Keil_v5\ARM\Packs\ARM\Cortex_DFP\1.1.0\Device\ARM\ARMCM0\Include -D__UVISION_VERSION="538" -DARMCM0 -o .\objects\ens1_mtp.o --omf_browse .\objects\ens1_mtp.crf --depend .\objects\ens1_mtp.d) +I (.\FWLIB\include\ENS1_GPIO.h)(0x68B11DDD) +F (.\FWLIB\source\ENS1_MTP.c)(0x68B10C84)(--c99 -c --cpu Cortex-M0 -D__MICROLIB --li -g -O0 --apcs=interwork --split_sections -I .\CORE\INCLUDE -I .\USER -I .\FWLIB\include -ID:\Keil_v5\ARM\Packs\ARM\Cortex_DFP\1.1.0\Device\ARMCM0\Include -ID:\Keil_v5\ARM\Packs\ARM\Cortex_DFP\1.1.0\Device\ARM\ARMCM0\Include -D__UVISION_VERSION="538" -DARMCM0 -o .\objects\ens1_mtp.o --omf_browse .\objects\ens1_mtp.crf --depend .\objects\ens1_mtp.d) I (.\FWLIB\include\ENS1_MTP.h)(0x65605CD6) I (.\CORE\INCLUDE\CMSDK_CM0.h)(0x64D5ADE8) I (.\CORE\INCLUDE\core_cm0.h)(0x63648DE6) @@ -55,14 +57,15 @@ I (.\CORE\INCLUDE\core_cmFunc.h)(0x63648DE6) I (.\CORE\INCLUDE\system_CMSDK_CM0.h)(0x63648DE6) I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\stdlib.h)(0x599ECD2C) I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\string.h)(0x599ECD2C) -I (.\USER\my_header.h)(0x689C4B9B) +I (.\USER\my_header.h)(0x68B11CC5) I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\stdio.h)(0x599ECD2C) I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\math.h)(0x599ECD2E) I (.\FWLIB\include\ENS1_TIMER.h)(0x68A5333E) F (.\FWLIB\source\ENS1_CLOCK.c)(0x68A5300C)(--c99 -c --cpu Cortex-M0 -D__MICROLIB --li -g -O0 --apcs=interwork --split_sections -I .\CORE\INCLUDE -I .\USER -I .\FWLIB\include -ID:\Keil_v5\ARM\Packs\ARM\Cortex_DFP\1.1.0\Device\ARMCM0\Include -ID:\Keil_v5\ARM\Packs\ARM\Cortex_DFP\1.1.0\Device\ARM\ARMCM0\Include -D__UVISION_VERSION="538" -DARMCM0 -o .\objects\ens1_clock.o --omf_browse .\objects\ens1_clock.crf --depend .\objects\ens1_clock.d) I (.\FWLIB\include\ENS1_CLOCK.h)(0x68358097) -I (.\USER\my_header.h)(0x689C4B9B) +I (.\USER\my_header.h)(0x68B11CC5) I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\stdio.h)(0x599ECD2C) +I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\string.h)(0x599ECD2C) I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\math.h)(0x599ECD2E) I (.\CORE\INCLUDE\CMSDK_CM0.h)(0x64D5ADE8) I (.\CORE\INCLUDE\core_cm0.h)(0x63648DE6) @@ -82,7 +85,7 @@ I (.\CORE\INCLUDE\core_cm0.h)(0x63648DE6) I (.\CORE\INCLUDE\core_cmInstr.h)(0x63648DE6) I (.\CORE\INCLUDE\core_cmFunc.h)(0x63648DE6) I (.\CORE\INCLUDE\system_CMSDK_CM0.h)(0x63648DE6) -F (.\FWLIB\source\ENS1_TIMER.c)(0x68A53735)(--c99 -c --cpu Cortex-M0 -D__MICROLIB --li -g -O0 --apcs=interwork --split_sections -I .\CORE\INCLUDE -I .\USER -I .\FWLIB\include -ID:\Keil_v5\ARM\Packs\ARM\Cortex_DFP\1.1.0\Device\ARMCM0\Include -ID:\Keil_v5\ARM\Packs\ARM\Cortex_DFP\1.1.0\Device\ARM\ARMCM0\Include -D__UVISION_VERSION="538" -DARMCM0 -o .\objects\ens1_timer.o --omf_browse .\objects\ens1_timer.crf --depend .\objects\ens1_timer.d) +F (.\FWLIB\source\ENS1_TIMER.c)(0x68B11CB3)(--c99 -c --cpu Cortex-M0 -D__MICROLIB --li -g -O0 --apcs=interwork --split_sections -I .\CORE\INCLUDE -I .\USER -I .\FWLIB\include -ID:\Keil_v5\ARM\Packs\ARM\Cortex_DFP\1.1.0\Device\ARMCM0\Include -ID:\Keil_v5\ARM\Packs\ARM\Cortex_DFP\1.1.0\Device\ARM\ARMCM0\Include -D__UVISION_VERSION="538" -DARMCM0 -o .\objects\ens1_timer.o --omf_browse .\objects\ens1_timer.crf --depend .\objects\ens1_timer.d) I (.\FWLIB\include\ENS1_TIMER.h)(0x68A5333E) I (.\CORE\INCLUDE\CMSDK_CM0.h)(0x64D5ADE8) I (.\CORE\INCLUDE\core_cm0.h)(0x63648DE6) @@ -90,34 +93,36 @@ I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\stdint.h)(0x599ECD2E) I (.\CORE\INCLUDE\core_cmInstr.h)(0x63648DE6) I (.\CORE\INCLUDE\core_cmFunc.h)(0x63648DE6) I (.\CORE\INCLUDE\system_CMSDK_CM0.h)(0x63648DE6) -I (.\USER\my_header.h)(0x689C4B9B) +I (.\USER\my_header.h)(0x68B11CC5) I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\stdio.h)(0x599ECD2C) +I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\string.h)(0x599ECD2C) I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\math.h)(0x599ECD2E) I (.\FWLIB\include\ENS_CURRENT_CALIBRATION.h)(0x6566A27C) I (.\FWLIB\include\ENS1_CLOCK.h)(0x68358097) F (.\FWLIB\source\ENS1_BOOST.c)(0x689E9D44)(--c99 -c --cpu Cortex-M0 -D__MICROLIB --li -g -O0 --apcs=interwork --split_sections -I .\CORE\INCLUDE -I .\USER -I .\FWLIB\include -ID:\Keil_v5\ARM\Packs\ARM\Cortex_DFP\1.1.0\Device\ARMCM0\Include -ID:\Keil_v5\ARM\Packs\ARM\Cortex_DFP\1.1.0\Device\ARM\ARMCM0\Include -D__UVISION_VERSION="538" -DARMCM0 -o .\objects\ens1_boost.o --omf_browse .\objects\ens1_boost.crf --depend .\objects\ens1_boost.d) I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\stdio.h)(0x599ECD2C) -I (.\FWLIB\include\ENS1_BOOST.h)(0x689E9D44) +I (.\FWLIB\include\ENS1_BOOST.h)(0x68B11D22) I (.\CORE\INCLUDE\CMSDK_CM0.h)(0x64D5ADE8) I (.\CORE\INCLUDE\core_cm0.h)(0x63648DE6) I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\stdint.h)(0x599ECD2E) I (.\CORE\INCLUDE\core_cmInstr.h)(0x63648DE6) I (.\CORE\INCLUDE\core_cmFunc.h)(0x63648DE6) I (.\CORE\INCLUDE\system_CMSDK_CM0.h)(0x63648DE6) -F (.\FWLIB\source\ENS1_WAVEGEN.c)(0x68A53A7B)(--c99 -c --cpu Cortex-M0 -D__MICROLIB --li -g -O0 --apcs=interwork --split_sections -I .\CORE\INCLUDE -I .\USER -I .\FWLIB\include -ID:\Keil_v5\ARM\Packs\ARM\Cortex_DFP\1.1.0\Device\ARMCM0\Include -ID:\Keil_v5\ARM\Packs\ARM\Cortex_DFP\1.1.0\Device\ARM\ARMCM0\Include -D__UVISION_VERSION="538" -DARMCM0 -o .\objects\ens1_wavegen.o --omf_browse .\objects\ens1_wavegen.crf --depend .\objects\ens1_wavegen.d) +F (.\FWLIB\source\ENS1_WAVEGEN.c)(0x68B11C3C)(--c99 -c --cpu Cortex-M0 -D__MICROLIB --li -g -O0 --apcs=interwork --split_sections -I .\CORE\INCLUDE -I .\USER -I .\FWLIB\include -ID:\Keil_v5\ARM\Packs\ARM\Cortex_DFP\1.1.0\Device\ARMCM0\Include -ID:\Keil_v5\ARM\Packs\ARM\Cortex_DFP\1.1.0\Device\ARM\ARMCM0\Include -D__UVISION_VERSION="538" -DARMCM0 -o .\objects\ens1_wavegen.o --omf_browse .\objects\ens1_wavegen.crf --depend .\objects\ens1_wavegen.d) I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\stdio.h)(0x599ECD2C) -I (.\FWLIB\include\ENS1_WAVEGEN.h)(0x68A53A7B) +I (.\FWLIB\include\ENS1_WAVEGEN.h)(0x68A53F9C) I (.\CORE\INCLUDE\CMSDK_CM0.h)(0x64D5ADE8) I (.\CORE\INCLUDE\core_cm0.h)(0x63648DE6) I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\stdint.h)(0x599ECD2E) I (.\CORE\INCLUDE\core_cmInstr.h)(0x63648DE6) I (.\CORE\INCLUDE\core_cmFunc.h)(0x63648DE6) I (.\CORE\INCLUDE\system_CMSDK_CM0.h)(0x63648DE6) -I (.\USER\my_header.h)(0x689C4B9B) +I (.\USER\my_header.h)(0x68B11CC5) +I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\string.h)(0x599ECD2C) I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\math.h)(0x599ECD2E) I (.\FWLIB\include\ENS1_TIMER.h)(0x68A5333E) I (.\FWLIB\include\ENS1_CLOCK.h)(0x68358097) -I (.\FWLIB\include\ENS1_BOOST.h)(0x689E9D44) +I (.\FWLIB\include\ENS1_BOOST.h)(0x68B11D22) F (.\CORE\system_CMSDK_CM0.c)(0x63648DE6)(--c99 -c --cpu Cortex-M0 -D__MICROLIB --li -g -O0 --apcs=interwork --split_sections -I .\CORE\INCLUDE -I .\USER -I .\FWLIB\include -ID:\Keil_v5\ARM\Packs\ARM\Cortex_DFP\1.1.0\Device\ARMCM0\Include -ID:\Keil_v5\ARM\Packs\ARM\Cortex_DFP\1.1.0\Device\ARM\ARMCM0\Include -D__UVISION_VERSION="538" -DARMCM0 -o .\objects\system_cmsdk_cm0.o --omf_browse .\objects\system_cmsdk_cm0.crf --depend .\objects\system_cmsdk_cm0.d) I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\stdint.h)(0x599ECD2E) I (.\CORE\INCLUDE\CMSDK_CM0.h)(0x64D5ADE8) diff --git a/Objects/ens1_boost.crf b/Objects/ens1_boost.crf index ce9613d..ef63515 100644 Binary files a/Objects/ens1_boost.crf and b/Objects/ens1_boost.crf differ diff --git a/Objects/ens1_boost.o b/Objects/ens1_boost.o index 7553a4e..ef8d956 100644 Binary files a/Objects/ens1_boost.o and b/Objects/ens1_boost.o differ diff --git a/Objects/ens1_clock.crf b/Objects/ens1_clock.crf index d37429f..a22f59d 100644 Binary files a/Objects/ens1_clock.crf and b/Objects/ens1_clock.crf differ diff --git a/Objects/ens1_clock.d b/Objects/ens1_clock.d index cd9acb9..5fa5e1e 100644 --- a/Objects/ens1_clock.d +++ b/Objects/ens1_clock.d @@ -2,6 +2,7 @@ .\objects\ens1_clock.o: .\FWLIB\include\ENS1_CLOCK.h .\objects\ens1_clock.o: .\USER\my_header.h .\objects\ens1_clock.o: D:\Keil_v5\ARM\ARM_Compiler_5.06u7\Bin\..\include\stdio.h +.\objects\ens1_clock.o: D:\Keil_v5\ARM\ARM_Compiler_5.06u7\Bin\..\include\string.h .\objects\ens1_clock.o: D:\Keil_v5\ARM\ARM_Compiler_5.06u7\Bin\..\include\math.h .\objects\ens1_clock.o: .\CORE\INCLUDE\CMSDK_CM0.h .\objects\ens1_clock.o: .\CORE\INCLUDE\core_cm0.h diff --git a/Objects/ens1_clock.o b/Objects/ens1_clock.o index b11ecaf..b9f3611 100644 Binary files a/Objects/ens1_clock.o and b/Objects/ens1_clock.o differ diff --git a/Objects/ens1_gpio.crf b/Objects/ens1_gpio.crf index 37dee6a..8900f8c 100644 Binary files a/Objects/ens1_gpio.crf and b/Objects/ens1_gpio.crf differ diff --git a/Objects/ens1_gpio.d b/Objects/ens1_gpio.d index bacb8e9..cc547a6 100644 --- a/Objects/ens1_gpio.d +++ b/Objects/ens1_gpio.d @@ -1,6 +1,7 @@ .\objects\ens1_gpio.o: FWLIB\source\ENS1_GPIO.c .\objects\ens1_gpio.o: .\USER\my_header.h .\objects\ens1_gpio.o: D:\Keil_v5\ARM\ARM_Compiler_5.06u7\Bin\..\include\stdio.h +.\objects\ens1_gpio.o: D:\Keil_v5\ARM\ARM_Compiler_5.06u7\Bin\..\include\string.h .\objects\ens1_gpio.o: D:\Keil_v5\ARM\ARM_Compiler_5.06u7\Bin\..\include\math.h .\objects\ens1_gpio.o: .\CORE\INCLUDE\CMSDK_CM0.h .\objects\ens1_gpio.o: .\CORE\INCLUDE\core_cm0.h diff --git a/Objects/ens1_gpio.o b/Objects/ens1_gpio.o index 0cc1396..1891a3a 100644 Binary files a/Objects/ens1_gpio.o and b/Objects/ens1_gpio.o differ diff --git a/Objects/ens1_mtp.crf b/Objects/ens1_mtp.crf index 7767fda..f9c70d2 100644 Binary files a/Objects/ens1_mtp.crf and b/Objects/ens1_mtp.crf differ diff --git a/Objects/ens1_mtp.o b/Objects/ens1_mtp.o index dc4942c..c6a4f72 100644 Binary files a/Objects/ens1_mtp.o and b/Objects/ens1_mtp.o differ diff --git a/Objects/ens1_timer.crf b/Objects/ens1_timer.crf index 5ec4e6d..bcbd926 100644 Binary files a/Objects/ens1_timer.crf and b/Objects/ens1_timer.crf differ diff --git a/Objects/ens1_timer.d b/Objects/ens1_timer.d index bd569e6..c738a0a 100644 --- a/Objects/ens1_timer.d +++ b/Objects/ens1_timer.d @@ -8,6 +8,7 @@ .\objects\ens1_timer.o: .\CORE\INCLUDE\system_CMSDK_CM0.h .\objects\ens1_timer.o: .\USER\my_header.h .\objects\ens1_timer.o: D:\Keil_v5\ARM\ARM_Compiler_5.06u7\Bin\..\include\stdio.h +.\objects\ens1_timer.o: D:\Keil_v5\ARM\ARM_Compiler_5.06u7\Bin\..\include\string.h .\objects\ens1_timer.o: D:\Keil_v5\ARM\ARM_Compiler_5.06u7\Bin\..\include\math.h .\objects\ens1_timer.o: .\FWLIB\include\ENS1_TIMER.h .\objects\ens1_timer.o: .\FWLIB\include\ENS_CURRENT_CALIBRATION.h diff --git a/Objects/ens1_timer.o b/Objects/ens1_timer.o index 027cdf9..be68289 100644 Binary files a/Objects/ens1_timer.o and b/Objects/ens1_timer.o differ diff --git a/Objects/ens1_uart.crf b/Objects/ens1_uart.crf index 9dd3c2e..da07e57 100644 Binary files a/Objects/ens1_uart.crf and b/Objects/ens1_uart.crf differ diff --git a/Objects/ens1_uart.d b/Objects/ens1_uart.d index 970edc9..d6e0494 100644 --- a/Objects/ens1_uart.d +++ b/Objects/ens1_uart.d @@ -1,6 +1,7 @@ .\objects\ens1_uart.o: FWLIB\source\ENS1_UART.c .\objects\ens1_uart.o: .\USER\my_header.h .\objects\ens1_uart.o: D:\Keil_v5\ARM\ARM_Compiler_5.06u7\Bin\..\include\stdio.h +.\objects\ens1_uart.o: D:\Keil_v5\ARM\ARM_Compiler_5.06u7\Bin\..\include\string.h .\objects\ens1_uart.o: D:\Keil_v5\ARM\ARM_Compiler_5.06u7\Bin\..\include\math.h .\objects\ens1_uart.o: .\CORE\INCLUDE\CMSDK_CM0.h .\objects\ens1_uart.o: .\CORE\INCLUDE\core_cm0.h diff --git a/Objects/ens1_uart.o b/Objects/ens1_uart.o index 2187e69..c92d369 100644 Binary files a/Objects/ens1_uart.o and b/Objects/ens1_uart.o differ diff --git a/Objects/ens1_wavegen.crf b/Objects/ens1_wavegen.crf index 72c056c..f703960 100644 Binary files a/Objects/ens1_wavegen.crf and b/Objects/ens1_wavegen.crf differ diff --git a/Objects/ens1_wavegen.d b/Objects/ens1_wavegen.d index feaf2ab..ef8f317 100644 --- a/Objects/ens1_wavegen.d +++ b/Objects/ens1_wavegen.d @@ -8,6 +8,7 @@ .\objects\ens1_wavegen.o: .\CORE\INCLUDE\core_cmFunc.h .\objects\ens1_wavegen.o: .\CORE\INCLUDE\system_CMSDK_CM0.h .\objects\ens1_wavegen.o: .\USER\my_header.h +.\objects\ens1_wavegen.o: D:\Keil_v5\ARM\ARM_Compiler_5.06u7\Bin\..\include\string.h .\objects\ens1_wavegen.o: D:\Keil_v5\ARM\ARM_Compiler_5.06u7\Bin\..\include\math.h .\objects\ens1_wavegen.o: .\FWLIB\include\ENS1_TIMER.h .\objects\ens1_wavegen.o: .\USER\my_header.h diff --git a/Objects/ens1_wavegen.o b/Objects/ens1_wavegen.o index 09bc28a..d6cc11e 100644 Binary files a/Objects/ens1_wavegen.o and b/Objects/ens1_wavegen.o differ diff --git a/Objects/mian.crf b/Objects/mian.crf index 4e3fcd1..2046aca 100644 Binary files a/Objects/mian.crf and b/Objects/mian.crf differ diff --git a/Objects/mian.d b/Objects/mian.d index d773fae..17899a1 100644 --- a/Objects/mian.d +++ b/Objects/mian.d @@ -1,6 +1,7 @@ .\objects\mian.o: USER\mian.c .\objects\mian.o: USER\my_header.h .\objects\mian.o: D:\Keil_v5\ARM\ARM_Compiler_5.06u7\Bin\..\include\stdio.h +.\objects\mian.o: D:\Keil_v5\ARM\ARM_Compiler_5.06u7\Bin\..\include\string.h .\objects\mian.o: D:\Keil_v5\ARM\ARM_Compiler_5.06u7\Bin\..\include\math.h .\objects\mian.o: .\CORE\INCLUDE\CMSDK_CM0.h .\objects\mian.o: .\CORE\INCLUDE\core_cm0.h @@ -12,7 +13,6 @@ .\objects\mian.o: .\USER\my_header.h .\objects\mian.o: .\FWLIB\include\ENS1_MTP.h .\objects\mian.o: D:\Keil_v5\ARM\ARM_Compiler_5.06u7\Bin\..\include\stdlib.h -.\objects\mian.o: D:\Keil_v5\ARM\ARM_Compiler_5.06u7\Bin\..\include\string.h .\objects\mian.o: .\FWLIB\include\ENS1_CLOCK.h .\objects\mian.o: .\FWLIB\include\ENS1_UART.h .\objects\mian.o: .\FWLIB\include\ENS1_GPIO.h diff --git a/Objects/mian.o b/Objects/mian.o index e885a39..f95cbbf 100644 Binary files a/Objects/mian.o and b/Objects/mian.o differ diff --git a/Objects/retarget.o b/Objects/retarget.o index 2eea893..8055306 100644 Binary files a/Objects/retarget.o and b/Objects/retarget.o differ diff --git a/Objects/system_cmsdk_cm0.o b/Objects/system_cmsdk_cm0.o index 68a134a..2d7d066 100644 Binary files a/Objects/system_cmsdk_cm0.o and b/Objects/system_cmsdk_cm0.o differ diff --git a/USER/ENS001_CONFIG.h b/USER/ENS001_CONFIG.h index 149f106..b70bad6 100644 --- a/USER/ENS001_CONFIG.h +++ b/USER/ENS001_CONFIG.h @@ -1,4 +1,4 @@ -/*Copyright (C),2023 , NANOCHAP +/*Copyright (C),2023 , NANOCHAP *File name: *Author: Martin *Version: V1.0 diff --git a/USER/MY_HEADER.h b/USER/MY_HEADER.h index e714dc0..f0195c6 100644 --- a/USER/MY_HEADER.h +++ b/USER/MY_HEADER.h @@ -1,7 +1,9 @@ -#ifndef MY_HEADER_H +#ifndef MY_HEADER_H #define MY_HEADER_H #include +#include + #include #include "CMSDK_CM0.h" #include "ENS1_TIMER.h" @@ -22,32 +24,32 @@ typedef enum {OUTPUT = 0, INPUT = !OUTPUT} I_O_SELECT; typedef enum {oversamp_16 = 0, oversamp_13=!oversamp_16} OverSampModeSel; typedef enum { - GPIO_PU = 0x00, // - GPIO_PD = 0x01, // - GPIO_NOPULL = 0x02 // + GPIO_PU = 0x00, //上拉 + GPIO_PD = 0x01, //下拉 + GPIO_NOPULL = 0x02 //无上下拉 }GPIO_PUPD_TypeDef; -//ٶѡö +//输出速度选择枚举 typedef enum { - OUTPUT_FAST = 0x00, // - OUTPUT_SLOW = 0x01 // + OUTPUT_FAST = 0x00, //快速 + OUTPUT_SLOW = 0x01 //慢速 }OUTPUT_SPEED_TypeDef; -//ģʽѡö +//输出模式选择枚举 typedef enum { - GPIO_OType_PP = 0x00, // - GPIO_OType_OD = 0x01 //© + GPIO_OType_PP = 0x00, //推挽输出 + GPIO_OType_OD = 0x01 //开漏输出 }GPIOOType_TypeDef; -//ǿѡö +//驱动强度选择枚举 typedef enum { - PDRV_4mA = 0x00, //ǿ4mA - PDRV_8mA, //ǿ8mA - PDRV_14mA, //ǿ14mA - PDRV_16mA //ǿ16mA + PDRV_4mA = 0x00, //输出驱动强度4mA + PDRV_8mA, //输出驱动强度8mA + PDRV_14mA, //输出驱动强度14mA + PDRV_16mA //输出驱动强度16mA }OUTPUT_PDRV_TypeDef; diff --git a/USER/mian.c b/USER/mian.c index 5cf9213..dbbbf75 100644 --- a/USER/mian.c +++ b/USER/mian.c @@ -4,14 +4,14 @@ *Author: *Version: V1.0 *Date: 2023-11- -*Description: ʱ̼ۺϲԣTIMER0 + ̼ +*Description: 定时器电刺激综合测试(TIMER0 + 电刺激) *Function List: History: 1.V1.0 Date: Author: -Modification: +Modification: 初版 */ #include "my_header.h" @@ -23,116 +23,104 @@ Modification: #include "ENS1_WAVEGEN.h" int main(){ - // ʼϵͳ + // 初始化系统 MTP_init(); ClockInit(); - // ʼGPIO19ڶʱָʾ - GPIO_IO_Init(GPIO_19, OUTPUT, 0x00, 0x02, 0x00, 0x00, ENABLE); + // 初始化GPIO19用于定时器指示 + GPIO_IO_Init(GPIO_19, OUTPUT, GPIO_OType_PP, GPIO_NOPULL, OUTPUT_FAST, PDRV_4mA, ENABLE); GPIO_Output(GPIO_19, LOW_LEVEL); - // ʼUART + // 初始化UART UART_Init(CMSDK_UART1, &UART1_Init); UART_ITConfig(CMSDK_UART1, &UART1_ITSet); - // ʼʱwavegen_Init֮ǰ + // 初始化定时器(在wavegen_Init之前) TIMER0_Init(1); - // ʼʱ + // 初始化时间管理器 Time_Manager_Init(); - - // ӵϢ - // printf("APB_Clock_Freq: %d Hz\n", APB_Clock_Freq); - // printf("TIMER0ʼ\n"); - - // ʼ̼ + + // 初始化波形生成器(电刺激) wavegen_Init(); - // õ̼ + // 配置电刺激参数 EMS_Config_TypeDef ems_config = { .frequency = 100, // 100Hz .duration = 1000, // 1000ms - .intensity = 128, // еǿ - .rest_time = 100, // 100msϢʱ - .silent_time = 50 // 50msĬʱ + .intensity = 128, // 中等强度 + .rest_time = 100, // 100ms休息时间 + .silent_time = 50, // 50ms静默时间 + + // 缓进缓出控制参数 + .ramp_up_time = 2, // 缓进时间:2秒 + .hold_time = 6, // 保持时间:6秒 + .ramp_down_time = 2, // 缓出时间:2秒 + .enable_ramp = 1 // 启用渐进控制 }; EMS_Configure(&ems_config); - // ̼ + // 启动电刺激 EMS_Start(); + - // printf("========================================\n"); - // printf("ʱ̼ۺϲ\n"); - // printf("========================================\n"); - // printf("GPIO19: ʱָʾ1뷭ת\n"); - // printf("̼: ǿ128\n"); - // printf("ϵͳʱ: 32MHz HSI\n"); - // printf("ѹѹ: 26V\n"); - // printf("UART: 115200\n"); - // printf("========================================\n"); - - // ̼ƱҪmainⲿ壩 - static uint8_t ems_control_count = 0; // ̼Ƽ - static uint8_t ems_state = 0; // ̼״̬0=رգ1= + static uint8_t ems_control_count = 0; // 电刺激控制计数器 + static uint8_t ems_state = 0; // 电刺激状态:0=关闭,1=开启 while(1) - { - // ȡʱ־λ + { + // 获取时间标志位 Time_Flag_TypeDef* time_flags = Time_Manager_GetFlags(); - // ̼ѭУ - // ע⣺ﲻֱӵEMS_Process()ͨ״̬ + // 处理电刺激(在主循环中运行) + // 注意:这里不再直接调用EMS_Process(),而是通过状态控制 - // ʱ־λִвͬڵ + // 基于时间标志位执行不同周期的任务 if (time_flags->T_2ms) { - // 2ms - Ƶ - time_flags->T_2ms = 0; // ־λ + // 2ms周期任务 - 高频控制任务 + time_flags->T_2ms = 0; // 清除标志位 } if (time_flags->T_10ms) { - // 10ms - Ƶ - time_flags->T_10ms = 0; // ־λ + // 10ms周期任务 - 中频控制任务 + time_flags->T_10ms = 0; // 清除标志位 } if (time_flags->T_100ms) { - // 100ms - Ƶ - time_flags->T_100ms = 0; // ־λ + // 100ms周期任务 - 低频控制任务 + time_flags->T_100ms = 0; // 清除标志位 } if (time_flags->T_1s) { - // 1s - Ƶ - ems_control_count++; // ÿ + // 1s周期任务 - 超低频任务 + ems_control_count++; // 每秒递增计数器 - // Էŵ߼ + + // 间断性放电控制逻辑 if (ems_control_count <= 10) { - // ǰ10룺̼ + // 前10秒:开启电刺激 if (ems_state == 0) { ems_state = 1; - EMS_Start(); // ̼ - // printf("̼ - %d\n", ems_control_count); + EMS_Start(); // 启动电刺激 } - // ̼ + // 处理电刺激 EMS_Process(); } else if (ems_control_count <= 20) { - // 10룺رյ̼ + // 后10秒:关闭电刺激 if (ems_state == 1) { ems_state = 0; - EMS_Stop(); // ֹ̼ͣ - // printf("̼ر - %d\n", ems_control_count); + EMS_Stop(); // 停止电刺激 } } else { - // üʼµ - ems_control_count = 0; - // printf("̼\n"); + // 重置计数器,开始新的周期 + ems_control_count = 0; } - GPIO_Overturn(GPIO_19); // GPIO19ת - // printf("1sʱִ - ϵͳ̼״̬: %s\n", - // ems_state ? "" : "ر"); - time_flags->T_1s = 0; // ־λ + GPIO_Overturn(GPIO_19); // GPIO19翻转 + time_flags->T_1s = 0; // 清除标志位 } - // ʱжϴ TIMER0_Handler() + // 定时器中断处理在 TIMER0_Handler() 中 } } diff --git a/缓进缓出功能说明.md b/缓进缓出功能说明.md new file mode 100644 index 0000000..4573167 --- /dev/null +++ b/缓进缓出功能说明.md @@ -0,0 +1,254 @@ +# 缓进缓出功能说明 + +## 功能概述 + +缓进缓出功能实现了电刺激强度的渐进式控制,避免突然的强度变化给用户带来的不适感。整个10秒的电刺激周期被分为三个阶段: + +- **缓进阶段(2秒)**:强度从0逐渐增加到设定最大值 +- **保持阶段(6秒)**:保持最大强度 +- **缓出阶段(2秒)**:强度从最大值逐渐降低到0 + +## 实现原理 + +### 1. 时间控制 + +基于2ms定时器中断,实现精确的强度控制: + +```c +// 计算每个强度步进的时间间隔(微秒) +uint32_t step_interval = (g_ems_config.ramp_up_time * 2000000) / g_ems_config.intensity; +// 例如:2秒 = 2000000微秒,强度128,则每15625微秒增加1个强度单位 +``` + +### 2. 强度计算 + +根据您的计算: +- 总时间:2秒 = 2,000,000微秒 +- 目标强度:128 +- 步进间隔:2,000,000 / 128 = 15,625微秒 +- 每15,625微秒增加/减少1个强度单位 + +### 3. 阶段控制 + +```c +switch (g_ramp_phase) { + case 0: // 缓进阶段 + // 强度从0增加到设定值 + break; + case 1: // 保持阶段 + // 保持最大强度 + break; + case 2: // 缓出阶段 + // 强度从设定值降低到0 + break; +} +``` + +## 配置参数 + +### 1. 结构体定义 + +```c +typedef struct { + uint16_t frequency; // 频率 (Hz) + uint16_t duration; // 持续时间 (ms) + uint16_t intensity; // 强度 (0-255) + uint16_t rest_time; // 休息时间 (ms) + uint16_t silent_time; // 静默时间 (ms) + + // 缓进缓出控制参数 + uint8_t ramp_up_time; // 缓进时间:2秒 + uint8_t hold_time; // 保持时间:6秒 + uint8_t ramp_down_time; // 缓出时间:2秒 + uint8_t enable_ramp; // 启用渐进控制 +} EMS_Config_TypeDef; +``` + +### 2. 当前配置 + +```c +EMS_Config_TypeDef ems_config = { + .frequency = 100, // 100Hz + .duration = 1000, // 1000ms + .intensity = 128, // 中等强度 + .rest_time = 100, // 100ms休息时间 + .silent_time = 50, // 50ms静默时间 + + // 缓进缓出控制参数 + .ramp_up_time = 2, // 缓进时间:2秒 + .hold_time = 6, // 保持时间:6秒 + .ramp_down_time = 2, // 缓出时间:2秒 + .enable_ramp = 1 // 启用渐进控制 +}; +``` + +## 工作流程 + +### 1. 系统启动 +- 初始化缓进缓出变量 +- 设置初始强度为0 +- 进入缓进阶段 + +### 2. 缓进阶段(0-2秒) +- 每15,625微秒增加1个强度单位 +- 从0逐渐增加到128 +- 2秒后进入保持阶段 + +### 3. 保持阶段(2-8秒) +- 保持强度为128 +- 持续6秒 +- 8秒后进入缓出阶段 + +### 4. 缓出阶段(8-10秒) +- 每15,625微秒减少1个强度单位 +- 从128逐渐降低到0 +- 10秒后停止电刺激 + +### 5. 休息阶段(10-20秒) +- 电刺激完全停止 +- 持续10秒 +- 20秒后重新开始新周期 + +## 关键函数 + +### 1. 缓进缓出处理函数 + +```c +void EMS_Process_Ramp(void) +{ + // 计算步进间隔 + uint32_t step_interval = (g_ems_config.ramp_up_time * 2000000) / g_ems_config.intensity; + + // 根据当前阶段调整强度 + switch (g_ramp_phase) { + case 0: // 缓进 + if (g_ramp_timer >= step_interval) { + g_current_intensity++; + } + break; + case 1: // 保持 + g_current_intensity = g_ems_config.intensity; + break; + case 2: // 缓出 + if (g_ramp_timer >= step_interval) { + g_current_intensity--; + } + break; + } +} +``` + +### 2. 电刺激处理函数 + +```c +void EMS_Process(void) +{ + if(g_ems_running) { + // 使用当前缓进缓出的强度 + uint16_t current_intensity = g_current_intensity; + + // 生成方波信号 + wavegen_driverA_sine_test(WAVE_GEN_DRVA_BLK0, current_intensity); + } +} +``` + +## 波形特征 + +### 1. 梯形波形 +在示波器上观察到的波形将呈现梯形特征: +- **上升沿**:2秒内从0V逐渐上升到最大电压 +- **平顶**:6秒内保持最大电压 +- **下降沿**:2秒内从最大电压逐渐下降到0V +- **平底**:10秒内保持0V + +### 2. 时间精度 +- 基于2ms定时器中断 +- 强度变化精度:15,625微秒 +- 总时间精度:±2ms + +## 调试输出 + +系统会输出以下调试信息: + +``` +缓进缓出控制已启动 - 缓进阶段开始 +缓进完成 - 进入保持阶段, 强度: 128 +保持完成 - 进入缓出阶段 +缓出完成 - 强度降至0 +电刺激已停止 +``` + +## 参数调整 + +### 1. 修改时间分配 + +```c +// 修改为3秒缓进,4秒保持,3秒缓出 +.ramp_up_time = 3, // 缓进时间:3秒 +.hold_time = 4, // 保持时间:4秒 +.ramp_down_time = 3, // 缓出时间:3秒 +``` + +### 2. 修改目标强度 + +```c +.intensity = 200, // 修改目标强度为200 +``` + +### 3. 禁用缓进缓出 + +```c +.enable_ramp = 0 // 禁用渐进控制,直接使用设定强度 +``` + +## 优势特点 + +### 1. 用户体验 +- 避免突然的强度变化 +- 减少刺痛感 +- 提供舒适的刺激体验 + +### 2. 安全性 +- 渐进式强度控制 +- 避免过度刺激 +- 可控的强度范围 + +### 3. 灵活性 +- 可调节的时间分配 +- 可配置的目标强度 +- 可启用的功能开关 + +## 注意事项 + +### 1. 时间精度 +- 确保2ms定时器正常工作 +- 注意微秒计时器的溢出处理 +- 验证步进间隔的计算准确性 + +### 2. 强度范围 +- 强度值范围:0-255 +- 避免超出硬件限制 +- 考虑用户承受能力 + +### 3. 系统资源 +- 缓进缓出处理在2ms中断中执行 +- 保持中断处理简洁 +- 避免影响其他功能 + +## 测试验证 + +### 1. 硬件测试 +- 用示波器观察梯形波形 +- 验证时间精度 +- 检查强度变化平滑性 + +### 2. 软件测试 +- 通过UART观察调试输出 +- 确认阶段切换正确 +- 验证强度计算准确 + +### 3. 功能验证 +- 测试不同强度值 +- 验证时间分配 +- 确认循环工作正常 diff --git a/缓进缓出功能说明_修正版.md b/缓进缓出功能说明_修正版.md new file mode 100644 index 0000000..6a558e2 --- /dev/null +++ b/缓进缓出功能说明_修正版.md @@ -0,0 +1,229 @@ +# 缓进缓出功能说明(修正版) + +## 问题分析 + +原始实现存在定时器冲突问题: +- 2ms定时器与1s定时器产生冲突 +- 缓进缓出处理在2ms中断中执行,干扰了主循环的电刺激处理 +- 导致在示波器上观察不到有效波形 + +## 解决方案 + +采用方波周期计数的方式实现缓进缓出,避免定时器冲突: + +### 1. 计算原理 + +根据您的分析: +- 每个方波周期:100微秒 +- 2秒内方波周期数:2,000,000 ÷ 100 = 20,000个 +- 强度从0增加到128,需要128个步进 +- 每个步进的方波周期数:20,000 ÷ 128 ≈ 156.25个 + +### 2. 实现方式 + +```c +// 计算每个强度步进需要的方波周期数 +uint32_t waves_per_step = (g_ems_config.ramp_up_time * 20000) / g_ems_config.intensity; +// 例如:2秒 × 20000 ÷ 128 = 156.25个方波周期 +``` + +## 核心变量 + +```c +// 缓进缓出控制变量 +static volatile uint16_t g_current_intensity = 0; // 当前强度 +static volatile uint8_t g_ramp_phase = 0; // 渐进阶段:0=缓进, 1=保持, 2=缓出 +static volatile uint32_t g_wave_counter = 0; // 方波周期计数器 +static volatile uint32_t g_ramp_step_counter = 0; // 缓进步进计数器 +``` + +## 工作流程 + +### 1. 缓进阶段(0-2秒) +```c +case 0: // 缓进阶段 + if (g_ramp_step_counter < g_ems_config.ramp_up_time) { + // 每156个方波周期增加1个强度单位 + if (g_wave_counter >= waves_per_step) { + g_wave_counter = 0; // 重置方波计数器 + if (g_current_intensity < g_ems_config.intensity) { + g_current_intensity++; + } + } + g_ramp_step_counter++; + } else { + // 缓进完成,进入保持阶段 + g_ramp_phase = 1; + g_ramp_step_counter = 0; + g_current_intensity = g_ems_config.intensity; + } + break; +``` + +### 2. 保持阶段(2-8秒) +```c +case 1: // 保持阶段 + if (g_ramp_step_counter < g_ems_config.hold_time) { + // 保持最大强度 + g_current_intensity = g_ems_config.intensity; + g_ramp_step_counter++; + } else { + // 保持完成,进入缓出阶段 + g_ramp_phase = 2; + g_ramp_step_counter = 0; + g_wave_counter = 0; + } + break; +``` + +### 3. 缓出阶段(8-10秒) +```c +case 2: // 缓出阶段 + if (g_ramp_step_counter < g_ems_config.ramp_down_time) { + // 每156个方波周期减少1个强度单位 + if (g_wave_counter >= waves_per_step) { + g_wave_counter = 0; // 重置方波计数器 + if (g_current_intensity > 0) { + g_current_intensity--; + } + } + g_ramp_step_counter++; + } else { + // 缓出完成,停止电刺激 + g_current_intensity = 0; + } + break; +``` + +## 调用方式 + +缓进缓出处理函数在电刺激处理函数中调用: + +```c +void EMS_Process(void) +{ + if(g_ems_running) { + g_ems_count++; + + // 处理缓进缓出控制 + EMS_Process_Ramp(); + + // 使用当前缓进缓出的强度 + uint16_t current_intensity = g_current_intensity; + + // 生成方波信号 + wavegen_driverA_sine_test(WAVE_GEN_DRVA_BLK0, current_intensity); + } +} +``` + +## 优势特点 + +### 1. 避免定时器冲突 +- 不再使用2ms定时器进行缓进缓出控制 +- 缓进缓出处理在电刺激处理函数中执行 +- 确保时序一致性 + +### 2. 精确控制 +- 基于方波周期计数,精度高 +- 每156个方波周期调整一次强度 +- 平滑的强度变化 + +### 3. 简单可靠 +- 逻辑清晰,易于理解 +- 不依赖复杂的定时器机制 +- 调试方便 + +## 时间分配 + +### 完整周期(20秒) +1. **缓进阶段**:0-2秒,强度0→128 +2. **保持阶段**:2-8秒,强度保持128 +3. **缓出阶段**:8-10秒,强度128→0 +4. **休息阶段**:10-20秒,强度保持0 + +### 强度变化 +- **缓进**:每156个方波周期增加1个强度单位 +- **保持**:稳定在最大强度128 +- **缓出**:每156个方波周期减少1个强度单位 + +## 调试输出 + +系统会输出以下调试信息: + +``` +缓进缓出控制已启动 - 缓进阶段开始 +缓进 - 强度增加到: 1 +缓进 - 强度增加到: 2 +... +缓进完成 - 进入保持阶段, 强度: 128 +保持完成 - 进入缓出阶段 +缓出 - 强度降低到: 127 +缓出 - 强度降低到: 126 +... +缓出完成 - 强度降至0 +电刺激已停止 +``` + +## 参数配置 + +```c +EMS_Config_TypeDef ems_config = { + .frequency = 100, // 100Hz + .duration = 1000, // 1000ms + .intensity = 128, // 中等强度 + .rest_time = 100, // 100ms休息时间 + .silent_time = 50, // 50ms静默时间 + + // 缓进缓出控制参数 + .ramp_up_time = 2, // 缓进时间:2秒 + .hold_time = 6, // 保持时间:6秒 + .ramp_down_time = 2, // 缓出时间:2秒 + .enable_ramp = 1 // 启用渐进控制 +}; +``` + +## 测试验证 + +### 1. 硬件测试 +- 用示波器观察梯形波形 +- 验证缓进缓出的平滑性 +- 检查时间精度 + +### 2. 软件测试 +- 通过UART观察调试输出 +- 确认强度变化正确 +- 验证阶段切换正常 + +### 3. 功能验证 +- 测试不同强度值 +- 验证时间分配 +- 确认循环工作正常 + +## 注意事项 + +### 1. 方波周期 +- 确保方波周期计算正确(100微秒) +- 验证方波计数器正常工作 +- 注意计数器的溢出处理 + +### 2. 强度范围 +- 强度值范围:0-255 +- 避免超出硬件限制 +- 考虑用户承受能力 + +### 3. 系统资源 +- 缓进缓出处理在电刺激处理中执行 +- 保持处理简洁高效 +- 避免影响其他功能 + +## 总结 + +修正后的缓进缓出功能: +- 解决了定时器冲突问题 +- 采用方波周期计数方式 +- 实现了平滑的强度变化 +- 提供了舒适的刺激体验 + +现在您应该能在示波器上观察到清晰的梯形波形了! +