commit
22d11f3163
320 changed files with 70093 additions and 0 deletions
@ -0,0 +1,34 @@ |
|||||
|
### vim |
||||
|
*.swp |
||||
|
*.swo |
||||
|
*~ |
||||
|
|
||||
|
### Keil5 |
||||
|
/keil/* |
||||
|
/keilp/* |
||||
|
!*.sct |
||||
|
!*.uvprojx |
||||
|
|
||||
|
### Source Insight |
||||
|
*.IAB |
||||
|
*.IAD |
||||
|
*.IMB |
||||
|
*.IMD |
||||
|
*.PFI |
||||
|
*.PO |
||||
|
*.PR |
||||
|
*.PRI |
||||
|
*.PS |
||||
|
*.WK3 |
||||
|
*.SearchResults |
||||
|
*.bookmarks.xml |
||||
|
*.snippets.xml |
||||
|
*.siwork |
||||
|
si/**/cache/ |
||||
|
si/**/Backup/ |
||||
|
si4/**/cache/ |
||||
|
si4/**/Backup/ |
||||
|
|
||||
|
### Source file |
||||
|
source/bak/ |
||||
|
/out/ |
||||
@ -0,0 +1,8 @@ |
|||||
|
For /f "tokens=1-3 delims=/:/ " %%a in ('time /t') do (set mytime=%%a_%%b%%c) |
||||
|
set str=%DATE% |
||||
|
set mydate=%str:/=_% |
||||
|
set mydate=%mydate: =_% |
||||
|
set /p demo=: |
||||
|
echo %demo% |
||||
|
backup\all\zip -q -r -S backup\u4_%demo%_%mydate%%mytime:~0,6%.zip MDK-ARM\*.* core\*.* out\*.hex si\*.* *.ioc .mxproject *.ini *.bat backup\all\*.* |
||||
|
backup\all\zip -q -r -S backup\u4_%demo%_%mydate%%mytime:~0,6%.zip.doc MDK-ARM\*.* core\*.* out\*.hex si\*.* *.ioc .mxproject *.ini *.bat backup\all\*.* |
||||
@ -0,0 +1,8 @@ |
|||||
|
For /f "tokens=1-3 delims=/:/ " %%a in ('time /t') do (set mytime=%%a_%%b%%c) |
||||
|
set str=%DATE% |
||||
|
set mydate=%str:/=_% |
||||
|
set mydate=%mydate: =_% |
||||
|
set /p demo=: |
||||
|
echo %demo% |
||||
|
backup\all\zip -q -r -S backup\u4_%demo%_%mydate%%mytime:~0,6%.zip MDK-ARM\*.* core\*.* out\*.hex si\*.* *.ioc .mxproject *.ini *.bat backup\all\*.* Drivers\*.* |
||||
|
backup\all\zip -q -r -S backup\u4_%demo%_%mydate%%mytime:~0,6%.zip.doc MDK-ARM\*.* core\*.* out\*.hex si\*.* *.ioc .mxproject *.ini backup\all\*.* |
||||
@ -0,0 +1,10 @@ |
|||||
|
For /f "tokens=1-3 delims=/:/ " %%a in ('time /t') do (set mytime=%%a_%%b%%c) |
||||
|
set str=%DATE% |
||||
|
set mydate=%str:/=_% |
||||
|
set mydate=%mydate: =_% |
||||
|
set /p demo=: |
||||
|
echo %demo% |
||||
|
backup\zip -q -r -S backup\stcAS03PLCa_%demo%_%mydate%%mytime:~0,6%.zip si4\*.* source\*.* keilp\*.* out\*.hex docs\*.xlsx docs\*.doc* backup\all |
||||
|
backup\zip -q -r -S backup\stcAS03PLCa_%demo%_%mydate%%mytime:~0,6%.zip.doc si4\*.* source\*.* keilp\*.* out\*.hex docs\*.xlsx docs\*.doc* backup\all |
||||
|
pause |
||||
|
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -0,0 +1,532 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no" ?> |
||||
|
<Project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="project_projx.xsd"> |
||||
|
|
||||
|
<SchemaVersion>2.1</SchemaVersion> |
||||
|
|
||||
|
<Header>### uVision Project, (C) Keil Software</Header> |
||||
|
|
||||
|
<Targets> |
||||
|
<Target> |
||||
|
<TargetName>STC8H3K48S2</TargetName> |
||||
|
<ToolsetNumber>0x0</ToolsetNumber> |
||||
|
<ToolsetName>MCS-51</ToolsetName> |
||||
|
<TargetOption> |
||||
|
<TargetCommonOption> |
||||
|
<Device>STC8H3K64S4 Series</Device> |
||||
|
<Vendor>STC</Vendor> |
||||
|
<Cpu>IRAM(0-0xFF) XRAM(0-0x0BFF) IROM(0-0xFFF8) CLOCK(35000000) MODP2</Cpu> |
||||
|
<FlashUtilSpec></FlashUtilSpec> |
||||
|
<StartupFile>"LIB\STARTUP.A51" ("Standard 8051 Startup Code")</StartupFile> |
||||
|
<FlashDriverDll></FlashDriverDll> |
||||
|
<DeviceId>63300</DeviceId> |
||||
|
<RegisterFile>STC8.H</RegisterFile> |
||||
|
<MemoryEnv></MemoryEnv> |
||||
|
<Cmp></Cmp> |
||||
|
<Asm></Asm> |
||||
|
<Linker></Linker> |
||||
|
<OHString></OHString> |
||||
|
<InfinionOptionDll></InfinionOptionDll> |
||||
|
<SLE66CMisc></SLE66CMisc> |
||||
|
<SLE66AMisc></SLE66AMisc> |
||||
|
<SLE66LinkerMisc></SLE66LinkerMisc> |
||||
|
<SFDFile></SFDFile> |
||||
|
<bCustSvd>0</bCustSvd> |
||||
|
<UseEnv>0</UseEnv> |
||||
|
<BinPath>d:\Keil\C51\BIN\</BinPath> |
||||
|
<IncludePath></IncludePath> |
||||
|
<LibPath></LibPath> |
||||
|
<RegisterFilePath>STC\</RegisterFilePath> |
||||
|
<DBRegisterFilePath>STC\</DBRegisterFilePath> |
||||
|
<TargetStatus> |
||||
|
<Error>0</Error> |
||||
|
<ExitCodeStop>0</ExitCodeStop> |
||||
|
<ButtonStop>0</ButtonStop> |
||||
|
<NotGenerated>0</NotGenerated> |
||||
|
<InvalidFlash>1</InvalidFlash> |
||||
|
</TargetStatus> |
||||
|
<OutputDirectory>..\out\</OutputDirectory> |
||||
|
<OutputName>stcTTSS2_w5</OutputName> |
||||
|
<CreateExecutable>1</CreateExecutable> |
||||
|
<CreateLib>0</CreateLib> |
||||
|
<CreateHexFile>1</CreateHexFile> |
||||
|
<DebugInformation>1</DebugInformation> |
||||
|
<BrowseInformation>1</BrowseInformation> |
||||
|
<ListingPath>..\out\</ListingPath> |
||||
|
<HexFormatSelection>0</HexFormatSelection> |
||||
|
<Merge32K>0</Merge32K> |
||||
|
<CreateBatchFile>0</CreateBatchFile> |
||||
|
<BeforeCompile> |
||||
|
<RunUserProg1>0</RunUserProg1> |
||||
|
<RunUserProg2>0</RunUserProg2> |
||||
|
<UserProg1Name></UserProg1Name> |
||||
|
<UserProg2Name></UserProg2Name> |
||||
|
<UserProg1Dos16Mode>0</UserProg1Dos16Mode> |
||||
|
<UserProg2Dos16Mode>0</UserProg2Dos16Mode> |
||||
|
<nStopU1X>0</nStopU1X> |
||||
|
<nStopU2X>0</nStopU2X> |
||||
|
</BeforeCompile> |
||||
|
<BeforeMake> |
||||
|
<RunUserProg1>0</RunUserProg1> |
||||
|
<RunUserProg2>0</RunUserProg2> |
||||
|
<UserProg1Name></UserProg1Name> |
||||
|
<UserProg2Name></UserProg2Name> |
||||
|
<UserProg1Dos16Mode>0</UserProg1Dos16Mode> |
||||
|
<UserProg2Dos16Mode>0</UserProg2Dos16Mode> |
||||
|
<nStopB1X>0</nStopB1X> |
||||
|
<nStopB2X>0</nStopB2X> |
||||
|
</BeforeMake> |
||||
|
<AfterMake> |
||||
|
<RunUserProg1>0</RunUserProg1> |
||||
|
<RunUserProg2>0</RunUserProg2> |
||||
|
<UserProg1Name></UserProg1Name> |
||||
|
<UserProg2Name></UserProg2Name> |
||||
|
<UserProg1Dos16Mode>0</UserProg1Dos16Mode> |
||||
|
<UserProg2Dos16Mode>0</UserProg2Dos16Mode> |
||||
|
<nStopA1X>0</nStopA1X> |
||||
|
<nStopA2X>0</nStopA2X> |
||||
|
</AfterMake> |
||||
|
<SelectedForBatchBuild>0</SelectedForBatchBuild> |
||||
|
<SVCSIdString></SVCSIdString> |
||||
|
</TargetCommonOption> |
||||
|
<CommonProperty> |
||||
|
<UseCPPCompiler>0</UseCPPCompiler> |
||||
|
<RVCTCodeConst>0</RVCTCodeConst> |
||||
|
<RVCTZI>0</RVCTZI> |
||||
|
<RVCTOtherData>0</RVCTOtherData> |
||||
|
<ModuleSelection>0</ModuleSelection> |
||||
|
<IncludeInBuild>1</IncludeInBuild> |
||||
|
<AlwaysBuild>0</AlwaysBuild> |
||||
|
<GenerateAssemblyFile>0</GenerateAssemblyFile> |
||||
|
<AssembleAssemblyFile>0</AssembleAssemblyFile> |
||||
|
<PublicsOnly>0</PublicsOnly> |
||||
|
<StopOnExitCode>3</StopOnExitCode> |
||||
|
<CustomArgument></CustomArgument> |
||||
|
<IncludeLibraryModules></IncludeLibraryModules> |
||||
|
<ComprImg>1</ComprImg> |
||||
|
<BankNo>65535</BankNo> |
||||
|
</CommonProperty> |
||||
|
<DllOption> |
||||
|
<SimDllName>S8051.DLL</SimDllName> |
||||
|
<SimDllArguments></SimDllArguments> |
||||
|
<SimDlgDll>DP51.DLL</SimDlgDll> |
||||
|
<SimDlgDllArguments>-pDP8051</SimDlgDllArguments> |
||||
|
<TargetDllName>S8051.DLL</TargetDllName> |
||||
|
<TargetDllArguments></TargetDllArguments> |
||||
|
<TargetDlgDll>TP51.DLL</TargetDlgDll> |
||||
|
<TargetDlgDllArguments>-p51</TargetDlgDllArguments> |
||||
|
</DllOption> |
||||
|
<DebugOption> |
||||
|
<OPTHX> |
||||
|
<HexSelection>0</HexSelection> |
||||
|
<HexRangeLowAddress>0</HexRangeLowAddress> |
||||
|
<HexRangeHighAddress>0</HexRangeHighAddress> |
||||
|
<HexOffset>0</HexOffset> |
||||
|
<Oh166RecLen>16</Oh166RecLen> |
||||
|
</OPTHX> |
||||
|
<Simulator> |
||||
|
<UseSimulator>1</UseSimulator> |
||||
|
<LoadApplicationAtStartup>1</LoadApplicationAtStartup> |
||||
|
<RunToMain>1</RunToMain> |
||||
|
<RestoreBreakpoints>1</RestoreBreakpoints> |
||||
|
<RestoreWatchpoints>1</RestoreWatchpoints> |
||||
|
<RestoreMemoryDisplay>1</RestoreMemoryDisplay> |
||||
|
<RestoreFunctions>1</RestoreFunctions> |
||||
|
<RestoreToolbox>1</RestoreToolbox> |
||||
|
<LimitSpeedToRealTime>1</LimitSpeedToRealTime> |
||||
|
<RestoreSysVw>1</RestoreSysVw> |
||||
|
</Simulator> |
||||
|
<Target> |
||||
|
<UseTarget>0</UseTarget> |
||||
|
<LoadApplicationAtStartup>1</LoadApplicationAtStartup> |
||||
|
<RunToMain>1</RunToMain> |
||||
|
<RestoreBreakpoints>1</RestoreBreakpoints> |
||||
|
<RestoreWatchpoints>1</RestoreWatchpoints> |
||||
|
<RestoreMemoryDisplay>1</RestoreMemoryDisplay> |
||||
|
<RestoreFunctions>0</RestoreFunctions> |
||||
|
<RestoreToolbox>1</RestoreToolbox> |
||||
|
<RestoreTracepoints>1</RestoreTracepoints> |
||||
|
<RestoreSysVw>1</RestoreSysVw> |
||||
|
</Target> |
||||
|
<RunDebugAfterBuild>0</RunDebugAfterBuild> |
||||
|
<TargetSelection>10</TargetSelection> |
||||
|
<SimDlls> |
||||
|
<CpuDll></CpuDll> |
||||
|
<CpuDllArguments></CpuDllArguments> |
||||
|
<PeripheralDll></PeripheralDll> |
||||
|
<PeripheralDllArguments></PeripheralDllArguments> |
||||
|
<InitializationFile></InitializationFile> |
||||
|
</SimDlls> |
||||
|
<TargetDlls> |
||||
|
<CpuDll></CpuDll> |
||||
|
<CpuDllArguments></CpuDllArguments> |
||||
|
<PeripheralDll></PeripheralDll> |
||||
|
<PeripheralDllArguments></PeripheralDllArguments> |
||||
|
<InitializationFile></InitializationFile> |
||||
|
<Driver>BIN\STCMON51.DLL</Driver> |
||||
|
</TargetDlls> |
||||
|
</DebugOption> |
||||
|
<Utilities> |
||||
|
<Flash1> |
||||
|
<UseTargetDll>0</UseTargetDll> |
||||
|
<UseExternalTool>0</UseExternalTool> |
||||
|
<RunIndependent>0</RunIndependent> |
||||
|
<UpdateFlashBeforeDebugging>0</UpdateFlashBeforeDebugging> |
||||
|
<Capability>0</Capability> |
||||
|
<DriverSelection>-1</DriverSelection> |
||||
|
</Flash1> |
||||
|
<bUseTDR>0</bUseTDR> |
||||
|
<Flash2></Flash2> |
||||
|
<Flash3>"" ()</Flash3> |
||||
|
<Flash4></Flash4> |
||||
|
<pFcarmOut></pFcarmOut> |
||||
|
<pFcarmGrp></pFcarmGrp> |
||||
|
<pFcArmRoot></pFcArmRoot> |
||||
|
<FcArmLst>0</FcArmLst> |
||||
|
</Utilities> |
||||
|
<Target51> |
||||
|
<Target51Misc> |
||||
|
<MemoryModel>2</MemoryModel> |
||||
|
<RTOS>0</RTOS> |
||||
|
<RomSize>2</RomSize> |
||||
|
<DataHold>0</DataHold> |
||||
|
<XDataHold>0</XDataHold> |
||||
|
<UseOnchipRom>0</UseOnchipRom> |
||||
|
<UseOnchipArithmetic>0</UseOnchipArithmetic> |
||||
|
<UseMultipleDPTR>0</UseMultipleDPTR> |
||||
|
<UseOnchipXram>0</UseOnchipXram> |
||||
|
<HadIRAM>1</HadIRAM> |
||||
|
<HadXRAM>1</HadXRAM> |
||||
|
<HadIROM>1</HadIROM> |
||||
|
<Moda2>0</Moda2> |
||||
|
<Moddp2>0</Moddp2> |
||||
|
<Modp2>1</Modp2> |
||||
|
<Mod517dp>0</Mod517dp> |
||||
|
<Mod517au>0</Mod517au> |
||||
|
<Mode2>0</Mode2> |
||||
|
<useCB>0</useCB> |
||||
|
<useXB>0</useXB> |
||||
|
<useL251>1</useL251> |
||||
|
<useA251>0</useA251> |
||||
|
<Mx51>0</Mx51> |
||||
|
<ModC812>0</ModC812> |
||||
|
<ModCont>0</ModCont> |
||||
|
<Lp51>0</Lp51> |
||||
|
<useXBS>0</useXBS> |
||||
|
<ModDA>0</ModDA> |
||||
|
<ModAB2>0</ModAB2> |
||||
|
<Mx51P>0</Mx51P> |
||||
|
<hadXRAM2>0</hadXRAM2> |
||||
|
<uocXram2>0</uocXram2> |
||||
|
<ModC2>0</ModC2> |
||||
|
<ModH2>0</ModH2> |
||||
|
<Mdu_R515>0</Mdu_R515> |
||||
|
<Mdu_F120>0</Mdu_F120> |
||||
|
<Psoc>0</Psoc> |
||||
|
<hadIROM2>0</hadIROM2> |
||||
|
<ModSmx2>0</ModSmx2> |
||||
|
<cBanks>0</cBanks> |
||||
|
<xBanks>0</xBanks> |
||||
|
<OnChipMemories> |
||||
|
<RCB> |
||||
|
<Type>0</Type> |
||||
|
<StartAddress>0x0</StartAddress> |
||||
|
<Size>0xffff</Size> |
||||
|
</RCB> |
||||
|
<RXB> |
||||
|
<Type>0</Type> |
||||
|
<StartAddress>0x0</StartAddress> |
||||
|
<Size>0x0</Size> |
||||
|
</RXB> |
||||
|
<Ocm1> |
||||
|
<Type>0</Type> |
||||
|
<StartAddress>0x0</StartAddress> |
||||
|
<Size>0x0</Size> |
||||
|
</Ocm1> |
||||
|
<Ocm2> |
||||
|
<Type>0</Type> |
||||
|
<StartAddress>0x0</StartAddress> |
||||
|
<Size>0x0</Size> |
||||
|
</Ocm2> |
||||
|
<Ocm3> |
||||
|
<Type>0</Type> |
||||
|
<StartAddress>0x0</StartAddress> |
||||
|
<Size>0x0</Size> |
||||
|
</Ocm3> |
||||
|
<Ocr1> |
||||
|
<Type>0</Type> |
||||
|
<StartAddress>0x0</StartAddress> |
||||
|
<Size>0x0</Size> |
||||
|
</Ocr1> |
||||
|
<Ocr2> |
||||
|
<Type>0</Type> |
||||
|
<StartAddress>0x0</StartAddress> |
||||
|
<Size>0x0</Size> |
||||
|
</Ocr2> |
||||
|
<Ocr3> |
||||
|
<Type>0</Type> |
||||
|
<StartAddress>0x0</StartAddress> |
||||
|
<Size>0x0</Size> |
||||
|
</Ocr3> |
||||
|
<IRO> |
||||
|
<Type>1</Type> |
||||
|
<StartAddress>0x0</StartAddress> |
||||
|
<Size>0xfff9</Size> |
||||
|
</IRO> |
||||
|
<IRA> |
||||
|
<Type>0</Type> |
||||
|
<StartAddress>0x0</StartAddress> |
||||
|
<Size>0x100</Size> |
||||
|
</IRA> |
||||
|
<XRA> |
||||
|
<Type>0</Type> |
||||
|
<StartAddress>0x0</StartAddress> |
||||
|
<Size>0xc00</Size> |
||||
|
</XRA> |
||||
|
<XRA512> |
||||
|
<Type>0</Type> |
||||
|
<StartAddress>0x0</StartAddress> |
||||
|
<Size>0x0</Size> |
||||
|
</XRA512> |
||||
|
<IROM512> |
||||
|
<Type>0</Type> |
||||
|
<StartAddress>0x0</StartAddress> |
||||
|
<Size>0x0</Size> |
||||
|
</IROM512> |
||||
|
</OnChipMemories> |
||||
|
</Target51Misc> |
||||
|
<C51> |
||||
|
<RegisterColoring>0</RegisterColoring> |
||||
|
<VariablesInOrder>1</VariablesInOrder> |
||||
|
<IntegerPromotion>0</IntegerPromotion> |
||||
|
<uAregs>0</uAregs> |
||||
|
<UseInterruptVector>1</UseInterruptVector> |
||||
|
<Fuzzy>3</Fuzzy> |
||||
|
<Optimize>0</Optimize> |
||||
|
<WarningLevel>2</WarningLevel> |
||||
|
<SizeSpeed>0</SizeSpeed> |
||||
|
<ObjectExtend>1</ObjectExtend> |
||||
|
<ACallAJmp>0</ACallAJmp> |
||||
|
<InterruptVectorAddress>0</InterruptVectorAddress> |
||||
|
<VariousControls> |
||||
|
<MiscControls></MiscControls> |
||||
|
<Define></Define> |
||||
|
<Undefine></Undefine> |
||||
|
<IncludePath>..\source\bsp;..\source\msp;..\source\app;..\source\clib;..\source\cpu;..\source\ctask;..\source\tpc;..\source\asp;..\source\debug;..\source\msp\uart;..\source\msp\simiic;..\source\bsp\oled;..\source\bsp\TTSSbsp</IncludePath> |
||||
|
</VariousControls> |
||||
|
</C51> |
||||
|
<Ax51> |
||||
|
<UseMpl>0</UseMpl> |
||||
|
<UseStandard>1</UseStandard> |
||||
|
<UseCase>0</UseCase> |
||||
|
<UseMod51>0</UseMod51> |
||||
|
<VariousControls> |
||||
|
<MiscControls></MiscControls> |
||||
|
<Define></Define> |
||||
|
<Undefine></Undefine> |
||||
|
<IncludePath></IncludePath> |
||||
|
</VariousControls> |
||||
|
</Ax51> |
||||
|
<Lx51> |
||||
|
<useFile>0</useFile> |
||||
|
<linkonly>0</linkonly> |
||||
|
<UseMemoryFromTarget>1</UseMemoryFromTarget> |
||||
|
<CaseSensitiveSymbols>0</CaseSensitiveSymbols> |
||||
|
<WarningLevel>2</WarningLevel> |
||||
|
<DataOverlaying>1</DataOverlaying> |
||||
|
<OverlayString></OverlayString> |
||||
|
<MiscControls>REMOVEUNUSED</MiscControls> |
||||
|
<DisableWarningNumbers></DisableWarningNumbers> |
||||
|
<LinkerCmdFile></LinkerCmdFile> |
||||
|
<Assign></Assign> |
||||
|
<ReserveString></ReserveString> |
||||
|
<CClasses></CClasses> |
||||
|
<UserClasses></UserClasses> |
||||
|
<CSection></CSection> |
||||
|
<UserSection></UserSection> |
||||
|
<CodeBaseAddress></CodeBaseAddress> |
||||
|
<XDataBaseAddress></XDataBaseAddress> |
||||
|
<PDataBaseAddress></PDataBaseAddress> |
||||
|
<BitBaseAddress></BitBaseAddress> |
||||
|
<DataBaseAddress></DataBaseAddress> |
||||
|
<IDataBaseAddress></IDataBaseAddress> |
||||
|
<Precede></Precede> |
||||
|
<Stack></Stack> |
||||
|
<CodeSegmentName></CodeSegmentName> |
||||
|
<XDataSegmentName></XDataSegmentName> |
||||
|
<BitSegmentName></BitSegmentName> |
||||
|
<DataSegmentName></DataSegmentName> |
||||
|
<IDataSegmentName></IDataSegmentName> |
||||
|
</Lx51> |
||||
|
</Target51> |
||||
|
</TargetOption> |
||||
|
<Groups> |
||||
|
<Group> |
||||
|
<GroupName>app</GroupName> |
||||
|
<Files> |
||||
|
<File> |
||||
|
<FileName>app_weight.c</FileName> |
||||
|
<FileType>1</FileType> |
||||
|
<FilePath>..\source\app\app_weight.c</FilePath> |
||||
|
</File> |
||||
|
<File> |
||||
|
<FileName>main.c</FileName> |
||||
|
<FileType>1</FileType> |
||||
|
<FilePath>..\source\app\main.c</FilePath> |
||||
|
</File> |
||||
|
<File> |
||||
|
<FileName>app_config.c</FileName> |
||||
|
<FileType>1</FileType> |
||||
|
<FilePath>..\source\app\app_config.c</FilePath> |
||||
|
</File> |
||||
|
</Files> |
||||
|
</Group> |
||||
|
<Group> |
||||
|
<GroupName>asp</GroupName> |
||||
|
<Files> |
||||
|
<File> |
||||
|
<FileName>asp_schain.c</FileName> |
||||
|
<FileType>1</FileType> |
||||
|
<FilePath>..\source\asp\asp_schain.c</FilePath> |
||||
|
</File> |
||||
|
<File> |
||||
|
<FileName>asp_lowpower.c</FileName> |
||||
|
<FileType>1</FileType> |
||||
|
<FilePath>..\source\asp\asp_lowpower.c</FilePath> |
||||
|
</File> |
||||
|
</Files> |
||||
|
</Group> |
||||
|
<Group> |
||||
|
<GroupName>cpu</GroupName> |
||||
|
<Files> |
||||
|
<File> |
||||
|
<FileName>STARTUP.A51</FileName> |
||||
|
<FileType>2</FileType> |
||||
|
<FilePath>..\source\cpu\STARTUP.A51</FilePath> |
||||
|
</File> |
||||
|
<File> |
||||
|
<FileName>stc_8_delay.c</FileName> |
||||
|
<FileType>1</FileType> |
||||
|
<FilePath>..\source\cpu\stc_8_delay.c</FilePath> |
||||
|
</File> |
||||
|
</Files> |
||||
|
</Group> |
||||
|
<Group> |
||||
|
<GroupName>msp</GroupName> |
||||
|
<Files> |
||||
|
<File> |
||||
|
<FileName>msp_uartN.c</FileName> |
||||
|
<FileType>1</FileType> |
||||
|
<FilePath>..\source\msp\uart\msp_uartN.c</FilePath> |
||||
|
</File> |
||||
|
<File> |
||||
|
<FileName>msp_time2.c</FileName> |
||||
|
<FileType>1</FileType> |
||||
|
<FilePath>..\source\msp\msp_time2.c</FilePath> |
||||
|
</File> |
||||
|
<File> |
||||
|
<FileName>msp_uart1.c</FileName> |
||||
|
<FileType>1</FileType> |
||||
|
<FilePath>..\source\msp\uart\msp_uart1.c</FilePath> |
||||
|
</File> |
||||
|
<File> |
||||
|
<FileName>msp_iicMx.c</FileName> |
||||
|
<FileType>1</FileType> |
||||
|
<FilePath>..\source\msp\msp_iicMx.c</FilePath> |
||||
|
</File> |
||||
|
<File> |
||||
|
<FileName>msp_eeprom.c</FileName> |
||||
|
<FileType>1</FileType> |
||||
|
<FilePath>..\source\msp\msp_eeprom.c</FilePath> |
||||
|
</File> |
||||
|
<File> |
||||
|
<FileName>msp_adc.c</FileName> |
||||
|
<FileType>1</FileType> |
||||
|
<FilePath>..\source\msp\msp_adc.c</FilePath> |
||||
|
</File> |
||||
|
</Files> |
||||
|
</Group> |
||||
|
<Group> |
||||
|
<GroupName>bsp</GroupName> |
||||
|
<Files> |
||||
|
<File> |
||||
|
<FileName>bsp_config.c</FileName> |
||||
|
<FileType>1</FileType> |
||||
|
<FilePath>..\source\bsp\TTSSbsp\bsp_config.c</FilePath> |
||||
|
</File> |
||||
|
<File> |
||||
|
<FileName>bsp_led.c</FileName> |
||||
|
<FileType>1</FileType> |
||||
|
<FilePath>..\source\bsp\bsp_led.c</FilePath> |
||||
|
</File> |
||||
|
<File> |
||||
|
<FileName>bsp_cs1232.c</FileName> |
||||
|
<FileType>1</FileType> |
||||
|
<FilePath>..\source\bsp\bsp_cs1232.c</FilePath> |
||||
|
</File> |
||||
|
</Files> |
||||
|
</Group> |
||||
|
<Group> |
||||
|
<GroupName>ctask</GroupName> |
||||
|
<Files> |
||||
|
<File> |
||||
|
<FileName>TTSS_task.c</FileName> |
||||
|
<FileType>1</FileType> |
||||
|
<FilePath>..\source\ctask\TTSS_task.c</FilePath> |
||||
|
</File> |
||||
|
<File> |
||||
|
<FileName>TTSS_tick.c</FileName> |
||||
|
<FileType>1</FileType> |
||||
|
<FilePath>..\source\ctask\TTSS_tick.c</FilePath> |
||||
|
</File> |
||||
|
<File> |
||||
|
<FileName>TTSS_time_stc.c</FileName> |
||||
|
<FileType>1</FileType> |
||||
|
<FilePath>..\source\ctask\TTSS_time_stc.c</FilePath> |
||||
|
</File> |
||||
|
</Files> |
||||
|
</Group> |
||||
|
<Group> |
||||
|
<GroupName>tpc</GroupName> |
||||
|
<Files> |
||||
|
<File> |
||||
|
<FileName>tpc_road.c</FileName> |
||||
|
<FileType>1</FileType> |
||||
|
<FilePath>..\source\tpc\tpc_road.c</FilePath> |
||||
|
</File> |
||||
|
</Files> |
||||
|
</Group> |
||||
|
<Group> |
||||
|
<GroupName>clib</GroupName> |
||||
|
<Files> |
||||
|
<File> |
||||
|
<FileName>c_lib.c</FileName> |
||||
|
<FileType>1</FileType> |
||||
|
<FilePath>..\source\clib\c_lib.c</FilePath> |
||||
|
</File> |
||||
|
<File> |
||||
|
<FileName>c_delay.c</FileName> |
||||
|
<FileType>1</FileType> |
||||
|
<FilePath>..\source\clib\c_delay.c</FilePath> |
||||
|
</File> |
||||
|
</Files> |
||||
|
</Group> |
||||
|
<Group> |
||||
|
<GroupName>debug</GroupName> |
||||
|
<Files> |
||||
|
<File> |
||||
|
<FileName>cc_as_stc01_main.ini</FileName> |
||||
|
<FileType>5</FileType> |
||||
|
<FilePath>..\source\debug\cc_as_stc01_main.ini</FilePath> |
||||
|
</File> |
||||
|
<File> |
||||
|
<FileName>debug_drv.c</FileName> |
||||
|
<FileType>1</FileType> |
||||
|
<FilePath>..\source\debug\debug_drv.c</FilePath> |
||||
|
</File> |
||||
|
</Files> |
||||
|
</Group> |
||||
|
</Groups> |
||||
|
</Target> |
||||
|
</Targets> |
||||
|
|
||||
|
</Project> |
||||
@ -0,0 +1,152 @@ |
|||||
|
#define, Keyword |
||||
|
#elif, Directive |
||||
|
#else, Directive |
||||
|
#endif, Directive |
||||
|
#if, Directive |
||||
|
#ifdef, Directive |
||||
|
#ifndef, Directive |
||||
|
#include, Keyword |
||||
|
#pragma, Keyword |
||||
|
#undef, Keyword |
||||
|
(, Delimiter |
||||
|
), Delimiter |
||||
|
",", Delimiter |
||||
|
;, Delimiter |
||||
|
abstract, Keyword |
||||
|
__abstract, Keyword |
||||
|
alignas, Keyword |
||||
|
alignof, Keyword |
||||
|
asm, Keyword |
||||
|
__asm, Keyword |
||||
|
assert, Debug |
||||
|
Assert, Debug |
||||
|
async, Keyword |
||||
|
auto, Keyword |
||||
|
bool, Keyword |
||||
|
break, Control |
||||
|
case, Control |
||||
|
catch, Control |
||||
|
cdecl, Keyword |
||||
|
__cdecl, Keyword |
||||
|
char, Keyword |
||||
|
class, Control |
||||
|
coclass, Control |
||||
|
const, Keyword |
||||
|
constexpr, Keyword |
||||
|
const_cast, Keyword |
||||
|
continue, Control |
||||
|
cout, Keyword |
||||
|
decltype, Keyword |
||||
|
default, Control |
||||
|
__delegate, Keyword |
||||
|
delete, Control |
||||
|
do, Control |
||||
|
double, Keyword |
||||
|
DWORD, Keyword |
||||
|
dynamic_cast, Keyword |
||||
|
each, Control |
||||
|
else, Control |
||||
|
enum, Control |
||||
|
__event, Keyword |
||||
|
except, Control |
||||
|
__except, Control |
||||
|
exception, Keyword |
||||
|
explicit, Keyword |
||||
|
export, Keyword |
||||
|
extern, Keyword |
||||
|
FALSE, Boolean |
||||
|
false, Boolean |
||||
|
FAR, Keyword |
||||
|
far, Keyword |
||||
|
final, Keyword |
||||
|
__finally, Control |
||||
|
float, Keyword |
||||
|
for, Control |
||||
|
fortran, Keyword |
||||
|
for_each, Control |
||||
|
friend, Keyword |
||||
|
__gc, Keyword |
||||
|
goto, Control |
||||
|
HUGE, Keyword |
||||
|
huge, Keyword |
||||
|
if, Control |
||||
|
inline, Keyword |
||||
|
INT, Keyword |
||||
|
int, Keyword |
||||
|
int16_t, Keyword |
||||
|
int32_t, Keyword |
||||
|
int64_t, Keyword |
||||
|
int8_t, Keyword |
||||
|
interface, Control |
||||
|
LONG, Keyword |
||||
|
long, Keyword |
||||
|
mutable, Keyword |
||||
|
namespace, Control |
||||
|
near, Keyword |
||||
|
NEAR, Keyword |
||||
|
new, Control |
||||
|
noexcept, Keyword |
||||
|
NULL, Null Value |
||||
|
nullptr, Null Value |
||||
|
__nullptr, Null Value |
||||
|
operator, Keyword |
||||
|
override, Keyword |
||||
|
pascal, Keyword |
||||
|
PASCAL, Keyword |
||||
|
private, Keyword |
||||
|
__property, Keyword |
||||
|
protected, Keyword |
||||
|
public, Keyword |
||||
|
ref, Keyword |
||||
|
REGISTER, Keyword |
||||
|
register, Keyword |
||||
|
reinterpret_cast, Keyword |
||||
|
return, Control |
||||
|
sealed, Keyword |
||||
|
short, Keyword |
||||
|
SHORT, Keyword |
||||
|
signed, Keyword |
||||
|
sizeof, Keyword |
||||
|
static, Keyword |
||||
|
static_cast, Keyword |
||||
|
struct, Control |
||||
|
__super, Keyword |
||||
|
switch, Control |
||||
|
template, Control |
||||
|
this, Keyword |
||||
|
thread_local, Keyword |
||||
|
throw, Control |
||||
|
TRUE, Boolean |
||||
|
true, Boolean |
||||
|
try, Control |
||||
|
__try, Control |
||||
|
TTSS_step01, Highlight |
||||
|
TTSS_Task_end, Highlight |
||||
|
TTSS_Task_init, Highlight |
||||
|
TTSS_Task_step, Highlight |
||||
|
TTSS_step01, Highlight |
||||
|
TTSS_step02,Highlight |
||||
|
TTSS_step03,Highlight |
||||
|
TTSS_step04,Highlight |
||||
|
TTSS_step05,Highlight |
||||
|
TTSS_step06,Highlight |
||||
|
TTSS_step07,Highlight |
||||
|
TTSS_Task_step, Highlight |
||||
|
typedef, Control |
||||
|
typeid, Keyword |
||||
|
typename, Keyword |
||||
|
UINT, Keyword |
||||
|
union, Control |
||||
|
unsigned, Keyword |
||||
|
using, Keyword |
||||
|
virtual, Keyword |
||||
|
VOID, Keyword |
||||
|
void, Keyword |
||||
|
volatile, Keyword |
||||
|
wchar_t, Keyword |
||||
|
while, Control |
||||
|
WORD, Keyword |
||||
|
{, Delimiter |
||||
|
[, Delimiter |
||||
|
], Delimiter |
||||
|
}, Delimiter |
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -0,0 +1,22 @@ |
|||||
|
<?xml version="1.0" encoding="utf-8"?> |
||||
|
<ProjectSettings |
||||
|
AppVer="4.00.0128" |
||||
|
AppVerMinReader="4.00.0034" |
||||
|
GlobalConfiguration="1" |
||||
|
GlobalWorkspace="0" |
||||
|
LocalsInDb="0" |
||||
|
IndexMembers="1" |
||||
|
IndexFragments="1" |
||||
|
UseMasterFileList="0" |
||||
|
SourceDir="..\..\source" |
||||
|
BackupDir="%PROJECT_DATA_DIR%\Backup" |
||||
|
MasterFileList="%PROJECT_SOURCE_DIR%\%PROJECT_NAME%_filelist.txt" |
||||
|
IsImportProject="0" |
||||
|
> |
||||
|
<Imports> |
||||
|
<ImportedLibs/> |
||||
|
</Imports> |
||||
|
<ParseConditions> |
||||
|
<Defines/> |
||||
|
</ParseConditions> |
||||
|
</ProjectSettings> |
||||
@ -0,0 +1,23 @@ |
|||||
|
day1 |
||||
|
驱动: 优化电路板 调程序 |
||||
|
手持 设计界面 |
||||
|
day2 |
||||
|
驱动: 电路板加急发板 、(在客户看到现在的板子和确定接插件之前?) |
||||
|
手持 设计界面交互 |
||||
|
day3 |
||||
|
驱动: 电路板发板 |
||||
|
手持 设计界面交互 |
||||
|
day4 |
||||
|
驱动: 备料 |
||||
|
手持 通讯程序控制 |
||||
|
day5 |
||||
|
驱动: 焊接并 调试程序 |
||||
|
手持 通讯程序控制 |
||||
|
day6 |
||||
|
驱动: 调程序 |
||||
|
手持 联调 |
||||
|
day7 |
||||
|
驱动: ECU功能验证 |
||||
|
手持 联调 |
||||
|
|
||||
|
|
||||
@ -0,0 +1,384 @@ |
|||||
|
#include "app_config.h" |
||||
|
//#include "../tpc/tpc_uart.h"
|
||||
|
///#include "../bsp/bsp_cs1232.h"
|
||||
|
#include "msp_eeprom.h" |
||||
|
///#include "../msp/msp_id.h"
|
||||
|
#include "debug_drv.h" |
||||
|
#include "msp_uartN.h" |
||||
|
|
||||
|
TS_GlobalRegisterSave_ S; |
||||
|
////TS_GlobalParam_ G;
|
||||
|
|
||||
|
void L3_R_2_S(void) |
||||
|
{ |
||||
|
TTSS_run_times(4)////tst_v.i
|
||||
|
{ ////ts_adc_samples[tst_v.i].pSPara = &TS_adc_SPara[tst_v.i];
|
||||
|
Lc_buf_from_const_uc(D_struct2U8(S.adc_SPara[tst_v.i]),D_struct2U8(TS_adc_SPara[tst_v.i]),D_TS_adc_SPara_LEN); |
||||
|
} |
||||
|
///tst_weight.pSPara = &ts_weight_SPara;
|
||||
|
Lc_buf_from_const_uc(D_struct2U8(S.weight_SPara),D_struct2U8(ts_weight_SPara),D_TS_weight_SPara_len); |
||||
|
} |
||||
|
void L3_S_2_R(void) |
||||
|
{ |
||||
|
TTSS_run_times(4)////tst_v.i
|
||||
|
{ |
||||
|
Lc_buf_from_const_uc(D_struct2U8(TS_adc_SPara[tst_v.i]),D_struct2U8(S.adc_SPara[tst_v.i]),D_TS_adc_SPara_LEN); |
||||
|
ts_adc_samples[tst_v.i].pSPara = &TS_adc_SPara[tst_v.i]; |
||||
|
} |
||||
|
///
|
||||
|
Lc_buf_from_const_uc(D_struct2U8(ts_weight_SPara),D_struct2U8(S.weight_SPara),D_TS_weight_SPara_len); |
||||
|
tst_weight.pSPara = &ts_weight_SPara; |
||||
|
} |
||||
|
|
||||
|
#define D_0xaa55 0xaa55 |
||||
|
|
||||
|
////返回0 并打印 ("\r\nSpara ok ");
|
||||
|
/// 返回非零 为错误次数 最后一次ok
|
||||
|
/// 返回100 严重错误 一次没有成功
|
||||
|
vtype L3_S_init(void) |
||||
|
{ |
||||
|
vtype ovt = 0; |
||||
|
////
|
||||
|
/*
|
||||
|
|
||||
|
存错的多个写法: |
||||
|
使用三个区域,增加一致性判定的写法 |
||||
|
使用一个区域,容错一次的写法 |
||||
|
|
||||
|
|
||||
|
step 1 上电读取eeprom参数, |
||||
|
step 2 如果标志位数据不对,把每个任务中的spara初始化放到S 中,然后写入eeprom,返回step 1 |
||||
|
如果重试次数溢出 打印错误信息;严重警告 系统不可用 |
||||
|
step 3 如果标志位数据ok 退出 |
||||
|
TTSS_run_times(4)////tst_v.i
|
||||
|
{ ////ts_adc_samples[tst_v.i].pSPara = &TS_adc_SPara[tst_v.i];
|
||||
|
Lc_buf_from_const_uc(D_struct2U8(S.adc_SPara[tst_v.i]),D_struct2U8(&TS_adc_SPara[tst_v.i]),D_TS_adc_SPara_LEN); |
||||
|
} |
||||
|
|
||||
|
///tst_weight.pSPara = &ts_weight_SPara;
|
||||
|
Lc_buf_from_const_uc(D_struct2U8(S.weight_SPara),D_struct2U8(&ts_weight_SPara),D_TS_weight_SPara_len); |
||||
|
|
||||
|
|
||||
|
*/ |
||||
|
do{ |
||||
|
L0_Iap_Read_array(D_EEP_BASE,D_struct2U8(S),D_S_LEN); |
||||
|
printf1("\r\nread S: %d ",(int)ovt); |
||||
|
L1_uartD_Arrayhex(D_struct2U8(S),D_S_LEN); |
||||
|
|
||||
|
if(0xaa55 == S.d0xaa55) |
||||
|
{////>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>和应用强相关
|
||||
|
L3_S_2_R(); |
||||
|
////<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<和应用强相关
|
||||
|
printfs("\r\nSpara ok "); |
||||
|
return ovt; |
||||
|
}else |
||||
|
{ |
||||
|
S.d0xaa55 = D_0xaa55; |
||||
|
printf1("\r\nProg %x",S.d0xaa55); |
||||
|
L3_R_2_S(); |
||||
|
L0_Iap_Program_array(D_EEP_BASE,D_struct2U8(S),D_S_LEN); |
||||
|
} |
||||
|
}while(ovt ++< 2); |
||||
|
return 100; |
||||
|
} |
||||
|
|
||||
|
/*
|
||||
|
void L3_param_init(void) |
||||
|
{ |
||||
|
int i; |
||||
|
for(i=0;i<D_ch_max_num;i++) |
||||
|
{ |
||||
|
G.weight[i] = 0; |
||||
|
} |
||||
|
G.allweight = 0; |
||||
|
G._total_weight = 0; |
||||
|
G._total_zweight = 0; |
||||
|
|
||||
|
//L3_eeprom_read_param();
|
||||
|
} |
||||
|
|
||||
|
*/ |
||||
|
|
||||
|
///出厂参数 向 保存参数
|
||||
|
void L3_S(void) |
||||
|
{ |
||||
|
|
||||
|
|
||||
|
/// Lc_buf_copy_uc((u8 *)&R.sd,(u8 *)&iapData,20);
|
||||
|
//写入eeprom
|
||||
|
/// if(L1_eeprom_write((U8*)&iapData,sizeof(TS_GlobalRegisterSave_)) == 0)
|
||||
|
{ |
||||
|
// L0_uart0_sendstr("e2p write success");
|
||||
|
} |
||||
|
} |
||||
|
|
||||
|
////把当前任务中的数据放入到保存参数(一般是eeprom
|
||||
|
void L2_para_2_S(TS_para_ *t) |
||||
|
{////void L0_Iap_Program_array(vU16 addr,U8 *buf,U8 len)
|
||||
|
/// L0_Iap_Program_array(t->add,);
|
||||
|
|
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
//读取iap内容,写入reg
|
||||
|
void L3_iap_2_reg(void) |
||||
|
{ |
||||
|
|
||||
|
/*
|
||||
|
|
||||
|
|
||||
|
U8 len = 0,i = 0; |
||||
|
if(L1_eeprom_read((U8*)&iapData,&len) == 1) |
||||
|
{ |
||||
|
L0_uart0_sendstr("e2p read failed\r\n"); |
||||
|
return; |
||||
|
} |
||||
|
L0_uart0_sendstr("e2p read success\r\n"); |
||||
|
|
||||
|
Lc_buf_copy_uc((u8 *)&iapData,(u8 *)&R.sd,20); |
||||
|
|
||||
|
*/ |
||||
|
|
||||
|
} |
||||
|
|
||||
|
/*********
|
||||
|
|
||||
|
|
||||
|
int L3_mcu_id_ok(void) |
||||
|
{ |
||||
|
U8 i = 0,crc[2]; |
||||
|
U32 enc_key; |
||||
|
//1.获取MCU_ID
|
||||
|
L0_id_get_rom(G.e.mcu_id); |
||||
|
for(i=0;i<MCU_ID_LEN;i++) |
||||
|
{ |
||||
|
L0_uart0_uchex(G.e.mcu_id[i]); |
||||
|
} |
||||
|
|
||||
|
//2.读取eeprom中的加密信息
|
||||
|
L0_Iap_Read_array(EEP_ENC_ADDR, (U8*)&eep_enc, MCU_ID_KEY_LEN + MCU_ID_LEN + 2); |
||||
|
crc16(crc,(U8*)&eep_enc,MCU_ID_KEY_LEN + MCU_ID_LEN); |
||||
|
if(eep_enc.crc[0] != crc[0] || eep_enc.crc[1] != crc[1]) |
||||
|
{ |
||||
|
L0_uart0_uc('-'); |
||||
|
return 0; |
||||
|
} |
||||
|
|
||||
|
//3.根据mcu_id和enc_key计算enc_val
|
||||
|
enc_key = ((U32)eep_enc.enc_key[0] << 24) | (eep_enc.enc_key[1] << 16) | (eep_enc.enc_key[2] << 8) |(eep_enc.enc_key[3] << 0); |
||||
|
Lc_encrypt_id((U8*)G.e.mcu_enc_id, (U8*)G.e.mcu_id, enc_key, MCU_ID_LEN); |
||||
|
|
||||
|
//4.判断enc_val是否一致
|
||||
|
for(i=0;i<MCU_ID_KEY_LEN;i++) |
||||
|
{ |
||||
|
if(G.e.mcu_enc_id[i] != eep_enc.enc_val[i]) |
||||
|
{ |
||||
|
return 0; |
||||
|
} |
||||
|
} |
||||
|
return 1; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
**********/ |
||||
|
|
||||
|
|
||||
|
|
||||
|
#if 0 |
||||
|
TS_EEPROM_ENC_ eep_enc; |
||||
|
|
||||
|
void L0_reg_reset() |
||||
|
{/******
|
||||
|
//R.p.reset = 0;
|
||||
|
R.p.adc_ch_status = ADC_status_ch1_Ready | ADC_status_ch2_Ready | ADC_status_ch3_Ready | ADC_status_ch4_Ready; //修改采集通道
|
||||
|
R.p.slaver_id = D_UART0_485_SLAVER_ID; |
||||
|
R.zero = 0; |
||||
|
R.status_eep_save = 0; |
||||
|
// R.reset = 0;
|
||||
|
R.p.weight_max = 150; //500kg
|
||||
|
R.p.lmd = 15; //2mv/v
|
||||
|
|
||||
|
R.p.adc_blur_mid = 1; |
||||
|
R.p.adc_blur_avg = 6; |
||||
|
R.p.adc_blur_shift[0] = 0; |
||||
|
R.p.adc_blur_shift[1] = 2; |
||||
|
R.p.adc_blur_shift[2] = 4; |
||||
|
R.p.adc_blur_threshold[0] = 1600; //1.6kg
|
||||
|
R.p.adc_blur_threshold[1] = 700; //0.7kg
|
||||
|
*********/ |
||||
|
|
||||
|
///L3_reg_2_iap();
|
||||
|
} |
||||
|
|
||||
|
void L0_reg_init(void) |
||||
|
{ |
||||
|
R.sd.rev0x55aa55aa = 0x55aa55aa; |
||||
|
//R.total_weight = R.total_zweight = 0;
|
||||
|
///L0_reg_reset();
|
||||
|
L4_iap_2_reg(); |
||||
|
|
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
S32 L3_count_std_weight(S32 weight) |
||||
|
{ |
||||
|
U8 i = 0; |
||||
|
U16 ratio = 100; |
||||
|
weight = (weight - G._total_zweight)/10; |
||||
|
for(i=0;i<D_weight_std_num;i++) |
||||
|
{ |
||||
|
if(R.p.weight_std[i].weight_range == 0 || (R.p.weight_std[i].weight_range * 100) >= weight) |
||||
|
{ |
||||
|
break; |
||||
|
} |
||||
|
} |
||||
|
if(i<D_weight_std_num && R.p.weight_std[i].ratio != 0) |
||||
|
{ |
||||
|
ratio = R.p.weight_std[i].ratio; |
||||
|
} |
||||
|
return (S32)(weight * 1.0 * ratio / 100) ; |
||||
|
} |
||||
|
#endif |
||||
|
|
||||
|
|
||||
|
|
||||
|
void L0_main_lowp(void) |
||||
|
{//
|
||||
|
|
||||
|
|
||||
|
BITN_1(P_SW2 ,BITN7);USBCON = 0; |
||||
|
|
||||
|
D_stdIO_P0_ALL(); |
||||
|
|
||||
|
D_stdIO_P1_ALL(); |
||||
|
D_stdIO_P2_ALL(); |
||||
|
D_stdIO_P3_ALL(); |
||||
|
D_stdIO_P4_ALL(); |
||||
|
D_stdIO_P5_ALL(); |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
WKTCL = 0xff; //设定掉电唤醒时钟约为 1 秒钟 WKTCH = 0x87;
|
||||
|
|
||||
|
WKTCH = 0x87; |
||||
|
///SetWakeUpTime(10000);
|
||||
|
|
||||
|
D_P24_REV(); |
||||
|
Lc_delay_ms(500); |
||||
|
D_P24_REV(); |
||||
|
Lc_delay_ms(500); |
||||
|
D_P24_REV(); |
||||
|
Lc_delay_ms(500); |
||||
|
|
||||
|
D_P24_ON(); |
||||
|
P_SW2|=0x80; |
||||
|
|
||||
|
P0PU = 0; |
||||
|
P1PU = 0; |
||||
|
P2PU = 0; |
||||
|
P3PU = 0; |
||||
|
P4PU = 0; |
||||
|
P5PU = 0; |
||||
|
|
||||
|
P0SR =0xff; |
||||
|
P1SR =0xff; |
||||
|
P2SR =0xff; |
||||
|
P3SR =0xff; |
||||
|
P4SR =0xff; |
||||
|
P5SR =0xff; |
||||
|
|
||||
|
P0DR =0xff; |
||||
|
P1DR =0xff; |
||||
|
P2DR =0xff; |
||||
|
P3DR =0xff; |
||||
|
P4DR =0xff; |
||||
|
P5DR =0xff; |
||||
|
|
||||
|
|
||||
|
P0IE =0; |
||||
|
P1IE =0; |
||||
|
P2IE =0; |
||||
|
P3IE =0; |
||||
|
P4IE =0; |
||||
|
P5IE =0; |
||||
|
|
||||
|
USBCON = 0; |
||||
|
///USBCON = 0x80;
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
D_HighR_P0_ALL(); |
||||
|
D_HighR_P1_ALL(); |
||||
|
D_HighR_P2_ALL(); |
||||
|
D_HighR_P3_ALL(); |
||||
|
D_HighR_P4_ALL(); |
||||
|
D_HighR_P5_ALL(); |
||||
|
P_SW2 = 0x80; |
||||
|
// XOSCCR =0;
|
||||
|
///HIRCCR = 0;
|
||||
|
/*****
|
||||
|
|
||||
|
IRC32KCR = 0x80; //启动内部32K IRC
|
||||
|
while (!(IRC32KCR & 1)); //等待时钟稳定
|
||||
|
CLKDIV = 0x00; //时钟不分频
|
||||
|
CLKSEL = 0x03; //选择内部32K
|
||||
|
P_SW2 = 0x00; |
||||
|
|
||||
|
|
||||
|
D_stdIO_P0_ALL(); |
||||
|
D_stdIO_P1_ALL(); |
||||
|
D_stdIO_P2_ALL(); |
||||
|
D_stdIO_P3_ALL(); |
||||
|
D_stdIO_P4_ALL(); |
||||
|
D_stdIO_P5_ALL(); |
||||
|
|
||||
|
P0 = 0xff; |
||||
|
P1 = 0xff; |
||||
|
P2 = 0xff; |
||||
|
P3 = 0xff; |
||||
|
P4 = 0xff; |
||||
|
P5 = 0xff; |
||||
|
|
||||
|
|
||||
|
|
||||
|
*******/ |
||||
|
RSTCFG=0;//没有变化43ua 41ua
|
||||
|
|
||||
|
while(9) |
||||
|
{ |
||||
|
|
||||
|
D_HighR_P2_ALL(); |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
_nop_(); |
||||
|
_nop_(); |
||||
|
|
||||
|
PCON = 0x02; ////2222 //MCU进入掉电模式
|
||||
|
///D_LPCD_INT_CLOSE(); 对掉电唤醒后有一个中断进来没有效果
|
||||
|
_nop_(); |
||||
|
_nop_(); _nop_(); |
||||
|
_nop_(); _nop_(); |
||||
|
_nop_(); |
||||
|
/// D_P24_REV();
|
||||
|
|
||||
|
D_stdIO_P2_ALL(); |
||||
|
D_P24_REV(); |
||||
|
|
||||
|
Lc_delay_ms(300); |
||||
|
D_P24_REV(); |
||||
|
|
||||
|
|
||||
|
} |
||||
|
|
||||
|
} |
||||
|
|
||||
|
|
||||
@ -0,0 +1,264 @@ |
|||||
|
#ifndef APP_CONFIG_H |
||||
|
#define APP_CONFIG_H |
||||
|
|
||||
|
#include "c_type51.h" |
||||
|
//#include "asp_para.h"
|
||||
|
|
||||
|
#include "app_weight.h" |
||||
|
///#include "app_save.h"
|
||||
|
|
||||
|
#define APP_VERSION 0x10 |
||||
|
|
||||
|
#define D_MCU_BIGENDIAN 1 |
||||
|
// #define D_MCU_LITTLEENDIAN 1
|
||||
|
|
||||
|
enum tp_handle |
||||
|
{ |
||||
|
TP_HANDLED, |
||||
|
TP_UNHANDLE |
||||
|
}; |
||||
|
|
||||
|
////#define baud_rade L3_baud_rate_change(G.p.baud_rate)
|
||||
|
|
||||
|
|
||||
|
|
||||
|
//STEP 3 Register CONFIG >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
///存放全局需要保存的数据
|
||||
|
///cc 2023/04/07--5:12:12 包含系统运行需要的:通讯参数 低功耗配置 采集配置 功能配置(称重)等
|
||||
|
/*
|
||||
|
每个任务都有自己的变量,原则上没有所谓的整个系统全局的,最接近全局的应该是 |
||||
|
低功耗的任务 有权利安排其他的任务,其他的任务都可以自己形成闭环 按消费者生产者的模式运行和信息交换 |
||||
|
其他任务都可以有需要保存的变量和出厂的变量 (保存的变量和出厂的一般都一致,更简单一点) |
||||
|
这些需要保存的可以放到S中 TS_GlobalRegisterSave_ |
||||
|
|
||||
|
出厂数据放到 code中和程序hex文件一体,除非烧写程序(固件) |
||||
|
|
||||
|
数据类型 数据状态 存放地方 初始化情况 修改情况 和其他数据的关系 |
||||
|
S保存参数 整个(结构体) eeprom中 该批量实际测试参数 操作eeprom 如果出现问题,出厂参数赋值给保存参数,然后到eeprom |
||||
|
F出厂参数 整个(结构体) code/程序/hex 该批量实际测试参数 随着烧写程序 |
||||
|
R运行参数 整个(结构体) ram中 参数来自保存参数 程序运行中修改 |
||||
|
|
||||
|
C缓存参数 多个独立结构体 ram 程序运行中 |
||||
|
|
||||
|
顺序 出厂参数--> 保存参数--> 运行参数-->缓存参数 |
||||
|
大小 出厂参数 = 保存参数 >= 运行参数>= 缓存参数 |
||||
|
R运行参数 拷贝到 eeprom中的保存参数中,内存丰厚的 可以把保存参数做个缓存, |
||||
|
内存需要精简的 S保存参数直接放到eeprom 不要建立缓存 |
||||
|
|
||||
|
寄存器模式 register |
||||
|
是包含再参数中 是先有参数后有相对地址,然后抽象成寄存器 |
||||
|
或者说设计的时候,先设计寄存器,然后组合,最后形成了吧保存参数 |
||||
|
|
||||
|
|
||||
|
系统存储区域分一个或多个扇区 |
||||
|
每个系统存储区域 包含多个任务的参数区 |
||||
|
|
||||
|
每个任务: |
||||
|
分配地址 |
||||
|
数据大小:也可以由数据结构 ,鼓励自己计算 确保每个细节可以把控“把正确的数据放到正确的地方” |
||||
|
数据结构 |
||||
|
|
||||
|
512个字节 |
||||
|
一个扇区 512 |
||||
|
有个区域配置这些 |
||||
|
|
||||
|
程序操作存储时 关闭一切中断 |
||||
|
|
||||
|
烧写程序的时候选择两种,一种清除掉所有的eeprom 在这种情况 |
||||
|
程序运行时 读取eeprom中的0x55aa,如果不是那么就读取F然后放入eeprom中,然后 S 放入运行R参数中,如果是直 |
||||
|
|
||||
|
*/ |
||||
|
|
||||
|
|
||||
|
/*********
|
||||
|
|
||||
|
///cc 2023/04/08--4:2:23 需要整理
|
||||
|
|
||||
|
写操作1字节, |
||||
|
擦除1扇区 512字节---4-6ms |
||||
|
字节中的0写为1时 擦除扇区 |
||||
|
最安全最简单,最逻辑清楚的事,就是 |
||||
|
每次擦一个扇区每次写一个扇区, |
||||
|
--->每次擦一个扇区每次写一个扇区的前面的有效数据, |
||||
|
|
||||
|
1,要求我们尽量小,最好少于512字节 |
||||
|
次数限制 30万次 |
||||
|
2, 尽量减少写,擦.--->调试的时候要谨慎,最后才可打开写; |
||||
|
|
||||
|
背景知识和应用需求决定了存储策略是如何设计的 |
||||
|
|
||||
|
|
||||
|
flash 28k 分出8k EEp 则物理地址位28K的最后8K 物理地址为5000h-6FFFh |
||||
|
|
||||
|
*******/ |
||||
|
|
||||
|
/*******
|
||||
|
app_config 可以调用app_save 偏向应用级别的配置文件 |
||||
|
app_save 保存的策略,不同程序可能要求不同 |
||||
|
|
||||
|
|
||||
|
板子有什么外设,这些几乎是纯硬件的东西,另外根据基本的应用,需要板子的外设如何使用的大部分放到bsp中 |
||||
|
asp 已经有模式的配置了,app通过参数调用asp,来决定使用外设什么模式. |
||||
|
协议发送,尽量是透明的. |
||||
|
|
||||
|
|
||||
|
app 结果 重量,保存校准参数 |
||||
|
asp app support program wifi的模式设置,adc的读取后的处理 |
||||
|
bsp board support program 板子上有的外设,wdt,wifi的底层配置函数,sensor |
||||
|
msp mcu support program ,cpu自身的外设,uart led |
||||
|
cpu |
||||
|
|
||||
|
*****/ |
||||
|
|
||||
|
/*******
|
||||
|
adc采样值 |
||||
|
^ |
||||
|
| |
||||
|
| o |
||||
|
| | |
||||
|
| o | |
||||
|
| | | |
||||
|
| ---|---- |------------0=adc=0 |
||||
|
0 | |D_ADC_OFFSET |
||||
|
|____|_____|____________>重量 adc + D_ADC_OFFSET |
||||
|
|
||||
|
0 40 80 重量点 |
||||
|
|
||||
|
|
||||
|
|
||||
|
称重需要保存的东西: |
||||
|
1,传感器正负转换的<偏移量 > |
||||
|
2,传感器找平的偏移量 一般选择四个传感器在0kg的时候的<最小值> |
||||
|
3,<三个重量点的校准> + <零点偏移量> |
||||
|
3.1 极端重量的过滤,超过250kg,或者坐偏的时候出现异常值,无效,维持上次值.<超过250kg,> |
||||
|
4, 上电自动校准零点:零点校准 刚上电的时候如果重量小于某个范围<(+-10kg)>,默认这个重量为此时的<零点> |
||||
|
所以这个范围需要配置,需要存储. |
||||
|
5,手工清零的时候,此时重量<零点>需要修改,产生一个偏移量,同时其他的两个校准点需要程序计算时同步更新. |
||||
|
相当于调用4,但是范围不限. |
||||
|
|
||||
|
|
||||
|
|
||||
|
策略B:4不用保存零点,只有手工清零才保存一下. |
||||
|
---->策略C: 4.5 都不保存,只有用户校准状态才保存 |
||||
|
选择c,按键配合,长按按键时重量为0 闪烁(H1sL0.5s)3下 |
||||
|
|
||||
|
本次称重功能需要保存的东西: |
||||
|
正负转换的<偏移量 > Byte x n=? 出厂才定. |
||||
|
找平的偏移量 Byte x n=? 出厂才定. |
||||
|
<三个重量点的校准> Byte x n=? 出厂才定. |
||||
|
<零点偏移量> 出厂定,校准清零 |
||||
|
极端重量的过滤,超过250kg 出厂定 |
||||
|
|
||||
|
其他需要保存 |
||||
|
版本号,id之类的 |
||||
|
|
||||
|
写3个扇区,之后判定两个扇区以上相同,并且在合理范围内,此参数才可使用.否则使用程序出厂内置的参数. |
||||
|
|
||||
|
|
||||
|
|
||||
|
*****/ |
||||
|
|
||||
|
////整体放入eeprom的扇区种
|
||||
|
typedef struct |
||||
|
{ |
||||
|
//RO Register
|
||||
|
//RW Register
|
||||
|
TS_adc_SPara_ adc_SPara[4]; |
||||
|
TS_weight_SPara_ weight_SPara;//// 称重的参数
|
||||
|
U16 d0xaa55; |
||||
|
}TS_GlobalRegisterSave_; |
||||
|
extern TS_GlobalRegisterSave_ S; |
||||
|
|
||||
|
#define D_S_LEN (D_TS_weight_SPara_len + D_TS_adc_SPara_LEN*D_ADC_CHANNEL_NUM +2 +8)///+8为了容错及扩展
|
||||
|
|
||||
|
|
||||
|
///cc 2023/04/07--15:4:20 独立任务有独立的存储 ,还是比较麻烦,简单至上吧
|
||||
|
/*
|
||||
|
typedef struct |
||||
|
{ |
||||
|
//RO Register
|
||||
|
|
||||
|
U16 add; |
||||
|
U16 num; |
||||
|
u8* pdat; |
||||
|
U16 0xaa55;////作为本任务保存的
|
||||
|
|
||||
|
}TS_para_; |
||||
|
|
||||
|
*/ |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
#define D_GlobalRegister_size 2 |
||||
|
|
||||
|
//寄存器内存基地址
|
||||
|
#define REG_MEM_BASE ((U16*)(&S)) //寄存器基础地址(本文件外部不应该使用该宏定义)
|
||||
|
//变量地址转寄存器
|
||||
|
#define MEM_2_REG(mem) (((U16*)(mem) - REG_MEM_BASE) + 1) |
||||
|
//寄存器转变量地址
|
||||
|
#define REG_2_MEM(reg) (REG_MEM_BASE + (U16)((reg) - 1)) |
||||
|
|
||||
|
#define D_EEP_BASE 0x0 |
||||
|
|
||||
|
|
||||
|
extern vtype L3_S_init(void); |
||||
|
extern int L3_mcu_id_ok(); |
||||
|
extern S32 L3_count_std_weight(S32 weight); |
||||
|
extern void L3_eeprom_persist_param(void); |
||||
|
extern U8 L1_para_read(U8 *buf,U8 *len); |
||||
|
extern U8 L1_para_write(U8 *buf, U8 len); |
||||
|
extern void L0_main_lowp(void); |
||||
|
extern void L3_S_2_R(void); |
||||
|
|
||||
|
extern void L3_R_2_S(void); |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
#if 0 |
||||
|
typedef struct |
||||
|
{ |
||||
|
/// U8 enc_key[MCU_ID_KEY_LEN];
|
||||
|
/// U8 mcu_id[MCU_ID_LEN];
|
||||
|
/// U8 mcu_enc_id[MCU_ID_LEN];
|
||||
|
}McuEncryptInfo; |
||||
|
|
||||
|
|
||||
|
#define D_ch_max_num 4 |
||||
|
typedef struct global_param |
||||
|
{ |
||||
|
//EncryptInfo
|
||||
|
McuEncryptInfo e; |
||||
|
|
||||
|
//Global Variables
|
||||
|
S32 weight[D_ch_max_num]; //4路重量
|
||||
|
S32 allweight; //总重量
|
||||
|
S32 _total_weight; //实际重量*1000
|
||||
|
S32 _total_zweight; //实际皮重*1000
|
||||
|
}TS_GlobalParam_; |
||||
|
|
||||
|
extern TS_GlobalParam_ G; |
||||
|
///extern TS_eeprom_param_ eep_param;
|
||||
|
///extern TS_EEPROM_ENC_ eep_enc;
|
||||
|
|
||||
|
|
||||
|
#endif |
||||
|
|
||||
|
|
||||
|
#endif |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
@ -0,0 +1,32 @@ |
|||||
|
////////////////////////////////////////////////////////////////////////////
|
||||
|
///@copyright Copyright (c) 2018, 传控科技 All rights reserved.
|
||||
|
///-------------------------------------------------------------------------
|
||||
|
/// @file bsp_drv.h
|
||||
|
/// @brief bsp @ driver config
|
||||
|
///-------------------------------------------------------------------------
|
||||
|
/// @version 1.0
|
||||
|
/// @author CC
|
||||
|
/// @date 20180331
|
||||
|
/// @note cc_AS_stc02
|
||||
|
|
||||
|
//////////////////////////////////////////////////////////////////////////////
|
||||
|
|
||||
|
#ifndef _APP_TASK_REG_H |
||||
|
#define _APP_TASK_REG_H |
||||
|
|
||||
|
#include "TTSS_task.h" |
||||
|
#include "c_lib.h" |
||||
|
|
||||
|
typedef struct _s_task_reglisten |
||||
|
{ |
||||
|
TS_task task; |
||||
|
}S_TASK_REGVAL_LISTEN; |
||||
|
|
||||
|
extern S_TASK_REGVAL_LISTEN s_task_reglisten; |
||||
|
|
||||
|
extern void L3_task_reglisten_init(void); |
||||
|
extern void L3_task_reglisten_handle(S_TASK_REGVAL_LISTEN *s); |
||||
|
|
||||
|
|
||||
|
#endif // #ifndef _APP_TASK_ADC_H
|
||||
|
|
||||
@ -0,0 +1,607 @@ |
|||||
|
////////////////////////////////////////////////////////////////////////////
|
||||
|
///@copyright Copyright (c) 2018, 传控科技 All rights reserved.
|
||||
|
///-------------------------------------------------------------------------
|
||||
|
/// @file bsp_drv.c
|
||||
|
/// @brief bsp @ driver config
|
||||
|
///-------------------------------------------------------------------------
|
||||
|
/// @version 1.0
|
||||
|
/// @author CC
|
||||
|
/// @date 20180331
|
||||
|
/// @note cc_AS_stc02
|
||||
|
//////////////////////////////////////////////////////////////////////////////
|
||||
|
|
||||
|
#include "app_weight.h" |
||||
|
#include "app_config.h" |
||||
|
#include "debug_drv.h" |
||||
|
#include "msp_eeprom.h" |
||||
|
|
||||
|
#define D_0kg 0 |
||||
|
#define D_20kg 200///0x00c8
|
||||
|
#define D_85kg 850////0x0352
|
||||
|
|
||||
|
/*
|
||||
|
#define D_Rsensor_out_D_0kg 0x18D9 |
||||
|
#define D_Rsensor_out_D_20kg 0x1B8B |
||||
|
#define D_Rsensor_out_D_85kg 0x244D |
||||
|
*/ |
||||
|
|
||||
|
#define D_Rsensor_out_D_0kg 0x18D9 |
||||
|
#define D_Rsensor_out_D_20kg 0x1c2c |
||||
|
#define D_Rsensor_out_D_85kg 0x26f9 |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
///#define D_20kg 190
|
||||
|
///cc 2023/04/06--6:41:48 西安方块 传感器 根据传感器调配 程序应该专门数据结构
|
||||
|
|
||||
|
|
||||
|
///cc 2023/04/06--7:50:26 应该是tst_weight.out6的值
|
||||
|
///cc 2023/04/09--8:11:50 adc改为out 因为到了weight这一层 已经不合适用adc,adc的和值 输出out给了weight来做运算
|
||||
|
|
||||
|
TS_weight_SPara_ ts_weight_SPara = |
||||
|
{ |
||||
|
'W',//0 1 u8 rev1;
|
||||
|
'E',//1 2 u8 rev2;
|
||||
|
D_0kg ,D_Rsensor_out_D_0kg, |
||||
|
D_20kg,D_Rsensor_out_D_20kg, |
||||
|
D_85kg,D_Rsensor_out_D_85kg, |
||||
|
|
||||
|
//2 3 TS_weight_point_ zerows[3]; ///4x3=12 手工清零后的参数, 没有清零或者出错恢复到和出厂设置一样,需要实时保存
|
||||
|
'A',//3 4 u8 rev3;
|
||||
|
' ',//4 5 u8 rev4;
|
||||
|
|
||||
|
}; |
||||
|
TS_TASK_weight_ tst_weight; |
||||
|
|
||||
|
|
||||
|
#define D_task_WEIGHT_add 12 |
||||
|
#define D_task_WEIGHT_CAL 13 |
||||
|
#define D_task_WEIGHT_get 14 |
||||
|
#define D_task_WEIGHT_zero 15 |
||||
|
///#define D_task_WEIGHT_CAL 124
|
||||
|
|
||||
|
#define D_task_WEIGHT_out 45 |
||||
|
#define D_task_WEIGHT_Sline 11 |
||||
|
#define D_task_WEIGHT_getADC 22 |
||||
|
///#define D_task_WEIGHT_CAL 33
|
||||
|
////#define D_task_WEIGHT_Sline
|
||||
|
|
||||
|
|
||||
|
|
||||
|
void L2_task_weight_init(u8 openclose) |
||||
|
{ |
||||
|
if(openclose) |
||||
|
{ |
||||
|
L0_ADS1213_INIT(D_ADS1213_GAIN_128); |
||||
|
L2_task_adc_init(0); |
||||
|
L2_task_adc_init(1); |
||||
|
L2_task_adc_init(2); |
||||
|
L2_task_adc_init(3); |
||||
|
|
||||
|
}else |
||||
|
{ |
||||
|
tst_weight.pSPara = &ts_weight_SPara; |
||||
|
} |
||||
|
/*
|
||||
|
L2_task_adc_SAinit(0,&S.sd.ADC_shiftaverage_a,&S.sd.ADC_shiftaverage_b); |
||||
|
L2_task_adc_SAinit(1,&S.sd.ADC_shiftaverage_a,&S.sd.ADC_shiftaverage_b); |
||||
|
L2_task_adc_SAinit(2,&S.sd.ADC_shiftaverage_a,&S.sd.ADC_shiftaverage_b); |
||||
|
L2_task_adc_SAinit(3,&S.sd.ADC_shiftaverage_a,&S.sd.ADC_shiftaverage_b); |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
ts_adc_samples[0].offset = S.sd.offset[0]; |
||||
|
ts_adc_samples[1].offset = S.sd.offset[1]; |
||||
|
ts_adc_samples[2].offset = S.sd.offset[2]; |
||||
|
ts_adc_samples[3].offset = S.sd.offset[3]; |
||||
|
|
||||
|
|
||||
|
*/ |
||||
|
|
||||
|
|
||||
|
} |
||||
|
|
||||
|
void L3_task_weight_init(void) |
||||
|
{ |
||||
|
//显示任务初始化
|
||||
|
L1_task_reg_clear(&tst_weight.task); |
||||
|
L3_task_s_go(tst_weight,D_task_init); |
||||
|
L2_task_weight_init(1); |
||||
|
///Lc_buf_from_const_uc(U8 * d, const U8 * s, U16 num)
|
||||
|
///tst_weight.pSPara->ts_WPoint
|
||||
|
} |
||||
|
|
||||
|
#define D_debug_ch D_Wch2 |
||||
|
///L3_task_weight_handler(&tst_weight);
|
||||
|
void L3_task_weight_handler(TS_TASK_weight_ *s) |
||||
|
{ |
||||
|
L2_task_adc_sample(&ts_adc_samples[D_Wch1]); |
||||
|
|
||||
|
L2_task_adc_sample(&ts_adc_samples[D_Wch2]); |
||||
|
|
||||
|
L2_task_adc_sample(&ts_adc_samples[D_Wch3]); |
||||
|
|
||||
|
L2_task_adc_sample(&ts_adc_samples[D_Wch4]); |
||||
|
|
||||
|
TTSS_Task_init(): |
||||
|
L0_waitFree_uartN(0); |
||||
|
|
||||
|
/*
|
||||
|
printf("\r\nR.sd.zeroout= %d = 0x%4x offset %d = 0x%4x", R.sd.zeroout, R.sd.zeroout,ts_adc_samples[0].offset,ts_adc_samples[0].offset); |
||||
|
printf("\r\nR.sd.zeroout= %d = 0x%4x offset %d = 0x%4x", R.sd.zeroout, R.sd.zeroout,ts_adc_samples[1].offset,ts_adc_samples[1].offset); |
||||
|
printf("\r\nR.sd.zeroout= %d = 0x%4x offset %d = 0x%4x", R.sd.zeroout, R.sd.zeroout,ts_adc_samples[2].offset,ts_adc_samples[2].offset); |
||||
|
printf("\r\nR.sd.zeroout= %d = 0x%4x offset %d = 0x%4x", R.sd.zeroout, R.sd.zeroout,ts_adc_samples[3].offset,ts_adc_samples[3].offset); |
||||
|
|
||||
|
printf('4'); |
||||
|
|
||||
|
*/ |
||||
|
s->slow = 0; |
||||
|
s->zero = 0;s->kgx10_zero = 0; |
||||
|
printfs(" L3_task_weight_handler "); |
||||
|
|
||||
|
L2_task_go(D_task_WEIGHT_get); |
||||
|
TTSS_Task_step(D_task_WEIGHT_get): |
||||
|
if(1 == ts_adc_samples[D_Wch4].ok) |
||||
|
{//
|
||||
|
ts_adc_samples[0].ok = 0; |
||||
|
ts_adc_samples[1].ok = 0; |
||||
|
ts_adc_samples[2].ok = 0; |
||||
|
ts_adc_samples[3].ok = 0; |
||||
|
s->slow ++; |
||||
|
// L0_uart0_uc('%');
|
||||
|
L2_task_go(D_task_WEIGHT_Sline); |
||||
|
} |
||||
|
TTSS_Task_step(D_task_WEIGHT_Sline): |
||||
|
if (s->slow >= 1)////采样减速
|
||||
|
{s->slow = 0; |
||||
|
///调用asp——adc中的输出 out3
|
||||
|
/************/ |
||||
|
///cc 2023/04/06--8:9:18 选择使用哪一条滤波线
|
||||
|
|
||||
|
ts_adc_samples[0].out5 = ts_adc_samples[0].ts_SAa.out4_shift; |
||||
|
ts_adc_samples[1].out5 = ts_adc_samples[1].ts_SAa.out4_shift; |
||||
|
ts_adc_samples[2].out5 = ts_adc_samples[2].ts_SAa.out4_shift; |
||||
|
ts_adc_samples[3].out5 = ts_adc_samples[3].ts_SAa.out4_shift; |
||||
|
|
||||
|
L2_task_go(D_task_WEIGHT_getADC); |
||||
|
}else |
||||
|
{ |
||||
|
L2_task_go(D_task_WEIGHT_get); |
||||
|
} |
||||
|
//L2_task_go(D_task_WEIGHT_getADC);
|
||||
|
TTSS_Task_step(D_task_WEIGHT_getADC): |
||||
|
|
||||
|
|
||||
|
////四个传感器相加后平均
|
||||
|
tst_weight.sum32 = ts_adc_samples[0].out5; |
||||
|
tst_weight.sum32 += ts_adc_samples[1].out5; |
||||
|
tst_weight.sum32 += ts_adc_samples[2].out5; |
||||
|
tst_weight.sum32 += ts_adc_samples[3].out5; |
||||
|
|
||||
|
tst_weight.out6 = tst_weight.sum32 >>2; |
||||
|
|
||||
|
L2_task_go(D_task_WEIGHT_CAL); |
||||
|
TTSS_Task_step(D_task_WEIGHT_CAL): |
||||
|
|
||||
|
tst_weight.adc32 = tst_weight.out6; |
||||
|
|
||||
|
L3_task_weight_cal(); |
||||
|
|
||||
|
L2_task_go(D_task_WEIGHT_out); |
||||
|
TTSS_Task_step(D_task_WEIGHT_out): |
||||
|
if(tst_weight.kgx10 > tst_weight.kgx10_zero) |
||||
|
{ |
||||
|
s->kgx10_out = s->kgx10 - s->kgx10_zero; |
||||
|
}else |
||||
|
{ |
||||
|
s->kgx10_out = 0 ; |
||||
|
} |
||||
|
//// D_LED1_REV(); L4_weight_out(); D_LED1_REV();
|
||||
|
|
||||
|
|
||||
|
|
||||
|
/// L4_weight_print();///需要调试的时候打开!!!!!!!!!!!!!!!
|
||||
|
L2_task_Tdelay_go(D_Tdelay_200ms, D_task_WEIGHT_get); |
||||
|
/// L2_task_go(D_task_WEIGHT_get);
|
||||
|
TTSS_Task_step(D_task_WEIGHT_zero): |
||||
|
|
||||
|
|
||||
|
L2_task_go(D_task_WEIGHT_get); |
||||
|
TTSS_Task_end(); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
void L3_task_weight_cal(void) |
||||
|
{ |
||||
|
if(tst_weight.adc32 <= (vU32)S.weight_SPara.ts_WPoint[1].adc) |
||||
|
{ |
||||
|
if(tst_weight.adc32 <= (vU32)S.weight_SPara.ts_WPoint[0].adc ) |
||||
|
{ |
||||
|
tst_weight.adc32 = (vU32)S.weight_SPara.ts_WPoint[0].adc; |
||||
|
} |
||||
|
///0-0-40KG
|
||||
|
tst_weight.t32a = (tst_weight.adc32-(vU32)S.weight_SPara.ts_WPoint[0].adc);////有可能<0
|
||||
|
tst_weight.t32b = (vU32)(S.weight_SPara.ts_WPoint[1].adc-S.weight_SPara.ts_WPoint[0].adc); |
||||
|
tst_weight.t32a *= (vU32)(S.weight_SPara.ts_WPoint[1].kg - S.weight_SPara.ts_WPoint[0].kg); |
||||
|
tst_weight.t32a /= tst_weight.t32b; |
||||
|
|
||||
|
}else |
||||
|
{ ///40KG 80KG
|
||||
|
tst_weight.t32a = (vU32)(tst_weight.adc32-S.weight_SPara.ts_WPoint[1].adc);////有可能大于b
|
||||
|
tst_weight.t32b = (vU32)(S.weight_SPara.ts_WPoint[2].adc-S.weight_SPara.ts_WPoint[1].adc); |
||||
|
tst_weight.t32a *= (vU32)(S.weight_SPara.ts_WPoint[2].kg-S.weight_SPara.ts_WPoint[1].kg) ; |
||||
|
tst_weight.t32a /= tst_weight.t32b; |
||||
|
tst_weight.t32a += (vU32)S.weight_SPara.ts_WPoint[1].kg; |
||||
|
|
||||
|
} |
||||
|
tst_weight.kgx10 = (vU16)tst_weight.t32a; |
||||
|
} |
||||
|
|
||||
|
/*
|
||||
|
|
||||
|
#define D_0kg 0 |
||||
|
#define D_20kg 200///0x00c8
|
||||
|
#define D_85kg 850////0x0352
|
||||
|
|
||||
|
#define D_Rsensor_out_D_0kg 0x18D9 |
||||
|
#define D_Rsensor_out_D_20kg 0x1B8B |
||||
|
#define D_Rsensor_out_D_85kg 0x244D |
||||
|
|
||||
|
*/ |
||||
|
|
||||
|
void L3_weight_ONdebug(u8 filter)//// ON listen function
|
||||
|
{ |
||||
|
if(filter == pd->filter) |
||||
|
{///filter num d1 d2 d3 ....dn
|
||||
|
//// FE 08 11 22 33 44 55 66 77 88
|
||||
|
/// printf("\r\nDdebug:FD R1 R2 R3 R4 R5 R6 ocr FD->");
|
||||
|
/// printf4("22 ch:(%2X)-%2X S %2X=%2X\r\n",(int)pd->R1,(int)pd->R2,(int)pd->R3,(int)pd->ocr);
|
||||
|
L1_uartD_Arrayhex((u8*)pd,9); |
||||
|
switch (pd->ocr) |
||||
|
{ |
||||
|
case 0x20: |
||||
|
//// 选择一个砝码,发送0x12指令,然后读取的数据 和砝码的重量使用 20 21 22参数来
|
||||
|
///fx R1 R2 R3R4 R5R6 ocr
|
||||
|
///Fe ch 00 2233 4455 20 0x2233 kg= 0x4455 adc
|
||||
|
///Fe 00 00 0000 18D9 20
|
||||
|
///Fe 01 00 00c8 1c2c 20
|
||||
|
///Fe 02 00 0352 26f9 20
|
||||
|
/// 0352 26f9
|
||||
|
///00c8 1c2c
|
||||
|
///Fe 22 33 44 55 21
|
||||
|
///Fe 22 33 44 55 22
|
||||
|
if(pd->R1 < 3) |
||||
|
ts_weight_SPara.ts_WPoint[pd->R1].kg = D_2uc_u16(pd->R3,pd->R4); |
||||
|
ts_weight_SPara.ts_WPoint[pd->R1].adc = D_2uc_u16(pd->R5,pd->R6); |
||||
|
|
||||
|
printf5("\r\nset %d: %4x(%6d) %4x(%6d)\r\n",(int)pd->R1, |
||||
|
ts_weight_SPara.ts_WPoint[pd->R1].kg,ts_weight_SPara.ts_WPoint[pd->R1].kg, |
||||
|
ts_weight_SPara.ts_WPoint[pd->R1].adc,ts_weight_SPara.ts_WPoint[pd->R1].adc); { |
||||
|
|
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
L3_R_2_S(); |
||||
|
L0_Iap_Program_array(D_EEP_BASE,D_struct2U8(S),D_S_LEN); |
||||
|
break; |
||||
|
case 0x35: ///// '5'///
|
||||
|
//// 选择一个砝码,发送0x12指令,然后读取的数据 和砝码的重量使用 20 21 22参数来
|
||||
|
///fx R1 R2 R3R4 R5R6 ocr
|
||||
|
///Fe ch 00 2233 4455 35 kg= 0x2233
|
||||
|
|
||||
|
////校准20kg 输入 Fe 01 00 00 c8 02 00 35
|
||||
|
///Fe 01 00 00 c8 02 00 35 kg= 0x00c8=200d///需要校准的重量的 20kg 200d=0xc8
|
||||
|
///校准20kg 输入 Fe 01 00 00 c8 02 00 35
|
||||
|
|
||||
|
/// Fe 00 00 00 00 01 00 35 校准零点 不需要上电即可
|
||||
|
/// Fe 01 00 00 c8 02 00 35 20kg 放置20kg 然后输入
|
||||
|
/// Fe 02 00 01 d6 03 00 35 47kg 10个3kg砝码实际是27kg+20kg
|
||||
|
////如果需要上位机设置 需要在上位机的串口 加上D4 D代表chuandi
|
||||
|
if(pd->R1 < 3) |
||||
|
{ |
||||
|
ts_weight_SPara.ts_WPoint[pd->R1].kg = D_2uc_u16(pd->R3,pd->R4); |
||||
|
ts_weight_SPara.ts_WPoint[pd->R1].adc = tst_weight.adc32;////使用当前采样值
|
||||
|
|
||||
|
printf5("\r\nset %d: %4x(%6d) %4x(%6d)\r\n",(int)pd->R1, |
||||
|
ts_weight_SPara.ts_WPoint[pd->R1].kg,ts_weight_SPara.ts_WPoint[pd->R1].kg, |
||||
|
ts_weight_SPara.ts_WPoint[pd->R1].adc,ts_weight_SPara.ts_WPoint[pd->R1].adc); |
||||
|
} |
||||
|
|
||||
|
L3_R_2_S(); |
||||
|
L0_Iap_Program_array(D_EEP_BASE,D_struct2U8(S),D_S_LEN); |
||||
|
break; |
||||
|
case 0x21: /// 清零指令 把当前的重量值作为0点; 可以在pad上配置参数
|
||||
|
////Fe 223344556677 21
|
||||
|
|
||||
|
L4_weight_print(); |
||||
|
tst_weight.kgx10_zero = tst_weight.kgx10; |
||||
|
printf2("\r\n kgx10_zero= %4x(%4d)",tst_weight.kgx10_zero,tst_weight.kgx10_zero); |
||||
|
break; |
||||
|
case 0x23: |
||||
|
///Fe 11 22 33 44 55 66 23
|
||||
|
TTSS_run_times(3) |
||||
|
{ |
||||
|
printf5("\r\n%d: %4x(%4d ) %4x(%6d)\r\n",(int)tst_v.i, |
||||
|
ts_weight_SPara.ts_WPoint[tst_v.i].kg,ts_weight_SPara.ts_WPoint[tst_v.i].kg, |
||||
|
ts_weight_SPara.ts_WPoint[tst_v.i].adc,ts_weight_SPara.ts_WPoint[tst_v.i].adc); |
||||
|
} |
||||
|
break; |
||||
|
case 0x32: ///读取当前的重量和传感器数值
|
||||
|
///Fe 223344556677 12
|
||||
|
printfs("\r\n "); |
||||
|
L4_weight_print(); |
||||
|
break; |
||||
|
case 0x33: ///读取当前的重量和传感器数值 hex
|
||||
|
///Fe 223344556677 12
|
||||
|
D_LED1_REV(); |
||||
|
L4_weight_out(); |
||||
|
D_LED1_REV(); |
||||
|
break; |
||||
|
|
||||
|
|
||||
|
default: |
||||
|
printfs(" pp error\r\n "); |
||||
|
|
||||
|
break; |
||||
|
}; |
||||
|
printfs("333"); |
||||
|
} |
||||
|
} |
||||
|
void L4_weight_print(void) |
||||
|
{ |
||||
|
L1_uartD_ushex(ts_adc_samples[0].out1_adc);L1_uartD_uc(' '); |
||||
|
L1_uartD_ushex(ts_adc_samples[1].out1_adc);L1_uartD_uc(' '); |
||||
|
L1_uartD_ushex(ts_adc_samples[2].out1_adc);L1_uartD_uc(' '); |
||||
|
L1_uartD_ushex(ts_adc_samples[3].out1_adc);L1_uartD_uc(' '); |
||||
|
|
||||
|
/* L1_uartD_uc('|');L1_uartD_uc(' ');
|
||||
|
L1_uartD_ushex(ts_adc_samples[0].out2_offset);L1_uartD_uc(' ');////调整偏移量后的值
|
||||
|
L1_uartD_ushex(ts_adc_samples[1].out2_offset);L1_uartD_uc(' '); |
||||
|
L1_uartD_ushex(ts_adc_samples[2].out2_offset);L1_uartD_uc(' '); |
||||
|
L1_uartD_ushex(ts_adc_samples[3].out2_offset);L1_uartD_uc(' '); |
||||
|
|
||||
|
L1_uartD_ushex(ts_adc_samples[0].out5);L1_uartD_uc(' ');////调整偏移量后的值
|
||||
|
L1_uartD_ushex(ts_adc_samples[1].out5);L1_uartD_uc(' '); |
||||
|
L1_uartD_ushex(ts_adc_samples[2].out5);L1_uartD_uc(' '); |
||||
|
L1_uartD_ushex(ts_adc_samples[3].out5);L1_uartD_uc(' '); |
||||
|
|
||||
|
*/ |
||||
|
|
||||
|
L1_uartD_uc('|');L1_uartD_uc(' '); |
||||
|
L1_uartD_ushex((vU16)tst_weight.adc32); L1_uartD_uc(' ');///参与运算的值
|
||||
|
printf2(" (%d)%4x ", tst_weight.kgx10,tst_weight.kgx10); |
||||
|
printf2("out (%d)%4x\r\n", tst_weight.kgx10_out,tst_weight.kgx10_out); |
||||
|
} |
||||
|
|
||||
|
TS_weight_out_ ts_weight_out; |
||||
|
|
||||
|
|
||||
|
void L4_weight_out(void) |
||||
|
{ |
||||
|
ts_weight_out.fx = 0x55; |
||||
|
ts_weight_out.sensor_adc[0]=ts_adc_samples[0].out1_adc; |
||||
|
ts_weight_out.sensor_adc[1]=ts_adc_samples[1].out1_adc; |
||||
|
ts_weight_out.sensor_adc[2]=ts_adc_samples[2].out1_adc; |
||||
|
ts_weight_out.sensor_adc[3]=ts_adc_samples[3].out1_adc; |
||||
|
ts_weight_out.kgx10_out = tst_weight.kgx10_out; |
||||
|
ts_weight_out.adc32= tst_weight.adc32;////采样值用作校准时使用
|
||||
|
ts_weight_out.ocr =0x33; |
||||
|
#if 0 |
||||
|
ts_weight_out.num = 17; |
||||
|
#else |
||||
|
|
||||
|
ts_weight_out.num = 15; |
||||
|
#endif |
||||
|
ts_weight_out.out6= tst_weight.out6; |
||||
|
L1_uartD_Array((u8 *)&ts_weight_out,ts_weight_out.num); |
||||
|
|
||||
|
|
||||
|
} |
||||
|
|
||||
|
#if 0 |
||||
|
|
||||
|
void L3_adc_zero(void) |
||||
|
{ |
||||
|
L3_out_zero(0); |
||||
|
L3_out_zero(1); |
||||
|
L3_out_zero(2); |
||||
|
L3_out_zero(3); |
||||
|
|
||||
|
// printf("\r\niapData.zeroout= %d = 0x%4x\r\n", iapData.zeroout, iapData.zeroout);
|
||||
|
// printf("\r\nR.sd.zeroout= %d = 0x%4x offset %d = 0x%4x\r\n", R.sd.zeroout, R.sd.zeroout,ts_adc_samples[0].offset,ts_adc_samples[0].offset);
|
||||
|
/*
|
||||
|
S.sd.offset[0] = ts_adc_samples[0].offset; |
||||
|
S.sd.offset[1] = ts_adc_samples[1].offset; |
||||
|
S.sd.offset[2] = ts_adc_samples[2].offset; |
||||
|
S.sd.offset[3] = ts_adc_samples[3].offset; |
||||
|
|
||||
|
ts_weight_SPara.offset[0] = S.sd.offset[0]; |
||||
|
ts_weight_SPara.offset[1] = S.sd.offset[1]; |
||||
|
ts_weight_SPara.offset[2] = S.sd.offset[2]; |
||||
|
ts_weight_SPara.offset[3] = S.sd.offset[3]; |
||||
|
L0_waitFree_uartN(0); |
||||
|
printf("\r\nR.sd.offset 0x%4x,0x%4x,0x%4x,0x%4x,\r\n",S.sd.offset[0],S.sd.offset[1],S.sd.offset[2],S.sd.offset[3]); |
||||
|
|
||||
|
*/ |
||||
|
|
||||
|
/// L4_reg_2_iap();///写入iap
|
||||
|
/// L4_iap_2_reg();///读取出来验证
|
||||
|
} |
||||
|
|
||||
|
void L3_task_weight_set(Ts_uart_rev_ *ph4) |
||||
|
{ |
||||
|
TS_P_debug *td; |
||||
|
if(ph4->debugok) |
||||
|
{ ph4->debugok = 0; |
||||
|
td = (TS_P_debug *)ph4->buf; |
||||
|
|
||||
|
/// TS_PH4_modbus *ts_modbus = (TS_PH4_modbus *)ph4->buf;
|
||||
|
|
||||
|
L0_uartN_uchexArray(0,ph4->buf, 8); |
||||
|
if(0xfd == td->filter) |
||||
|
{ |
||||
|
if(0x04 == td->R1)///设置四个传感器的清零
|
||||
|
{ //// fd 04 33 44 55
|
||||
|
L0_uart0_sendstr("\r\n 4sensor zero \r\n"); |
||||
|
L3_adc_zero(); |
||||
|
}else if(0x01 == td->R1)///设置重量的清零
|
||||
|
{ //// fd 04 33 44 55
|
||||
|
L0_uart0_sendstr("\r\n--weight zero-- \r\na b= "); |
||||
|
|
||||
|
}else if(0x02 == td->R1)///读取
|
||||
|
{ |
||||
|
if(0x00 == td->R2) |
||||
|
{//// fd 02 00 44 55
|
||||
|
L0_uart0_sendstr("\r\n--read iapData-- \r\n"); |
||||
|
L4_print_iap(&iapData); |
||||
|
}else |
||||
|
{//// fd 02 33 44 55
|
||||
|
L0_uart0_sendstr("\r\n--read R.sd-- \r\n"); |
||||
|
L4_print_iap(&R.sd); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
else |
||||
|
{ |
||||
|
L0_uart0_sendstr("\r\n command error \r\n"); |
||||
|
|
||||
|
} |
||||
|
} |
||||
|
else if(0xf5 == td->filter) |
||||
|
{///设置重量
|
||||
|
if(td->R1 < 3)///
|
||||
|
{ |
||||
|
//// R1 R2 R3
|
||||
|
//// f5 00 33 44 55 把当前的adc的值作为第R1个校准点的值
|
||||
|
R.sd.zerows[td->R1].adc = (vU16)tst_weight.out6; |
||||
|
|
||||
|
Lc_buf_copy_uc((u8 *)&R.sd.factory_ws,(u8 *)&R.sd.zerows,12); |
||||
|
L4_reg_2_iap();///写入iap
|
||||
|
L4_iap_2_reg();///读取出来验证
|
||||
|
}else |
||||
|
{ |
||||
|
|
||||
|
} |
||||
|
L0_waitFree_uartN(0); |
||||
|
printf("\r\n set[ %d].adc = 0x%04x\r\n",(int)td->R1, (vU16)tst_weight.out6); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
else if(0xf6 == td->filter) |
||||
|
{///设置砝码
|
||||
|
if(td->R1 < 3)///
|
||||
|
{ |
||||
|
//// R1 R2 R3
|
||||
|
//// f5 00 33 44 55 把当前第R1个校准曲线的点的kg的值 0x3344
|
||||
|
R.sd.zerows[td->R1].kg = D_2uc_u16(R2,R3); |
||||
|
|
||||
|
Lc_buf_copy_uc((u8 *)&R.sd.factory_ws,(u8 *)&R.sd.zerows,12); |
||||
|
L4_reg_2_iap();///写入iap
|
||||
|
L4_iap_2_reg();///读取出来验证
|
||||
|
}else |
||||
|
{ |
||||
|
|
||||
|
} |
||||
|
L0_waitFree_uartN(0); |
||||
|
printf("\r\nset [ %d],Kg = 0x%04x\r\n",(int)td->R1, R.sd.zerows[td->R1].kg ); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
else |
||||
|
{ |
||||
|
|
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
|
||||
|
/////////cc 2023/04/06--7:3:24 协议解析
|
||||
|
void L3_weight_setPara(u8 filter) |
||||
|
{ |
||||
|
if(filter == Ts_debug.td->filter) |
||||
|
{ |
||||
|
L1_uartD_uc('D'); |
||||
|
L0_uart0_0d0a(); |
||||
|
|
||||
|
|
||||
|
if(0x01 == Ts_debug.td->ocr) |
||||
|
{ |
||||
|
if(0x04 == Ts_debug.td->R1)///设置四个传感器的清零
|
||||
|
{ //// fd 04 33 44 01
|
||||
|
L0_uart0_sendstr("\r\n 4sensor zero \r\n"); |
||||
|
L3_adc_zero(); |
||||
|
}else if(0x01 == Ts_debug.td->R1)///设置重量的清零
|
||||
|
{ //// fd 01 33 44 01
|
||||
|
L0_uart0_sendstr("\r\n--weight zero-- \r\na b= "); |
||||
|
|
||||
|
}else if(0x02 == Ts_debug.td->R1)///读取
|
||||
|
{ |
||||
|
if(0x00 == Ts_debug.td->R2) |
||||
|
{//// fd 02 00 44 01
|
||||
|
L0_uart0_sendstr("\r\n--read ts_weight_save-- \r\n"); |
||||
|
L4_print_iap(&ts_weight_save); |
||||
|
}else |
||||
|
{//// fd 02 33 44 01
|
||||
|
L0_uart0_sendstr("\r\n--read R.sd-- \r\n"); |
||||
|
L4_print_iap(&R.sd); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
else |
||||
|
{ |
||||
|
L0_uart0_sendstr("\r\n command error \r\n"); |
||||
|
|
||||
|
} |
||||
|
} |
||||
|
else if(0x02 == Ts_debug.td->ocr) |
||||
|
{///设置重量
|
||||
|
if(Ts_debug.td->R1 < 3)///
|
||||
|
{ |
||||
|
//// R1 R2 R3
|
||||
|
//// fd 00 33 44 02 把当前的adc的值作为第R1个校准点的值
|
||||
|
R.sd.zerows[Ts_debug.td->R1].adc = (vU16)tst_weight.out6; |
||||
|
|
||||
|
Lc_buf_copy_uc((u8 *)&R.sd.factory_ws,(u8 *)&R.sd.zerows,12); |
||||
|
L4_reg_2_iap();///写入iap
|
||||
|
L4_iap_2_reg();///读取出来验证
|
||||
|
}else |
||||
|
{ |
||||
|
|
||||
|
} |
||||
|
L0_waitFree_uartN(0); |
||||
|
printf("\r\n set[ %d].adc = 0x%04x\r\n",(int)Ts_debug.td->R1, (vU16)tst_weight.out6); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
else if(0x03 == Ts_debug.td->ocr) |
||||
|
{///设置砝码
|
||||
|
if(Ts_debug.td->R1 < 3)///
|
||||
|
{ //200
|
||||
|
//// R1 R2 R3
|
||||
|
//// fd 00 33 44 03 把当前第R1个校准曲线的点的kg的值 0x3344
|
||||
|
R.sd.zerows[Ts_debug.td->R1].kg = D_2uc_u16(Ts_debug.td->R2,Ts_debug.td->R3); |
||||
|
Lc_buf_copy_uc((u8 *)&R.sd.factory_ws,(u8 *)&R.sd.zerows,12); |
||||
|
L4_reg_2_iap();///写入iap
|
||||
|
L4_iap_2_reg();///读取出来验证 20 14
|
||||
|
}else |
||||
|
{ |
||||
|
|
||||
|
} |
||||
|
L0_waitFree_uartN(0); |
||||
|
printf("\r\nset [ %d],Kg = 0x%04x\r\n",(int)Ts_debug.td->R1, R.sd.zerows[Ts_debug.td->R1].kg ); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
else |
||||
|
{ |
||||
|
|
||||
|
} |
||||
|
|
||||
|
} |
||||
|
} |
||||
|
#endif |
||||
|
|
||||
|
|
||||
@ -0,0 +1,193 @@ |
|||||
|
////////////////////////////////////////////////////////////////////////////
|
||||
|
///@copyright Copyright (c) 2018, 传控科技 All rights reserved.
|
||||
|
///-------------------------------------------------------------------------
|
||||
|
/// @file bsp_drv.h
|
||||
|
/// @brief bsp @ driver config
|
||||
|
///-------------------------------------------------------------------------
|
||||
|
/// @version 1.0
|
||||
|
/// @author CC
|
||||
|
/// @date 20220109
|
||||
|
/// @note cc_AS_stc02
|
||||
|
|
||||
|
|
||||
|
/*******************
|
||||
|
xxx.x |
||||
|
Layer4: send/show |
||||
|
|
||||
|
write to buffer -->send |
||||
|
|
||||
|
----------------------------- |
||||
|
|
||||
|
weight = cal(adc32) |
||||
|
|
||||
|
Layer3: app weight |
||||
|
|
||||
|
|
||||
|
tst_weight.adc32 = ts_adc_samples[0].out5; |
||||
|
选择曲线 line |
||||
|
|
||||
|
单路到多路 |
||||
|
----------------------------- |
||||
|
out3 滤波啊 |
||||
|
out2 滤波啊 |
||||
|
|
||||
|
Layer2: asp asp_adc |
||||
|
|
||||
|
out1 读取adc |
||||
|
|
||||
|
------------------------- |
||||
|
void L0_ADS1231_readCH2(vtype ch,vU16 *d) |
||||
|
|
||||
|
Layer1: bsp: bsp_cs1232 最底层的adc的采样 |
||||
|
|
||||
|
*******************/ |
||||
|
|
||||
|
|
||||
|
//////////////////////////////////////////////////////////////////////////////
|
||||
|
|
||||
|
#ifndef _APP_WEIGHT_H |
||||
|
#define _APP_WEIGHT_H |
||||
|
|
||||
|
#include "TTSS_task.h" |
||||
|
#include "c_lib.h" |
||||
|
#include "asp_schain.h" |
||||
|
#include "tpc_debug.h" |
||||
|
|
||||
|
/////////#include "asp_weight_save.h"
|
||||
|
#include "bsp_config.h" |
||||
|
#include "msp_uart1.h" |
||||
|
#include "../bsp/bsp_cs1232.h" |
||||
|
/////水一般是18-19升,再加上桶,就是大约20公斤
|
||||
|
typedef struct |
||||
|
{ |
||||
|
///40Bytes
|
||||
|
u8 fx;///
|
||||
|
u8 num;///从fx开始算起 到结束//12,
|
||||
|
|
||||
|
vU16 sensor_adc[4];//// 34 56 78 90
|
||||
|
|
||||
|
vU16 kgx10_out;//// 12
|
||||
|
|
||||
|
vU16 adc32;//// 12
|
||||
|
|
||||
|
u8 ocr;//// 3
|
||||
|
|
||||
|
vU16 out6;//// 12
|
||||
|
|
||||
|
}TS_weight_out_; |
||||
|
|
||||
|
typedef struct |
||||
|
{ |
||||
|
vU16 kg; |
||||
|
vU16 adc; ///kg 对应的adc的采样值
|
||||
|
|
||||
|
}TS_weight_point_;///8Bytes
|
||||
|
|
||||
|
|
||||
|
#define D_rev0x55aa55aa 0x55aa55aa |
||||
|
|
||||
|
////需要向eeprom中存储的数据
|
||||
|
typedef struct |
||||
|
{ |
||||
|
///40Bytes
|
||||
|
u8 rev1; |
||||
|
u8 rev2; |
||||
|
TS_weight_point_ ts_WPoint[3]; ///4x3=12 手工清零后的参数, 没有清零或者出错恢复到和出厂设置一样,需要实时保存
|
||||
|
u8 rev3; |
||||
|
u8 rev4; |
||||
|
}TS_weight_SPara_; |
||||
|
////extern TS_weight_SPara_ ts_weight_SPara;
|
||||
|
#define D_TS_weight_SPara_len 16///
|
||||
|
|
||||
|
extern TS_weight_SPara_ ts_weight_SPara; |
||||
|
|
||||
|
typedef struct |
||||
|
{ |
||||
|
TS_task task;////如果
|
||||
|
|
||||
|
/////S参数区
|
||||
|
TS_weight_SPara_ *pSPara; ///
|
||||
|
/////S参数区
|
||||
|
|
||||
|
vS32 rough_weight; |
||||
|
vU32 adc32; |
||||
|
vU32 sum32; |
||||
|
vU32 sum32b; |
||||
|
vU32 out6; |
||||
|
vU32 t32a,t32b; |
||||
|
/// ts_weight_sheet_
|
||||
|
u8 slow; |
||||
|
u8 zero; |
||||
|
u8 pp; |
||||
|
vU16 kgx10;///计算出来的重量
|
||||
|
vU16 kgx10_zero;///
|
||||
|
vU16 kgx10_out;///
|
||||
|
}TS_TASK_weight_; |
||||
|
extern TS_TASK_weight_ tst_weight; |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
/*******
|
||||
|
^ |
||||
|
| |
||||
|
| o |
||||
|
| | |
||||
|
| o | |
||||
|
| | | |
||||
|
o | | |
||||
|
| | | |
||||
|
|____|_____|____________> |
||||
|
|
||||
|
0 40 80 |
||||
|
[0] [1] [2] |
||||
|
20KG 40kg |
||||
|
190 290 |
||||
|
19kg 29kg |
||||
|
|
||||
|
|
||||
|
上电时候 ,如果adc在一定范围内 自动清零 |
||||
|
出厂:0 40 80 |
||||
|
上电 0+-% 40+-% 80+-% |
||||
|
|
||||
|
/// ts_weight_sheet_ factory_ws[3]; ///出厂的设置,发布出厂指令后更新 由上位机命令更改,实时保存
|
||||
|
0,0x1235, |
||||
|
D_20kg,0x5678, |
||||
|
D_40kg,0x789a, |
||||
|
/// ts_weight_sheet_ zerows[3]; ///手工清零后的参数, 没有清零或者出错恢复到和出厂设置一样,需要实时保存
|
||||
|
0,0x1234, |
||||
|
D_20kg,0x5678, |
||||
|
D_40kg,0x789b, |
||||
|
|
||||
|
factory_ws |
||||
|
0 kg = 0x1235 |
||||
|
190 kg = 0x5678 |
||||
|
290 kg = 0x789a |
||||
|
|
||||
|
zerows |
||||
|
0 kg = 0x1234 |
||||
|
190 kg = 0x5678 |
||||
|
290 kg = 0x789b |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
**/ |
||||
|
|
||||
|
|
||||
|
////
|
||||
|
extern void L3_task_weight_cal(void); |
||||
|
extern void L3_task_weight_init(void); |
||||
|
extern void L3_task_weight_handler(TS_TASK_weight_ *s); |
||||
|
///extern void L3_task_weight_set(Ts_uart_rev_ *ph4);
|
||||
|
///extern void L3_weight_setPara(u8 filter);
|
||||
|
extern void L3_weight_ONdebug(u8 filter); |
||||
|
extern void L4_weight_print(void); |
||||
|
void L4_weight_out(void); |
||||
|
|
||||
|
#define D_get_weight() tst_weight.kgx10 |
||||
|
|
||||
|
|
||||
|
|
||||
|
#endif // #ifndef _APP_TASK_ADC_H
|
||||
|
|
||||
@ -0,0 +1,169 @@ |
|||||
|
//////////////////////////////////////////////////////////////////////////
|
||||
|
/// COPYRIGHT NOTICE
|
||||
|
/// Copyright (c) 2023 CCSENS
|
||||
|
/// All rights reserved.
|
||||
|
///
|
||||
|
/// @file main.c
|
||||
|
/// @brief main app
|
||||
|
///
|
||||
|
|
||||
|
/// 下面是一个含有两个参数的函数的注释说明(简述)
|
||||
|
///
|
||||
|
/// 这里写该函数的详述信息
|
||||
|
/// @param a 被测试的变量(param描述参数)
|
||||
|
/// @param s 指向描述测试信息的字符串
|
||||
|
/// @return 测试结果(return描述返回值)
|
||||
|
/// @see Test() (本函数参考其它的相关的函数,这里作一个链接)
|
||||
|
/// @note (note描述需要注意的问题)
|
||||
|
|
||||
|
//===============================================
|
||||
|
//寄存器头文件
|
||||
|
//===============================================
|
||||
|
|
||||
|
/// 20221023_175541 CCmodify
|
||||
|
|
||||
|
#include "main.h" |
||||
|
#include "asp_lowpower.h" |
||||
|
|
||||
|
|
||||
|
void L0_RTC_init(void) |
||||
|
{ |
||||
|
P_SW2 = 0x80; |
||||
|
// XOSCCR =0;
|
||||
|
///HIRCCR = 0;
|
||||
|
IRC32KCR = 0x80; //启动内部32K IRC
|
||||
|
while (!(IRC32KCR & 1)); //等待时钟稳定
|
||||
|
CLKDIV = 0x00; //时钟不分频
|
||||
|
/// CLKSEL = 0x03; //选择内部32K
|
||||
|
|
||||
|
RTCCFG = 3; |
||||
|
///RTCCFG |= 0x02; //选择内部 32K 作为 RTC 时钟源 RTCCFG | = 0x02; / / Select internal 32K as RTC, clock source
|
||||
|
RTCCR = 1; |
||||
|
printf3("\r\n %X %X:%X",(int)(DAY), (int)(MIN), (int)(SEC)); |
||||
|
|
||||
|
D_stdIO_P2(BITN4);D_P24_REV(); |
||||
|
Lc_delay_ms(500); |
||||
|
|
||||
|
printf3("\r\n %X %X:%X",(int)(DAY), (int)(MIN), (int)(SEC)); |
||||
|
Lc_delay_ms(200);D_stdIO_P2(BITN4);D_P24_REV(); |
||||
|
Lc_delay_ms(500); |
||||
|
printf3("\r\n %X %X:%X",(int)(DAY), (int)(MIN), (int)(SEC)); |
||||
|
Lc_delay_ms(200);D_stdIO_P2(BITN4);D_P24_REV(); |
||||
|
Lc_delay_ms(500); |
||||
|
printf3("\r\n %X %X:%X",(int)(DAY), (int)(MIN), (int)(SEC)); |
||||
|
Lc_delay_ms(200); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
void L0_main_initled(void) |
||||
|
{ |
||||
|
D_LED1_OFF(); |
||||
|
|
||||
|
D_LED2_ON(); |
||||
|
|
||||
|
TTSS_run_times(6) |
||||
|
{ |
||||
|
D_LED1_REV(); |
||||
|
D_LED2_REV(); |
||||
|
Lc_delay_ms(300); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
void L0_main_init(void) |
||||
|
{ |
||||
|
int r = 0; |
||||
|
///>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>算法测试区域
|
||||
|
|
||||
|
///<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<算法测试区域
|
||||
|
Lc_delay_ms(200); |
||||
|
L0_main_initled(); |
||||
|
CLKDIV = 0;////不分频,使用focs
|
||||
|
|
||||
|
L0_uart1_open(); |
||||
|
/// L0_uart2_open();
|
||||
|
|
||||
|
L3_debug_drv_init(); |
||||
|
L1_task_tick_init(); |
||||
|
L0_timer0_Init();ET0 = 1; |
||||
|
|
||||
|
|
||||
|
printf1("\r\nD_sys_MainFre %ld",D_sys_MainFre); |
||||
|
|
||||
|
|
||||
|
r = L3_S_init(); |
||||
|
printf1("\r\nL3_S_init %d",r); |
||||
|
|
||||
|
} |
||||
|
|
||||
|
//===============================================
|
||||
|
//主函数
|
||||
|
//===============================================
|
||||
|
void main(void) |
||||
|
{ |
||||
|
u16 a= 0; |
||||
|
char d[9]={0xab}; |
||||
|
//-----------------------------------------------
|
||||
|
//系统初始化
|
||||
|
//----------------------------------------------
|
||||
|
|
||||
|
L0_main_init(); |
||||
|
L3_task_weight_init(); |
||||
|
|
||||
|
TTSS_run_every_init(s_nos_tick.stamp,10); |
||||
|
|
||||
|
printfs("\r\3 main while13\r\n"); |
||||
|
|
||||
|
//-----------------------------------------------
|
||||
|
//系统主循环
|
||||
|
//-----------------------------------------------
|
||||
|
|
||||
|
while(1) |
||||
|
{///44M 裸奔2us一个循环
|
||||
|
//1>>>>>1>>>>>1>>>>>1>>>>>1>>>>>1>>>>> TTSS 1心跳>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>.
|
||||
|
if(1 == s_nos_tick.t1s_heartbeat)///
|
||||
|
{ |
||||
|
s_nos_tick.t1s_heartbeat = 0; |
||||
|
///L1_uartD_uc('.');
|
||||
|
D_LED2_REV(); |
||||
|
} |
||||
|
//1<<<<<1<<<<<1<<<<<1<<<<<1<<<<<1<<<<< TTSS 1心跳<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<.
|
||||
|
//--------------------------------------------------------------------------------------
|
||||
|
//>>>>>2>>>>>>2>>>>>2>>>>>2>>>>>2>>>>> TTSS 2 定期任务>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>.
|
||||
|
TTSS_run_every(s_nos_tick.stamp,40)////500 -7s 70-1s TTSS 2需要主循环定时工作的任务:stamp需要防止被其他程序使用
|
||||
|
D_LED1_REV(); L4_weight_out(); //// D_LED1_REV();
|
||||
|
///55 0D 0C 90 F5 77 FF 52 80 00 00 00 33
|
||||
|
TTSS_run_every_end |
||||
|
|
||||
|
//// L1_expara_sample();///
|
||||
|
//<<<<<2<<<<<<<2<<<<<<2<<<<<<2<<<<<<<TTSS 2 定期任务 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<.
|
||||
|
//--------------------------------------------------------------------------------------
|
||||
|
//>>>>>3>>>>>>>3>>>>>>3>>>>>>3>>>>>>>TTSS 3 debug>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>.
|
||||
|
if(L2_debug_ONcomand()) |
||||
|
{ |
||||
|
L3_test_ONdebug(D_cmd_filter_debug);///fd xx xx///
|
||||
|
|
||||
|
L3_weight_ONdebug(D_cmd_filter_weight);///fd xx xx///
|
||||
|
//L3_ADC_debug(D_cmd_filter_adc);///fa xx xx
|
||||
|
//L3_moto_debug(D_cmd_filter_moto);///f0 xx xx/
|
||||
|
/// L3_lora_debug(D_cmd_filter_lora);//
|
||||
|
} |
||||
|
//<<<<<3<<<<<<<3<<<<<<<3<<<<<<3<<<<<<TTSS 3 debug><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<.
|
||||
|
//--------------------------------------------------------------------------------------
|
||||
|
//>>>>>>4>>>>>>>4>>>>>>4>>>>>>4>>>>>>TTSS 4 并行任务>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>.
|
||||
|
|
||||
|
L3_task_weight_handler(&tst_weight); |
||||
|
|
||||
|
/// L2_task_move_handle(&ts_task_move);
|
||||
|
//<<<<<4<<<<<<<<4<<<<<<4<<<<<<<4<<<<<TTSS 4 并行任务 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<.
|
||||
|
//--------------------------------------------------------------------------------------
|
||||
|
//>>>>>>5>>>>>>>5>>>>>>5>>>>>>5>>>>>>TTSS 5 日常任务 随机任务>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>.
|
||||
|
|
||||
|
|
||||
|
//<<<<<5<<<<<<<5<<<<<<<5<<<<<<5<<<<<<TTSS 5 日常任务 随机任务<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<.
|
||||
|
|
||||
|
|
||||
|
} |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
@ -0,0 +1,107 @@ |
|||||
|
//////////////////////////////////////////////////////////////////////////
|
||||
|
/// COPYRIGHT NOTICE
|
||||
|
/// Copyright (c) 2017, 传控科技
|
||||
|
/// All rights reserved.
|
||||
|
///
|
||||
|
/// @file main.c
|
||||
|
/// @brief main app
|
||||
|
///
|
||||
|
///(本文件实现的功能的详述)
|
||||
|
///
|
||||
|
/// @version 1.1 CCsens technology
|
||||
|
/// @author CC
|
||||
|
/// @date 20150102
|
||||
|
///
|
||||
|
///
|
||||
|
/// 修订说明:最初版本
|
||||
|
/// Modified by:
|
||||
|
/// Modified date:
|
||||
|
/// Version:
|
||||
|
/// Descriptions:
|
||||
|
///
|
||||
|
///
|
||||
|
///
|
||||
|
///
|
||||
|
///
|
||||
|
///
|
||||
|
///
|
||||
|
/// msp: humtemp flow
|
||||
|
/// bsp: i2c adc
|
||||
|
///
|
||||
|
///
|
||||
|
///
|
||||
|
///
|
||||
|
///
|
||||
|
//////////////////////////////////////////////////////////////////////////
|
||||
|
|
||||
|
#ifndef _MAIN_H |
||||
|
#define _MAIN_H |
||||
|
#include "bsp_config.h" |
||||
|
///#include "../bsp/bsp_cs1232.h"
|
||||
|
//#include "../bsp/bsp_485.h"
|
||||
|
///#include "msp_time2.h"
|
||||
|
#include "msp_uart1.h" |
||||
|
///
|
||||
|
///
|
||||
|
|
||||
|
#include "c_delay.h" |
||||
|
|
||||
|
///#include "msp_uart2.h"
|
||||
|
///#include "msp_uart3.h"
|
||||
|
///#include "msp_uart4.h"
|
||||
|
///
|
||||
|
|
||||
|
#include "msp_eeprom.h" |
||||
|
///#include "../msp/msp_id.h"
|
||||
|
#include "msp_iicMx.h" |
||||
|
#include "TTSS_task.h" |
||||
|
///#include "../app/app_task_uart0.h"
|
||||
|
|
||||
|
////#include "../app/app_task_debug.h"
|
||||
|
///#include "../app/app_task_reg.h"
|
||||
|
///#include "app_config.h"
|
||||
|
|
||||
|
///#include "app_weightzero.h"
|
||||
|
#include "debug_drv.h" |
||||
|
#include "tpc_road.h" |
||||
|
///#include "msp_adc.h"////20220718_135435 CCmodify
|
||||
|
///#include "asp_moto.h"////20220718_135435 CCmodify
|
||||
|
///
|
||||
|
|
||||
|
////#include "bsp_AiP650E.h"
|
||||
|
////#include "bsp_lora.h"
|
||||
|
///#include "bsp_pressure.h"
|
||||
|
#include "msp_adc.h"/// |
||||
|
#include "stc_8_delay.h" |
||||
|
//////////////////////////////////////////////////////////////////
|
||||
|
|
||||
|
///#include "max30102.h"
|
||||
|
///#include "tpc_wifi.h"
|
||||
|
///
|
||||
|
|
||||
|
///#include "bsp_oled.h"
|
||||
|
////#include "bsp_lora.h"
|
||||
|
#include "bsp_msa300.h" |
||||
|
|
||||
|
#include "bsp_moto.h" |
||||
|
|
||||
|
#include "asp_lowpower.h" |
||||
|
|
||||
|
|
||||
|
#include "asp_move.h" |
||||
|
#include "bsp_pt100x.h" |
||||
|
#include "app_weight.h" |
||||
|
#include "app_config.h" |
||||
|
|
||||
|
//////////////////////////////////////////////////////////////////
|
||||
|
|
||||
|
///#include "max30102.h"
|
||||
|
///#include "tpc_lora.h"
|
||||
|
|
||||
|
///#include "mlx90615.h"
|
||||
|
|
||||
|
///#include "mlx90615.h"
|
||||
|
|
||||
|
#endif //#ifndef _MAIN_H
|
||||
|
|
||||
|
|
||||
@ -0,0 +1,421 @@ |
|||||
|
////////////////////////////////////////////////////////////////////////////
|
||||
|
///@copyright Copyright (c) 2022, 传控科技 All rights reserved.
|
||||
|
///-------------------------------------------------------------------------
|
||||
|
/// @file app_save.c
|
||||
|
/// @brief @ app save
|
||||
|
///-------------------------------------------------------------------------
|
||||
|
/// @version 1.0
|
||||
|
/// @author CC
|
||||
|
/// @date 20220120
|
||||
|
/// @note cc_AS_stc02
|
||||
|
|
||||
|
#ifdef doc453453 |
||||
|
|
||||
|
app_save 需要保存的参数 逻辑 数据流 |
||||
|
asp_para L1_para_write 为应用服务的eeprom的读写函数和地址配置 |
||||
|
U8 L1_para_write(U8 *buf, U8 len) |
||||
|
|
||||
|
msp_eeprom mcu的eeprom的底层驱动函数 |
||||
|
|
||||
|
|
||||
|
----------global_register--------------------------------> |
||||
|
寄存器化的结构 |
||||
|
全局化调用 里面有需要保存的iapData数据的映射 |
||||
|
TS_GlobalRegisterd R |
||||
|
.......................................... |
||||
|
|
||||
|
//RO Register
|
||||
|
U16 reserved1; |
||||
|
//RW Register
|
||||
|
TS_IapData_ sd;//// save data 需要保存的额参数
|
||||
|
|
||||
|
-----------iapData--------------------------------------> |
||||
|
需要保存的数据 |
||||
|
TS_IapData_ iapData |
||||
|
TS_IapData_ code iapData_factory |
||||
|
|
||||
|
.................................................. |
||||
|
|
||||
|
S16 slaver_id; |
||||
|
|
||||
|
ts_weight_sheet_ factory_ws[3]; ///出厂的设置,发布出厂指令后更新 由上位机命令更改,实时保存
|
||||
|
ts_weight_sheet_ zerows[3]; ///手工清零后的参数, 没有清零或者出错恢复到和出厂设置一样,需要实时保存
|
||||
|
vS16 zerodiff_max; /// 上电时,如果和zerows的零点ADC的差值小于 zerodiff_max 说明没有人,启动上电校准;
|
||||
|
vS16 zerodiff; ///零点的差值 零公斤位置和手工的差值
|
||||
|
////此值上电后更改, 顺便保存(区别于实时保存),
|
||||
|
u8 ADC_shiftaverage_a; ///a路移位滤波的参数 由上位机命令更改,实时保存
|
||||
|
u8 ADC_shiftaverage_b; ///b路移位滤波的参数 由上位机命令更改,实时保存
|
||||
|
|
||||
|
-----------eep_param-----------------------------------> |
||||
|
eeprom中的缓存 |
||||
|
eeprom ---底层硬件,一般按扇区保存,需要批量擦除写入. |
||||
|
TS_eeprom_param_ |
||||
|
......................................... |
||||
|
U8 filter; |
||||
|
U8 len; |
||||
|
U8 buf[EEPROM_PARAM_DATA_MAX]; |
||||
|
U8 crc[2]; |
||||
|
|
||||
|
#endif |
||||
|
|
||||
|
//////////////////////////////////////////////////////////////////////////////
|
||||
|
|
||||
|
#include "app_save.h" |
||||
|
#include "app_config.h" |
||||
|
#include "debug_drv.h" |
||||
|
#define D_20kg 200 |
||||
|
#define D_85kg 850 |
||||
|
///#define D_20kg 190
|
||||
|
TS_IapData_ iapData= |
||||
|
{ |
||||
|
0xaabcd, |
||||
|
0x18da,0x18d9,0x18d9,0x18d9,///0x18da,0x18d9 0x18d9 0x18d9
|
||||
|
/// ts_weight_sheet_ factory_ws[3]; ///出厂的设置,发布出厂指令后更新 由上位机命令更改,实时保存
|
||||
|
0,0x1f7f, |
||||
|
D_20kg,0x25ed, |
||||
|
D_85kg,0x3236, |
||||
|
/// ts_weight_sheet_ zerows[3]; ///手工清零后的参数, 没有清零或者出错恢复到和出厂设置一样,需要实时保存
|
||||
|
0,0x1f7f, |
||||
|
D_20kg,0x25ed, |
||||
|
D_85kg,0x3236, |
||||
|
|
||||
|
|
||||
|
/// vS16 zerodiff_max; /// 上电时,如果和zerows的零点ADC的差值小于 zerodiff_max 说明没有人,启动上电校准;
|
||||
|
123, |
||||
|
/// vS16 zerodiff; ///零点的差值 零公斤位置和手工的差值
|
||||
|
-123, ////此值上电后更改, 顺便保存(区别于实时保存),
|
||||
|
///vU16 zeroout; //2
|
||||
|
8049,///30*0x134
|
||||
|
|
||||
|
|
||||
|
/// u8 ADC_shiftaverage_a; ///a路移位滤波的参数 由上位机命令更改,实时保存
|
||||
|
/// u8 ADC_shiftaverage_b; ///b路移位滤波的参数 由上位机命令更改,实时保存
|
||||
|
2,5, |
||||
|
D_rev0x55aa55aa |
||||
|
}; |
||||
|
|
||||
|
TS_IapData_ code iapData_factory= |
||||
|
{ |
||||
|
0xaabcd, |
||||
|
0x18da,0x18d9,0x18d9,0x18d9,///
|
||||
|
/// ts_weight_sheet_ factory_ws[3]; ///出厂的设置,发布出厂指令后更新 由上位机命令更改,实时保存
|
||||
|
0,0x1f7f, |
||||
|
D_20kg,0x25ed, |
||||
|
D_85kg,0x3236, |
||||
|
/// ts_weight_sheet_ zerows[3]; ///手工清零后的参数, 没有清零或者出错恢复到和出厂设置一样,需要实时保存
|
||||
|
0,0x1f7f, |
||||
|
D_20kg,0x25ed, |
||||
|
D_85kg,0x3236, |
||||
|
|
||||
|
|
||||
|
/// vS16 zerodiff_max; /// 上电时,如果和zerows的零点ADC的差值小于 zerodiff_max 说明没有人,启动上电校准;
|
||||
|
123, |
||||
|
/// vS16 zerodiff; ///零点的差值 零公斤位置和手工的差值
|
||||
|
-123, ////此值上电后更改, 顺便保存(区别于实时保存),
|
||||
|
///vU16 zeroout; //2
|
||||
|
8049,///30*0x134
|
||||
|
/// u8 ADC_shiftaverage_a; ///a路移位滤波的参数 由上位机命令更改,实时保存
|
||||
|
/// u8 ADC_shiftaverage_b; ///b路移位滤波的参数 由上位机命令更改,实时保存
|
||||
|
2,5, |
||||
|
D_rev0x55aa55aa |
||||
|
}; |
||||
|
|
||||
|
|
||||
|
//读取reg内容,写入iap
|
||||
|
u8 L4_reg_2_iap(void) |
||||
|
{ |
||||
|
|
||||
|
Lc_buf_copy_uc((u8 *)&iapData,(u8 *)&R.sd,D_TS_IapData_SIZE); |
||||
|
|
||||
|
//写入eeprom
|
||||
|
if(L1_para_write((U8*)&iapData,sizeof(TS_IapData_)) == 0) |
||||
|
{ |
||||
|
L0_uart0_sendstr("e2p write success"); |
||||
|
return 0; |
||||
|
}else |
||||
|
{ |
||||
|
return 1; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
|
||||
|
//读取factory内容,写入iap
|
||||
|
u8 L4_factory_2_iap(void) |
||||
|
{ |
||||
|
|
||||
|
Lc_buf_copy_uc((u8 *)&iapData,(u8 *)&iapData_factory,D_TS_IapData_SIZE); |
||||
|
|
||||
|
L0_uart0_sendstr("\r\nFFFFF return to factory"); |
||||
|
|
||||
|
//写入eeprom
|
||||
|
if(L1_para_write((U8*)&iapData,D_TS_IapData_SIZE) == 0) |
||||
|
{ L0_uart0_sendstr(" ok"); |
||||
|
return 0; |
||||
|
}else |
||||
|
{ L0_uart0_sendstr(" error"); |
||||
|
return 1; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
///// 多次读取
|
||||
|
void L4_iap_2_reg(void) |
||||
|
{ |
||||
|
U8 d,len = 0,i = 0; |
||||
|
len = D_TS_IapData_SIZE;///sizeof(TS_IapData_);
|
||||
|
/// printf("\r\n len = %d\r\n",len);
|
||||
|
L0_uart0_sendstr("\r\nRRRRRRRRRRRRRRRRRRRRRRRRRRRRR\r\n"); |
||||
|
/// L0_uart0_uchex(len);
|
||||
|
do |
||||
|
{ |
||||
|
d = L1_para_read((U8*)&iapData,&len); |
||||
|
if(d == 1) |
||||
|
{////读取错误
|
||||
|
L0_uart0_sendstr("e2p read failed\r\n"); |
||||
|
L4_factory_2_iap(); |
||||
|
}else |
||||
|
{ |
||||
|
/// L0_uartD_uchexArray((u8 *)&iapData,len);
|
||||
|
L4_print_iap(&iapData); |
||||
|
if(D_rev0x55aa55aa != iapData.rev0x55aa55aa) |
||||
|
{ |
||||
|
L0_uart0_sendstr("iapData_factory\r\n");L0_waitFree_uartN(0); |
||||
|
L1_para_write((U8*)&iapData_factory,len); |
||||
|
}else |
||||
|
{ |
||||
|
L0_uart0_sendstr("e2p read success\r\n");L0_waitFree_uartN(0); |
||||
|
Lc_buf_copy_uc((u8 *)&R.sd,(u8 *)&iapData,len); |
||||
|
L4_print_iap(&R.sd); |
||||
|
break; |
||||
|
} |
||||
|
} |
||||
|
i ++; |
||||
|
}while(i < 3); |
||||
|
|
||||
|
|
||||
|
} |
||||
|
|
||||
|
void L4_print_iap(TS_IapData_ *s) |
||||
|
{ |
||||
|
|
||||
|
L0_uart0_sendstr("\r\n--print_reg-- \r\na b= "); |
||||
|
L0_uart0_uchex(s->ADC_shiftaverage_a); |
||||
|
L0_uart0_uc(' '); |
||||
|
L0_uart0_uchex(s->ADC_shiftaverage_b); |
||||
|
|
||||
|
L0_waitFree_uartN(0);///混搭使用printf的时候必须加上
|
||||
|
|
||||
|
printf("\r\nfactory_ws\r\n %d kg = 0x%4x\r\n", s->factory_ws[0].kg,s->factory_ws[0].adc); |
||||
|
printf(" %d kg = 0x%4x\r\n", s->factory_ws[1].kg,s->factory_ws[1].adc); |
||||
|
printf(" %d kg = 0x%4x\r\n", s->factory_ws[2].kg,s->factory_ws[2].adc); |
||||
|
|
||||
|
|
||||
|
printf("\r\nzerows\r\n %d kg = 0x%4x\r\n", s->zerows[0].kg,s->zerows[0].adc); |
||||
|
printf(" %d kg = 0x%4x\r\n", s->zerows[1].kg,s->zerows[1].adc); |
||||
|
printf(" %d kg = 0x%4x\r\n", s->zerows[2].kg,s->zerows[2].adc); |
||||
|
|
||||
|
|
||||
|
printf("\r\ns->zeroout= %d = 0x%4x\r\n", s->zeroout, s->zeroout); |
||||
|
|
||||
|
|
||||
|
printf("\r\ns->sensor 0x%04x 0x%04x 0x%04x 0x%04x\r\n",s->sensor[0],s->sensor[1],s->sensor[2],s->sensor[3]); |
||||
|
printf("\r\ns->ADC_shiftaverage_a 0x%02x s->ADC_shiftaverage_b 0x%02x\r\n",(int)s->ADC_shiftaverage_a ,(int)s->ADC_shiftaverage_b ); |
||||
|
printf("\r\n-----print_reg end--------\r\n"); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
/*******
|
||||
|
L0_uart0_sendstr("\r\nfactory_ws= "); |
||||
|
|
||||
|
L0_uart0_ushex(iapData.factory_ws[0].kg);L0_uart0_uc(' '); |
||||
|
L0_uart0_ushex(iapData.factory_ws[0].adc);L0_uart0_0d0a(); |
||||
|
|
||||
|
|
||||
|
L0_uart0_ushex(iapData.factory_ws[1].kg);L0_uart0_uc(' '); |
||||
|
L0_uart0_ushex(iapData.factory_ws[1].adc);L0_uart0_0d0a(); |
||||
|
|
||||
|
|
||||
|
L0_uart0_ushex(iapData.factory_ws[2].kg);L0_uart0_uc(' '); |
||||
|
L0_uart0_ushex(iapData.factory_ws[3].adc);L0_uart0_0d0a(); |
||||
|
|
||||
|
|
||||
|
L0_uart0_sendstr("\r\nzerows= "); |
||||
|
|
||||
|
L0_uart0_ushex(iapData.zerows[0].kg);L0_uart0_uc(' '); |
||||
|
L0_uart0_ushex(iapData.zerows[0].adc);L0_uart0_0d0a(); |
||||
|
|
||||
|
|
||||
|
L0_uart0_ushex(iapData.zerows[1].kg);L0_uart0_uc(' '); |
||||
|
L0_uart0_ushex(iapData.zerows[1].adc);L0_uart0_0d0a(); |
||||
|
|
||||
|
|
||||
|
L0_uart0_ushex(iapData.zerows[2].kg);L0_uart0_uc(' '); |
||||
|
L0_uart0_ushex(iapData.zerows[3].adc);L0_uart0_0d0a(); |
||||
|
|
||||
|
瞡6辐3 = 0x 3 |
||||
|
|
||||
|
R.sd.zeroout= 8049 = 0x1f71 offset 4 = 0x 4 |
||||
|
4 |
||||
|
v3.4 |
||||
|
|
||||
|
RRRRRRRRRRRRRRRRRRRRRRRRRRRRR |
||||
|
2800 01 00 02 00 03 00 04 00 00 12 35 00 C8 56 78 01 90 78 9A 00 00 12 34 00 C8 56 78 01 90 78 9B 00 7B FF 85 1F 71 02 05 |
||||
|
|
||||
|
--print_reg-- |
||||
|
a b= 02 05 |
||||
|
factory_ws |
||||
|
0 kg = 0x1235 |
||||
|
200 kg = 0x5678 |
||||
|
400 kg = 0x789a |
||||
|
|
||||
|
zerows |
||||
|
0 kg = 0x1234 |
||||
|
200 kg = 0x5678 |
||||
|
400 kg = 0x789b |
||||
|
|
||||
|
s->zeroout= 8049 = 0x1f71 |
||||
|
|
||||
|
s->sensor 0x0001 0x0002 0x0003 0x0004 |
||||
|
e2p read success |
||||
|
|
||||
|
--print_reg-- |
||||
|
a b= 02 05 |
||||
|
factory_ws |
||||
|
0 kg = 0x1235 |
||||
|
200 kg = 0x5678 |
||||
|
400 kg = 0x789a |
||||
|
|
||||
|
zerows |
||||
|
0 kg = 0x1234 |
||||
|
200 kg = 0x5678 |
||||
|
400 kg = 0x789b |
||||
|
|
||||
|
s->zeroout= 8049 = 0x1f71 |
||||
|
|
||||
|
s->sensor 0x0001 0x0002 0x0003 0x0004 |
||||
|
8 |
||||
|
ADC_SAMPLE |
||||
|
|
||||
|
ADC_SAMPLE |
||||
|
|
||||
|
ADC_SAMPLE |
||||
|
|
||||
|
ADC_SAMPLE |
||||
|
|
||||
|
R.sd.zeroout= 8049 = 0x1f71 offset 1 = 0x 1 |
||||
|
|
||||
|
R.sd.zeroout= 8049 = 0x1f71 offset 2 = 0x 2 |
||||
|
|
||||
|
R.sd.zeroout= 8049 = 0x1f71 offset 3 = 0x 3 |
||||
|
|
||||
|
R.sd.zeroout= 8049 = 0x1f71 offset 4 = 0x 4 |
||||
|
4Z00 FDAA 21C7 Z02 13EF 0B82 Z03 FD31 2240 Z01 F49D 2AD4 1F3D 1F6D 13F2 1F35 1C74 001E |
||||
|
1EF0 1F64 13F2 1EF7 1C4F 001D |
||||
|
1EA8 1F4A 1EAF 1EB8 1ED6 0025 |
||||
|
1E5F 1F44 1E5A 1E55 1E94 0024 |
||||
|
1E14 1F3D 1E19 1E74 1E77 0023 |
||||
|
1DD3 1F2F 1DD4 1E39 1E43 0023 |
||||
|
1D92 1F20 1D8C 1E37 1E1D 0022 |
||||
|
1D4C 1F0E 1D4F 1DCF 1DDE 0022 |
||||
|
1D0B 1EFF 1D01 1D7F 1DA2 0021 |
||||
|
1CEA 1EF4 1CBD 1D49 1D79 0021 |
||||
|
FD 04 33 44 55 00 00 00 |
||||
|
|
||||
|
4sensor zero |
||||
|
|
||||
|
R.sd.sensor 0x245d 0x2b5a 0x e46 0x2478 |
||||
|
&e2p write success |
||||
|
RRRRRRRRRRRRRRRRRRRRRRRRRRRRR |
||||
|
2824 5D 2B 5A 0E 46 24 78 00 00 12 35 00 C8 56 78 01 90 78 9A 00 00 12 34 00 C8 56 78 01 90 78 9B 00 7B FF 85 1F 71 02 05 |
||||
|
|
||||
|
--print_reg-- |
||||
|
a b= 02 05 |
||||
|
factory_ws |
||||
|
0 kg = 0x1235 |
||||
|
200 kg = 0x5678 |
||||
|
400 kg = 0x789a |
||||
|
|
||||
|
zerows |
||||
|
0 kg = 0x1234 |
||||
|
200 kg = 0x5678 |
||||
|
400 kg = 0x789b |
||||
|
|
||||
|
s->zeroout= 8049 = 0x1f71 |
||||
|
|
||||
|
s->sensor 0x245d 0x2b5a 0x0e46 0x2478 |
||||
|
e2p read success |
||||
|
|
||||
|
--print_reg-- |
||||
|
a b= 02 05 |
||||
|
factory_ws |
||||
|
0 kg = 0x1235 |
||||
|
200 kg = 0x5678 |
||||
|
400 kg = 0x789a |
||||
|
|
||||
|
zerows |
||||
|
0 kg = 0x1234 |
||||
|
200 kg = 0x5678 |
||||
|
400 kg = 0x789b |
||||
|
|
||||
|
s->zeroout= 8049 = 0x1f71 |
||||
|
|
||||
|
s->sensor 0x245d 0x2b5a 0x0e46 0x2478 |
||||
|
1F28 1F65 1CAE 1F2D 1E9A 0024 |
||||
|
1EEA 1F58 1EF4 1F37 1F1B 0025 |
||||
|
1EA3 1F45 1EB3 1ECE 1EDA 0025 |
||||
|
1E72 1F35 1E69 1E92 1EA8 0024 |
||||
|
1E2A 1F25 1E2B 1E7B 1E7D 0023 |
||||
|
FD 02 33 44 55 00 00 00 |
||||
|
|
||||
|
--read -- |
||||
|
a b= |
||||
|
--print_reg-- |
||||
|
a b= 02 05 |
||||
|
factory_ws |
||||
|
0 kg = 0x1235 |
||||
|
200 kg = 0x5678 |
||||
|
400 kg = 0x789a |
||||
|
|
||||
|
zerows |
||||
|
0 kg = 0x1234 |
||||
|
200 kg = 0x5678 |
||||
|
400 kg = 0x789b |
||||
|
|
||||
|
s->zeroout= 8049 = 0x1f71 |
||||
|
|
||||
|
s->sensor 0x245d 0x2b5a 0x0e46 0x2478 |
||||
|
1DE4 1F16 1DE6 1E20 1E40 0023 |
||||
|
1DA3 1F06 1DA8 1DFB 1E13 0022 |
||||
|
1D7C 1EF4 1D67 1DA9 1DE0 0022 |
||||
|
1D37 1EE6 1D28 1D53 1DA6 0021 |
||||
|
1CE9 1ED4 1CE7 1D37 1D76 0020 |
||||
|
1CA7 1EC2 1CA6 1D02 1D44 0020 |
||||
|
1C5F 1EAF 1C60 1CA3 1D04 001F |
||||
|
1C2D 1EA1 1C24 1C58 1CD2 001F |
||||
|
1BEB 1E93 1BDC 1C21 1C9E 001E |
||||
|
FD 03 33 44 55 00 00 00 |
||||
|
|
||||
|
--read R.sd-- |
||||
|
a b= |
||||
|
--print_reg-- |
||||
|
a b= 02 05 |
||||
|
factory_ws |
||||
|
0 kg = 0x1235 |
||||
|
200 kg = 0x5678 |
||||
|
400 kg = 0x789a |
||||
|
|
||||
|
zerows |
||||
|
0 kg = 0x1234 |
||||
|
200 kg = 0x5678 |
||||
|
400 kg = 0x789b |
||||
|
|
||||
|
s->zeroout= 8049 = 0x1f71 |
||||
|
|
||||
|
s->sensor 0x245d 0x2b5a 0x0e46 0x2478 |
||||
|
1BAB 1E83 1B98 1BDB 1C68 001D |
||||
|
1B7D 1E70 1B5A 1BA3 1C3A 001D |
||||
|
1B32 1E5F 1B0B 1AF9 1BE5 001C |
||||
|
1AEA 1E53 1AD3 1AEE 1BBF 001B |
||||
|
*********/ |
||||
|
|
||||
|
|
||||
@ -0,0 +1,146 @@ |
|||||
|
////////////////////////////////////////////////////////////////////////////
|
||||
|
///@copyright Copyright (c) 2022, 传控科技 All rights reserved.
|
||||
|
///-------------------------------------------------------------------------
|
||||
|
/// @file app_save.h
|
||||
|
/// @brief @ app save
|
||||
|
///-------------------------------------------------------------------------
|
||||
|
/// @version 1.0
|
||||
|
/// @author CC
|
||||
|
/// @date 20220120
|
||||
|
/// @note cc_AS_stc02
|
||||
|
|
||||
|
|
||||
|
/*********
|
||||
|
写操作1字节, |
||||
|
擦除1扇区 512字节---4-6ms |
||||
|
字节中的0写为1时 擦除扇区 |
||||
|
最安全最简单,最逻辑清楚的事,就是 |
||||
|
每次擦一个扇区每次写一个扇区, |
||||
|
--->每次擦一个扇区每次写一个扇区的前面的有效数据, |
||||
|
|
||||
|
1,要求我们尽量小,最好少于512字节 |
||||
|
次数限制 30万次 |
||||
|
2, 尽量减少写,擦.--->调试的时候要谨慎,最后才可打开写; |
||||
|
|
||||
|
背景知识和应用需求决定了存储策略是如何设计的 |
||||
|
|
||||
|
|
||||
|
flash 28k 分出8k EEp 则物理地址位28K的最后8K 物理地址为5000h-6FFFh |
||||
|
|
||||
|
*******/ |
||||
|
|
||||
|
/*******
|
||||
|
app_config 可以调用app_save 偏向应用级别的配置文件 |
||||
|
app_save 保存的策略,不同程序可能要求不同 |
||||
|
|
||||
|
|
||||
|
板子有什么外设,这些几乎是纯硬件的东西,另外根据基本的应用,需要板子的外设如何使用的大部分放到bsp中 |
||||
|
asp 已经有模式的配置了,app通过参数调用asp,来决定使用外设什么模式. |
||||
|
协议发送,尽量是透明的. |
||||
|
|
||||
|
|
||||
|
app 结果 重量,保存校准参数 |
||||
|
asp app support program wifi的模式设置,adc的读取后的处理 |
||||
|
bsp board support program 板子上有的外设,wdt,wifi的底层配置函数,sensor |
||||
|
msp mcu support program ,cpu自身的外设,uart led |
||||
|
cpu |
||||
|
|
||||
|
*****/ |
||||
|
|
||||
|
/*******
|
||||
|
adc采样值 |
||||
|
^ |
||||
|
| |
||||
|
| o |
||||
|
| | |
||||
|
| o | |
||||
|
| | | |
||||
|
| ---|---- |------------0=adc=0 |
||||
|
0 | |D_ADC_OFFSET |
||||
|
|____|_____|____________>重量 adc + D_ADC_OFFSET |
||||
|
|
||||
|
0 40 80 重量点 |
||||
|
|
||||
|
|
||||
|
|
||||
|
称重需要保存的东西: |
||||
|
1,传感器正负转换的<偏移量 > |
||||
|
2,传感器找平的偏移量 一般选择四个传感器在0kg的时候的<最小值> |
||||
|
3,<三个重量点的校准> + <零点偏移量> |
||||
|
3.1 极端重量的过滤,超过250kg,或者坐偏的时候出现异常值,无效,维持上次值.<超过250kg,> |
||||
|
4, 上电自动校准零点:零点校准 刚上电的时候如果重量小于某个范围<(+-10kg)>,默认这个重量为此时的<零点> |
||||
|
所以这个范围需要配置,需要存储. |
||||
|
5,手工清零的时候,此时重量<零点>需要修改,产生一个偏移量,同时其他的两个校准点需要程序计算时同步更新. |
||||
|
相当于调用4,但是范围不限. |
||||
|
|
||||
|
|
||||
|
|
||||
|
策略B:4不用保存零点,只有手工清零才保存一下. |
||||
|
---->策略C: 4.5 都不保存,只有用户校准状态才保存 |
||||
|
选择c,按键配合,长按按键时重量为0 闪烁(H1sL0.5s)3下 |
||||
|
|
||||
|
本次称重功能需要保存的东西: |
||||
|
正负转换的<偏移量 > Byte x n=? 出厂才定. |
||||
|
找平的偏移量 Byte x n=? 出厂才定. |
||||
|
<三个重量点的校准> Byte x n=? 出厂才定. |
||||
|
<零点偏移量> 出厂定,校准清零 |
||||
|
极端重量的过滤,超过250kg 出厂定 |
||||
|
|
||||
|
其他需要保存 |
||||
|
版本号,id之类的 |
||||
|
|
||||
|
写3个扇区,之后判定两个扇区以上相同,并且在合理范围内,此参数才可使用.否则使用程序出厂内置的参数. |
||||
|
|
||||
|
|
||||
|
|
||||
|
*****/ |
||||
|
|
||||
|
|
||||
|
|
||||
|
//////////////////////////////////////////////////////////////////////////////
|
||||
|
|
||||
|
#ifndef _APP_SAVE_H |
||||
|
#define _APP_SAVE_H |
||||
|
|
||||
|
#include "TTSS_task.h" |
||||
|
#include "c_lib.h" |
||||
|
|
||||
|
#include "../bsp/bsp_config.h" |
||||
|
#include "msp_uart0.h" |
||||
|
#include "msp_uartN.h" |
||||
|
#include "asp_para.h" |
||||
|
#include "app_weight.h" |
||||
|
////#include "asp_adc.h"
|
||||
|
|
||||
|
|
||||
|
#define D_rev0x55aa55aa 0x55aa55aa |
||||
|
|
||||
|
////需要向eeprom中存储的数据
|
||||
|
typedef struct _iap_data |
||||
|
{ |
||||
|
///40Bytes
|
||||
|
S16 slaver_id; |
||||
|
|
||||
|
vU16 sensor[4];//// 4x2与第一个传感器的差值,第一个传感器为偏移量
|
||||
|
|
||||
|
ts_weight_sheet_ factory_ws[3]; ///4x3=12 出厂的设置,发布出厂指令后更新 由上位机命令更改,实时保存
|
||||
|
ts_weight_sheet_ zerows[3]; ///4x3=12 手工清零后的参数, 没有清零或者出错恢复到和出厂设置一样,需要实时保存
|
||||
|
vS16 zerodiff_max; ///2 上电时,如果和zerows的零点ADC的差值小于 zerodiff_max 说明没有人,启动上电校准;
|
||||
|
vS16 zerodiff; ///2零点的差值 零公斤位置和手工的差值
|
||||
|
////此值上电后更改, 顺便保存(区别于实时保存),
|
||||
|
vU16 zeroout; //2
|
||||
|
u8 ADC_shiftaverage_a; ///2 a路移位滤波的参数 由上位机命令更改,实时保存
|
||||
|
u8 ADC_shiftaverage_b; /// b路移位滤波的参数 由上位机命令更改,实时保存
|
||||
|
U32 rev0x55aa55aa; |
||||
|
}TS_IapData_; |
||||
|
extern TS_IapData_ iapData; |
||||
|
#define D_TS_IapData_SIZE 46///
|
||||
|
|
||||
|
|
||||
|
extern void L4_iap_2_reg(void); |
||||
|
|
||||
|
void L4_print_iap(TS_IapData_ *s); |
||||
|
u8 L4_reg_2_iap(void); |
||||
|
|
||||
|
#endif // #ifndef _APP_TASK_ADC_H
|
||||
|
|
||||
@ -0,0 +1,473 @@ |
|||||
|
#include "app_task_adc.h" |
||||
|
#include "../msp/UART0.h" |
||||
|
|
||||
|
//TS_ADC_CH_SWITCH ts_adc_ch_switch;
|
||||
|
TS_ADC_CH_SAMPLE ts_adc_ch_sample[D_ch_max_num]; |
||||
|
//TS_ADC_CH_BLUR ts_adc_ch_blur[D_ch_max_num];
|
||||
|
TS_ADC_ALL_BLUR ts_adc_all_blur; |
||||
|
TS_ADC_ALL_OUT ts_adc_all_out; |
||||
|
TS_ADC_SHOW ts_adc_show; |
||||
|
TS_ADC_CH_MID_BLUR ts_adc_ch_mid_blur[D_ch_max_num]; |
||||
|
TS_ADC_CH_AVG_BLUR ts_adc_ch_avg_blur[D_ch_max_num]; |
||||
|
TS_ADC_CH_SHIFT_BLUR ts_adc_ch_shift_blur[D_ch_max_num]; |
||||
|
|
||||
|
static U8 count_n(u8 n,u8 d) |
||||
|
{ |
||||
|
if(n < d) |
||||
|
{ |
||||
|
return MAX_OUT_NUM + n - d ; |
||||
|
} |
||||
|
else |
||||
|
{ |
||||
|
return n-d; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
U32 Abs(S32 a) |
||||
|
{ |
||||
|
if(a < 0) |
||||
|
{ |
||||
|
a = -a; |
||||
|
} |
||||
|
return a; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
void L3_task_adc_init(U8 ch) |
||||
|
{ |
||||
|
|
||||
|
|
||||
|
//通道采集任务初始化
|
||||
|
L1_task_init(&ts_adc_ch_sample[ch].task); |
||||
|
L3_task_s_go(ts_adc_ch_sample[ch],D_task_init); |
||||
|
ts_adc_ch_sample[ch].status = R.p.adc_ch_status & (ADC_status_chx_Ready_BASE << ch); |
||||
|
ts_adc_ch_sample[ch].pool = 0; |
||||
|
ts_adc_ch_sample[ch].adcval = 0; |
||||
|
ts_adc_ch_sample[ch].n = 0; |
||||
|
ts_adc_ch_sample[ch].ch = D_ADCCH_1 + ch; |
||||
|
|
||||
|
//单路中值滤波
|
||||
|
L1_task_init(&ts_adc_ch_mid_blur[ch].task); |
||||
|
L3_task_s_go(ts_adc_ch_mid_blur[ch],D_task_init); |
||||
|
ts_adc_ch_mid_blur[ch].n = 0; |
||||
|
ts_adc_ch_mid_blur[ch].max = 1; |
||||
|
ts_adc_ch_mid_blur[ch].ch = D_ADCCH_1 + ch; |
||||
|
|
||||
|
//单路均值滤波
|
||||
|
L1_task_init(&ts_adc_ch_avg_blur[ch].task); |
||||
|
L3_task_s_go(ts_adc_ch_avg_blur[ch],D_task_init); |
||||
|
ts_adc_ch_avg_blur[ch].max = R.p.cc_blur_ch_avg; |
||||
|
ts_adc_ch_avg_blur[ch].avgval = 0; |
||||
|
ts_adc_ch_avg_blur[ch].n = 0; |
||||
|
ts_adc_ch_avg_blur[ch].ch = D_ADCCH_1 + ch; |
||||
|
|
||||
|
//单路移位滤波
|
||||
|
L1_task_init(&ts_adc_ch_shift_blur[ch].task); |
||||
|
L3_task_s_go(ts_adc_ch_shift_blur[ch],D_task_init); |
||||
|
ts_adc_ch_shift_blur[ch].n = 0; |
||||
|
ts_adc_ch_shift_blur[ch].max = 1; |
||||
|
ts_adc_ch_shift_blur[ch].sum = 0; |
||||
|
ts_adc_ch_shift_blur[ch].shiftval = 0; |
||||
|
ts_adc_ch_shift_blur[ch].ch = D_ADCCH_1 + ch; |
||||
|
|
||||
|
#if 0 |
||||
|
L1_task_init(&ts_adc_ch_blur[i].task); |
||||
|
L3_task_s_go(ts_adc_ch_blur[i],D_task_init); |
||||
|
ts_adc_ch_blur[i].SA_sum = 0; |
||||
|
ts_adc_ch_blur[i].SA_avg = 0; |
||||
|
ts_adc_ch_blur[i].SA_n = 0; |
||||
|
ts_adc_ch_blur[i].SHA_sum = 0; |
||||
|
ts_adc_ch_blur[i].SHA_avg = 0; |
||||
|
ts_adc_ch_blur[i].n = 0; |
||||
|
ts_adc_ch_blur[i].ch = D_ADCCH_1 + i; |
||||
|
ts_adc_ch_blur[i].ch_n = TS_ADC_CH_01 + i; |
||||
|
#endif |
||||
|
L1_task_init(&ts_adc_all_blur.task); |
||||
|
L3_task_s_go(ts_adc_all_blur,D_task_init); |
||||
|
ts_adc_all_blur.n = 0; |
||||
|
ts_adc_all_blur.sum = 0; |
||||
|
ts_adc_all_blur.SHA_sum_0 = 0; |
||||
|
ts_adc_all_blur.SHA_avg_0 = 0; |
||||
|
ts_adc_all_blur.SHA_pool_0[0] = ts_adc_all_blur.SHA_pool_0[1] = ts_adc_all_blur.SHA_pool_0[2] = 0; |
||||
|
ts_adc_all_blur.SHA_sum_1 = 0; |
||||
|
ts_adc_all_blur.SHA_avg_1 = 0; |
||||
|
////ts_adc_all_blur.SHA_pool_1[0] = ts_adc_all_blur.SHA_pool_1[1] = ts_adc_all_blur.SHA_pool_1[2] = 0;
|
||||
|
|
||||
|
|
||||
|
L1_task_init(&ts_adc_all_out.task); |
||||
|
L3_task_s_go(ts_adc_all_out,D_task_init); |
||||
|
ts_adc_all_out.n = 0; |
||||
|
for(i=0;i<D_ADC_CH_BLUE_POOL_NUM;i++) |
||||
|
{ |
||||
|
ts_adc_all_out.SHA_pool[i] = 0; |
||||
|
} |
||||
|
|
||||
|
L1_task_init(&ts_adc_show.task); |
||||
|
L3_task_s_go(ts_adc_show,D_task_init); |
||||
|
ts_adc_show.pool_val = 0; |
||||
|
ts_adc_show.pool_gt = 1; |
||||
|
ts_adc_show.val = 0; |
||||
|
for(i=0;i<D_weight_show_limit_num;i++) |
||||
|
{ |
||||
|
ts_adc_show.times[i] = 0; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
//#define D_SA_mid(X); ts_sample[X].midv = Lc_S32_media3(ts_sample[X].mid[0],ts_sample[X].mid[1],ts_sample[X].mid[2]);
|
||||
|
#define D_ADC_CHANNEL_READY(X) (R.p.adc_ch_status & (ADC_status_chx_Ready_BASE << X)) |
||||
|
|
||||
|
#define D_task_ADC_CHx_SAMPLE 0x51 |
||||
|
#define D_task_ADC_CHx_WAIT_HIGH_LEVEL 0x52 |
||||
|
#define D_task_ADC_CHx_WAIT_LOW_LEVEL 0x53 |
||||
|
#define D_task_ADC_CHx_READ 0x54 |
||||
|
#define D_task_ADC_CHx_OUT 0x55 |
||||
|
|
||||
|
void L3_task_adc_ch_sample(TS_ADC_CH_SAMPLE *s) |
||||
|
{ |
||||
|
TTSS_Task_init() |
||||
|
L2_task_go(D_task_ADC_CHx_SAMPLE); |
||||
|
|
||||
|
TTSS_Task_step(D_task_ADC_CHx_SAMPLE) |
||||
|
if(D_ADC_CHANNEL_READY(s->ch)) |
||||
|
{ |
||||
|
L2_task_go(D_task_ADC_CHx_WAIT_LOW_LEVEL); |
||||
|
} |
||||
|
else |
||||
|
{ |
||||
|
s->adcval = s->pool; |
||||
|
L2_task_go(D_task_ADC_CHx_OUT); |
||||
|
} |
||||
|
|
||||
|
TTSS_Task_step(D_task_ADC_CHx_WAIT_LOW_LEVEL) |
||||
|
if(0 == L0_2dc_DOUT_AT(s->ch)) |
||||
|
{ |
||||
|
L2_task_go(D_task_ADC_CHx_READ); |
||||
|
} |
||||
|
|
||||
|
TTSS_Task_step(D_task_ADC_CHx_READ) |
||||
|
s->adcval = L0_ADS1231_readCH(s->ch); |
||||
|
L2_task_go(D_task_ADC_CHx_OUT); |
||||
|
|
||||
|
TTSS_Task_step(D_task_ADC_CHx_OUT) |
||||
|
s->pool = s->adcval; |
||||
|
s->out[s->n] = s->adcval; |
||||
|
L0_uart0_ulhex(s->out[s->n]); |
||||
|
L0_uart0_uc(' '); |
||||
|
L0_uart0_uc('\n'); |
||||
|
s->n++; |
||||
|
if(s->n >= D_ADC_CH_SAMPLE_BUF_MAX) |
||||
|
{ |
||||
|
s->n = 0; |
||||
|
} |
||||
|
L2_task_go(D_task_ADC_CHx_SAMPLE); |
||||
|
|
||||
|
TTSS_Task_end(); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
//单路中值滤波任务
|
||||
|
#define D_task_ADC_CHx_MID_BLUR_GET 0x51 |
||||
|
#define D_task_ADC_CHx_MID_BLUR_COUNT 0x52 |
||||
|
#define D_task_ADC_CHx_MID_BLUR_OUT 0x53 |
||||
|
|
||||
|
void L3_task_adc_ch_mid_blur(TS_ADC_CH_MID_BLUR *s) |
||||
|
{ |
||||
|
TTSS_Task_init() |
||||
|
L2_task_go(D_task_ADC_CHx_MID_BLUR_GET); |
||||
|
|
||||
|
TTSS_Task_step(D_task_ADC_CHx_MID_BLUR_GET) |
||||
|
if(ts_adc_ch_sample[s->ch].n >= 1) |
||||
|
{ |
||||
|
U8 i = 0; |
||||
|
for(i=0;i<s->max;i++) |
||||
|
{ |
||||
|
s->in[i] = ts_adc_ch_sample[s->ch].out[i]; |
||||
|
} |
||||
|
ts_adc_ch_sample[s->ch].n = 0; |
||||
|
L2_task_go(D_task_ADC_CHx_MID_BLUR_COUNT); |
||||
|
} |
||||
|
|
||||
|
TTSS_Task_step(D_task_ADC_CHx_MID_BLUR_COUNT) |
||||
|
s->midval = Lc_vS32_media(s->in, s->max); |
||||
|
L2_task_go(D_task_ADC_CHx_MID_BLUR_OUT); |
||||
|
|
||||
|
TTSS_Task_step(D_task_ADC_CHx_MID_BLUR_OUT) |
||||
|
s->out[s->n] = s->midval; |
||||
|
s->n++; |
||||
|
if(s->n >= MAX_OUT_NUM) |
||||
|
{ |
||||
|
s->n = 0; |
||||
|
} |
||||
|
L2_task_go(D_task_ADC_CHx_MID_BLUR_GET); |
||||
|
|
||||
|
TTSS_Task_end(); |
||||
|
} |
||||
|
|
||||
|
//单路均值滤波任务
|
||||
|
#define D_task_ADC_CHx_AVG_BLUR_GET 0x51 |
||||
|
#define D_task_ADC_CHx_AVG_BLUR_COUNT 0x52 |
||||
|
#define D_task_ADC_CHx_AVG_BLUR_OUT 0x53 |
||||
|
|
||||
|
void L3_task_adc_ch_avg_blur(TS_ADC_CH_AVG_BLUR *s) |
||||
|
{ |
||||
|
TTSS_Task_init() |
||||
|
L2_task_go(D_task_ADC_CHx_AVG_BLUR_GET); |
||||
|
|
||||
|
TTSS_Task_step(D_task_ADC_CHx_AVG_BLUR_GET) |
||||
|
if(ts_adc_ch_mid_blur[s->ch].n >= s->max) |
||||
|
{ |
||||
|
U8 i = 0; |
||||
|
for(i=0;i<s->max;i++) |
||||
|
{ |
||||
|
s->in[i] = ts_adc_ch_mid_blur[s->ch].out[i]; |
||||
|
} |
||||
|
ts_adc_ch_mid_blur[s->ch].n = 0; |
||||
|
L2_task_go(D_task_ADC_CHx_AVG_BLUR_COUNT); |
||||
|
} |
||||
|
|
||||
|
TTSS_Task_step(D_task_ADC_CHx_AVG_BLUR_COUNT) |
||||
|
s->avgval = Lc_vU32_avg(s->in,s->max); |
||||
|
L2_task_go(D_task_ADC_CHx_AVG_BLUR_OUT); |
||||
|
|
||||
|
TTSS_Task_step(D_task_ADC_CHx_AVG_BLUR_OUT) |
||||
|
s->out[s->n] = s->avgval; |
||||
|
s->n++; |
||||
|
if(s->n >= MAX_OUT_NUM) |
||||
|
{ |
||||
|
s->n = 0; |
||||
|
} |
||||
|
L2_task_go(D_task_ADC_CHx_AVG_BLUR_GET); |
||||
|
|
||||
|
TTSS_Task_end(); |
||||
|
} |
||||
|
|
||||
|
//单路移位滤波任务
|
||||
|
#define D_task_ADC_CHx_SHIFT_BLUR_GET 0x51 |
||||
|
#define D_task_ADC_CHx_SHIFT_BLUR_COUNT 0x52 |
||||
|
#define D_task_ADC_CHx_SHIFT_BLUR_OUT 0x54 |
||||
|
|
||||
|
void L3_task_adc_ch_shift_blur(TS_ADC_CH_SHIFT_BLUR *s) |
||||
|
{ |
||||
|
TTSS_Task_init() |
||||
|
L2_task_go(D_task_ADC_CHx_SHIFT_BLUR_GET); |
||||
|
|
||||
|
TTSS_Task_step(D_task_ADC_CHx_SHIFT_BLUR_GET) |
||||
|
if(s->h != ts_adc_ch_avg_blur[s->ch].n) |
||||
|
{ |
||||
|
s->in = ts_adc_ch_avg_blur[s->ch].out[count_n(ts_adc_ch_avg_blur[s->ch].n,1)]; |
||||
|
s->h = ts_adc_ch_avg_blur[s->ch].n; |
||||
|
L2_task_go(D_task_ADC_CHx_SHIFT_BLUR_COUNT); |
||||
|
} |
||||
|
|
||||
|
TTSS_Task_step(D_task_ADC_CHx_SHIFT_BLUR_COUNT) |
||||
|
s->sum -= s->shiftval; |
||||
|
s->sum += s->in; |
||||
|
s->shiftval = s->sum >> R.p.cc_blur_ch_shift; |
||||
|
L2_task_go(D_task_ADC_CHx_SHIFT_BLUR_OUT); |
||||
|
|
||||
|
TTSS_Task_step(D_task_ADC_CHx_SHIFT_BLUR_OUT) |
||||
|
G.weight[s->ch] = D_COUNT_WEIGHT(s->shiftval); |
||||
|
s->n++; |
||||
|
L2_task_go(D_task_ADC_CHx_SHIFT_BLUR_GET); |
||||
|
|
||||
|
TTSS_Task_end(); |
||||
|
} |
||||
|
|
||||
|
#define D_task_ADC_SHOW_GET 0x53 |
||||
|
#define D_task_ADC_SHOW_1 0x54 |
||||
|
#define D_task_ADC_SHOW_DEBUG 0x55 |
||||
|
void L3_task_adc_show(TS_ADC_SHOW *s) |
||||
|
{ |
||||
|
U8 i = 0,find = 0,j = 0; |
||||
|
TTSS_Task_init() |
||||
|
L2_task_go(D_task_ADC_SHOW_GET); |
||||
|
|
||||
|
TTSS_Task_step(D_task_ADC_SHOW_GET) |
||||
|
if(ts_adc_ch_shift_blur[0].n >= 1) |
||||
|
{ |
||||
|
ts_adc_ch_shift_blur[0].n = 0; |
||||
|
ts_adc_ch_shift_blur[1].n = 0; |
||||
|
ts_adc_ch_shift_blur[2].n = 0; |
||||
|
ts_adc_ch_shift_blur[3].n = 0; |
||||
|
s->val = G.weight[0] + G.weight[1] + G.weight[2] + G.weight[3]; |
||||
|
L2_task_go(D_task_ADC_SHOW_1); |
||||
|
} |
||||
|
|
||||
|
TTSS_Task_step(D_task_ADC_SHOW_1) |
||||
|
if((s->val - s->pool_val) * s->pool_gt < 0) |
||||
|
{ |
||||
|
//符号改变,计数清0
|
||||
|
//L0_uart0_uc('-');
|
||||
|
L3_task_show_times_reset(); |
||||
|
} |
||||
|
s->pool_gt = (s->val >= s->pool_val) ? 1 : -1; |
||||
|
|
||||
|
s->diff_val = Lc_abs(s->val,s->pool_val); |
||||
|
for(i=0;i<D_weight_show_limit_num;i++) |
||||
|
{ |
||||
|
if(R.p.weight_show_limit[i].times == 0) |
||||
|
{ |
||||
|
break; |
||||
|
} |
||||
|
if(s->diff_val >= R.p.weight_show_limit[i].weight) |
||||
|
{ |
||||
|
find = 1; |
||||
|
break; |
||||
|
} |
||||
|
} |
||||
|
if(find) |
||||
|
{ |
||||
|
s->times[i]++; |
||||
|
for(j=0;j<D_weight_show_limit_num;j++) |
||||
|
{ |
||||
|
if(j != i) |
||||
|
{ |
||||
|
s->times[j] = 0; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
else //小于显示分辨率(<0.02kg)
|
||||
|
{ |
||||
|
L3_task_show_times_reset(); |
||||
|
} |
||||
|
|
||||
|
for(i=0;i<D_weight_show_limit_num;i++) |
||||
|
{ |
||||
|
if(s->times[i] >= R.p.weight_show_limit[i].times) |
||||
|
{ |
||||
|
L3_task_show_times_reset(); |
||||
|
s->pool_val = s->val; |
||||
|
G._total_weight = s->pool_val; |
||||
|
R.total_weight = L3_count_std_weight(G._total_weight); |
||||
|
break; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
L2_task_go(D_task_ADC_SHOW_GET); |
||||
|
|
||||
|
TTSS_Task_end(); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
void L3_task_show_times_reset() |
||||
|
{ |
||||
|
U8 i = 0; |
||||
|
for(i=0;i<D_weight_show_limit_num;i++) |
||||
|
{ |
||||
|
ts_adc_show.times[i] = 0; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
|
||||
|
void L3_task_adc_handler(u8 ch) |
||||
|
{ |
||||
|
L3_task_adc_ch_sample(&ts_adc_ch_sample[ch]); |
||||
|
L3_task_adc_ch_mid_blur(&ts_adc_ch_mid_blur[ch]); |
||||
|
L3_task_adc_ch_avg_blur(&ts_adc_ch_avg_blur[ch]); |
||||
|
L3_task_adc_ch_shift_blur(&ts_adc_ch_shift_blur[ch]); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
#if 0 |
||||
|
|
||||
|
//单路滤波任务
|
||||
|
#define D_task_ADC_CHx_BLUR_GET 0x51 |
||||
|
#define D_task_ADC_CHx_BLUR_AVG 0x52 |
||||
|
#define D_task_ADC_CHx_BLUR_SHIFT 0x53 |
||||
|
#define D_task_ADC_CHx_BLUR_COUNT 0x54 |
||||
|
|
||||
|
void L3_task_adc_ch_blur(TS_ADC_CH_BLUR *s) |
||||
|
{ |
||||
|
TTSS_Task_init() |
||||
|
L2_task_go(D_task_ADC_CHx_BLUR_GET); |
||||
|
|
||||
|
TTSS_Task_step(D_task_ADC_CHx_BLUR_GET) |
||||
|
if(ts_adc_ch_sample[s->ch_n].n >= R.p.cc_blur_ch_avg) |
||||
|
{ |
||||
|
s->SA_sum = ts_adc_ch_sample[s->ch_n].sum; |
||||
|
s->SA_n = ts_adc_ch_sample[s->ch_n].n; |
||||
|
ts_adc_ch_sample[s->ch_n].sum = 0; |
||||
|
ts_adc_ch_sample[s->ch_n].n = 0; |
||||
|
L2_task_go(D_task_ADC_CHx_BLUR_AVG); |
||||
|
} |
||||
|
|
||||
|
TTSS_Task_step(D_task_ADC_CHx_BLUR_AVG) |
||||
|
s->SA_avg = s->SA_sum / s->SA_n; |
||||
|
L2_task_go(D_task_ADC_CHx_BLUR_SHIFT); |
||||
|
|
||||
|
TTSS_Task_step(D_task_ADC_CHx_BLUR_SHIFT) |
||||
|
s->SHA_sum -= s->SHA_avg; |
||||
|
s->SHA_sum += s->SA_avg; |
||||
|
s->SHA_avg = (S32)(s->SHA_sum >> R.p.cc_blur_ch_shift); |
||||
|
s->n++; |
||||
|
L2_task_go(D_task_ADC_CHx_BLUR_COUNT); |
||||
|
|
||||
|
TTSS_Task_step(D_task_ADC_CHx_BLUR_COUNT) |
||||
|
G.weight[s->ch_n] = D_COUNT_WEIGHT(s->SHA_avg); |
||||
|
L2_task_go(D_task_ADC_CHx_BLUR_GET); |
||||
|
|
||||
|
TTSS_Task_end(); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
#define D_task_ADC_ALL_OUT_GET 0x51 |
||||
|
#define D_task_ADC_ALL_OUT_DECIDE 0x52 |
||||
|
#define D_task_ADC_ALL_OUT_SHOW 0x53 |
||||
|
#define D_task_ADC_ALL_OUT_SHOW_1 0x54 |
||||
|
#define D_task_ADC_ALL_OUT_DEBUG 0x55 |
||||
|
|
||||
|
void L3_task_adc_all_out(TS_ADC_ALL_OUT *s) |
||||
|
{ |
||||
|
TTSS_Task_init() |
||||
|
//s->diff_threshold = (R.p.cc_blur_all_out_threshold);
|
||||
|
//s->diff_threshold1 = (R.p.cc_blur_all_out_threshold1);
|
||||
|
//s->diff_threshold2 = (R.p.cc_blur_all_out_threshold2);
|
||||
|
//s->should_show_times_threshold = (R.p.cc_blur_all_out_should_show_times_threshold);
|
||||
|
L2_task_go(D_task_ADC_ALL_OUT_GET); |
||||
|
|
||||
|
TTSS_Task_step(D_task_ADC_ALL_OUT_GET) |
||||
|
if(ts_adc_all_blur.n >= 1) |
||||
|
{ |
||||
|
ts_adc_all_blur.n = 0; |
||||
|
Lc_buf_copy_uc((U8*)s->SHA_pool, (U8*)ts_adc_all_blur.SHA_pool_0, D_ADC_CH_BLUE_POOL_NUM * sizeof(S32)); |
||||
|
s->SHA_diff[0] = Lc_abs(s->SHA_pool[1] , s->SHA_pool[0]); |
||||
|
s->SHA_diff[1] = Lc_abs(s->SHA_pool[2] , s->SHA_pool[1]); |
||||
|
s->SHA_ddiff[0] = Lc_abs(s->SHA_diff[1] , s->SHA_diff[0]); |
||||
|
L2_task_go(D_task_ADC_ALL_OUT_DECIDE); |
||||
|
} |
||||
|
|
||||
|
TTSS_Task_step(D_task_ADC_ALL_OUT_DECIDE) |
||||
|
if((s->SHA_diff[1] >= R.p.cc_blur_all_out_d_threshold) || (s->SHA_diff[0] >= R.p.cc_blur_all_out_d_threshold) || (s->SHA_ddiff[0] >= R.p.cc_blur_all_out_dd_threshold)) |
||||
|
{ |
||||
|
#if 1 |
||||
|
s->sum = s->SHA_pool[2] + s->SHA_pool[1] + s->SHA_pool[0]; |
||||
|
ts_adc_all_blur.SHA_sum_1 = s->sum; |
||||
|
ts_adc_all_blur.SHA_sum_1 <<= R.p.cc_blur_all_shift1; |
||||
|
ts_adc_all_blur.SHA_sum_1 /= 3; |
||||
|
ts_adc_all_blur.SHA_avg_1 = (S32)(ts_adc_all_blur.SHA_sum_1 >> R.p.cc_blur_all_shift1); |
||||
|
//s->val = ts_adc_all_blur.SHA_avg_0;
|
||||
|
s->val = s->sum / 3; |
||||
|
//s->t = 0;
|
||||
|
#else |
||||
|
ts_adc_all_blur.SHA_sum_1 = ts_adc_all_blur.SHA_avg_0 << R.p.cc_blur_all_shift1; |
||||
|
ts_adc_all_blur.SHA_avg_1 = ts_adc_all_blur.SHA_avg_0; |
||||
|
s->val = ts_adc_all_blur.SHA_avg_0; |
||||
|
//s->t = 0;
|
||||
|
#endif |
||||
|
} |
||||
|
else |
||||
|
{ |
||||
|
s->val = ts_adc_all_blur.SHA_avg_1; |
||||
|
//s->t = 1;
|
||||
|
} |
||||
|
s->n++; |
||||
|
L2_task_go(D_task_ADC_ALL_OUT_GET); |
||||
|
TTSS_Task_end(); |
||||
|
} |
||||
|
#endif |
||||
|
|
||||
|
|
||||
@ -0,0 +1,214 @@ |
|||||
|
#ifndef APP_TASK_ADC_H |
||||
|
#define APP_TASK_ADC_H |
||||
|
|
||||
|
#include "common.h" |
||||
|
#include "../ctask/task.h" |
||||
|
#include "../bsp/bsp_cs1232.h" |
||||
|
#include "../bsp/bsp_config.h" |
||||
|
|
||||
|
|
||||
|
#define D_ADC_BLUR_MID_MAX 5 |
||||
|
|
||||
|
enum D_TASK_ADC_CHANNEL |
||||
|
{ |
||||
|
TS_ADC_CH_01 = 0x00, |
||||
|
TS_ADC_CH_02 = 0x01, |
||||
|
TS_ADC_CH_03 = 0x02, |
||||
|
TS_ADC_CH_04 = 0x03, |
||||
|
}; |
||||
|
|
||||
|
//对每一路进行采样
|
||||
|
#define D_ADC_CH_SAMPLE_BUF_MAX 50 |
||||
|
#define D_ADC_CH_BLUE_POOL_NUM 3 |
||||
|
#define MAX_OUT_NUM 10 |
||||
|
|
||||
|
typedef struct |
||||
|
{ |
||||
|
TS_task task; |
||||
|
vU8 pending_ch; |
||||
|
}TS_ADC_CH_SWITCH; |
||||
|
|
||||
|
typedef struct |
||||
|
{ |
||||
|
TS_task task; |
||||
|
vS32 adcval; |
||||
|
vS32 status; |
||||
|
vS32 pool; |
||||
|
vU8 ch; |
||||
|
vU8 n; |
||||
|
vU32 out[MAX_OUT_NUM]; |
||||
|
}TS_ADC_CH_SAMPLE; |
||||
|
|
||||
|
//中值滤波
|
||||
|
typedef struct ts_adc_ch_mid_blur |
||||
|
|
||||
|
{ |
||||
|
TS_task task; |
||||
|
vU8 ch; |
||||
|
vU8 max; |
||||
|
vU32 in[MAX_OUT_NUM]; |
||||
|
vU32 midval; |
||||
|
vU8 n; |
||||
|
vU32 out[MAX_OUT_NUM]; |
||||
|
}TS_ADC_CH_MID_BLUR; |
||||
|
|
||||
|
// 均值滤波
|
||||
|
typedef struct ts_adc_ch_avg_blur |
||||
|
{ |
||||
|
TS_task task; |
||||
|
vU8 ch; |
||||
|
vU8 max; |
||||
|
vU32 in[MAX_OUT_NUM]; |
||||
|
vU32 avgval; |
||||
|
vU8 n; |
||||
|
vU32 out[MAX_OUT_NUM]; |
||||
|
}TS_ADC_CH_AVG_BLUR; |
||||
|
|
||||
|
// 移位滤波
|
||||
|
typedef struct ts_adc_ch_shift_blur |
||||
|
{ |
||||
|
TS_task task; |
||||
|
vU8 ch; |
||||
|
vU8 h;//均值有数值
|
||||
|
vU8 n;//移位有值
|
||||
|
vU8 max; |
||||
|
vU32 in; |
||||
|
vU32 sum; |
||||
|
vU32 shiftval; |
||||
|
vU32 out[MAX_OUT_NUM]; |
||||
|
}TS_ADC_CH_SHIFT_BLUR; |
||||
|
|
||||
|
#if 0 |
||||
|
//对每一路进行滤波
|
||||
|
typedef struct |
||||
|
{ |
||||
|
TS_task task; |
||||
|
vU8 ch; |
||||
|
vU8 ch_n; |
||||
|
|
||||
|
//平均滤波
|
||||
|
vS32 SA_sum; |
||||
|
vS32 SA_avg; |
||||
|
vS32 SA_n; |
||||
|
|
||||
|
//移位滤波
|
||||
|
vS32 SHA_sum; |
||||
|
vS32 SHA_avg; |
||||
|
|
||||
|
vU8 n; |
||||
|
}TS_ADC_CH_BLUR; |
||||
|
#endif |
||||
|
|
||||
|
//和值滤波
|
||||
|
typedef struct |
||||
|
{ |
||||
|
TS_task task; |
||||
|
vU8 n; |
||||
|
vS32 sum; |
||||
|
|
||||
|
vS32 SHA_sum_0; |
||||
|
vS32 SHA_avg_0; |
||||
|
vS32 SHA_pool_0[D_ADC_CH_BLUE_POOL_NUM]; |
||||
|
|
||||
|
vS32 SHA_sum_1; |
||||
|
vS32 SHA_avg_1; |
||||
|
//vS32 SHA_pool_1[D_ADC_CH_BLUE_POOL_NUM];
|
||||
|
}TS_ADC_ALL_BLUR; |
||||
|
|
||||
|
//和值阈值判定(滤波方式切换)决定输出
|
||||
|
#define D_ADC_ALL_OUT_POOL_NUM 5 |
||||
|
typedef struct |
||||
|
{ |
||||
|
TS_task task; |
||||
|
vS32 val; |
||||
|
vS32 SHA_pool[D_ADC_CH_BLUE_POOL_NUM]; |
||||
|
vU32 SHA_diff[D_ADC_CH_BLUE_POOL_NUM-1]; |
||||
|
vU32 SHA_ddiff[D_ADC_CH_BLUE_POOL_NUM-2]; |
||||
|
vU8 n; |
||||
|
vS32 sum; |
||||
|
}TS_ADC_ALL_OUT; |
||||
|
|
||||
|
typedef struct |
||||
|
{ |
||||
|
TS_task task; |
||||
|
vS8 pool_gt; |
||||
|
vS32 pool_val; |
||||
|
vS32 val; |
||||
|
vU16 u16_v; |
||||
|
U32 diff_val; |
||||
|
vU8 times[D_weight_show_limit_num]; |
||||
|
U8 stable; |
||||
|
}TS_ADC_SHOW; |
||||
|
|
||||
|
typedef struct |
||||
|
{ |
||||
|
TS_task task; |
||||
|
U8 cnt1;//不稳定判定次数
|
||||
|
U8 cnt2;//稳定判定次数
|
||||
|
vS32 r_val;//实际值
|
||||
|
vS32 s_val;//显示值
|
||||
|
vS32 r_val_pool;//上一个实际值
|
||||
|
vU8 n; |
||||
|
}TS_ADC_STABLE; |
||||
|
|
||||
|
|
||||
|
#if 0 |
||||
|
typedef struct _TS_ADC_SampleM_ |
||||
|
{ |
||||
|
//中值滤波
|
||||
|
vS32 mid[D_ADC_BLUR_MID_MAX]; |
||||
|
vS32 midv; |
||||
|
|
||||
|
//均值滤波
|
||||
|
vS32 SA_sum; |
||||
|
vS32 SA_avg; |
||||
|
|
||||
|
//移位滤波
|
||||
|
vS32 SHA_sum; |
||||
|
vS32 SHA_avg; |
||||
|
}TS_ADC_SampleM; |
||||
|
|
||||
|
typedef struct |
||||
|
{ |
||||
|
TS_task task; |
||||
|
vU8 error; |
||||
|
vU8 m_n; |
||||
|
vU8 a_n; |
||||
|
vU8 ch; |
||||
|
vU8 ch_n; |
||||
|
vU16 u16_v; |
||||
|
TS_ADC_SampleM ts_sample; |
||||
|
}TS_task_ADC_; |
||||
|
#endif |
||||
|
|
||||
|
extern TS_ADC_CH_SWITCH ts_adc_ch_switch; |
||||
|
extern TS_ADC_CH_SAMPLE ts_adc_ch_sample[D_ch_max_num]; |
||||
|
extern TS_ADC_CH_MID_BLUR ts_adc_ch_mid_blur[D_ch_max_num]; |
||||
|
extern TS_ADC_CH_AVG_BLUR ts_adc_ch_avg_blur[D_ch_max_num]; |
||||
|
extern TS_ADC_CH_SHIFT_BLUR ts_adc_ch_shift_blur[D_ch_max_num]; |
||||
|
|
||||
|
//extern TS_ADC_CH_BLUR ts_adc_ch_blur[D_ch_max_num];
|
||||
|
extern TS_ADC_ALL_BLUR ts_adc_all_blur; |
||||
|
extern TS_ADC_ALL_OUT ts_adc_all_out; |
||||
|
extern TS_ADC_SHOW ts_adc_show; |
||||
|
extern TS_ADC_STABLE ts_adc_stable; |
||||
|
|
||||
|
|
||||
|
extern void L3_task_adc_init(U8 ch); |
||||
|
extern void L3_task_adc_ch_sample(TS_ADC_CH_SAMPLE *s); |
||||
|
//extern void L3_task_adc_all_blur(TS_ADC_ALL_BLUR *s);
|
||||
|
//extern void L3_task_adc_all_out(TS_ADC_ALL_OUT *s);
|
||||
|
extern void L3_task_adc_show(TS_ADC_SHOW *s); |
||||
|
extern void L3_task_show_times_reset(); |
||||
|
//extern void L3_task_weight_stable(TS_ADC_STABLE *s);
|
||||
|
extern void L3_task_weight_init(void); |
||||
|
//extern void L3_task_adc_ch_mid_blur(TS_ADC_CH_MID_BLUR *s);
|
||||
|
//extern void L3_task_adc_ch_avg_blur(TS_ADC_CH_AVG_BLUR *s);
|
||||
|
//extern void L3_task_adc_ch_shift_blur(TS_ADC_CH_SHIFT_BLUR *s);
|
||||
|
extern void L3_task_adc_handler(u8 ch); |
||||
|
extern void L3_task_all_adc_handler(void); |
||||
|
|
||||
|
|
||||
|
|
||||
|
#endif |
||||
|
|
||||
@ -0,0 +1,30 @@ |
|||||
|
////////////////////////////////////////////////////////////////////////////
|
||||
|
///@copyright Copyright (c) 2018, 传控科技 All rights reserved.
|
||||
|
///-------------------------------------------------------------------------
|
||||
|
/// @file bsp_drv.c
|
||||
|
/// @brief bsp @ driver config
|
||||
|
///-------------------------------------------------------------------------
|
||||
|
/// @version 1.0
|
||||
|
/// @author CC
|
||||
|
/// @date 20180331
|
||||
|
/// @note cc_AS_stc02
|
||||
|
//////////////////////////////////////////////////////////////////////////////
|
||||
|
|
||||
|
#include "app_task_adc.h" |
||||
|
#include "common.h" |
||||
|
|
||||
|
void L3_task_adc_handler(u8 ch) |
||||
|
{ |
||||
|
L3_task_adc_sample(&ts_adc_samples[ch]); |
||||
|
/***********
|
||||
|
//方法论和计算书 https://ccsensp.yuque.com/tegchg/lr84bm/hhexas
|
||||
|
L3_task_adc_channel_sample(&ts_adc_channel_samples[ch]); |
||||
|
//L3_task_adc_filter_mid(&ts_adc_blur_mid[ch]);
|
||||
|
L3_task_adc_filter_avg(&ts_adc_blur_avg[ch]); |
||||
|
L3_task_adc_filter_shift(&ts_adc_blur_shift[ch]); |
||||
|
L3_task_adc_filter_out(&ts_adc_blur_out[ch]); |
||||
|
***********/ |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
@ -0,0 +1,29 @@ |
|||||
|
////////////////////////////////////////////////////////////////////////////
|
||||
|
///@copyright Copyright (c) 2018, 传控科技 All rights reserved.
|
||||
|
///-------------------------------------------------------------------------
|
||||
|
/// @file bsp_drv.h
|
||||
|
/// @brief bsp @ driver config
|
||||
|
///-------------------------------------------------------------------------
|
||||
|
/// @version 1.0
|
||||
|
/// @author CC
|
||||
|
/// @date 20180331
|
||||
|
/// @note cc_AS_stc02
|
||||
|
|
||||
|
//////////////////////////////////////////////////////////////////////////////
|
||||
|
|
||||
|
#ifndef _APP_TASK_ADC_H |
||||
|
#define _APP_TASK_ADC_H |
||||
|
|
||||
|
#include "../ctask/task.h" |
||||
|
#include "../clib/clib.h" |
||||
|
#include "asp_adc.h" |
||||
|
|
||||
|
#include "../bsp/bsp_config.h" |
||||
|
#include "../msp/uart0.h" |
||||
|
#include "../bsp/bsp_cs1232.h" |
||||
|
|
||||
|
void L3_task_adc_handler(u8 ch); |
||||
|
|
||||
|
|
||||
|
#endif // #ifndef _APP_TASK_ADC_H
|
||||
|
|
||||
@ -0,0 +1,124 @@ |
|||||
|
////////////////////////////////////////////////////////////////////////////
|
||||
|
///@copyright Copyright (c) 2018, 传控科技 All rights reserved.
|
||||
|
///-------------------------------------------------------------------------
|
||||
|
/// @file bsp_drv.c
|
||||
|
/// @brief bsp @ driver config
|
||||
|
///-------------------------------------------------------------------------
|
||||
|
/// @version 1.0
|
||||
|
/// @author CC
|
||||
|
/// @date 20180331
|
||||
|
/// @note cc_AS_stc02
|
||||
|
//////////////////////////////////////////////////////////////////////////////
|
||||
|
|
||||
|
#include "app_task_debug.h" |
||||
|
///#include "common.h"
|
||||
|
#include "../bsp/bsp_config.h" |
||||
|
#include "msp_uart0.h" |
||||
|
#include "app_weight.h" |
||||
|
|
||||
|
|
||||
|
S_TASK_DEBUG _s_task_debug; |
||||
|
|
||||
|
//=============================================
|
||||
|
void L3_task_debug_init(void) |
||||
|
{ |
||||
|
L1_task_init(&_s_task_debug.task); |
||||
|
L3_task_s_go(_s_task_debug,D_task_init); |
||||
|
} |
||||
|
|
||||
|
#define D_task_ADC_CHx_DEBUG 0x53 |
||||
|
void L3_task_debug(S_TASK_DEBUG *s) |
||||
|
{ |
||||
|
TTSS_Task_init(): |
||||
|
L2_task_go(D_task_ADC_CHx_DEBUG); |
||||
|
|
||||
|
TTSS_Task_step(D_task_ADC_CHx_DEBUG): |
||||
|
if(ts_adc_samples[0].ok) |
||||
|
{ts_adc_samples[0].ok = 0; |
||||
|
|
||||
|
L0_uart0_ushex(ts_adc_samples[0].out1); |
||||
|
L0_uart0_uc(0x09); |
||||
|
L0_uart0_ushex(ts_adc_samples[0].out2); |
||||
|
L0_uart0_uc(0x09); |
||||
|
L0_uart0_ushex(ts_adc_samples[0].ts_SAa.out4); |
||||
|
L0_uart0_0d0a(); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
//// L2_task_go_Tdelay(D_task_ADC_CHx_DEBUG,D_Tdelay_Msec(150)); //延时15ms
|
||||
|
|
||||
|
TTSS_Task_end() |
||||
|
} |
||||
|
|
||||
|
|
||||
|
/************
|
||||
|
正在检测目标单片机 ... |
||||
|
单片机型号: STC8H3K48S2 |
||||
|
固件版本号: 7.4.1U |
||||
|
|
||||
|
当前芯片的硬件选项为: |
||||
|
. 系统ISP工作频率: 23.866MHz |
||||
|
. 内部IRC振荡器的频率: 11.064MHz |
||||
|
. 掉电唤醒定时器的频率: 35.250KHz |
||||
|
. 振荡器放大增益使能 |
||||
|
. P3.2和P3.3与下次下载无关 |
||||
|
. 上电复位时增加额外的复位延时 |
||||
|
. 复位引脚用作普通I/O口 |
||||
|
. 检测到低压时复位 |
||||
|
. 低压检测门槛电压 : 3.00 V |
||||
|
. 上电复位时,硬件不启动内部看门狗 |
||||
|
. 上电自动启动内部看门狗时的预分频数为 : 256 |
||||
|
. 空闲状态时看门狗定时器停止计数 |
||||
|
. 启动看门狗后,软件可以修改分频数,但不能关闭看门狗 |
||||
|
. 下次下载用户程序时,将用户EEPROM区一并擦除 |
||||
|
. 下次下载用户程序时,没有相关的端口控制485 |
||||
|
. 下次下载时不需要校验下载口令 |
||||
|
. 内部参考电压: 1195 mV (参考范围: 1100~1300mV) |
||||
|
. 内部安排测试时间: 2021年9月2日 |
||||
|
|
||||
|
单片机型号: STC8H3K48S2 |
||||
|
固件版本号: 7.4.1U |
||||
|
|
||||
|
开始调节频率 ... [0.812"] |
||||
|
调节后的频率: 11.057MHz (-0.022%) |
||||
|
|
||||
|
正在重新握手 ... 成功 [0.125"] |
||||
|
当前的波特率: 115200 |
||||
|
正在擦除目标区域 ... 完成 ! [0.656"] |
||||
|
芯片出厂序列号 : F74DC52602599C |
||||
|
正在下载用户代码 ... 完成 ! [3.796"] |
||||
|
正在设置硬件选项 ... 完成 ! [0.016"] |
||||
|
|
||||
|
更新后的硬件选项为: |
||||
|
. 系统ISP工作频率: 23.866MHz |
||||
|
. 内部IRC振荡器的频率: 11.057MHz |
||||
|
. 掉电唤醒定时器的频率: 35.250KHz |
||||
|
. 振荡器放大增益使能 |
||||
|
. P3.2和P3.3与下次下载无关 |
||||
|
. 上电复位时增加额外的复位延时 |
||||
|
. 复位引脚用作普通I/O口 |
||||
|
. 检测到低压时复位 |
||||
|
. 低压检测门槛电压 : 3.00 V |
||||
|
. 上电复位时,硬件不启动内部看门狗 |
||||
|
. 上电自动启动内部看门狗时的预分频数为 : 256 |
||||
|
. 空闲状态时看门狗定时器停止计数 |
||||
|
. 启动看门狗后,软件可以修改分频数,但不能关闭看门狗 |
||||
|
. 下次下载用户程序时,不擦除用户EEPROM区 |
||||
|
. 下次下载用户程序时,没有相关的端口控制485 |
||||
|
. 下次下载时不需要校验下载口令 |
||||
|
. 内部参考电压: 1195 mV (参考范围: 1100~1300mV) |
||||
|
. 内部安排测试时间: 2021年9月2日 |
||||
|
芯片出厂序列号 : F74DC52602599C |
||||
|
|
||||
|
单片机型号: STC8H3K48S2 |
||||
|
固件版本号: 7.4.1U |
||||
|
|
||||
|
. 用户设定频率: 11.059MHz |
||||
|
. 调节后的频率: 11.057MHz |
||||
|
. 频率调节误差: -0.022% |
||||
|
|
||||
|
|
||||
|
操作成功 !(2022-01-08 10:36:46) |
||||
|
|
||||
|
*************/ |
||||
|
|
||||
@ -0,0 +1,32 @@ |
|||||
|
////////////////////////////////////////////////////////////////////////////
|
||||
|
///@copyright Copyright (c) 2018, 传控科技 All rights reserved.
|
||||
|
///-------------------------------------------------------------------------
|
||||
|
/// @file bsp_drv.h
|
||||
|
/// @brief bsp @ driver config
|
||||
|
///-------------------------------------------------------------------------
|
||||
|
/// @version 1.0
|
||||
|
/// @author CC
|
||||
|
/// @date 20180331
|
||||
|
/// @note cc_AS_stc02
|
||||
|
|
||||
|
//////////////////////////////////////////////////////////////////////////////
|
||||
|
|
||||
|
#ifndef _APP_TASK_DEBUG_H |
||||
|
#define _APP_TASK_DEBUG_H |
||||
|
|
||||
|
#include "TTSS_task.h" |
||||
|
#include "c_lib.h" |
||||
|
|
||||
|
typedef struct _s_task_debug |
||||
|
{ |
||||
|
TS_task task; |
||||
|
}S_TASK_DEBUG; |
||||
|
|
||||
|
extern S_TASK_DEBUG _s_task_debug; |
||||
|
|
||||
|
extern void L3_task_debug_init(void); |
||||
|
extern void L3_task_debug(S_TASK_DEBUG *s); |
||||
|
|
||||
|
|
||||
|
#endif // #ifndef _APP_TASK_ADC_H
|
||||
|
|
||||
@ -0,0 +1,64 @@ |
|||||
|
////////////////////////////////////////////////////////////////////////////
|
||||
|
///@copyright Copyright (c) 2018, 传控科技 All rights reserved.
|
||||
|
///-------------------------------------------------------------------------
|
||||
|
/// @file bsp_drv.c
|
||||
|
/// @brief bsp @ driver config
|
||||
|
///-------------------------------------------------------------------------
|
||||
|
/// @version 1.0
|
||||
|
/// @author CC
|
||||
|
/// @date 20180331
|
||||
|
/// @note cc_AS_stc02
|
||||
|
//////////////////////////////////////////////////////////////////////////////
|
||||
|
|
||||
|
#include "app_task_reg.h" |
||||
|
#include "app_weight.h" |
||||
|
///#include "common.h"
|
||||
|
#include "../bsp/bsp_config.h" |
||||
|
#include "msp_uart0.h" |
||||
|
|
||||
|
S_TASK_REGVAL_LISTEN s_task_reglisten; |
||||
|
|
||||
|
//=============================================
|
||||
|
void L3_task_reglisten_init(void) |
||||
|
{ |
||||
|
L1_task_init(&s_task_reglisten.task); |
||||
|
L3_task_s_go(s_task_reglisten,D_task_init); |
||||
|
} |
||||
|
|
||||
|
//清零任务
|
||||
|
#define D_task_WEIGHT_COUNT 0x50 |
||||
|
#define D_task_IAP 0x51 |
||||
|
|
||||
|
void L3_task_reglisten_handle(S_TASK_REGVAL_LISTEN *s) |
||||
|
{ |
||||
|
|
||||
|
TTSS_Task_init(): |
||||
|
L2_task_go(D_task_WEIGHT_COUNT); |
||||
|
|
||||
|
TTSS_Task_step(D_task_WEIGHT_COUNT): |
||||
|
/// if(R.zero != 0)
|
||||
|
{ |
||||
|
// R.total_zweight = ts_adc_blur_show.rough_weight = R.rough_weight; //皮重 = 毛重
|
||||
|
/// R.total_weight = (R.rough_weight > R.total_zweight) ? (R.rough_weight - R.total_zweight) : (0);//净重
|
||||
|
/// R.zero = 0;
|
||||
|
} |
||||
|
L2_task_go(D_task_IAP); //延时100ms
|
||||
|
|
||||
|
|
||||
|
TTSS_Task_step(D_task_IAP): |
||||
|
/// if(R.status_eep_save != 0)
|
||||
|
{ |
||||
|
/// R.status_eep_save = 0;
|
||||
|
/// L3_reg_2_iap();//写入IAP
|
||||
|
} |
||||
|
L2_task_go_Tdelay(D_task_WEIGHT_COUNT,D_Tdelay_Msec(100)); //延时100ms
|
||||
|
|
||||
|
|
||||
|
TTSS_Task_end(); |
||||
|
|
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
@ -0,0 +1,64 @@ |
|||||
|
////////////////////////////////////////////////////////////////////////////
|
||||
|
///@copyright Copyright (c) 2018, 传控科技 All rights reserved.
|
||||
|
///-------------------------------------------------------------------------
|
||||
|
/// @file bsp_drv.c
|
||||
|
/// @brief bsp @ driver config
|
||||
|
///-------------------------------------------------------------------------
|
||||
|
/// @version 1.0
|
||||
|
/// @author CC
|
||||
|
/// @date 20180331
|
||||
|
/// @note cc_AS_stc02
|
||||
|
//////////////////////////////////////////////////////////////////////////////
|
||||
|
|
||||
|
#include "app_task_reg.h" |
||||
|
#include "app_weight.h" |
||||
|
#include "common.h" |
||||
|
#include "../bsp/bsp_config.h" |
||||
|
#include "msp_uart0.h" |
||||
|
|
||||
|
S_TASK_REGVAL_LISTEN s_task_reglisten; |
||||
|
|
||||
|
//=============================================
|
||||
|
void L3_task_reglisten_init(void) |
||||
|
{ |
||||
|
L1_task_init(&s_task_reglisten.task); |
||||
|
L3_task_s_go(s_task_reglisten,D_task_init); |
||||
|
} |
||||
|
|
||||
|
//清零任务
|
||||
|
#define D_task_WEIGHT_COUNT 0x50 |
||||
|
#define D_task_IAP 0x51 |
||||
|
|
||||
|
void L3_task_reglisten_handle(S_TASK_REGVAL_LISTEN *s) |
||||
|
{ |
||||
|
|
||||
|
TTSS_Task_init(): |
||||
|
L2_task_go(D_task_WEIGHT_COUNT); |
||||
|
|
||||
|
TTSS_Task_step(D_task_WEIGHT_COUNT): |
||||
|
if(R.zero != 0) |
||||
|
{ |
||||
|
R.total_zweight = ts_adc_blur_show.rough_weight = R.rough_weight; //皮重 = 毛重
|
||||
|
R.total_weight = (R.rough_weight > R.total_zweight) ? (R.rough_weight - R.total_zweight) : (0);//净重
|
||||
|
R.zero = 0; |
||||
|
} |
||||
|
L2_task_go(D_task_IAP); //延时100ms
|
||||
|
|
||||
|
|
||||
|
TTSS_Task_step(D_task_IAP): |
||||
|
if(R.status_eep_save != 0) |
||||
|
{ |
||||
|
R.status_eep_save = 0; |
||||
|
L3_reg_2_iap();//写入IAP
|
||||
|
} |
||||
|
L2_task_go_Tdelay(D_task_WEIGHT_COUNT,D_Tdelay_Msec(100)); //延时100ms
|
||||
|
|
||||
|
|
||||
|
TTSS_Task_end(); |
||||
|
|
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
@ -0,0 +1,24 @@ |
|||||
|
#include "app_task_uart0.h" |
||||
|
#include "msp_uart0.h" |
||||
|
///#include "../app/common.h"
|
||||
|
#include "app_config.h" |
||||
|
void L3_task_uart0_modbus_handler(Ts_uart_rev_ *ph4) |
||||
|
{ |
||||
|
if(ph4->ok) |
||||
|
{ |
||||
|
#if 1 |
||||
|
TS_PH4_modbus *ts_modbus = (TS_PH4_modbus *)ph4->buf; |
||||
|
//L0_uart0_sendArray(ph4->buf, 8);
|
||||
|
//L0_uart0_sendArray("abcdefgh", 8);
|
||||
|
ph4->ok = 0; |
||||
|
if(ts_modbus->slaver == R.sd.slaver_id || |
||||
|
ts_modbus->slaver == D_UART0_485_SLAVER_ID_BROADCAST) //从机
|
||||
|
{ |
||||
|
U16 acklen = L3_modbus_slaver_ack(ts_modbus,&s_uart0_ack); |
||||
|
L0_uart0_sendArray((U8*)&s_uart0_ack, acklen); |
||||
|
} |
||||
|
#endif |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
|
||||
@ -0,0 +1,11 @@ |
|||||
|
#ifndef APP_TASK_UART0_H |
||||
|
#define APP_TASK_UART0_H |
||||
|
|
||||
|
///#include "common.h"
|
||||
|
#include "../ctask/TTSS_task.h" |
||||
|
#include "../tpc/tpc_modbus.h" |
||||
|
|
||||
|
//extern void L3_task_uart0_handler(TS_Handle_PH3 *ph3);
|
||||
|
extern void L3_task_uart0_modbus_handler(Ts_uart_rev_ *ph4); |
||||
|
|
||||
|
#endif |
||||
@ -0,0 +1,536 @@ |
|||||
|
////////////////////////////////////////////////////////////////////////////
|
||||
|
///@copyright Copyright (c) 2018, 传控科技 All rights reserved.
|
||||
|
///-------------------------------------------------------------------------
|
||||
|
/// @file bsp_drv.c
|
||||
|
/// @brief bsp @ driver config
|
||||
|
///-------------------------------------------------------------------------
|
||||
|
/// @version 1.0
|
||||
|
/// @author CC
|
||||
|
/// @date 20180331
|
||||
|
/// @note cc_AS_stc02
|
||||
|
//////////////////////////////////////////////////////////////////////////////
|
||||
|
|
||||
|
#include "app_weight.h" |
||||
|
#include "app_config.h" |
||||
|
#include "debug_drv.h" |
||||
|
|
||||
|
TS_TASK_weight_ tst_weight; |
||||
|
#define D_task_WEIGHT_add 12 |
||||
|
#define D_task_WEIGHT_CAL 13 |
||||
|
#define D_task_WEIGHT_get 14 |
||||
|
#define D_task_WEIGHT_zero 15 |
||||
|
///#define D_task_WEIGHT_CAL 124
|
||||
|
|
||||
|
#define D_task_WEIGHT_out 45 |
||||
|
#define D_task_WEIGHT_Sline 11 |
||||
|
#define D_task_WEIGHT_getADC 22 |
||||
|
///#define D_task_WEIGHT_CAL 33
|
||||
|
////#define D_task_WEIGHT_Sline
|
||||
|
|
||||
|
|
||||
|
|
||||
|
void L2_task_weight_init(u8 openclose) |
||||
|
{ |
||||
|
if(openclose) |
||||
|
{ |
||||
|
|
||||
|
}else |
||||
|
{ |
||||
|
|
||||
|
|
||||
|
|
||||
|
} |
||||
|
L2_task_adc_SAinit(0,&R.sd.ADC_shiftaverage_a,&R.sd.ADC_shiftaverage_b); |
||||
|
L2_task_adc_SAinit(1,&R.sd.ADC_shiftaverage_a,&R.sd.ADC_shiftaverage_b); |
||||
|
L2_task_adc_SAinit(2,&R.sd.ADC_shiftaverage_a,&R.sd.ADC_shiftaverage_b); |
||||
|
L2_task_adc_SAinit(3,&R.sd.ADC_shiftaverage_a,&R.sd.ADC_shiftaverage_b); |
||||
|
|
||||
|
|
||||
|
|
||||
|
ts_adc_samples[0].zeroout = R.sd.zeroout; |
||||
|
ts_adc_samples[1].zeroout = R.sd.zeroout; |
||||
|
ts_adc_samples[2].zeroout = R.sd.zeroout; |
||||
|
ts_adc_samples[3].zeroout = R.sd.zeroout; |
||||
|
|
||||
|
ts_adc_samples[0].offset = R.sd.sensor[0]; |
||||
|
ts_adc_samples[1].offset = R.sd.sensor[1]; |
||||
|
ts_adc_samples[2].offset = R.sd.sensor[2]; |
||||
|
ts_adc_samples[3].offset = R.sd.sensor[3]; |
||||
|
|
||||
|
L0_waitFree_uartN(0); |
||||
|
printf("\r\n\L2_task_weight_initr\n"); |
||||
|
|
||||
|
printf("\r\n\R.sd.zeroout= %d = 0x%4x offset %d = 0x%4x\r\n", R.sd.zeroout, R.sd.zeroout,ts_adc_samples[0].offset,ts_adc_samples[0].offset); |
||||
|
printf("\r\nR.sd.zeroout= %d = 0x%4x offset %d = 0x%4x\r\n", R.sd.zeroout, R.sd.zeroout,ts_adc_samples[1].offset,ts_adc_samples[1].offset); |
||||
|
printf("\r\nR.sd.zeroout= %d = 0x%4x offset %d = 0x%4x\r\n", R.sd.zeroout, R.sd.zeroout,ts_adc_samples[2].offset,ts_adc_samples[2].offset); |
||||
|
printf("\r\nR.sd.zeroout= %d = 0x%4x offset %d = 0x%4x\r\n", R.sd.zeroout, R.sd.zeroout,ts_adc_samples[3].offset,ts_adc_samples[3].offset); |
||||
|
|
||||
|
} |
||||
|
|
||||
|
void L3_task_weight_init(void) |
||||
|
{ |
||||
|
//显示任务初始化
|
||||
|
L1_task_init(&tst_weight.task); |
||||
|
L3_task_s_go(tst_weight,D_task_init); |
||||
|
L2_task_weight_init(0); |
||||
|
} |
||||
|
|
||||
|
#define D_debug_ch D_Wch2 |
||||
|
void L3_task_weight_handler6666(TS_TASK_weight_ *s) |
||||
|
{ |
||||
|
|
||||
|
L2_task_adc_sample(&ts_adc_samples[D_Wch1]); |
||||
|
|
||||
|
//////// /// L2_task_adc_sample(&ts_adc_samples[D_Wch2]);
|
||||
|
L2_task_adc_sample(&ts_adc_samples[D_Wch3]); |
||||
|
L2_task_adc_sample(&ts_adc_samples[D_Wch4]); |
||||
|
|
||||
|
L2_task_adc_sample(&ts_adc_samples[D_debug_ch]); |
||||
|
|
||||
|
if(1 == ts_adc_samples[D_debug_ch].ok) |
||||
|
{ |
||||
|
ts_adc_samples[D_debug_ch].ok = 0; |
||||
|
|
||||
|
L0_uart0_ulhex(ts_adc_samples[D_debug_ch].out0);L0_uart0_uc(' '); |
||||
|
L0_uart0_ushex(ts_adc_samples[D_debug_ch].out1a );L0_uart0_uc(' '); |
||||
|
L0_uart0_ushex(ts_adc_samples[D_debug_ch].out1);L0_uart0_uc(' '); |
||||
|
|
||||
|
L0_uart0_0d0a(); |
||||
|
} |
||||
|
} |
||||
|
void L3_task_weight_handler777(TS_TASK_weight_ *s) |
||||
|
{ |
||||
|
L2_task_adc_sample(&ts_adc_samples[D_Wch1]); |
||||
|
|
||||
|
L2_task_adc_sample(&ts_adc_samples[D_Wch2]); |
||||
|
L2_task_adc_sample(&ts_adc_samples[D_Wch3]); |
||||
|
L2_task_adc_sample(&ts_adc_samples[D_Wch4]); |
||||
|
|
||||
|
if(1 == ts_adc_samples[D_debug_ch].ok) |
||||
|
{ |
||||
|
ts_adc_samples[D_debug_ch].ok = 0; |
||||
|
/*
|
||||
|
L0_uart0_ulhex(ts_adc_samples[D_Wch1].out0);L0_uart0_uc(' '); |
||||
|
L0_uart0_ulhex(ts_adc_samples[D_Wch2].out0);L0_uart0_uc(' '); |
||||
|
L0_uart0_ulhex(ts_adc_samples[D_Wch3].out0);L0_uart0_uc(' '); |
||||
|
L0_uart0_ulhex(ts_adc_samples[D_Wch4].out0);L0_uart0_uc(' '); |
||||
|
|
||||
|
L0_uart0_ushex(ts_adc_samples[D_Wch1].out1a );L0_uart0_uc(' '); |
||||
|
L0_uart0_ushex(ts_adc_samples[D_Wch2].out1a );L0_uart0_uc(' '); |
||||
|
L0_uart0_ushex(ts_adc_samples[D_Wch3].out1a );L0_uart0_uc(' '); |
||||
|
L0_uart0_ushex(ts_adc_samples[D_Wch4].out1a );///L0_uart0_uc(' ');
|
||||
|
|
||||
|
|
||||
|
L0_uart0_0d0a(); |
||||
|
****/ |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
///L3_task_weight_handler(&tst_weight);
|
||||
|
void L3_task_weight_handler(TS_TASK_weight_ *s) |
||||
|
{ |
||||
|
L2_task_adc_sample(&ts_adc_samples[D_Wch1]); |
||||
|
|
||||
|
L2_task_adc_sample(&ts_adc_samples[D_Wch2]); |
||||
|
L2_task_adc_sample(&ts_adc_samples[D_Wch3]); |
||||
|
L2_task_adc_sample(&ts_adc_samples[D_Wch4]); |
||||
|
|
||||
|
TTSS_Task_init(): |
||||
|
L0_waitFree_uartN(0); |
||||
|
printf("\r\nR.sd.zeroout= %d = 0x%4x offset %d = 0x%4x", R.sd.zeroout, R.sd.zeroout,ts_adc_samples[0].offset,ts_adc_samples[0].offset); |
||||
|
printf("\r\nR.sd.zeroout= %d = 0x%4x offset %d = 0x%4x", R.sd.zeroout, R.sd.zeroout,ts_adc_samples[1].offset,ts_adc_samples[1].offset); |
||||
|
printf("\r\nR.sd.zeroout= %d = 0x%4x offset %d = 0x%4x", R.sd.zeroout, R.sd.zeroout,ts_adc_samples[2].offset,ts_adc_samples[2].offset); |
||||
|
printf("\r\nR.sd.zeroout= %d = 0x%4x offset %d = 0x%4x", R.sd.zeroout, R.sd.zeroout,ts_adc_samples[3].offset,ts_adc_samples[3].offset); |
||||
|
|
||||
|
L0_uart0_uc('4'); |
||||
|
s->slow = 0; |
||||
|
s->zero = 0; |
||||
|
|
||||
|
L2_task_go(D_task_WEIGHT_get); |
||||
|
TTSS_Task_step(D_task_WEIGHT_get): |
||||
|
if(1 == ts_adc_samples[D_Wch4].ok) |
||||
|
{//
|
||||
|
ts_adc_samples[0].ok = 0; |
||||
|
ts_adc_samples[1].ok = 0; |
||||
|
ts_adc_samples[2].ok = 0; |
||||
|
ts_adc_samples[3].ok = 0; |
||||
|
s->slow ++; |
||||
|
// L0_uart0_uc('%');
|
||||
|
L2_task_go(D_task_WEIGHT_Sline); |
||||
|
} |
||||
|
TTSS_Task_step(D_task_WEIGHT_Sline): |
||||
|
if (s->slow >= 1)////采样减速
|
||||
|
{s->slow = 0; |
||||
|
///调用asp——adc中的输出 out3
|
||||
|
/************/ |
||||
|
ts_adc_samples[0].out5 = ts_adc_samples[0].ts_SAb.out4; |
||||
|
ts_adc_samples[1].out5 = ts_adc_samples[1].ts_SAb.out4; |
||||
|
ts_adc_samples[2].out5 = ts_adc_samples[2].ts_SAb.out4; |
||||
|
ts_adc_samples[3].out5 = ts_adc_samples[3].ts_SAb.out4; |
||||
|
|
||||
|
L2_task_go(D_task_WEIGHT_getADC); |
||||
|
}else |
||||
|
{ |
||||
|
L2_task_go(D_task_WEIGHT_get); |
||||
|
} |
||||
|
//L2_task_go(D_task_WEIGHT_getADC);
|
||||
|
TTSS_Task_step(D_task_WEIGHT_getADC): |
||||
|
////四个传感器相加后平均
|
||||
|
tst_weight.sum32 = ts_adc_samples[0].out5; |
||||
|
tst_weight.sum32 += ts_adc_samples[1].out5; |
||||
|
tst_weight.sum32 += ts_adc_samples[2].out5; |
||||
|
tst_weight.sum32 += ts_adc_samples[3].out5; |
||||
|
|
||||
|
|
||||
|
tst_weight.sum32b = ts_adc_samples[0].out1a; |
||||
|
tst_weight.sum32b += ts_adc_samples[1].out1a; |
||||
|
tst_weight.sum32b += ts_adc_samples[2].out1a; |
||||
|
tst_weight.sum32b += ts_adc_samples[3].out1a; |
||||
|
|
||||
|
|
||||
|
|
||||
|
tst_weight.out6 = tst_weight.sum32 >>2; |
||||
|
|
||||
|
L0_uart0_ushex((vU16)tst_weight.adc32); L0_uart0_uc(' '); |
||||
|
L2_task_go(D_task_WEIGHT_CAL); |
||||
|
TTSS_Task_step(D_task_WEIGHT_CAL): |
||||
|
|
||||
|
tst_weight.adc32 = tst_weight.out6; |
||||
|
L3_task_weight_cal(); |
||||
|
/// L0_uart0_ushex(tst_weight.woutx10);
|
||||
|
|
||||
|
#if 0 |
||||
|
L0_uart0_ulhex(ts_adc_samples[0].out1a);L0_uart0_uc(' '); |
||||
|
L0_uart0_ulhex(ts_adc_samples[1].out1a);L0_uart0_uc(' '); |
||||
|
L0_uart0_ulhex(ts_adc_samples[2].out1a);L0_uart0_uc(' '); |
||||
|
L0_uart0_ulhex(ts_adc_samples[3].out1a);L0_uart0_uc(' '); |
||||
|
|
||||
|
|
||||
|
#else |
||||
|
L0_uart0_ushex(ts_adc_samples[0].out1);L0_uart0_uc(' '); |
||||
|
L0_uart0_ushex(ts_adc_samples[1].out1);L0_uart0_uc(' '); |
||||
|
L0_uart0_ushex(ts_adc_samples[2].out1);L0_uart0_uc(' '); |
||||
|
L0_uart0_ushex(ts_adc_samples[3].out1);L0_uart0_uc(' '); |
||||
|
|
||||
|
L0_uart0_ushex(ts_adc_samples[0].out2);L0_uart0_uc(' '); |
||||
|
L0_uart0_ushex(ts_adc_samples[1].out2);L0_uart0_uc(' '); |
||||
|
L0_uart0_ushex(ts_adc_samples[2].out2);L0_uart0_uc(' '); |
||||
|
L0_uart0_ushex(ts_adc_samples[3].out2);L0_uart0_uc(' '); |
||||
|
|
||||
|
/// L0_uart0_ushex(tst_weight.woutx10);L0_uart0_uc(' ');
|
||||
|
|
||||
|
|
||||
|
#endif |
||||
|
L0_waitFree_uartN(0);///混搭使用printf的时候必须加上
|
||||
|
|
||||
|
//// printf("\r\ntst_weight.t32a\r\n %d kg = 0x%4x\r\n", (vU16)tst_weight.t32a,(vU16)tst_weight.t32a);
|
||||
|
printf(" (%d)0x%4x\r\n", tst_weight.woutx10,tst_weight.woutx10); |
||||
|
|
||||
|
/// L0_uart0_0d0a();
|
||||
|
L2_task_go(D_task_WEIGHT_out); |
||||
|
TTSS_Task_step(D_task_WEIGHT_out): |
||||
|
|
||||
|
L2_task_go(D_task_WEIGHT_get); |
||||
|
TTSS_Task_step(D_task_WEIGHT_zero): |
||||
|
|
||||
|
|
||||
|
L2_task_go(D_task_WEIGHT_get); |
||||
|
TTSS_Task_end(); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
void L3_task_weight_cal(void) |
||||
|
{ |
||||
|
if(tst_weight.adc32 <= (vU32)R.sd.zerows[1].adc) |
||||
|
{ |
||||
|
if(tst_weight.adc32 <= (vU32)R.sd.zerows[0].adc ) |
||||
|
{ |
||||
|
tst_weight.adc32 = (vU32)R.sd.zerows[0].adc; |
||||
|
} |
||||
|
///0-0-40KG
|
||||
|
tst_weight.t32a = (tst_weight.adc32-(vU32)R.sd.zerows[0].adc);////有可能<0
|
||||
|
tst_weight.t32b = (vU32)(R.sd.zerows[1].adc-R.sd.zerows[0].adc); |
||||
|
tst_weight.t32a *= (vU32)(R.sd.zerows[1].kg - R.sd.zerows[0].kg); |
||||
|
tst_weight.t32a /= tst_weight.t32b; |
||||
|
|
||||
|
}else |
||||
|
{ ///40KG 80KG
|
||||
|
tst_weight.t32a = (vU32)(tst_weight.adc32-R.sd.zerows[1].adc);////有可能大于b
|
||||
|
tst_weight.t32b = (vU32)(R.sd.zerows[2].adc-R.sd.zerows[1].adc); |
||||
|
tst_weight.t32a *= (vU32)(R.sd.zerows[2].kg-R.sd.zerows[1].kg) ; |
||||
|
tst_weight.t32a /= tst_weight.t32b; |
||||
|
tst_weight.t32a += (vU32)R.sd.zerows[1].kg; |
||||
|
|
||||
|
} |
||||
|
tst_weight.woutx10 = (vU16)tst_weight.t32a; |
||||
|
} |
||||
|
void L3_adc_zero(void) |
||||
|
{ |
||||
|
L3_out_zero(0); |
||||
|
L3_out_zero(1); |
||||
|
L3_out_zero(2); |
||||
|
L3_out_zero(3); |
||||
|
|
||||
|
// printf("\r\niapData.zeroout= %d = 0x%4x\r\n", iapData.zeroout, iapData.zeroout);
|
||||
|
// printf("\r\nR.sd.zeroout= %d = 0x%4x offset %d = 0x%4x\r\n", R.sd.zeroout, R.sd.zeroout,ts_adc_samples[0].offset,ts_adc_samples[0].offset);
|
||||
|
|
||||
|
R.sd.sensor[0] = ts_adc_samples[0].offset; |
||||
|
R.sd.sensor[1] = ts_adc_samples[1].offset; |
||||
|
R.sd.sensor[2] = ts_adc_samples[2].offset; |
||||
|
R.sd.sensor[3] = ts_adc_samples[3].offset; |
||||
|
|
||||
|
iapData.sensor[0] = R.sd.sensor[0]; |
||||
|
iapData.sensor[1] = R.sd.sensor[1]; |
||||
|
iapData.sensor[2] = R.sd.sensor[2]; |
||||
|
iapData.sensor[3] = R.sd.sensor[3]; |
||||
|
L0_waitFree_uartN(0); |
||||
|
printf("\r\nR.sd.sensor 0x%4x,0x%4x,0x%4x,0x%4x,\r\n",R.sd.sensor[0],R.sd.sensor[1],R.sd.sensor[2],R.sd.sensor[3]); |
||||
|
|
||||
|
L4_reg_2_iap();///写入iap
|
||||
|
L4_iap_2_reg();///读取出来验证
|
||||
|
} |
||||
|
|
||||
|
#if 0 |
||||
|
void L3_task_weight_set(Ts_uart_rev_ *ph4) |
||||
|
{ |
||||
|
TS_P_debug *td; |
||||
|
if(ph4->debugok) |
||||
|
{ ph4->debugok = 0; |
||||
|
td = (TS_P_debug *)ph4->buf; |
||||
|
|
||||
|
/// TS_PH4_modbus *ts_modbus = (TS_PH4_modbus *)ph4->buf;
|
||||
|
|
||||
|
L0_uartN_uchexArray(0,ph4->buf, 8); |
||||
|
if(0xfd == td->filter) |
||||
|
{ |
||||
|
if(0x04 == td->R1)///设置四个传感器的清零
|
||||
|
{ //// fd 04 33 44 55
|
||||
|
L0_uart0_sendstr("\r\n 4sensor zero \r\n"); |
||||
|
L3_adc_zero(); |
||||
|
}else if(0x01 == td->R1)///设置重量的清零
|
||||
|
{ //// fd 04 33 44 55
|
||||
|
L0_uart0_sendstr("\r\n--weight zero-- \r\na b= "); |
||||
|
|
||||
|
}else if(0x02 == td->R1)///读取
|
||||
|
{ |
||||
|
if(0x00 == td->R2) |
||||
|
{//// fd 02 00 44 55
|
||||
|
L0_uart0_sendstr("\r\n--read iapData-- \r\n"); |
||||
|
L4_print_iap(&iapData); |
||||
|
}else |
||||
|
{//// fd 02 33 44 55
|
||||
|
L0_uart0_sendstr("\r\n--read R.sd-- \r\n"); |
||||
|
L4_print_iap(&R.sd); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
else |
||||
|
{ |
||||
|
L0_uart0_sendstr("\r\n command error \r\n"); |
||||
|
|
||||
|
} |
||||
|
} |
||||
|
else if(0xf5 == td->filter) |
||||
|
{///设置重量
|
||||
|
if(td->R1 < 3)///
|
||||
|
{ |
||||
|
//// R1 R2 R3
|
||||
|
//// f5 00 33 44 55 把当前的adc的值作为第R1个校准点的值
|
||||
|
R.sd.zerows[td->R1].adc = (vU16)tst_weight.out6; |
||||
|
|
||||
|
Lc_buf_copy_uc((u8 *)&R.sd.factory_ws,(u8 *)&R.sd.zerows,12); |
||||
|
L4_reg_2_iap();///写入iap
|
||||
|
L4_iap_2_reg();///读取出来验证
|
||||
|
}else |
||||
|
{ |
||||
|
|
||||
|
} |
||||
|
L0_waitFree_uartN(0); |
||||
|
printf("\r\n set[ %d].adc = 0x%04x\r\n",(int)td->R1, (vU16)tst_weight.out6); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
else if(0xf6 == td->filter) |
||||
|
{///设置砝码
|
||||
|
if(td->R1 < 3)///
|
||||
|
{ |
||||
|
//// R1 R2 R3
|
||||
|
//// f5 00 33 44 55 把当前第R1个校准曲线的点的kg的值 0x3344
|
||||
|
R.sd.zerows[td->R1].kg = D_2uc_u16(R2,R3); |
||||
|
|
||||
|
Lc_buf_copy_uc((u8 *)&R.sd.factory_ws,(u8 *)&R.sd.zerows,12); |
||||
|
L4_reg_2_iap();///写入iap
|
||||
|
L4_iap_2_reg();///读取出来验证
|
||||
|
}else |
||||
|
{ |
||||
|
|
||||
|
} |
||||
|
L0_waitFree_uartN(0); |
||||
|
printf("\r\nset [ %d],Kg = 0x%04x\r\n",(int)td->R1, R.sd.zerows[td->R1].kg ); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
else |
||||
|
{ |
||||
|
|
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
#endif |
||||
|
|
||||
|
|
||||
|
void L3_weight_setPara(u8 filter) |
||||
|
{ |
||||
|
|
||||
|
|
||||
|
|
||||
|
if(filter == Ts_debug.td->filter) |
||||
|
{ |
||||
|
L0_uart0_uc("A"); |
||||
|
L0_uart0_0d0a(); |
||||
|
|
||||
|
|
||||
|
if(0x01 == Ts_debug.td->ocr) |
||||
|
{ |
||||
|
if(0x04 == Ts_debug.td->R1)///设置四个传感器的清零
|
||||
|
{ //// fd 04 33 44 01
|
||||
|
L0_uart0_sendstr("\r\n 4sensor zero \r\n"); |
||||
|
L3_adc_zero(); |
||||
|
}else if(0x01 == Ts_debug.td->R1)///设置重量的清零
|
||||
|
{ //// fd 01 33 44 01
|
||||
|
L0_uart0_sendstr("\r\n--weight zero-- \r\na b= "); |
||||
|
|
||||
|
}else if(0x02 == Ts_debug.td->R1)///读取
|
||||
|
{ |
||||
|
if(0x00 == Ts_debug.td->R2) |
||||
|
{//// fd 02 00 44 01
|
||||
|
L0_uart0_sendstr("\r\n--read iapData-- \r\n"); |
||||
|
L4_print_iap(&iapData); |
||||
|
}else |
||||
|
{//// fd 02 33 44 01
|
||||
|
L0_uart0_sendstr("\r\n--read R.sd-- \r\n"); |
||||
|
L4_print_iap(&R.sd); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
else |
||||
|
{ |
||||
|
L0_uart0_sendstr("\r\n command error \r\n"); |
||||
|
|
||||
|
} |
||||
|
} |
||||
|
else if(0x02 == Ts_debug.td->ocr) |
||||
|
{///设置重量
|
||||
|
if(Ts_debug.td->R1 < 3)///
|
||||
|
{ |
||||
|
//// R1 R2 R3
|
||||
|
//// fd 00 33 44 02 把当前的adc的值作为第R1个校准点的值
|
||||
|
R.sd.zerows[Ts_debug.td->R1].adc = (vU16)tst_weight.out6; |
||||
|
|
||||
|
Lc_buf_copy_uc((u8 *)&R.sd.factory_ws,(u8 *)&R.sd.zerows,12); |
||||
|
L4_reg_2_iap();///写入iap
|
||||
|
L4_iap_2_reg();///读取出来验证
|
||||
|
}else |
||||
|
{ |
||||
|
|
||||
|
} |
||||
|
L0_waitFree_uartN(0); |
||||
|
printf("\r\n set[ %d].adc = 0x%04x\r\n",(int)Ts_debug.td->R1, (vU16)tst_weight.out6); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
else if(0x03 == Ts_debug.td->ocr) |
||||
|
{///设置砝码
|
||||
|
if(Ts_debug.td->R1 < 3)///
|
||||
|
{ //200
|
||||
|
//// R1 R2 R3
|
||||
|
//// fd 00 33 44 03 把当前第R1个校准曲线的点的kg的值 0x3344
|
||||
|
R.sd.zerows[Ts_debug.td->R1].kg = D_2uc_u16(Ts_debug.td->R2,Ts_debug.td->R3); |
||||
|
Lc_buf_copy_uc((u8 *)&R.sd.factory_ws,(u8 *)&R.sd.zerows,12); |
||||
|
L4_reg_2_iap();///写入iap
|
||||
|
L4_iap_2_reg();///读取出来验证 20 14
|
||||
|
}else |
||||
|
{ |
||||
|
|
||||
|
} |
||||
|
L0_waitFree_uartN(0); |
||||
|
printf("\r\nset [ %d],Kg = 0x%04x\r\n",(int)Ts_debug.td->R1, R.sd.zerows[Ts_debug.td->R1].kg ); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
else |
||||
|
{ |
||||
|
|
||||
|
} |
||||
|
|
||||
|
} |
||||
|
} |
||||
|
|
||||
|
#ifdef doc4324 |
||||
|
|
||||
|
--print_reg-- |
||||
|
a b= 02 05 |
||||
|
factory_ws |
||||
|
0 kg = 0x1235 |
||||
|
200 kg = 0x5678 |
||||
|
400 kg = 0x789a |
||||
|
|
||||
|
zerows |
||||
|
0 kg = 0x1234 |
||||
|
200 kg = 0x5678 |
||||
|
400 kg = 0x789b |
||||
|
|
||||
|
s->zeroout= 8049 = 0x1f71 |
||||
|
|
||||
|
s->sensor 0x2198 0x2b58 0x ad3 0x21e6 |
||||
|
|
||||
|
--read -- |
||||
|
--print_reg-- |
||||
|
a b= 02 05 |
||||
|
factory_ws |
||||
|
0 kg = 0x1235 |
||||
|
200 kg = 0x5678 |
||||
|
400 kg = 0x789a |
||||
|
|
||||
|
zerows |
||||
|
0 kg = 0x1234 |
||||
|
200 kg = 0x5678 |
||||
|
400 kg = 0x789b |
||||
|
|
||||
|
s->zeroout= 8049 = 0x1f71 |
||||
|
|
||||
|
s->sensor 0x2198 0x2b58 0x ad3 0x21e6 |
||||
|
|
||||
|
--read R.sd-- |
||||
|
|
||||
|
|
||||
|
|
||||
|
iapData.sensor 0x263b 0x32ac 0x1465 0x2e99 |
||||
|
&e2p write success2800 01 00 02 00 03 00 04 00 00 12 35 00 C8 56 78 01 90 78 9A 00 00 12 34 00 C8 56 78 01 90 78 9B 00 7B FF 85 1F 71 02 05 |
||||
|
|
||||
|
a b= 02 05 |
||||
|
factory_ws |
||||
|
0 kg = 0x1235 |
||||
|
200 kg = 0x5678 |
||||
|
400 kg = 0x789a |
||||
|
|
||||
|
zerows |
||||
|
0 kg = 0x1234 |
||||
|
200 kg = 0x5678 |
||||
|
400 kg = 0x789b |
||||
|
|
||||
|
iapData.zeroout= 8049 = 0x1f71 |
||||
|
|
||||
|
R.sd.zeroout= 8049 = 0x1f71 offset 9787 = 0x263b |
||||
|
|
||||
|
iapData.sensor 0x 1 0x 2 0x 3 0x 4 |
||||
|
e2p read success |
||||
|
17FC 1F6A 1F4D 1F39 1D7B 0021 |
||||
|
1F19 1F51 1F0C 1EEB 1F18 0025 |
||||
|
1EEA 1F3A 1ECD 1EB3 1EE9 0025 |
||||
|
1EA7 1F25 1E87 1E6F 1EB0 0024 |
||||
|
|
||||
|
#endif |
||||
|
|
||||
|
|
||||
@ -0,0 +1,151 @@ |
|||||
|
////////////////////////////////////////////////////////////////////////////
|
||||
|
///@copyright Copyright (c) 2018, 传控科技 All rights reserved.
|
||||
|
///-------------------------------------------------------------------------
|
||||
|
/// @file bsp_drv.h
|
||||
|
/// @brief bsp @ driver config
|
||||
|
///-------------------------------------------------------------------------
|
||||
|
/// @version 1.0
|
||||
|
/// @author CC
|
||||
|
/// @date 20220109
|
||||
|
/// @note cc_AS_stc02
|
||||
|
|
||||
|
|
||||
|
/*******************
|
||||
|
xxx.x |
||||
|
Layer4: send/show |
||||
|
|
||||
|
write to buffer -->send |
||||
|
|
||||
|
----------------------------- |
||||
|
|
||||
|
weight = cal(adc32) |
||||
|
|
||||
|
Layer3: app weight |
||||
|
|
||||
|
|
||||
|
tst_weight.adc32 = ts_adc_samples[0].out5; |
||||
|
选择曲线 line |
||||
|
|
||||
|
单路到多路 |
||||
|
----------------------------- |
||||
|
out3 滤波啊 |
||||
|
out2 滤波啊 |
||||
|
|
||||
|
Layer2: asp asp_adc |
||||
|
|
||||
|
out1 读取adc |
||||
|
|
||||
|
------------------------- |
||||
|
void L0_ADS1231_readCH2(vtype ch,vU16 *d) |
||||
|
|
||||
|
Layer1: bsp: bsp_cs1232 最底层的adc的采样 |
||||
|
|
||||
|
*******************/ |
||||
|
|
||||
|
|
||||
|
//////////////////////////////////////////////////////////////////////////////
|
||||
|
|
||||
|
#ifndef _APP_WEIGHT_H |
||||
|
#define _APP_WEIGHT_H |
||||
|
|
||||
|
#include "TTSS_task.h" |
||||
|
#include "c_lib.h" |
||||
|
#include "asp_schain.h" |
||||
|
#include "tpc_debug.h" |
||||
|
|
||||
|
#include "../bsp/bsp_config.h" |
||||
|
#include "msp_uart0.h" |
||||
|
#include "../bsp/bsp_cs1232.h" |
||||
|
/////水一般是18-19升,再加上桶,就是大约20公斤
|
||||
|
|
||||
|
|
||||
|
typedef struct |
||||
|
{ |
||||
|
vU16 kg; |
||||
|
vU16 adc; ///kg 对应的adc的采样值
|
||||
|
|
||||
|
}ts_weight_sheet_;///8Bytes
|
||||
|
|
||||
|
typedef struct |
||||
|
{ |
||||
|
TS_task task; |
||||
|
vS32 rough_weight; |
||||
|
vU32 adc32; |
||||
|
vU32 sum32; |
||||
|
vU32 sum32b; |
||||
|
vU32 out6; |
||||
|
vU32 t32a,t32b; |
||||
|
/// ts_weight_sheet_
|
||||
|
u8 slow; |
||||
|
u8 zero; |
||||
|
u8 pp; |
||||
|
vU16 woutx10;///计算出来的重量
|
||||
|
ts_weight_sheet_ ws[3]; |
||||
|
|
||||
|
}TS_TASK_weight_; |
||||
|
extern TS_TASK_weight_ tst_weight; |
||||
|
|
||||
|
|
||||
|
/*******
|
||||
|
^ |
||||
|
| |
||||
|
| o |
||||
|
| | |
||||
|
| o | |
||||
|
| | | |
||||
|
o | | |
||||
|
| | | |
||||
|
|____|_____|____________> |
||||
|
|
||||
|
0 40 80 |
||||
|
[0] [1] [2] |
||||
|
20KG 40kg |
||||
|
190 290 |
||||
|
19kg 29kg |
||||
|
|
||||
|
|
||||
|
上电时候 ,如果adc在一定范围内 自动清零 |
||||
|
出厂:0 40 80 |
||||
|
上电 0+-% 40+-% 80+-% |
||||
|
|
||||
|
/// ts_weight_sheet_ factory_ws[3]; ///出厂的设置,发布出厂指令后更新 由上位机命令更改,实时保存
|
||||
|
0,0x1235, |
||||
|
D_20kg,0x5678, |
||||
|
D_40kg,0x789a, |
||||
|
/// ts_weight_sheet_ zerows[3]; ///手工清零后的参数, 没有清零或者出错恢复到和出厂设置一样,需要实时保存
|
||||
|
0,0x1234, |
||||
|
D_20kg,0x5678, |
||||
|
D_40kg,0x789b, |
||||
|
|
||||
|
factory_ws |
||||
|
0 kg = 0x1235 |
||||
|
190 kg = 0x5678 |
||||
|
290 kg = 0x789a |
||||
|
|
||||
|
zerows |
||||
|
0 kg = 0x1234 |
||||
|
190 kg = 0x5678 |
||||
|
290 kg = 0x789b |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
**/ |
||||
|
|
||||
|
|
||||
|
////
|
||||
|
extern void L3_task_weight_cal(void); |
||||
|
extern void L3_task_weight_init(void); |
||||
|
extern void L3_task_weight_handler(TS_TASK_weight_ *s); |
||||
|
///extern void L3_task_weight_set(Ts_uart_rev_ *ph4);
|
||||
|
|
||||
|
#define D_cmd_filter 0xfd |
||||
|
|
||||
|
extern void L3_weight_setPara(u8 filter); |
||||
|
|
||||
|
#define D_get_weight() tst_weight.woutx10 |
||||
|
|
||||
|
|
||||
|
|
||||
|
#endif // #ifndef _APP_TASK_ADC_H
|
||||
|
|
||||
@ -0,0 +1,105 @@ |
|||||
|
////////////////////////////////////////////////////////////////////////////
|
||||
|
///@copyright Copyright (c) 2018, 传控科技 All rights reserved.
|
||||
|
///-------------------------------------------------------------------------
|
||||
|
/// @file bsp_drv.c
|
||||
|
/// @brief bsp @ driver config
|
||||
|
///-------------------------------------------------------------------------
|
||||
|
/// @version 1.0
|
||||
|
/// @author CC
|
||||
|
/// @date 20180331
|
||||
|
/// @note cc_AS_stc02
|
||||
|
//////////////////////////////////////////////////////////////////////////////
|
||||
|
/*******************
|
||||
|
1.重量计算--上电清零后的曲线 |
||||
|
2.重量校准--使用标准重量更新预设AD值 |
||||
|
3.清零--两组曲线 |
||||
|
(1)出厂曲线--预设AD值构成的曲线 |
||||
|
(2)上电清零后的曲线--根据当前曲线与预设的曲线的差值去调整预设曲线后得到的曲线 |
||||
|
|
||||
|
*******************/ |
||||
|
|
||||
|
|
||||
|
#include "app_weight.h" |
||||
|
|
||||
|
#include "app_config.h" |
||||
|
|
||||
|
#include "app_weightzero.h" |
||||
|
////#include "common.h"
|
||||
|
|
||||
|
TS_TASK_weight_zero tst_weight_zero; |
||||
|
|
||||
|
|
||||
|
void L3_task_weight_zero_init(void) |
||||
|
{ |
||||
|
//显示任务初始化
|
||||
|
L1_task_init(&tst_weight_zero.task); |
||||
|
L3_task_s_go(tst_weight_zero,D_task_init); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
#define D_task_weight_zero 16 |
||||
|
#define D_task_WEIGHT_ZERO 15 |
||||
|
#define D_task_WEIGHT_CAL 10 |
||||
|
#define D_task_WEIGHT_get 2 |
||||
|
|
||||
|
void L3_task_weight_zero_handler(TS_TASK_weight_zero *s) |
||||
|
{ |
||||
|
TTSS_Task_init(): |
||||
|
|
||||
|
printf("\r\n weight_zero\r\n"); |
||||
|
L2_task_go_Tdelay(D_task_WEIGHT_get,300);//延时等待重量稳定
|
||||
|
|
||||
|
|
||||
|
TTSS_Task_step(D_task_WEIGHT_get): |
||||
|
s->zero_weight = D_get_weight(); //获取当前重量
|
||||
|
/// R.total_zweight = s->zero_weight - tst_weight.ws[0].kg; //当前差值 = 当前重量 - 预设0点重量
|
||||
|
|
||||
|
L2_task_go(D_task_weight_zero); |
||||
|
|
||||
|
TTSS_Task_step(D_task_weight_zero): |
||||
|
///if(R.total_zweight <= R.p.zero_weight) //当前差值在规定范围之内
|
||||
|
if(0) |
||||
|
{ |
||||
|
L2_task_go(D_task_WEIGHT_CAL); |
||||
|
} |
||||
|
else |
||||
|
{ |
||||
|
L2_task_go(D_task_WEIGHT_ZERO); |
||||
|
} |
||||
|
|
||||
|
TTSS_Task_step(D_task_WEIGHT_CAL)://计算差值更新曲线
|
||||
|
|
||||
|
printf("\r\n weight_zero\r\n"); |
||||
|
/// s->weight_dval = tst_weight.adc32 - tst_weight.ws[0].adc; //AD差值
|
||||
|
tst_weight.ws[0].kg = 0; |
||||
|
tst_weight.ws[0].adc = tst_weight.adc32; //0点AD值=当前AD值
|
||||
|
if(s->weight_dval >= 0) //曲线上移
|
||||
|
{ |
||||
|
tst_weight.ws[1].adc += s->weight_dval; //20KG
|
||||
|
tst_weight.ws[2].adc += s->weight_dval; //72KG
|
||||
|
} |
||||
|
else //曲线下移
|
||||
|
{ |
||||
|
tst_weight.ws[1].adc -= s->weight_dval; |
||||
|
tst_weight.ws[2].adc -= s->weight_dval; |
||||
|
} |
||||
|
L2_task_go(D_task_WEIGHT_ZERO); |
||||
|
|
||||
|
TTSS_Task_step(D_task_WEIGHT_ZERO): //手动清零
|
||||
|
/// if(R.zero != 0) //外部消息
|
||||
|
{ |
||||
|
// R.zero = 0;
|
||||
|
// st_weight.ws[0].kg = s->zero_weight; //预设重量 = 当前重量
|
||||
|
} |
||||
|
L2_task_go(D_task_WEIGHT_ZERO); |
||||
|
|
||||
|
TTSS_Task_end(); |
||||
|
|
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
@ -0,0 +1,106 @@ |
|||||
|
////////////////////////////////////////////////////////////////////////////
|
||||
|
///@copyright Copyright (c) 2018, 传控科技 All rights reserved.
|
||||
|
///-------------------------------------------------------------------------
|
||||
|
/// @file bsp_drv.h
|
||||
|
/// @brief bsp @ driver config
|
||||
|
///-------------------------------------------------------------------------
|
||||
|
/// @version 1.0
|
||||
|
/// @author CC
|
||||
|
/// @date 20220109
|
||||
|
/// @note cc_AS_stc02
|
||||
|
|
||||
|
|
||||
|
/*******************
|
||||
|
|
||||
|
|
||||
|
app: |
||||
|
weight zero |
||||
|
零点校准: 上电和手工 |
||||
|
|
||||
|
----------------------------- |
||||
|
|
||||
|
xxx.x |
||||
|
Layer4: send/show |
||||
|
|
||||
|
write to buffer -->send |
||||
|
|
||||
|
----------------------------- |
||||
|
|
||||
|
weight = cal(adc32) |
||||
|
|
||||
|
Layer3: app weight |
||||
|
|
||||
|
|
||||
|
tst_weight.adc32 = ts_adc_samples[0].out5; |
||||
|
选择曲线 line |
||||
|
|
||||
|
单路到多路 |
||||
|
----------------------------- |
||||
|
out3 滤波啊 |
||||
|
out2 滤波啊 |
||||
|
|
||||
|
Layer2: asp asp_adc |
||||
|
|
||||
|
out1 读取adc |
||||
|
|
||||
|
------------------------- |
||||
|
void L0_ADS1231_readCH2(vtype ch,vU16 *d) |
||||
|
|
||||
|
Layer1: bsp: bsp_cs1232 最底层的adc的采样 |
||||
|
|
||||
|
*******************/ |
||||
|
|
||||
|
|
||||
|
//////////////////////////////////////////////////////////////////////////////
|
||||
|
|
||||
|
#ifndef _app_weightzero_H |
||||
|
#define _app_weightzero_H |
||||
|
|
||||
|
#include "TTSS_task.h" |
||||
|
#include "c_lib.h" |
||||
|
#include "../bsp/bsp_config.h" |
||||
|
#include "msp_uart0.h" |
||||
|
#include "../bsp/bsp_cs1232.h" |
||||
|
/////水一般是18-19升,再加上桶,就是大约20公斤
|
||||
|
|
||||
|
|
||||
|
/*******
|
||||
|
^ |
||||
|
| |
||||
|
| o |
||||
|
| | |
||||
|
| o | |
||||
|
- - | | |
||||
|
o | | |
||||
|
| | | |
||||
|
|____|_____|____________> |
||||
|
|
||||
|
0 40 80 |
||||
|
[0] [1] [2] |
||||
|
|
||||
|
上电时候 ,如果adc在一定范围内 自动清零 |
||||
|
出厂:0 40 80 |
||||
|
上电 0+-% 40+-% 80+-% |
||||
|
|
||||
|
**/ |
||||
|
|
||||
|
|
||||
|
typedef struct |
||||
|
{ |
||||
|
TS_task task; |
||||
|
vS32 rough_weight; |
||||
|
vU32 zero_weight; |
||||
|
vU32 adc32; |
||||
|
vU32 t32a,t32b; |
||||
|
vU32 weight_dval; |
||||
|
/// ts_weight_sheet_ ws[3];
|
||||
|
|
||||
|
}TS_TASK_weight_zero; |
||||
|
|
||||
|
extern TS_TASK_weight_zero tst_weight_zero; |
||||
|
void L3_task_weight_zero_init(void); |
||||
|
|
||||
|
void L3_task_weight_zero_handler(TS_TASK_weight_zero *s); |
||||
|
|
||||
|
#endif // #ifndef _APP_TASK_ADC_H
|
||||
|
|
||||
@ -0,0 +1,121 @@ |
|||||
|
#include "common.h" |
||||
|
//#include "../tpc/tpc_uart.h"
|
||||
|
#include "../bsp/bsp_cs1232.h" |
||||
|
#include "../msp/msp_eeprom.h" |
||||
|
#include "../msp/msp_id.h" |
||||
|
#include "c_crc.h" |
||||
|
|
||||
|
struct global_param G; |
||||
|
struct ts_eeprom_param eep_param; |
||||
|
struct ts_eeprom_enc eep_enc; |
||||
|
|
||||
|
#define EEP_SECTOR_SIZE 0x200 |
||||
|
#define EEP_PARAM_ADDR (EEP_SECTOR_SIZE * 1) |
||||
|
#define EEP_ENC_ADDR (EEP_SECTOR_SIZE * 0) |
||||
|
|
||||
|
U8 L1_eeprom_read(U8 *buf,U8 *len) |
||||
|
{ |
||||
|
U8 dlen = 0; |
||||
|
L0_Iap_Read_array(EEP_PARAM_ADDR, (U8*)&eep_param, 2 + EEPROM_PARAM_DATA_MAX + 2); |
||||
|
if(eep_param.filter == EEPROM_PARAM_FILTER) |
||||
|
{ |
||||
|
dlen = eep_param.len - 2; |
||||
|
crc16(eep_param.crc,(U8*)&eep_param,2+dlen); |
||||
|
if(eep_param.crc[0] == eep_param.buf[dlen] && eep_param.crc[1] == eep_param.buf[dlen+1]) |
||||
|
{ |
||||
|
L0_uart0_uc('#'); |
||||
|
//Lc_buf_copy_uc((U8*)&G.p,(U8*)eep_param.buf,dlen);
|
||||
|
Lc_buf_copy_uc(buf,(U8*)eep_param.buf,dlen);//防止dlen>sizeof(G.P)引起的内存错误
|
||||
|
*len = dlen; |
||||
|
return 0; |
||||
|
} |
||||
|
} |
||||
|
return 1; |
||||
|
} |
||||
|
|
||||
|
U8 L1_eeprom_write(U8 *buf, U8 len) |
||||
|
{ |
||||
|
U8 dlen = len; |
||||
|
eep_param.filter = EEPROM_PARAM_FILTER; |
||||
|
eep_param.len = dlen + 2; |
||||
|
Lc_buf_copy_uc((U8*)eep_param.buf,buf,dlen); |
||||
|
crc16(eep_param.crc, &eep_param, 2+dlen); |
||||
|
eep_param.buf[dlen] = eep_param.crc[0]; |
||||
|
eep_param.buf[dlen+1] = eep_param.crc[1]; |
||||
|
|
||||
|
L0_Iap_Erase(EEP_PARAM_ADDR); |
||||
|
L0_Iap_Program_array(EEP_PARAM_ADDR, (U8*)&eep_param, 2 + dlen + 2); |
||||
|
|
||||
|
return 0; |
||||
|
} |
||||
|
|
||||
|
int L3_mcu_id_ok(void) |
||||
|
{ |
||||
|
U8 i = 0,crc[2]; |
||||
|
U32 enc_key; |
||||
|
//1.获取MCU_ID
|
||||
|
L0_id_get_rom(G.e.mcu_id); |
||||
|
for(i=0;i<MCU_ID_LEN;i++) |
||||
|
{ |
||||
|
L0_uart0_uchex(G.e.mcu_id[i]); |
||||
|
} |
||||
|
|
||||
|
//2.读取eeprom中的加密信息
|
||||
|
L0_Iap_Read_array(EEP_ENC_ADDR, (U8*)&eep_enc, MCU_ID_KEY_LEN + MCU_ID_LEN + 2); |
||||
|
crc16(crc,(U8*)&eep_enc,MCU_ID_KEY_LEN + MCU_ID_LEN); |
||||
|
if(eep_enc.crc[0] != crc[0] || eep_enc.crc[1] != crc[1]) |
||||
|
{ |
||||
|
L0_uart0_uc('-'); |
||||
|
return 0; |
||||
|
} |
||||
|
|
||||
|
//3.根据mcu_id和enc_key计算enc_val
|
||||
|
enc_key = ((U32)eep_enc.enc_key[0] << 24) | (eep_enc.enc_key[1] << 16) | (eep_enc.enc_key[2] << 8) |(eep_enc.enc_key[3] << 0); |
||||
|
Lc_encrypt_id((U8*)G.e.mcu_enc_id, (U8*)G.e.mcu_id, enc_key, MCU_ID_LEN); |
||||
|
|
||||
|
//4.判断enc_val是否一致
|
||||
|
for(i=0;i<MCU_ID_KEY_LEN;i++) |
||||
|
{ |
||||
|
if(G.e.mcu_enc_id[i] != eep_enc.enc_val[i]) |
||||
|
{ |
||||
|
return 0; |
||||
|
} |
||||
|
} |
||||
|
return 1; |
||||
|
} |
||||
|
|
||||
|
void L3_param_init(void) |
||||
|
{ |
||||
|
int i; |
||||
|
for(i=0;i<D_ch_max_num;i++) |
||||
|
{ |
||||
|
G.weight[i] = 0; |
||||
|
} |
||||
|
G.allweight = 0; |
||||
|
G._total_weight = 0; |
||||
|
G._total_zweight = 0; |
||||
|
|
||||
|
//L3_eeprom_read_param();
|
||||
|
} |
||||
|
|
||||
|
#if 0 |
||||
|
S32 L3_count_std_weight(S32 weight) |
||||
|
{ |
||||
|
U8 i = 0; |
||||
|
U16 ratio = 100; |
||||
|
weight = (weight - G._total_zweight)/10; |
||||
|
for(i=0;i<D_weight_std_num;i++) |
||||
|
{ |
||||
|
if(R.p.weight_std[i].weight_range == 0 || (R.p.weight_std[i].weight_range * 100) >= weight) |
||||
|
{ |
||||
|
break; |
||||
|
} |
||||
|
} |
||||
|
if(i<D_weight_std_num && R.p.weight_std[i].ratio != 0) |
||||
|
{ |
||||
|
ratio = R.p.weight_std[i].ratio; |
||||
|
} |
||||
|
return (S32)(weight * 1.0 * ratio / 100) ; |
||||
|
} |
||||
|
#endif |
||||
|
|
||||
@ -0,0 +1,79 @@ |
|||||
|
#ifndef APP_COMMON_H |
||||
|
#define APP_COMMON_H |
||||
|
|
||||
|
#include "../clib/type.h" |
||||
|
|
||||
|
#define APP_VERSION 0x10 |
||||
|
|
||||
|
#define D_MCU_BIGENDIAN 1 |
||||
|
// #define D_MCU_LITTLEENDIAN 1
|
||||
|
|
||||
|
|
||||
|
enum tp_handle |
||||
|
{ |
||||
|
TP_HANDLED, |
||||
|
TP_UNHANDLE |
||||
|
}; |
||||
|
|
||||
|
/**
|
||||
|
* EEPROM 存储结构 |
||||
|
*/ |
||||
|
#define EEPROM_PARAM_DATA_MAX 90 |
||||
|
#define EEPROM_PARAM_FILTER 0xAA |
||||
|
|
||||
|
typedef struct ts_eeprom_param |
||||
|
{ |
||||
|
U8 filter; |
||||
|
U8 len; |
||||
|
U8 buf[EEPROM_PARAM_DATA_MAX]; |
||||
|
U8 crc[2]; |
||||
|
}EEPROM_PARAM; |
||||
|
|
||||
|
#define MCU_ID_LEN 7 |
||||
|
#define MCU_ID_KEY_LEN 4 |
||||
|
#define EEPROM_ENC_DATA_MAX 64 |
||||
|
#define EEPROM_ENC_FILTER 0xAA |
||||
|
typedef struct ts_eeprom_enc |
||||
|
{ |
||||
|
U8 enc_key[MCU_ID_KEY_LEN]; |
||||
|
U8 enc_val[MCU_ID_LEN]; |
||||
|
U8 crc[2]; |
||||
|
}EEPROM_ENC; |
||||
|
|
||||
|
#define baud_rade L3_baud_rate_change(G.p.baud_rate) |
||||
|
|
||||
|
typedef struct mcu_encrypt_info |
||||
|
{ |
||||
|
U8 enc_key[MCU_ID_KEY_LEN]; |
||||
|
U8 mcu_id[MCU_ID_LEN]; |
||||
|
U8 mcu_enc_id[MCU_ID_LEN]; |
||||
|
}McuEncryptInfo; |
||||
|
|
||||
|
#define D_ch_max_num 4 |
||||
|
typedef struct global_param |
||||
|
{ |
||||
|
//EncryptInfo
|
||||
|
McuEncryptInfo e; |
||||
|
|
||||
|
//Global Variables
|
||||
|
S32 weight[D_ch_max_num]; //4路重量
|
||||
|
S32 allweight; //总重量
|
||||
|
S32 _total_weight; //实际重量*1000
|
||||
|
S32 _total_zweight; //实际皮重*1000
|
||||
|
}GlobalParam; |
||||
|
|
||||
|
extern struct global_param G; |
||||
|
extern struct ts_eeprom_param eep_param; |
||||
|
extern struct ts_eeprom_enc eep_enc; |
||||
|
|
||||
|
extern void L3_param_init(void); |
||||
|
extern int L3_mcu_id_ok(); |
||||
|
extern S32 L3_count_std_weight(S32 weight); |
||||
|
extern void L3_eeprom_persist_param(void); |
||||
|
extern U8 L1_eeprom_read(U8 *buf,U8 *len); |
||||
|
extern U8 L1_eeprom_write(U8 *buf, U8 len); |
||||
|
|
||||
|
|
||||
|
|
||||
|
#endif |
||||
|
|
||||
@ -0,0 +1,107 @@ |
|||||
|
//////////////////////////////////////////////////////////////////////////
|
||||
|
/// COPYRIGHT NOTICE
|
||||
|
/// Copyright (c) 2023, 传控科技
|
||||
|
/// All rights reserved.
|
||||
|
///
|
||||
|
/// @file asp_move.c
|
||||
|
/// @brief asp_move
|
||||
|
///
|
||||
|
///(本文件实现的功能的详述)
|
||||
|
/// moved的任务调度,是角度传感器和限位开关、的上层
|
||||
|
/// moto工作 限位开关限位 角度传感器指示位置
|
||||
|
///move--|--adc
|
||||
|
/// |--key
|
||||
|
/// |--moto
|
||||
|
#include "asp_expara.h" |
||||
|
#include "msp_UART1.h" |
||||
|
#include "asp_move.h" |
||||
|
#include "msp_adc.h" |
||||
|
|
||||
|
TS_EXPARA_ ts_expara; |
||||
|
|
||||
|
void L1_expara_init(unsigned char onf) |
||||
|
{ |
||||
|
if (onf) |
||||
|
{ |
||||
|
L0_ADC_init(1); |
||||
|
TTSS_run_every_init(ts_expara.vref.n, D_sample_vref_interval); |
||||
|
|
||||
|
TTSS_run_every_init(ts_expara.vbat.n, D_sample_vbat_interval); |
||||
|
TTSS_run_every_init(ts_expara.angle.n, D_sample_angle_interval); |
||||
|
TTSS_run_every_init(ts_expara.pt.n, D_sample_pt_interval); |
||||
|
ts_expara.vbat.en = 1; |
||||
|
ts_expara.angle.en = 1; |
||||
|
ts_expara.pt.en = 1; |
||||
|
ts_expara.vref.en = 1; |
||||
|
D_VCC_BAT_ON(); |
||||
|
D_SW_CAL_ON(); |
||||
|
SWITCH_INIT(); |
||||
|
}else |
||||
|
{ |
||||
|
///close adc
|
||||
|
} |
||||
|
} |
||||
|
|
||||
|
void L1_expara_sample(void) |
||||
|
{ |
||||
|
if(ts_expara.vbat.en) |
||||
|
{ |
||||
|
TTSS_run_every(ts_expara.vbat.n,D_sample_vbat_interval) |
||||
|
ts_expara.vbat.val = L1_ADC_Readx(D_sample_adc_vbat); |
||||
|
///
|
||||
|
|
||||
|
TTSS_run_every_end |
||||
|
} |
||||
|
|
||||
|
if(ts_expara.angle.en) |
||||
|
{ |
||||
|
TTSS_run_every(ts_expara.angle.n,D_sample_angle_interval) |
||||
|
ts_expara.angle.val = L1_ADC_Readx(D_sample_adc_angle); |
||||
|
///printf1(" vbat= %d %x",ts_expara.vbat.val);
|
||||
|
ts_task_move.loc_now = ts_expara.angle.val;///
|
||||
|
|
||||
|
|
||||
|
|
||||
|
TTSS_run_every_end |
||||
|
} |
||||
|
if(ts_expara.vref.en) |
||||
|
{ |
||||
|
TTSS_run_every(ts_expara.vref.n,D_sample_vref_interval) |
||||
|
ts_expara.vref.val = L1_ADC_Readx(D_sample_adc_vref); |
||||
|
///printf1(" pt= %d %x",ts_expara.vbat.val);
|
||||
|
|
||||
|
TTSS_run_every_end |
||||
|
} |
||||
|
|
||||
|
if(ts_expara.pt.en) |
||||
|
{ |
||||
|
TTSS_run_every(ts_expara.pt.n,D_sample_pt_interval) |
||||
|
ts_expara.pt.val = L1_ADC_Readx(D_sample_adc_pt); |
||||
|
///printf1(" pt= %d %x",ts_expara.vbat.val);
|
||||
|
|
||||
|
|
||||
|
printf4("%d\t%d\t%d\t%d\r\n",ts_expara.vref.val,ts_expara.vbat.val,ts_expara.angle.val,ts_expara.pt.val); |
||||
|
TTSS_run_every_end |
||||
|
} |
||||
|
|
||||
|
|
||||
|
} |
||||
|
|
||||
|
#if 0 |
||||
|
L0_uart1_sendstr("IMEI"); |
||||
|
L1_uartD_uchexArray(&R.card,16); |
||||
|
L0_uart1_0d0a(); |
||||
|
L3_GET_ANGLE(L1_ADC_Read_ANGLE(6)); |
||||
|
printf2("\r\n SET_ANGLE: %x CUR_ANGLE:%x \r\n",(int)R.motor_angle_set,(int)R.motor_angle_cur); |
||||
|
L3_GET_TEMP(L1_ADC_Read_PT(7)); |
||||
|
printf2("\r\n IN_TEMP:%x BACK_TEMP: %x \r\n",(int)R.in_temp,(int)R.back_temp); |
||||
|
L3_GET_VBAT(L1_ADC_Read_VBAT(5)); |
||||
|
L1_as_readA(0); |
||||
|
printf3("\r\n X_AXIS:%x Y_AXIS: %x Z_AXIS:%x\r\n",(int)R.x_acc,(int)R.y_acc,(int)R.z_acc); |
||||
|
L1_read_time(); |
||||
|
printf1("\r\n NET_STREN:%x \r\n",R.signal); |
||||
|
|
||||
|
#endif |
||||
|
|
||||
|
|
||||
|
|
||||
@ -0,0 +1,56 @@ |
|||||
|
//////////////////////////////////////////////////////////////////////////
|
||||
|
/// COPYRIGHT NOTICE
|
||||
|
/// Copyright (c) 2023, 传控科技
|
||||
|
/// All rights reserved.
|
||||
|
///
|
||||
|
/// @file asp_gsensor.c
|
||||
|
/// @brief asp_gsensor
|
||||
|
///
|
||||
|
///(本文件实现的功能的详述)
|
||||
|
///
|
||||
|
|
||||
|
|
||||
|
////20221217_213321 CCmodify new uart struct for road protocol
|
||||
|
|
||||
|
|
||||
|
#ifndef _ASP_EXPARA_H_ |
||||
|
#define _ASP_EXPARA_H_ |
||||
|
#include "bsp_config.h" |
||||
|
#include "msp_uart1.h" |
||||
|
#include "TTSS_task.h" |
||||
|
|
||||
|
|
||||
|
#define D_sample_adc_vbat 5 |
||||
|
#define D_sample_adc_angle 6 |
||||
|
#define D_sample_adc_pt 7 |
||||
|
|
||||
|
#define D_sample_adc_vref 15 |
||||
|
|
||||
|
|
||||
|
#define D_sample_vbat_interval D_Tdelay_300ms |
||||
|
#define D_sample_angle_interval D_Tdelay_100ms///D_Tdelay_300ms
|
||||
|
#define D_sample_pt_interval D_Tdelay_300ms |
||||
|
#define D_sample_vref_interval D_Tdelay_300ms |
||||
|
|
||||
|
typedef struct |
||||
|
{ |
||||
|
vU32 n; |
||||
|
u8 en; |
||||
|
vU16 val; |
||||
|
}TS_adcch_; |
||||
|
|
||||
|
|
||||
|
typedef struct |
||||
|
{ |
||||
|
TS_adcch_ vref;////1.19
|
||||
|
TS_adcch_ vbat; |
||||
|
TS_adcch_ pt; |
||||
|
TS_adcch_ angle; |
||||
|
|
||||
|
}TS_EXPARA_; |
||||
|
extern TS_EXPARA_ ts_expara; |
||||
|
void L1_expara_sample(void); |
||||
|
void L1_expara_init(unsigned char onf); |
||||
|
|
||||
|
#endif ///#ifndef _ASP_MOVE_H_
|
||||
|
|
||||
@ -0,0 +1,43 @@ |
|||||
|
//////////////////////////////////////////////////////////////////////////
|
||||
|
/// COPYRIGHT NOTICE
|
||||
|
/// Copyright (c) 2023, 传控科技
|
||||
|
/// All rights reserved.
|
||||
|
///
|
||||
|
/// @file asp_gsensor.c
|
||||
|
/// @brief asp_gsensor
|
||||
|
///
|
||||
|
///(本文件实现的功能的详述)
|
||||
|
/// 放置算法 初始化之类的 是bs_xxx型号的gsensor的上层,与型号无关
|
||||
|
|
||||
|
|
||||
|
#include "Asp_gsensor.h" |
||||
|
#include "msp_UART1.h" |
||||
|
|
||||
|
#include "msp_iicMx.h" |
||||
|
#include "bsp_msa300.h" |
||||
|
///初始化 调用bsp中的型号
|
||||
|
void L2_gsensor_init(u8 d) |
||||
|
{ |
||||
|
if (d) |
||||
|
{ |
||||
|
L0_IICMx_INIT(D_iicch_MSA,1); |
||||
|
ts_iicm.t0[D_iicch_MSA]= 100;///模拟iic的时候低电平和高电平的时间经常不确定
|
||||
|
ts_iicm.t1[D_iicch_MSA]= 100;///使用iic前需要配置iic的速率 根据规格书的要求
|
||||
|
|
||||
|
L1_msa300_reg_init(); |
||||
|
|
||||
|
|
||||
|
}else |
||||
|
{ |
||||
|
LD_gsensor_power(D_PowerMode_suspend|D_gs_LPBW1H9 );///
|
||||
|
|
||||
|
|
||||
|
} |
||||
|
|
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
@ -0,0 +1,27 @@ |
|||||
|
//////////////////////////////////////////////////////////////////////////
|
||||
|
/// COPYRIGHT NOTICE
|
||||
|
/// Copyright (c) 2023, 传控科技
|
||||
|
/// All rights reserved.
|
||||
|
///
|
||||
|
/// @file asp_gsensor.c
|
||||
|
/// @brief asp_gsensor
|
||||
|
///
|
||||
|
///(本文件实现的功能的详述)
|
||||
|
///
|
||||
|
|
||||
|
|
||||
|
////20221217_213321 CCmodify new uart struct for road protocol
|
||||
|
|
||||
|
|
||||
|
#ifndef _ASP_GSENSOR_H_ |
||||
|
#define _ASP_GSENSOR_H_ |
||||
|
#include "bsp_config.h" |
||||
|
void L2_gsensor_init(u8 d); |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
#endif ///#ifndef _ASP_GSENSOR_H_
|
||||
|
|
||||
@ -0,0 +1,312 @@ |
|||||
|
//////////////////////////////////////////////////////////////////////////
|
||||
|
/// COPYRIGHT NOTICE
|
||||
|
/// Copyright (c) 2023, 传控科技
|
||||
|
/// All rights reserved.
|
||||
|
///
|
||||
|
/// @file asp_gsensor.c
|
||||
|
/// @brief asp_gsensor
|
||||
|
///
|
||||
|
///(本文件实现的功能的详述)
|
||||
|
///
|
||||
|
|
||||
|
////20221217_213321 CCmodify new uart struct for road protocol
|
||||
|
|
||||
|
#include "msp_UART1.h" |
||||
|
#include "msp_UART2.h" |
||||
|
|
||||
|
#include "debug_drv.h" |
||||
|
#include "bsp_config.h" |
||||
|
#include "asp_gsensor.h" |
||||
|
#include "bsp_moto.h" |
||||
|
|
||||
|
#include "asp_move.h" |
||||
|
|
||||
|
#include "asp_lowpower.h" |
||||
|
|
||||
|
#define D_version_main "7.0" |
||||
|
|
||||
|
|
||||
|
|
||||
|
void L0_uart_close(void) |
||||
|
{ |
||||
|
L0_uart1_str("\r\nuart1 close");///
|
||||
|
Lc_delay_ms(20); |
||||
|
|
||||
|
EA = 0; |
||||
|
D_uart1_ES_INT(0); |
||||
|
//// D_UART2_ES_INT(0);
|
||||
|
AUXR = 0; //定时器2开始计时
|
||||
|
|
||||
|
ET1 = 0; //禁止定时器%d中断
|
||||
|
TR1 = 0; //定时器1开始计时
|
||||
|
} |
||||
|
void L0_uart1_open(void) |
||||
|
{//
|
||||
|
L0_uart1_buf_init();//串口初始化//
|
||||
|
|
||||
|
EA = 1; |
||||
|
L0_uart1_str("\r\nuart1 open"); |
||||
|
} |
||||
|
void L0_uart2_open(void) |
||||
|
{//
|
||||
|
//// L0_uart2_buf_init();
|
||||
|
EA = 1; |
||||
|
L0_uart1_str("\r\nuart2 open"); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
void L0_SetWakeUpTime(u16 SetTime) |
||||
|
{ |
||||
|
SetTime = (U16)((32768UL * (U32)SetTime) / 16000); //重装值 = Fwkt/16 * SetTime/1000 = Fwkt * SetTime / 16000
|
||||
|
if(SetTime > 0) SetTime--; |
||||
|
WKTCL = (u8)SetTime; |
||||
|
WKTCH = (u8)(SetTime >> 8) | 0x80; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
void L0_main_lowp_set(void) |
||||
|
{//
|
||||
|
L0_uart_close(); |
||||
|
L0_SetWakeUpTime(10000);///
|
||||
|
BITN_1(P_SW2 ,BITN7);///P_SW2|=0x80;
|
||||
|
////PCON = 0;
|
||||
|
|
||||
|
|
||||
|
///0:禁止端口内部的 4.1K 上拉电阻
|
||||
|
///1:使能端口内部的 4.1K 上拉电阻
|
||||
|
P0PU = 0; |
||||
|
P1PU = 0; |
||||
|
P2PU = 0; |
||||
|
P3PU = 0; |
||||
|
P4PU = 0; |
||||
|
P5PU = 0; |
||||
|
|
||||
|
|
||||
|
///0:使能端口的施密特触发功能。(上电复位后默认使能施密特触发)
|
||||
|
P0NCS = 0xff; |
||||
|
P1NCS = 0xff; |
||||
|
P2NCS = 0xff; |
||||
|
P3NCS = 0xff; |
||||
|
P4NCS = 0xff; |
||||
|
P5NCS = 0xff; |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
////1:电平转换速度慢,相应的上下冲比较小
|
||||
|
P0SR =0xff; |
||||
|
P1SR =0xff; |
||||
|
P2SR =0xff; |
||||
|
P3SR =0xff; |
||||
|
P4SR =0xff; |
||||
|
P5SR =0xff; |
||||
|
|
||||
|
///1:一般驱动能力
|
||||
|
P0DR =0xff; |
||||
|
P1DR =0xff; |
||||
|
P2DR =0xff; |
||||
|
P3DR =0xff; |
||||
|
P4DR =0xff; |
||||
|
P5DR =0xff; |
||||
|
|
||||
|
///0:禁止数字信号输入。若 I/O 被当作比较器输入口、ADC 输入口、触摸按键输入口或者为外部晶 振接入脚等模拟口时,
|
||||
|
///进入时钟停振模式前,必须设置为 0,否则会有额外的耗电。
|
||||
|
///1:使能数字信号输入。若 I/O 被当作数字口时,必须设置为 1,否 MCU 无法读取外部端口的电平。
|
||||
|
P0IE =0; |
||||
|
P1IE =0; |
||||
|
P2IE =0; |
||||
|
P3IE =0; |
||||
|
P4IE =0; |
||||
|
P5IE =0; |
||||
|
|
||||
|
BITN_1(P_SW2 ,BITN7);USBCON = 0; |
||||
|
////USBCON = 0;
|
||||
|
///USBCON = 0x80;
|
||||
|
|
||||
|
ADC_CONTR = 0; ////建议进入空闲模式和掉电模式前将 ADC 电源关闭,以降低功耗
|
||||
|
RSTCFG = 0;//没有变化43ua 41ua 低压复位控制位
|
||||
|
|
||||
|
D_HighR_P0_ALL(); |
||||
|
D_HighR_P1_ALL(); |
||||
|
D_HighR_P2_ALL(); |
||||
|
D_HighR_P3_ALL(); |
||||
|
D_HighR_P4_ALL(); |
||||
|
D_HighR_P5_ALL();/***********
|
||||
|
|
||||
|
P3 = 0; |
||||
|
|
||||
|
|
||||
|
P0 = 0; |
||||
|
P1 = 0; |
||||
|
P2 = 0; |
||||
|
P4 = 0; |
||||
|
P5 = 0; |
||||
|
|
||||
|
|
||||
|
*********/ |
||||
|
|
||||
|
P0 = 0xff; |
||||
|
P1 = 0xff; |
||||
|
P2 = 0xff; |
||||
|
P4 = 0xff; |
||||
|
P5 = 0xff; |
||||
|
|
||||
|
D_stdIO_P4(BITN1); |
||||
|
///D_OpenD_P4(BITN1);
|
||||
|
D_P41_ON(); |
||||
|
|
||||
|
|
||||
|
/*****
|
||||
|
|
||||
|
// XOSCCR =0;
|
||||
|
///HIRCCR = 0;
|
||||
|
IRC32KCR = 0x80; //启动内部32K IRC
|
||||
|
while (!(IRC32KCR & 1)); //等待时钟稳定
|
||||
|
CLKDIV = 0x00; //时钟不分频
|
||||
|
CLKSEL = 0x03; //选择内部32K
|
||||
|
P_SW2 = 0x00; |
||||
|
|
||||
|
P45 |
||||
|
P27 |
||||
|
P26 |
||||
|
P44 |
||||
|
P43 |
||||
|
p13 |
||||
|
P23 switch2 限位开关 |
||||
|
P40 SWITCH1 限位开关 |
||||
|
|
||||
|
P41 SW_CAL 电源分压电阻 =1 关闭 |
||||
|
*******/ |
||||
|
|
||||
|
} |
||||
|
|
||||
|
/*
|
||||
|
|
||||
|
void L2_main_version(u8 d) |
||||
|
{ |
||||
|
|
||||
|
printfs(D_version_main); |
||||
|
L1_uartD_uc(d); |
||||
|
printfs(D_BOARD_NAME); |
||||
|
printfs(__DATE__); |
||||
|
printfs(__TIME__); |
||||
|
|
||||
|
|
||||
|
} |
||||
|
*/ |
||||
|
|
||||
|
|
||||
|
void L1_main_lowp_test(void) |
||||
|
{//
|
||||
|
|
||||
|
while(9) |
||||
|
{ |
||||
|
/// L2_gsensor_init(0);
|
||||
|
L0_main_lowp_set(); |
||||
|
_nop_(); |
||||
|
_nop_(); |
||||
|
|
||||
|
//// L0_uart_close();
|
||||
|
|
||||
|
PCON = 0x02; ////2222 //MCU进入掉电模式
|
||||
|
///D_LPCD_INT_CLOSE(); 对掉电唤醒后有一个中断进来没有效果
|
||||
|
_nop_(); |
||||
|
_nop_(); _nop_(); |
||||
|
_nop_(); _nop_(); |
||||
|
_nop_(); |
||||
|
|
||||
|
L0_uart1_open(); |
||||
|
L0_uart2_open(); |
||||
|
/// L2_main_version(0);
|
||||
|
|
||||
|
/// L2_gsensor_init(1);
|
||||
|
} |
||||
|
|
||||
|
} |
||||
|
|
||||
|
|
||||
|
void L3_test_lp(u8 filter)//// ON listen function
|
||||
|
{ |
||||
|
if(filter == pd->filter) |
||||
|
{///filter num d1 d2 d3 ....dn
|
||||
|
//// FD 08 11 22 33 44 55 66 77 88
|
||||
|
///printf("\r\nDdebug:F1 R1 R2 R3 R4 ocr FD->");
|
||||
|
switch (pd->ocr) |
||||
|
{ |
||||
|
case 0x22: ///'s'
|
||||
|
///FX R1 R2 R3 R4 ocr
|
||||
|
///F1 m R2 R3 R4 22
|
||||
|
|
||||
|
// L0_moto_run(pd->R1);
|
||||
|
printf1("22: moto=(%X)",(int)pd->R1); |
||||
|
break; |
||||
|
|
||||
|
default: |
||||
|
printfs(" pp error\r\n "); |
||||
|
|
||||
|
break; |
||||
|
}; |
||||
|
|
||||
|
printfs("333"); |
||||
|
} |
||||
|
} |
||||
|
/***
|
||||
|
|
||||
|
case 0x23: ///'s'
|
||||
|
///FX R1 R2 R3 R4 ocr
|
||||
|
///F1 m R2 R3 R4 22
|
||||
|
if(pd->R1) |
||||
|
{ |
||||
|
D_BUZ_OPEN(); |
||||
|
|
||||
|
}else |
||||
|
{ |
||||
|
D_BUZ_OFF(); |
||||
|
|
||||
|
} |
||||
|
printf("22: moto=(%X)",(int)pd->R1); |
||||
|
break; |
||||
|
|
||||
|
|
||||
|
case 0x24: ///'s'
|
||||
|
///F1 m 23 56 64 22
|
||||
|
ts_task_move.loc_angle[0] = pd->R1; |
||||
|
ts_task_move.loc_angle[1] = pd->R2; |
||||
|
ts_task_move.loc_angle[2] = pd->R3; |
||||
|
ts_task_move.loc_angle[3] = pd->R4; |
||||
|
L3_task_s_go(ts_task_move,D_task_move_init); |
||||
|
printf("move: %d %d %d %d )",(int)pd->R1,(int)pd->R2,(int)pd->R3,(int)pd->R4); |
||||
|
break; |
||||
|
case 0x25: ///'s'
|
||||
|
///F1 m 23 56 64 22
|
||||
|
ts_task_move.loc_angle[0] = pd->R1; |
||||
|
ts_task_move.loc_angle[1] = pd->R2; |
||||
|
ts_task_move.loc_angle[2] = pd->R3; |
||||
|
ts_task_move.loc_angle[3] = pd->R4; |
||||
|
L3_task_s_go(ts_task_move,D_task_move_init); |
||||
|
ts_task_move.loc_now =D_2uc_u16(pd->R1, pd->R2); |
||||
|
printf("move: loc_now %XH %d )",(int)ts_task_move.loc_now,(int)ts_task_move.loc_now); |
||||
|
break; |
||||
|
|
||||
|
case 0x26: ///'s'
|
||||
|
///F1 m 23 56 64 22
|
||||
|
ts_task_move.loc_angle[0] = pd->R1; |
||||
|
if(pd->R1) |
||||
|
{ |
||||
|
ts_task_move.loc_now ++; |
||||
|
} |
||||
|
else |
||||
|
{ |
||||
|
ts_task_move.loc_now --; |
||||
|
} |
||||
|
printf("move: loc_now %XH %d ->%d )",(int)ts_task_move.loc_now,(int)ts_task_move.loc_now,(int)ts_task_move.loc_want); |
||||
|
break; |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
****/ |
||||
|
|
||||
|
|
||||
@ -0,0 +1,39 @@ |
|||||
|
//////////////////////////////////////////////////////////////////////////
|
||||
|
/// COPYRIGHT NOTICE
|
||||
|
/// Copyright (c) 2023, 传控科技
|
||||
|
/// All rights reserved.
|
||||
|
///
|
||||
|
/// @file asp_gsensor.c
|
||||
|
/// @brief asp_gsensor
|
||||
|
///
|
||||
|
///(本文件实现的功能的详述)
|
||||
|
///
|
||||
|
////20221217_213321 CCmodify new uart struct for road protocol
|
||||
|
|
||||
|
|
||||
|
#ifndef _ASP_LOWPOWER_H_ |
||||
|
#define _ASP_LOWPOWER_H_ |
||||
|
|
||||
|
|
||||
|
#include "asp_expara.h" |
||||
|
|
||||
|
|
||||
|
void SetWakeUpTime(u16 SetTime); |
||||
|
void L1_main_lowp_test(void); |
||||
|
void L0_uart_close(void); |
||||
|
void L0_uart1_open(void); |
||||
|
void L0_uart2_open(void); |
||||
|
void L0_main_lowp_set(void); |
||||
|
|
||||
|
void L1_main_lowp_test(void); |
||||
|
|
||||
|
#define D_cmd_filter_lowpower 0xf1 |
||||
|
|
||||
|
|
||||
|
|
||||
|
void L3_test_lp(u8 filter);//// ON listen function
|
||||
|
|
||||
|
|
||||
|
|
||||
|
#endif ///#ifndef _ASP_LOWPOWER_H_
|
||||
|
|
||||
@ -0,0 +1,475 @@ |
|||||
|
//////////////////////////////////////////////////////////////////////////
|
||||
|
/// COPYRIGHT NOTICE
|
||||
|
/// Copyright (c) 2023, 传控科技
|
||||
|
/// All rights reserved.
|
||||
|
///
|
||||
|
/// @file asp_move.c
|
||||
|
/// @brief asp_move
|
||||
|
///
|
||||
|
///(本文件实现的功能的详述)
|
||||
|
/// moved的任务调度,是角度传感器和限位开关、的上层
|
||||
|
/// moto工作 限位开关限位 角度传感器指示位置
|
||||
|
///move--|--adc
|
||||
|
/// |--key
|
||||
|
/// |--moto
|
||||
|
#include "asp_move.h" |
||||
|
#include "bsp_moto.h" |
||||
|
#include "msp_UART1.h" |
||||
|
|
||||
|
#include "asp_expara.h" |
||||
|
TS_task_move_ ts_task_move; |
||||
|
TS_task_step_ ts_task_step; |
||||
|
|
||||
|
////ts_angle2val[1].val ts_angle2val[2].val很重要 需要出厂前配置,换板子和安装都应该配置下,否则上位机应该配置
|
||||
|
////ts_angle2val[0].val 经验值 取决adc比例 和结构
|
||||
|
TS_angel2val_ ts_angle2val[5]= |
||||
|
{ |
||||
|
-1,100, ///0,1 限位 <= 0度的直接定位到该值 ts_angle2val[0].val
|
||||
|
0,268, ///1,2 /u8 loc_min_real;////校准后的最小位置;adc比例 限位<= 0度的 直接定位到 - ts_angle2val[0].val
|
||||
|
90,1285, ///2,3 /u8 loc_max_real;////校准后的最大位置;adc比例限位>= 90度的 直接定位到+ts_angle2val[0].val
|
||||
|
99,1333, ///3,4
|
||||
|
100,1333 ///4,5 限位
|
||||
|
}; |
||||
|
|
||||
|
|
||||
|
/// angle 0-90 0,90, 1-89
|
||||
|
vU16 L2_angel2adc(u8 angle) |
||||
|
{ |
||||
|
if(angle > 0 ) |
||||
|
{ |
||||
|
if(angle >= 90 ) |
||||
|
{ |
||||
|
return (ts_angle2val[2].val+ts_angle2val[0].val);///1258+200=1458
|
||||
|
} |
||||
|
}else |
||||
|
{ |
||||
|
angle = 0;///直接到达限位
|
||||
|
return ts_angle2val[1].val - ts_angle2val[0].val; |
||||
|
} |
||||
|
|
||||
|
return ts_angle2val[1].val; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
void L2_task_step_register(void) |
||||
|
{ |
||||
|
L1_task_reg_clear(&ts_task_step.task); |
||||
|
///L3_task_s_go(ts_task_step,D_task_init);
|
||||
|
} |
||||
|
|
||||
|
void L2_task_move_register(void) |
||||
|
{ |
||||
|
L1_task_reg_clear(&ts_task_move.task); |
||||
|
L3_task_s_go(ts_task_move,D_task_init); |
||||
|
L2_task_step_register(); |
||||
|
|
||||
|
|
||||
|
} |
||||
|
|
||||
|
/*
|
||||
|
3个命令: |
||||
|
1 前进到某一角度 |
||||
|
2 自检 |
||||
|
|
||||
|
|
||||
|
A-loc_now |
||||
|
M loc_mid |
||||
|
loc_min loc_max |
||||
|
|
||||
|
|
||||
|
|A-----------------M--------------------| |
||||
|
|>>>>>>>>>>>>>>>>>>M>>>>>>>>>>>>>>>>>>>A| |
||||
|
|A<<<<<<<<<<<<<<<<<M<<<<<<<<<<<<<<<<<<<<| |
||||
|
|
||||
|
|
||||
|
|
||||
|
|------------------M-------------------A| |
||||
|
|A<<<<<<<<<<<<<<<<<M<<<<<<<<<<<<<<<<<<<<| |
||||
|
|>>>>>>>>>>>>>>>>>>M>>>>>>>>>>>>>>>>>>>A| |
||||
|
|
||||
|
|
||||
|
|-----------A------M--------------------| |
||||
|
|A<<<<<<<<<<<------M--------------------| |
||||
|
|>>>>>>>>>>>>>>>>>>M>>>>>>>>>>>>>>>>>>>A| |
||||
|
|-----------A<<<<<<M<<<<<<<<<<<<<<<<<<<<| |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|------------------M-----A--------------| |
||||
|
|------------------M------>>>>>>>>>>>>>A| |
||||
|
|A<<<<<<<<<<<<<<<<<M<<<<<<<<<<<<<<<<<<<<| |
||||
|
|>>>>>>>>>>>A>>>>>>M>>>>>A--------------| |
||||
|
|
||||
|
|
||||
|
|
||||
|
真实real |
||||
|
0------------------90 |
||||
|
实际采样 |
||||
|
240 263 1285 1308/1333 |
||||
|
转换角度 |
||||
|
Key 0-------10----------------90-----100 key |
||||
|
|
||||
|
|
||||
|
输入: 0度默认关闭 一直到key |
||||
|
90度 默认打开 直到key |
||||
|
其他角度 收到后按默认配置执行 上位机可以调整 |
||||
|
出厂根据阀门调整下(发送协议完成验证),上位机具备参数分类校准调整更方便 |
||||
|
出厂ok 除非控制机构,同时弹片上加可调 |
||||
|
|
||||
|
2.1 判断当前位置在上还是下, |
||||
|
如果下 先向下走 直到限位 |
||||
|
如果上 先往上走 直到限位 |
||||
|
向相反的方向运动,然后 |
||||
|
*/ |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
#define D_ok BITN7/// 1=成功 0 =失败
|
||||
|
#define D_angle BITN6///角度逼近1= 发生 0未发生
|
||||
|
#define D_locok BITN5///到达指定位置
|
||||
|
|
||||
|
#define D_modemove BITN4 |
||||
|
|
||||
|
#define D_locmax BITN3////标志位:到达最大位置;
|
||||
|
#define D_locmin BITN2///标志位:到达最小位置;
|
||||
|
#define D_locminOV BITN1////标志位:到达最小位置超时
|
||||
|
#define D_locmaxOV BITN0////标志位:到达最大位置超时
|
||||
|
|
||||
|
|
||||
|
#define D_moto_diff 1 |
||||
|
#define D_angel_over 100 |
||||
|
|
||||
|
|
||||
|
void L2_task_step_handle(TS_task_step_ *s) |
||||
|
{///fixme:需要添加超时保护
|
||||
|
unsigned char d = 0; |
||||
|
|
||||
|
TTSS_Task_init(): |
||||
|
printf("\r\nL2_task_step_handle TTSS_Task_init"); |
||||
|
L2_task_go(D_task_step_init); |
||||
|
|
||||
|
TTSS_Task_step(D_task_step_init): |
||||
|
|
||||
|
printf("\r\nL2_task_step_handle D_task_step_dir"); |
||||
|
s->ok_want = 0; |
||||
|
L2_task_go(D_task_step_dir); |
||||
|
TTSS_Task_step(D_task_step_dir):////移动到指定的位置
|
||||
|
if(s->loc_want > s->loc_now)//// 1>0 3>2 90>89 34>2 67>45
|
||||
|
{ |
||||
|
if( (s->loc_want-s->loc_now) >= D_moto_diff)////避免出现一个角度抖动
|
||||
|
{ |
||||
|
///BITS_1(s->ok_want,D_locok);
|
||||
|
L0_moto_run(D_MOTO_FORWARD); |
||||
|
L2_task_go(D_task_step_moto); |
||||
|
}else |
||||
|
{ |
||||
|
BITS_1(s->ok_want,D_angle); |
||||
|
L2_task_go(D_task_step_ok); |
||||
|
} |
||||
|
}else |
||||
|
{ |
||||
|
if( (s->loc_now-s->loc_want) >= D_moto_diff)////避免出现一个角度抖动
|
||||
|
{ |
||||
|
|
||||
|
L0_moto_run(D_MOTO_BACKWARD); |
||||
|
L2_task_go(D_task_step_moto); |
||||
|
}else |
||||
|
{ |
||||
|
BITS_1(s->ok_want,D_angle); |
||||
|
L2_task_go(D_task_step_ok); |
||||
|
} |
||||
|
} |
||||
|
TTSS_Task_step(D_task_step_moto): |
||||
|
if(ABS(s->loc_want, s->loc_now) <= D_moto_diff) |
||||
|
{////到达指定位置
|
||||
|
L0_moto_run(D_MOTO_STOP); |
||||
|
BITS_1(s->ok_want,D_locok); |
||||
|
L2_task_go(D_task_step_ok); |
||||
|
} |
||||
|
///printf("\r\nF =%d<-%d ", (int)s->loc_want,s->loc_now);
|
||||
|
TTSS_Task_step(D_task_step_ok): |
||||
|
s->ok_want = 1; |
||||
|
/// L2_task_go(0);
|
||||
|
printf("\r\nstep_ok =%d<-%d ", (int)s->loc_want,s->loc_now); |
||||
|
L2_task_Tdelay_go(D_Tdelay_30s,D_task_step_init);///测试使用:
|
||||
|
TTSS_Task_end(); |
||||
|
|
||||
|
/// 7 6 5 4 3 2 1 0
|
||||
|
|
||||
|
|
||||
|
|
||||
|
/// 7 D_OK BITN7
|
||||
|
///6 D_angle BITN6
|
||||
|
///5 D_locok BITN5
|
||||
|
///4
|
||||
|
|
||||
|
///3 D_locmax BITN3
|
||||
|
///2 D_locmin BITN2
|
||||
|
///1 D_locminOV BITN1
|
||||
|
///0 D_locmaxOV BITN0
|
||||
|
///
|
||||
|
///
|
||||
|
|
||||
|
|
||||
|
//>>>>>>>>>>>>>保护代码
|
||||
|
if (ts_moto.mode > 0x80 )////运动中
|
||||
|
{ |
||||
|
BITS_1(s->ok_want,D_modemove); |
||||
|
if((D_MOTO_FORWARD|0x80) == ts_moto.mode) |
||||
|
{ |
||||
|
if(L0_Mmax_arrive()) |
||||
|
{ |
||||
|
L0_moto_run(D_MOTO_STOP); |
||||
|
BITS_1(s->ok_want,D_locmax); |
||||
|
printf("\r\n##Protect:moto max arrive "); |
||||
|
} |
||||
|
else |
||||
|
{ |
||||
|
BITS_0(s->ok_want,D_locmaxOV); |
||||
|
TTSS_overtime_get(s->overtimes) |
||||
|
|
||||
|
printf("\r\n@Protect:moto overtime "); |
||||
|
BITS_1(s->ok_want,D_locmaxOV); |
||||
|
L0_moto_run(D_MOTO_STOP); |
||||
|
TTSS_overtime_end |
||||
|
} |
||||
|
}else |
||||
|
{ |
||||
|
if(L0_Mmin_arrive()) |
||||
|
{ |
||||
|
L0_moto_run(D_MOTO_STOP); |
||||
|
BITS_1(s->ok_want,D_locmin); |
||||
|
printf("\r\n##Protect:moto min arrive %d ",(int)ts_moto.mode); |
||||
|
} |
||||
|
else |
||||
|
{ |
||||
|
BITS_0(s->ok_want,D_locminOV); |
||||
|
TTSS_overtime_get(s->overtimes) |
||||
|
|
||||
|
printf("\r\n@Protect:moto overtime "); |
||||
|
BITS_0(s->ok_want,D_locminOV); |
||||
|
L0_moto_run(D_MOTO_STOP); |
||||
|
TTSS_overtime_end |
||||
|
} |
||||
|
} |
||||
|
}else |
||||
|
{ |
||||
|
BITS_0(s->ok_want,D_modemove); |
||||
|
TTSS_overtime_init(s->overtimes,D_Tdelay_15s); |
||||
|
/////快速设置(每次设置小于1s或更少时间间隔)如果累计超过15s 电机自动停止,下条指令后重新计时
|
||||
|
} |
||||
|
|
||||
|
} |
||||
|
////L2_task_move_handle(&ts_task_move);
|
||||
|
void L2_task_move_handle(TS_task_move_ *s) |
||||
|
{///fixme:需要添加超时保护
|
||||
|
unsigned char d = 0; |
||||
|
|
||||
|
TTSS_Task_init(): |
||||
|
printf("\r\nL2_task_move_handle TTSS_Task_init"); |
||||
|
|
||||
|
|
||||
|
|
||||
|
L2_task_go(D_task_move_init); |
||||
|
TTSS_Task_step(D_task_move_init): |
||||
|
|
||||
|
s->loc_angle[0] = 34; |
||||
|
s->loc_angle[1] = 67; |
||||
|
s->loc_angle[2] = 90; |
||||
|
s->loc_angle[3] = 100; |
||||
|
/**/ |
||||
|
ts_expara.angle.en = 1;///打开角度采集
|
||||
|
|
||||
|
s->loc_i = 0; |
||||
|
/// L2_task_Tdelay_go(D_Tdelay_2s,D_task_move_cmd_netid);
|
||||
|
L2_task_Tdelay_go(D_Tdelay_100ms,D_task_move_next);///等待adc采样稳定
|
||||
|
///L2_task_go(D_task_move_next);
|
||||
|
TTSS_Task_step(D_task_move_next): |
||||
|
if(100 != s->loc_angle[s->loc_i]) |
||||
|
{ |
||||
|
s->loc_want = L2_angel2adc(s->loc_angle[s->loc_i]); |
||||
|
|
||||
|
printf("\r\ni =%d %d<-%d",(int)s->loc_i,(int)s->loc_want,s->loc_angle[s->loc_i]); |
||||
|
s->loc_i ++; |
||||
|
L2_task_go(D_task_move_angle); |
||||
|
L3_task_s_go(ts_task_step,D_task_init); |
||||
|
}else |
||||
|
{ |
||||
|
|
||||
|
} |
||||
|
printf("\r\n over %d %d ",s->loc_i,s->loc_m); |
||||
|
TTSS_Task_step(D_task_move_angle):////移动到指定的位置
|
||||
|
if(ts_task_step.ok_want) |
||||
|
{ |
||||
|
|
||||
|
}else |
||||
|
{ |
||||
|
|
||||
|
} |
||||
|
TTSS_Task_step(D_task_move_stop): |
||||
|
|
||||
|
ts_expara.angle.en = 0;///关闭角度采集
|
||||
|
/// L2_task_go(0);
|
||||
|
L2_task_Tdelay_go(D_Tdelay_30s,D_task_move_init);///测试使用:
|
||||
|
TTSS_Task_end(); |
||||
|
|
||||
|
L2_task_step_handle(&ts_task_step); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
#if 0 |
||||
|
[]发送→??D"1608 2956 1357 1973 |
||||
|
|
||||
|
D_UART1 ok 6 F1 01 DC 33 44 22 1->cmd=F num=1 len = 6 |
||||
|
cmd = DC 33 44 22 00 00 B 22: moto=(1)3331608 2874 1340 1971 |
||||
|
1608 2946 1315 1969 |
||||
|
1608 2944 1301 1967 |
||||
|
1608 2943 1276 1967 |
||||
|
1608 2942 1261 1968 |
||||
|
1609 2945 1235 1973 |
||||
|
1609 2946 1201 1969 |
||||
|
1608 2942 1183 1968 |
||||
|
1608 2944 1149 1974 |
||||
|
1608 2945 1130 1974 |
||||
|
1609 2947 1101 1976 |
||||
|
1608 2946 1070 1970 |
||||
|
1608 2944 1051 1971 |
||||
|
1609 2945 1022 1966 |
||||
|
1608 2944 1007 1972 |
||||
|
1608 2947 977 1974 |
||||
|
1608 2945 958 1969 |
||||
|
1608 2944 925 1972 |
||||
|
1608 2945 896 1967 |
||||
|
1609 2944 877 1969 |
||||
|
1609 2945 848 1975 |
||||
|
1608 2946 818 1969 |
||||
|
1608 2944 799 1971 |
||||
|
1608 2946 771 1974 |
||||
|
1608 2946 750 1964 |
||||
|
1609 2944 721 1971 |
||||
|
1608 2946 699 1971 |
||||
|
1608 2944 671 1976 |
||||
|
1608 2946 637 1971 |
||||
|
1608 2944 619 1967 |
||||
|
1608 2944 593 1973 |
||||
|
1608 2947 566 1970 |
||||
|
1608 2945 548 1976 |
||||
|
1608 2946 520 1968 |
||||
|
1608 2944 507 1966 |
||||
|
1608 2944 483 1971 |
||||
|
1608 2946 457 1974 |
||||
|
1608 2945 441 1971 |
||||
|
1608 2946 412 1969 |
||||
|
1608 2944 392 1967 |
||||
|
1608 2945 367 1968 |
||||
|
1608 2947 349 1976 |
||||
|
1608 2945 325 1972 |
||||
|
1608 2944 298 1970 |
||||
|
1608 2945 282 1970 |
||||
|
1608 2944 263 1963 |
||||
|
|
||||
|
[]发送→??D" |
||||
|
D_UART1 ok 6 F1 02 DC 33 44 22 1->cmd=F num=1 len = 6 |
||||
|
cmd = DC 33 44 22 00 00 F 22: moto=(2)3331608 2942 258 1963 |
||||
|
1608 2906 248 1971 |
||||
|
1608 2946 261 1977 |
||||
|
1608 2946 268 1972 |
||||
|
1608 2945 294 1968 |
||||
|
1608 2944 318 1967 |
||||
|
1608 2945 335 1975 |
||||
|
1608 2944 363 1971 |
||||
|
1608 2943 378 1971 |
||||
|
1608 2945 402 1973 |
||||
|
1607 2946 433 1965 |
||||
|
1608 2944 449 1971 |
||||
|
1608 2944 475 1972 |
||||
|
1608 2944 492 1969 |
||||
|
1608 2944 515 1970 |
||||
|
1608 2946 541 1968 |
||||
|
1608 2946 557 1965 |
||||
|
1609 2942 581 1973 |
||||
|
1608 2945 600 1969 |
||||
|
1608 2944 630 1973 |
||||
|
1608 2946 661 1966 |
||||
|
1608 2944 680 1971 |
||||
|
1608 2946 708 1974 |
||||
|
1607 2945 729 1967 |
||||
|
1607 2942 763 1972 |
||||
|
1608 2944 794 1964 |
||||
|
1608 2945 812 1973 |
||||
|
1608 2946 838 1975 |
||||
|
1608 2946 856 1974 |
||||
|
1608 2944 887 1972 |
||||
|
1608 2944 916 1965 |
||||
|
1608 2945 934 1971 |
||||
|
1608 2945 967 1968 |
||||
|
1608 2944 986 1968 |
||||
|
1608 2944 1015 1974 |
||||
|
1607 2944 1044 1973 |
||||
|
1608 2945 1062 1964 |
||||
|
1608 2942 1084 1970 |
||||
|
1608 2944 1102 1973 |
||||
|
1608 2945 1140 1967 |
||||
|
1608 2940 1172 1973 |
||||
|
1608 2944 1195 1971 |
||||
|
1607 2945 1220 1963 |
||||
|
1608 2941 1244 1972 |
||||
|
1608 2944 1269 1974 |
||||
|
1608 2944 1295 1970 |
||||
|
1608 2945 1309 1967 |
||||
|
1608 2945 1333 1968 |
||||
|
|
||||
|
[]发送→??D" |
||||
|
D_UART1 ok 6 F1 00 DC 33 44 22 1->cmd=F num=1 len = 6 |
||||
|
cmd = DC 33 44 22 00 00 S 22: moto=(0)3331608 2945 1349 1971 |
||||
|
1608 2955 1371 1974 |
||||
|
|
||||
|
|
||||
|
转动到0的时候的值 |
||||
|
|
||||
|
-------------------0 |
||||
|
1608 2905 1285 1950 |
||||
|
1608 2905 1285 1951 |
||||
|
1608 2904 1285 1950 |
||||
|
1608 2904 1285 1949 |
||||
|
1609 2905 1285 1948 |
||||
|
1608 2905 1285 1949 |
||||
|
1608 2905 1285 1951 |
||||
|
误差的值 球阀自己的间隙 |
||||
|
1608 2956 962 1961 |
||||
|
1608 2958 962 1960 |
||||
|
1608 2956 962 1961 |
||||
|
1608 2956 962 1963 |
||||
|
1608 2956 962 1962 |
||||
|
1607 2956 962 1961 |
||||
|
1608 2956 962 1960 |
||||
|
1608 2956 962 1962 |
||||
|
1608 2956 962 1963 |
||||
|
1608 2956 962 1962 |
||||
|
1607 2956 962 1961 |
||||
|
1608 2956 962 1960 |
||||
|
1608 2956 957 1962 |
||||
|
1608 2956 957 1963 |
||||
|
1608 2956 958 1963 |
||||
|
1608 2956 958 1961 |
||||
|
1608 2956 958 1960 |
||||
|
1608 2956 958 1962 |
||||
|
1608 2956 958 1963 |
||||
|
1608 2956 958 1962 |
||||
|
1608 2956 958 1961 |
||||
|
1608 2956 958 1960 |
||||
|
1608 2956 958 1962 |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
#endif |
||||
|
|
||||
|
|
||||
|
|
||||
@ -0,0 +1,118 @@ |
|||||
|
//////////////////////////////////////////////////////////////////////////
|
||||
|
/// COPYRIGHT NOTICE
|
||||
|
/// Copyright (c) 2023, 传控科技
|
||||
|
/// All rights reserved.
|
||||
|
///
|
||||
|
/// @file asp_gsensor.c
|
||||
|
/// @brief asp_gsensor
|
||||
|
///
|
||||
|
///(本文件实现的功能的详述)
|
||||
|
///
|
||||
|
|
||||
|
|
||||
|
////20221217_213321 CCmodify new uart struct for road protocol
|
||||
|
|
||||
|
|
||||
|
#ifndef _ASP_MOVE_H_ |
||||
|
#define _ASP_MOVE_H_ |
||||
|
#include "bsp_config.h" |
||||
|
#include "msp_uart1.h" |
||||
|
#include "TTSS_task.h" |
||||
|
typedef struct |
||||
|
{ |
||||
|
TS_task task; |
||||
|
vU32 overtimes; |
||||
|
u8 ch; |
||||
|
u8 loc_angle[4]; ////达到的角度, 标准角度 需要和adc比例转换
|
||||
|
u8 loc_m; |
||||
|
u8 loc_i; |
||||
|
|
||||
|
vU16 loc_now;////当前的位置adc比例
|
||||
|
vU16 loc_want;////想要达到的位置;adc比例
|
||||
|
|
||||
|
vU16 loc_max_real;////校准后的最大位置;adc比例
|
||||
|
vU16 loc_min_real;////校准后的最小位置;adc比例
|
||||
|
|
||||
|
vU16 loc_max;////最大位置; adc比例
|
||||
|
vU16 loc_min;////最小位置; adc比例
|
||||
|
vU16 loc_mid;////中间位置; adc比例
|
||||
|
|
||||
|
u8 ok_max;////标志位:到达最大位置;
|
||||
|
u8 ok_min;////标志位:到达最小位置;
|
||||
|
u8 ok_want;////标志位:到达指定的位置;
|
||||
|
|
||||
|
/// vU16 tmp;
|
||||
|
|
||||
|
}TS_task_move_; |
||||
|
extern TS_task_move_ ts_task_move; |
||||
|
typedef struct |
||||
|
{ |
||||
|
TS_task task; |
||||
|
vU32 overtimes; |
||||
|
u8 ch; |
||||
|
|
||||
|
|
||||
|
vU16 loc_now;////当前的位置adc比例
|
||||
|
vU16 loc_want;////想要达到的位置;adc比例
|
||||
|
|
||||
|
//// vU16 loc_max_real;////校准后的最大位置;adc比例
|
||||
|
//// vU16 loc_min_real;////校准后的最小位置;adc比例
|
||||
|
|
||||
|
//// vU16 loc_max;////最大位置; adc比例
|
||||
|
//// vU16 loc_min;////最小位置; adc比例
|
||||
|
//// vU16 loc_mid;////中间位置; adc比例
|
||||
|
|
||||
|
// u8 ok_max;////标志位:到达最大位置;
|
||||
|
// u8 ok_min;////标志位:到达最小位置;
|
||||
|
u8 ok_want;////标志位:到达指定的位置;
|
||||
|
|
||||
|
/// vU16 tmp;
|
||||
|
|
||||
|
}TS_task_step_; |
||||
|
extern TS_task_step_ ts_task_step; |
||||
|
|
||||
|
|
||||
|
typedef struct |
||||
|
{ |
||||
|
char angle; ////达到的角度,总共数量loc_m
|
||||
|
vU16 val; |
||||
|
|
||||
|
}TS_angel2val_; |
||||
|
extern TS_angel2val_ ts_angle2val[5]; |
||||
|
|
||||
|
|
||||
|
|
||||
|
extern void L2_task_move_register(void); |
||||
|
extern void L2_task_move_handle(TS_task_move_ *s); |
||||
|
|
||||
|
|
||||
|
|
||||
|
#define D_task_move_next 0x33 |
||||
|
|
||||
|
#define D_task_move_init 0x41 |
||||
|
#define D_task_move_stop 0x42 |
||||
|
|
||||
|
#define D_task_move_2 0x43 |
||||
|
#define D_task_move_3 0x53 |
||||
|
#define D_Task_mqtt_init 0x44 |
||||
|
#define D_task_move_angle 0x45 |
||||
|
///#define D_task_move_ok 0x55
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
#define D_delay_pt D_Tdelay_3s |
||||
|
|
||||
|
|
||||
|
#define D_task_step_init 0x41 |
||||
|
|
||||
|
#define D_task_step_dir 0x52 |
||||
|
///#define D_task_step_forward 0x46
|
||||
|
///#define D_task_step_backward 0x56
|
||||
|
#define D_task_step_moto 0x56 |
||||
|
|
||||
|
#define D_task_step_ok 0x55 |
||||
|
|
||||
|
|
||||
|
#endif ///#ifndef _ASP_MOVE_H_
|
||||
|
|
||||
@ -0,0 +1,120 @@ |
|||||
|
//////////////////////////////////////////////////////////////////////////
|
||||
|
/// COPYRIGHT NOTICE
|
||||
|
/// Copyright (c) 2023, 传控科技
|
||||
|
/// All rights reserved.
|
||||
|
///
|
||||
|
/// @file asp_gsensor.c
|
||||
|
/// @brief asp_gsensor
|
||||
|
///
|
||||
|
///(本文件实现的功能的详述)
|
||||
|
/// 放置算法 初始化之类的 是bs_xxx型号的gsensor的上层,与型号无关
|
||||
|
|
||||
|
|
||||
|
#include "asp_mqtt.h" |
||||
|
#include "msp_UART1.h" |
||||
|
|
||||
|
#include "msp_iicMx.h" |
||||
|
#include "bsp_msa300.h" |
||||
|
|
||||
|
|
||||
|
|
||||
|
TS_task_mqtt_ ts_task_mqtt; |
||||
|
|
||||
|
|
||||
|
|
||||
|
void L2_mqtt_init(u8 d) |
||||
|
{ |
||||
|
if (d) |
||||
|
{ |
||||
|
|
||||
|
}else |
||||
|
{ |
||||
|
|
||||
|
} |
||||
|
|
||||
|
} |
||||
|
|
||||
|
void L2_Task_step_register(void) |
||||
|
{ |
||||
|
L1_task_reg_clear(&ts_task_mqtt.task); |
||||
|
///L3_task_s_go(ts_Task_step,D_task_init);
|
||||
|
} |
||||
|
|
||||
|
void PrintString2(u8 *puts) |
||||
|
{ |
||||
|
for (; *puts != 0; puts++) |
||||
|
{ |
||||
|
///TX2_write2buff(*puts); //遇到停止符0结束
|
||||
|
} |
||||
|
} |
||||
|
|
||||
|
|
||||
|
xdata char comand_uart1[] = "AT+LMQTTPUB=0,0,0,0,\"$dp\",64,\"{\"ccsens_data\":00}\"\r\n"; |
||||
|
|
||||
|
|
||||
|
void L2_Task_step_handle(TS_task_mqtt_ *s) |
||||
|
{///fixme:需要添加超时保护
|
||||
|
unsigned char d = 0; |
||||
|
|
||||
|
TTSS_Task_init(): |
||||
|
printfs("\r\nL2_Task_step_handle TTSS_Task_init"); |
||||
|
L2_task_go(D_Task_mqtt_init); |
||||
|
|
||||
|
TTSS_Task_step(D_Task_mqtt_init): |
||||
|
|
||||
|
TTSS_Task_step(D_Task_mqtt_init): |
||||
|
|
||||
|
P05 = 0;////////////NB_RST
|
||||
|
P53 = 1; //////////NB_POWER
|
||||
|
delay_ms(100); |
||||
|
|
||||
|
P53 = 0; //////////NB_POWER LOW ACTIVE
|
||||
|
P05 = 1;////////////NB_RST
|
||||
|
|
||||
|
S_delay(1); |
||||
|
P53 = 1;///////////////NB_POWER
|
||||
|
|
||||
|
|
||||
|
|
||||
|
TTSS_Task_step(D_Task_mqtt_init): |
||||
|
PrintString2("AT+CMEE=1\r\n"); //mqtt config
|
||||
|
|
||||
|
PrintString2("AT+CSQ\r\n"); //mqtt config
|
||||
|
|
||||
|
PrintString2("AT+LMQTTCFG=\"cloud\",0,1,3\r\n"); //mqtt config
|
||||
|
S_delay(1); |
||||
|
PrintString2("AT+LMQTTOPEN=0,\"183.230.40.39\",6002\r\n"); //BUILDING TCP OK
|
||||
|
|
||||
|
PrintString2("AT+LMQTTCONN=0,\"1062916368\",\"587005\",\"mm1234\"\r\n"); //BUILDING ON LINE // 设备ID,产品ID,鉴权信息 MQTT CONECT OK
|
||||
|
S_delay(1); |
||||
|
|
||||
|
PrintString2("AT+LMQTTSUBUNSUB=0,0,1,\"test\",2\r\n"); ////////sub topic
|
||||
|
// PrintString2("AT+MQTTOPEN=1,1,0\r\n"); //BUILDING
|
||||
|
S_delay(1); |
||||
|
|
||||
|
PrintString2("AT+LMQTTPUB=0,0,0,0,\"$dp\",64,\"{\"ccsens_data\":00}\"\r\n"); ////////senddata
|
||||
|
S_delay(1); |
||||
|
|
||||
|
four_bt = temp_dat_TP/1000+48; |
||||
|
three_bt = (temp_dat_TP%1000)/100+48; |
||||
|
two_bt = ((temp_dat_TP%1000)%100)/10+48; |
||||
|
one_bt = (((temp_dat_TP%1000)%100)%10)+48; |
||||
|
//
|
||||
|
// comand_uart1[87] = four_bt;
|
||||
|
// comand_uart1[88] = three_bt;
|
||||
|
comand_uart1[45] = two_bt; |
||||
|
comand_uart1[46] = one_bt; |
||||
|
|
||||
|
PrintString2(comand_uart1); |
||||
|
|
||||
|
L2_task_go(D_Task_mqtt_ok); |
||||
|
///printf("\r\nF =%d<-%d ", (int)s->loc_want,s->loc_now);
|
||||
|
TTSS_Task_step(D_Task_mqtt_ok): |
||||
|
s->ok_want = 1; |
||||
|
/// L2_task_go(0);
|
||||
|
// printf("\r\nstep_ok =%d<-%d ", (int)s->loc_want,s->loc_now);
|
||||
|
L2_task_Tdelay_go(D_Tdelay_30s,D_Task_mqtt_init);///测试使用:
|
||||
|
TTSS_Task_end(); |
||||
|
} |
||||
|
|
||||
|
|
||||
@ -0,0 +1,44 @@ |
|||||
|
//////////////////////////////////////////////////////////////////////////
|
||||
|
/// COPYRIGHT NOTICE
|
||||
|
/// Copyright (c) 2023, 传控科技
|
||||
|
/// All rights reserved.
|
||||
|
///
|
||||
|
/// @file asp_gsensor.c
|
||||
|
/// @brief asp_gsensor
|
||||
|
///
|
||||
|
///(本文件实现的功能的详述)
|
||||
|
///
|
||||
|
|
||||
|
|
||||
|
////20221217_213321 CCmodify new uart struct for road protocol
|
||||
|
|
||||
|
|
||||
|
#ifndef _asp_mqtt_H_ |
||||
|
#define _asp_mqtt_H_ |
||||
|
#include "bsp_config.h" |
||||
|
void L2_mqtt_init(u8 d); |
||||
|
|
||||
|
typedef struct |
||||
|
{ |
||||
|
TS_task task; |
||||
|
vU32 overtimes; |
||||
|
u8 ch; |
||||
|
|
||||
|
}TS_task_mqtt_; |
||||
|
extern TS_task_mqtt_ ts_task_mqtt; |
||||
|
|
||||
|
|
||||
|
extern void L2_task_mqtt_register(void); |
||||
|
extern void L2_task_mqtt_handle(TS_task_mqtt_ *s); |
||||
|
|
||||
|
|
||||
|
|
||||
|
#define D_task_mqtt_next 0x33 |
||||
|
|
||||
|
#define D_task_mqtt_init 0x41 |
||||
|
#define D_Task_mqtt_ok 0x42 |
||||
|
|
||||
|
|
||||
|
|
||||
|
#endif ///#ifndef _asp_mqtt_H_
|
||||
|
|
||||
@ -0,0 +1,726 @@ |
|||||
|
////////////////////////////////////////////////////////////////////////////
|
||||
|
///@copyright Copyright (c) 2018, 传控科技 All rights reserved.
|
||||
|
///-------------------------------------------------------------------------
|
||||
|
/// @file bsp_drv.c
|
||||
|
/// @brief bsp @ driver config
|
||||
|
///-------------------------------------------------------------------------
|
||||
|
/// @version 1.0
|
||||
|
/// @author CC
|
||||
|
/// @date 20180331
|
||||
|
/// @note cc_AS_stc02
|
||||
|
//////////////////////////////////////////////////////////////////////////////
|
||||
|
|
||||
|
#include "asp_schain.h" |
||||
|
///#include "common.h"
|
||||
|
#include "msp_uart1.h" |
||||
|
#include "bsp_cs1232.h" |
||||
|
#include "debug_drv.h" |
||||
|
|
||||
|
#define D_sensor_up_down 1/// 称重传感器上下镜像选择
|
||||
|
|
||||
|
//=============================================
|
||||
|
///打开adc输出监控,0kg的试试每一路的输出就是 0kg_out1_adc FF77 FFB3 00A4 FFEA
|
||||
|
#define D_ch1_0kg_out1_adc (vS16)0xFF77 |
||||
|
#define D_ch2_0kg_out1_adc (vS16)0xFFB3 |
||||
|
#define D_ch3_0kg_out1_adc (vS16)0x00A4 |
||||
|
#define D_ch4_0kg_out1_adc (vS16)0xFFEA |
||||
|
/////需要通过测试配置 如果不在意符号位 可以优化 diao
|
||||
|
#define D_ch1_out1_offset (vS16)(D_ch1_wantline-D_ch1_0kg_out1_adc) |
||||
|
#define D_ch2_out1_offset (vS16)(D_ch2_wantline-D_ch2_0kg_out1_adc) |
||||
|
#define D_ch3_out1_offset (vS16)(D_ch3_wantline-D_ch3_0kg_out1_adc) |
||||
|
#define D_ch4_out1_offset (vS16)(D_ch4_wantline-D_ch4_0kg_out1_adc) |
||||
|
|
||||
|
#define D_ch1_wantline (vS16)0x18da |
||||
|
#define D_ch2_wantline (vS16)0x18da |
||||
|
#define D_ch3_wantline (vS16)0x18da |
||||
|
#define D_ch4_wantline (vS16)0x18da |
||||
|
|
||||
|
///cc 2023/04/06--7:39:40 每个传感器放置10kg
|
||||
|
///应变片传感器10kg的adc值,选择这个是因为10kg容易获得 并且有一定的重量差
|
||||
|
///这个值需要实验获得
|
||||
|
#define D_ch1_10kg_out1_adc (vS16)0x0584 |
||||
|
#define D_ch2_10kg_out1_adc (vS16)0x05DE |
||||
|
#define D_ch3_10kg_out1_adc (vS16)0x0731 |
||||
|
#define D_ch4_10kg_out1_adc (vS16)0x066C |
||||
|
|
||||
|
#define D_Rsensor_per_10kg ((vS16)10) |
||||
|
#define D_adc_per_kg ((D_ch1_10kg_out1_adc-D_ch1_0kg_out1_adc)/D_Rsensor_per_10kg) |
||||
|
#define D_adc_zeroout (10*D_adc_per_kg) ///零点都拉到10kg
|
||||
|
|
||||
|
TS_adc_SPara_ TS_adc_SPara[D_ADC_CHANNEL_NUM]= |
||||
|
{ |
||||
|
|
||||
|
'A',//0 1 u8 rev1;
|
||||
|
0,//2 3 u8 ch;
|
||||
|
D_ch1_wantline,///vU16 wantline; ///固定的硬件参数(例如称重中的0kg,压力中的0压力)时想要输出的adc的值
|
||||
|
D_ch1_out1_offset,//3 4 vU16 offset;
|
||||
|
2,//4 5 vU8 ashift; ///移动的位数 1-2 2-4 3-8 4-16
|
||||
|
5,//5 6 vU8 bshift; ///移动的位数 1-2 2-4 3-8 4-16
|
||||
|
|
||||
|
'A',//0 1 u8 rev1;
|
||||
|
1,//2 3 u8 ch;
|
||||
|
D_ch1_wantline,///vU16 wantline; ///固定的硬件参数(例如称重中的0kg,压力中的0压力)时想要输出的adc的值
|
||||
|
D_ch2_out1_offset,//3 4 vU16 offset;
|
||||
|
2,//4 5 vU8 ashift; ///移动的位数 1-2 2-4 3-8 4-16
|
||||
|
5,//5 6 vU8 bshift; ///移动的位数 1-2 2-4 3-8 4-16
|
||||
|
|
||||
|
'A',//0 1 u8 rev1;
|
||||
|
2,//2 3 u8 ch;
|
||||
|
D_ch1_wantline,///vU16 wantline; ///固定的硬件参数(例如称重中的0kg,压力中的0压力)时想要输出的adc的值
|
||||
|
D_ch3_out1_offset,//3 4 vU16 offset;
|
||||
|
2,//4 5 vU8 ashift; ///移动的位数 1-2 2-4 3-8 4-16
|
||||
|
5,//5 6 vU8 bshift; ///移动的位数 1-2 2-4 3-8 4-16
|
||||
|
|
||||
|
|
||||
|
'A',//0 1 u8 rev1;
|
||||
|
3,//2 3 u8 ch;
|
||||
|
D_ch1_wantline,///vU16 wantline; ///固定的硬件参数(例如称重中的0kg,压力中的0压力)时想要输出的adc的值
|
||||
|
D_ch4_out1_offset,//3 4 vU16 offset;
|
||||
|
2,//4 5 vU8 ashift; ///移动的位数 1-2 2-4 3-8 4-16
|
||||
|
5//5 6 vU8 bshift; ///移动的位数 1-2 2-4 3-8 4-16
|
||||
|
|
||||
|
|
||||
|
}; |
||||
|
|
||||
|
|
||||
|
TS_task_adc_sample ts_adc_samples[D_ADC_CHANNEL_NUM]; |
||||
|
|
||||
|
//ch是0123,代表4通道
|
||||
|
void L2_task_adc_init(U8 ch) |
||||
|
{ |
||||
|
//通道采集任务初始化
|
||||
|
L1_task_reg_clear(&ts_adc_samples[ch].task); |
||||
|
L3_task_s_go(ts_adc_samples[ch],D_task_init); |
||||
|
|
||||
|
|
||||
|
ts_adc_samples[ch].pSPara = &TS_adc_SPara[ch]; |
||||
|
ts_adc_samples[ch].firstRun = 1; |
||||
|
|
||||
|
|
||||
|
} |
||||
|
|
||||
|
//ADC Channel 采样任务
|
||||
|
#define D_task_ADC_CHx_SAMPLE_JITTER_START_SAMPLE 0x53 |
||||
|
#define D_task_ADC_CHx_JITTER 0x63 |
||||
|
#define D_task_ADC_CHx_PIANYI 0x93 |
||||
|
#define D_task_ADC_CHx_JITTER2 0x83 |
||||
|
#define D_task_ADC_CHx_despiking_shift 0x94 |
||||
|
#define D_task_ADC_CHx_SAMPLE_WAIT_LOW 0x73 |
||||
|
#define D_task_ADC_CHx_SAMPLE_READ 0x54 |
||||
|
#define D_task_ADC_CHx_SAMPLE_OUT 0x55 |
||||
|
#define D_task_ADC_CHx_SHIFTFILTER 0x56 |
||||
|
#define D_task_ADC_CHx_SHIFTFILTER2 0x57 |
||||
|
#define D_ADC_JITTER_zero 22///还包含建立时间 至少9个
|
||||
|
#define D_ADC_JITTER_FINISH 12///还包含建立时间 至少9个
|
||||
|
|
||||
|
/********
|
||||
|
80hZ |
||||
|
1000ms/80= 12.5ms/point |
||||
|
ushex send = 4Bytes+blank = 5Byte; |
||||
|
115200 0.1ms/Byte |
||||
|
所以发送5Bytes 消耗0.5ms 发送四列 消耗2ms 系统足够响应 |
||||
|
|
||||
|
*******/ |
||||
|
|
||||
|
|
||||
|
|
||||
|
S16 L3_out_tran(vU32 rdata) |
||||
|
{ |
||||
|
S16 t16; |
||||
|
/// 24bits 3Bytes
|
||||
|
rdata >>= 8; |
||||
|
t16 = rdata; |
||||
|
|
||||
|
#if (D_sensor_up_down) |
||||
|
t16 *= -1; |
||||
|
#else |
||||
|
///t16 *= -1;
|
||||
|
#endif |
||||
|
return t16; |
||||
|
} |
||||
|
|
||||
|
vU16 L3_adc_out_offset(vU16 offset,vU16 t16) |
||||
|
{ |
||||
|
vU16 out; |
||||
|
|
||||
|
/// L0_uart0_ushex(t16); L0_uart0_uc(' ');
|
||||
|
if(t16 & 0x8000) //最高位为1,<0则
|
||||
|
{ |
||||
|
t16 = 0xffFF - t16;///转变为正数
|
||||
|
///*d = D_ADC_OFFSET - t16;
|
||||
|
out = offset - t16; |
||||
|
// L0_uart0_uc('$'); L0_uart0_ushex(ts_adc_samples[ch].offset);L0_uart0_uc(' ');
|
||||
|
}else |
||||
|
{ |
||||
|
out = t16 + offset; |
||||
|
} |
||||
|
// L0_uart0_ushex(out);L0_uart0_uc(' '); L0_uart0_uc('R');L0_uart0_0d0a();
|
||||
|
return out; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
/*
|
||||
|
|
||||
|
adcval adc采样值 |
||||
|
^ |
||||
|
| |
||||
|
| --.-------------.-------------.------------.---------wantline |
||||
|
| . . . . |
||||
|
| . . offset3 . |
||||
|
| . . . . |
||||
|
| . . .ch3.adc . |
||||
|
| offset1 offset2 . |
||||
|
| . . offset4 |
||||
|
---0---.-------------.--------------------------.------------ |
||||
|
| . .ch2.adc . |
||||
|
| . . |
||||
|
| ch1.adc . |
||||
|
| . |
||||
|
| ch3.adc. |
||||
|
|
||||
|
.的数量或高度就是offset |
||||
|
adc有正数和负数 |
||||
|
|
||||
|
|
||||
|
*/ |
||||
|
vU16 L3_adc_get_offset(vU16 wantline,vU16 adcv) |
||||
|
{ |
||||
|
vU16 out; |
||||
|
|
||||
|
/// L0_uart0_ushex(t16); L0_uart0_uc(' ');
|
||||
|
if(adcv & 0x8000) //最高位为1,<0则
|
||||
|
{ |
||||
|
out = 0xffFF - adcv;///转变为正数
|
||||
|
out += wantline; |
||||
|
}else |
||||
|
{ |
||||
|
out = wantline - adcv; |
||||
|
} |
||||
|
return out; |
||||
|
} |
||||
|
|
||||
|
/*
|
||||
|
///cc 2023/04/06--6:34:10
|
||||
|
针对西安方片传感器 |
||||
|
adc |
||||
|
hex dec kg adc/kg |
||||
|
68F 1679 10 168 |
||||
|
|
||||
|
4196 16790 100 |
||||
|
-------------void L2_task_adc_sample(TS_TASK_ADC_SAMPLE *s)---------- |
||||
|
|
||||
|
s->out1_adc = L3_out_tran(s->out0); |
||||
|
############ |
||||
|
|
||||
|
s->out2_offset = L3_out_offset(s->ch,s->out1_adc); |
||||
|
############ |
||||
|
|
||||
|
Lc_despiking_shift3_U16(s->outm);////采样后进行削峰
|
||||
|
s->out3_peak = s->outm[1]; |
||||
|
############ |
||||
|
|
||||
|
s->ts_SAa.out4_shift = (vU16)s->ts_SAa.average; from s->out3_peak |
||||
|
|
||||
|
s->ts_SAb.out4_shift = (vU16)s->ts_SAb.average;from s->out3_peak |
||||
|
|
||||
|
----------void L3_task_weight_handler(TS_TASK_weight_ *s)----------------- |
||||
|
|
||||
|
|
||||
|
ts_adc_samples[3].out5 = ts_adc_samples[3].ts_SAb.out4_shift; |
||||
|
|
||||
|
############ |
||||
|
|
||||
|
////四个传感器相加后平均
|
||||
|
tst_weight.sum32 = ts_adc_samples[0].out5; |
||||
|
tst_weight.sum32 += ts_adc_samples[1].out5; |
||||
|
tst_weight.sum32 += ts_adc_samples[2].out5; |
||||
|
tst_weight.sum32 += ts_adc_samples[3].out5; |
||||
|
|
||||
|
tst_weight.out6 = tst_weight.sum32 >>2; |
||||
|
############ |
||||
|
tst_weight.adc32 = tst_weight.out6; |
||||
|
L3_task_weight_cal(); |
||||
|
|
||||
|
上电的时候有几种状态 |
||||
|
1 有人 |
||||
|
2 有物体 |
||||
|
3 无人 |
||||
|
出厂必备的操作, |
||||
|
1,没有重物清零,数据写入程序, |
||||
|
出厂把adc的值都偏移到 10kg/200kg 如果时基本时1/20偏移 |
||||
|
也就是出厂时传感器的值基本一条线 |
||||
|
2,以后上电时 或者重新启动时 低于一定重量就清零 |
||||
|
3,手工可以清零 |
||||
|
|
||||
|
|
||||
|
--------------------------- |
||||
|
|
||||
|
四个传感器 在没有重量 出厂的时候需要拉成偏移 |
||||
|
简单的方式 四个传感器累加的模式 |
||||
|
|
||||
|
*/ |
||||
|
|
||||
|
|
||||
|
void L2_task_adc_sample(TS_task_adc_sample *s) |
||||
|
{ |
||||
|
TTSS_Task_init(): |
||||
|
////cc 初始化尽量放到这里,不要放到main ——init中,减少系统启动的时间
|
||||
|
s->jitter_start = 0; s->ok = 0; |
||||
|
////printf("\r\nADC_SAMPLE\r\n");
|
||||
|
/*
|
||||
|
printf5("\r\nADC_SAMPLE init ch(%d) wantline:%d(%4X) offset %d(%4X)", (int)s->pSPara->ch, |
||||
|
ts_adc_samples[s->pSPara->ch].pSPara->wantline,ts_adc_samples[s->pSPara->ch].pSPara->wantline, |
||||
|
ts_adc_samples[s->pSPara->ch].pSPara->offset,ts_adc_samples[s->pSPara->ch].pSPara->offset); |
||||
|
*/ |
||||
|
|
||||
|
printf1("\r\nADC_SAMPLE init ch(%d) ", (int)s->pSPara->ch); |
||||
|
L1_uartD_waitFree() ; |
||||
|
|
||||
|
s->firstRun = 1; |
||||
|
|
||||
|
/// L2_task_go(D_task_ADC_CHx_SAMPLE_READ);
|
||||
|
L2_task_go_Tdelay(D_task_ADC_CHx_SAMPLE_READ,D_Tdelay_Msec(1500)); //延时15ms
|
||||
|
|
||||
|
TTSS_Task_step(D_task_ADC_CHx_SAMPLE_READ): |
||||
|
if(0 == L0_adc_DOUT_AT(s->pSPara->ch)) |
||||
|
{////L0_uart0_uc('X');L0_uart0_uc(0x30+s->ch);
|
||||
|
//// L0_ADS1231_readCH2(s->ch,&(s->out1)); ////
|
||||
|
L0_ADS1231_readCH2(s->pSPara->ch,&(s->out0)); |
||||
|
L2_task_go(D_task_ADC_CHx_PIANYI); |
||||
|
} |
||||
|
TTSS_Task_step(D_task_ADC_CHx_PIANYI): |
||||
|
s->out1_adc = L3_out_tran(s->out0);///////cc 2023/04/06--6:33:46 最原始的输出
|
||||
|
s->out2_offset = L3_adc_out_offset(s->pSPara->offset,s->out1_adc); |
||||
|
L2_task_go(D_task_ADC_CHx_despiking_shift); |
||||
|
TTSS_Task_step(D_task_ADC_CHx_despiking_shift): |
||||
|
s->outm[0] = s->outm[1]; |
||||
|
s->outm[1] = s->outm[2]; |
||||
|
s->outm[2] = s->out2_offset; |
||||
|
|
||||
|
Lc_despiking_shift3_U16(s->outm);////采样后进行削峰
|
||||
|
s->out3_Peak = s->outm[1]; |
||||
|
|
||||
|
/// s->pSPara->offset = s->pSPara->wantline - s->out3_Peak;
|
||||
|
|
||||
|
if(s->firstRun)///
|
||||
|
{////第一次上电
|
||||
|
L2_task_go(D_task_ADC_CHx_JITTER2); |
||||
|
}else |
||||
|
{ |
||||
|
L2_task_go(D_task_ADC_CHx_SHIFTFILTER); |
||||
|
} |
||||
|
TTSS_Task_step(D_task_ADC_CHx_JITTER2): |
||||
|
|
||||
|
|
||||
|
if(s->jitter_start < D_ADC_JITTER_FINISH) |
||||
|
{ |
||||
|
///printfs("\r\n D_ADC_JITTER_zero---");
|
||||
|
L1_uartD_uc('9'); |
||||
|
s->jitter_start ++; |
||||
|
L2_task_go(D_task_ADC_CHx_SAMPLE_READ); |
||||
|
}else |
||||
|
{ |
||||
|
/// 上电的时候如果没有重量可以这样 ,如果有呢??
|
||||
|
///L3_out_zero(s->ch);///算出当前的偏移量 更新offset
|
||||
|
|
||||
|
s->pSPara->offset = L3_adc_get_offset(s->pSPara->wantline,s->out1_adc);///必须out1_adc 因为偏移是针对 out1_adc的
|
||||
|
/// s->pSPara->offset = s->pSPara->wantline - s->out3_Peak;
|
||||
|
|
||||
|
printfs("\r\n D_ADC_JITTER_zero---"); |
||||
|
///printf3("\r\n ch(%d) out3_Peak %5d %5X ",(int)s->pSPara->ch,s->out3_Peak,s->out3_Peak );
|
||||
|
|
||||
|
printf4("\r\n ch(%d) adc=%5d ->offset %5d wantline %5d ",(int)s->pSPara->ch,s->out1_adc,s->pSPara->offset,s->pSPara->wantline); |
||||
|
printf4("\r\n ch(%d) adc=%5X ->offset %5X wantline %5X ",(int)s->pSPara->ch,s->out1_adc,s->pSPara->offset,s->pSPara->wantline); |
||||
|
|
||||
|
s->ts_SAa.average = (vU32)s->out3_Peak;/// shiftaverage_a路初始化
|
||||
|
s->ts_SAa.sum = s->ts_SAa.average << s->pSPara->ashift; |
||||
|
/**
|
||||
|
s->ts_SAb.average = (vU32)s->out3_Peak;/// shiftaverage_b路初始化
|
||||
|
s->ts_SAb.sum = s->ts_SAb.average << s->pSPara->bshift; |
||||
|
*/ |
||||
|
|
||||
|
s->firstRun = 0; |
||||
|
///刚开始的抖动,先去掉几个最开始的数据
|
||||
|
L2_task_go(D_task_ADC_CHx_SHIFTFILTER); |
||||
|
} |
||||
|
TTSS_Task_step(D_task_ADC_CHx_SHIFTFILTER): |
||||
|
//L0_uart0_uc('B');
|
||||
|
s->ts_SAa.sum -= s->ts_SAa.average; |
||||
|
s->ts_SAa.sum += (vU32)s->out3_Peak; |
||||
|
s->ts_SAa.average = s->ts_SAa.sum >> s->pSPara->ashift; |
||||
|
// s->ts_SAa.new = s->ts_SAa.average;
|
||||
|
s->ts_SAa.out4_shift = (vU16)s->ts_SAa.average; |
||||
|
/// L0_uart0_uc('s');
|
||||
|
|
||||
|
L2_task_go(D_task_ADC_CHx_SHIFTFILTER2); |
||||
|
TTSS_Task_step(D_task_ADC_CHx_SHIFTFILTER2): |
||||
|
|
||||
|
|
||||
|
s->ok = 1; |
||||
|
L2_task_go(D_task_ADC_CHx_SAMPLE_READ); |
||||
|
|
||||
|
/// L2_task_go(D_task_ADC_CHx_SAMPLE_OUT);
|
||||
|
TTSS_Task_step(D_task_ADC_CHx_SAMPLE_OUT): |
||||
|
|
||||
|
/***
|
||||
|
L0_uart0_ulhex(s->out0); L0_uart0_uc(0x09); |
||||
|
L0_uart0_ushex(s->out1); L0_uart0_uc(0x09); |
||||
|
L0_uart0_ushex(s->out2); L0_uart0_uc(0x09); |
||||
|
L0_uart0_ushex(s->ts_SAa.out4); L0_uart0_uc(0x09); |
||||
|
L0_uart0_ushex(s->ts_SAb.out4); |
||||
|
L0_uart0_0d0a(); |
||||
|
|
||||
|
|
||||
|
**/ |
||||
|
|
||||
|
////
|
||||
|
//// L0_uart0_uc('0' + s->ch);L0_uart0_uc('A');//
|
||||
|
TTSS_Task_end(); |
||||
|
} |
||||
|
|
||||
|
#if 0 |
||||
|
void L3_out_zero(u8 ch) |
||||
|
{ |
||||
|
vS16 t,m; |
||||
|
|
||||
|
|
||||
|
t = ts_adc_samples[ch].out1_adc; |
||||
|
m = ts_adc_samples[ch].SPara.wantline; |
||||
|
m -= t; |
||||
|
ts_adc_samples[ch].SPara.offset = (vU16)m; |
||||
|
/// L0_waitFree_uartN(0);///混搭使用printf的时候必须加上
|
||||
|
/// printf("\r\nzeroout = %4x offset= 0x%4x\r\n", ts_adc_samples[ch].zeroout,ts_adc_samples[ch].offset);
|
||||
|
|
||||
|
/// D_ADC_OFFSET(ch) = ts_adc_samples[ch].zeroout - ts_adc_samples[ch].out1;
|
||||
|
} |
||||
|
|
||||
|
|
||||
|
vU16 L3_out_offset222(u8 ch,vU16 t16) |
||||
|
{ |
||||
|
vU16 out; |
||||
|
|
||||
|
/// L0_uart0_ushex(t16); L0_uart0_uc(' ');
|
||||
|
if(t16 & 0x8000) //最高位为1,<0则
|
||||
|
{ |
||||
|
t16 = 0xffFF - t16;///转变为正数
|
||||
|
///*d = D_ADC_OFFSET - t16;
|
||||
|
out = ts_adc_samples[ch].SPara.offset - t16; |
||||
|
// L0_uart0_uc('$'); L0_uart0_ushex(ts_adc_samples[ch].offset);L0_uart0_uc(' ');
|
||||
|
}else |
||||
|
{ |
||||
|
out = t16 + ts_adc_samples[ch].SPara.offset; |
||||
|
} |
||||
|
// L0_uart0_ushex(out);L0_uart0_uc(' '); L0_uart0_uc('R');L0_uart0_0d0a();
|
||||
|
return out; |
||||
|
} |
||||
|
|
||||
|
vU16 L3_out_tran2(vU32 rdata) |
||||
|
{ |
||||
|
vU16 t16; |
||||
|
//// L0_ADS1231_readCH2(0,&rdata);
|
||||
|
// L0_uart0_uc('0'+ch); L0_uart0_uc(0x09);
|
||||
|
// L0_uart0_ulhex(rdata); L0_uart0_uc(0x09);
|
||||
|
if (rdata > 0x007fFFff) |
||||
|
{ |
||||
|
rdata >>= D_sensor_zoom; ///fixme:此处正负差和移位不一致需要谨慎
|
||||
|
rdata |= D_sensor_zoom_FF; /// 1111 1100
|
||||
|
}else |
||||
|
{ |
||||
|
rdata >>= D_sensor_zoom; |
||||
|
} |
||||
|
|
||||
|
// L0_uart0_ulhex(rdata); L0_uart0_uc(0x09);
|
||||
|
t16 = rdata; |
||||
|
// L0_uart0_ushex(t16); L0_uart0_uc(0x09);
|
||||
|
///L0_uart0_0d0a();
|
||||
|
return t16; |
||||
|
} |
||||
|
|
||||
|
void L3_task_show_init(void) |
||||
|
{ |
||||
|
//显示任务初始化
|
||||
|
L1_task_init(&ts_adc_blur_show.task); |
||||
|
L3_task_s_go(ts_adc_blur_show,D_task_init); |
||||
|
ts_adc_blur_show.rough_weight = 0; |
||||
|
|
||||
|
} |
||||
|
|
||||
|
//中值滤波任务
|
||||
|
#define D_task_ADC_CHx_FILTER_MID_GET 0x50 |
||||
|
#define D_task_ADC_CHx_FILTER_MID_COUNT 0x51 |
||||
|
#define D_task_ADC_CHx_FILTER_MID_OUT 0x52 |
||||
|
void L3_task_adc_filter_mid(S_TASK_ADC_BLUR_MID *s) |
||||
|
{ |
||||
|
TTSS_Task_init() |
||||
|
L2_task_go(D_task_ADC_CHx_FILTER_MID_GET); |
||||
|
|
||||
|
TTSS_Task_step(D_task_ADC_CHx_FILTER_MID_GET) |
||||
|
if(ts_adc_channel_samples[s->ch].n >= s->max) |
||||
|
{ |
||||
|
U8 i = 0; |
||||
|
for(i=0;i<s->max;i++) |
||||
|
{ |
||||
|
s->in[i] = ts_adc_channel_samples[s->ch].out1[i]; |
||||
|
} |
||||
|
ts_adc_channel_samples[s->ch].n = 0; |
||||
|
L2_task_go(D_task_ADC_CHx_FILTER_MID_COUNT); |
||||
|
} |
||||
|
|
||||
|
TTSS_Task_step(D_task_ADC_CHx_FILTER_MID_COUNT) |
||||
|
s->midval = Lc_S32_media(s->in, s->max); |
||||
|
L2_task_go(D_task_ADC_CHx_FILTER_MID_OUT); |
||||
|
|
||||
|
TTSS_Task_step(D_task_ADC_CHx_FILTER_MID_OUT) |
||||
|
s->out[s->n] = s->midval; |
||||
|
//R.adval[s->ch] = s->out[s->n];
|
||||
|
s->n++; |
||||
|
if(s->n >= MAX_OUT_NUM) |
||||
|
{ |
||||
|
s->n = 0; |
||||
|
} |
||||
|
L2_task_go(D_task_ADC_CHx_FILTER_MID_GET); |
||||
|
|
||||
|
TTSS_Task_end(); |
||||
|
|
||||
|
|
||||
|
} |
||||
|
|
||||
|
//均值滤波任务
|
||||
|
#define D_task_ADC_CHx_FILTER_AVG_GET 0x50 |
||||
|
#define D_task_ADC_CHx_FILTER_AVG_COUNT 0x51 |
||||
|
#define D_task_ADC_CHx_FILTER_AVG_OUT 0x52 |
||||
|
void L3_task_adc_filter_avg(S_TASK_ADC_BLUR_AVG *s) |
||||
|
{ |
||||
|
TTSS_Task_init() |
||||
|
L2_task_go(D_task_ADC_CHx_FILTER_AVG_GET); |
||||
|
|
||||
|
TTSS_Task_step(D_task_ADC_CHx_FILTER_AVG_GET) |
||||
|
if(ts_adc_channel_samples[s->ch].n >= s->max) |
||||
|
{ |
||||
|
U8 i = 0; |
||||
|
ts_adc_channel_samples[s->ch].n = 0; |
||||
|
for(i=0;i<s->max;i++) |
||||
|
{ |
||||
|
s->in[i] = ts_adc_channel_samples[s->ch].out1[i]; |
||||
|
} |
||||
|
L2_task_go(D_task_ADC_CHx_FILTER_AVG_COUNT); |
||||
|
} |
||||
|
|
||||
|
TTSS_Task_step(D_task_ADC_CHx_FILTER_AVG_COUNT) |
||||
|
s->avgval = Lc_vS32_avg(s->in,s->max); |
||||
|
L2_task_go(D_task_ADC_CHx_FILTER_AVG_OUT); |
||||
|
|
||||
|
TTSS_Task_step(D_task_ADC_CHx_FILTER_AVG_OUT) |
||||
|
s->out[s->n] = s->avgval; |
||||
|
//R.adval[s->ch] = s->out[s->n];
|
||||
|
s->n++; |
||||
|
if(s->n >= MAX_OUT_NUM) |
||||
|
{ |
||||
|
s->n = 0; |
||||
|
} |
||||
|
L2_task_go(D_task_ADC_CHx_FILTER_AVG_GET); |
||||
|
|
||||
|
TTSS_Task_end(); |
||||
|
|
||||
|
|
||||
|
} |
||||
|
|
||||
|
|
||||
|
//移位滤波任务
|
||||
|
#define D_task_ADC_CHx_FILTER_SHIFT_GET 0x50 |
||||
|
#define D_task_ADC_CHx_FILTER_SHIFT_COUNT 0x51 |
||||
|
#define D_task_ADC_CHx_FILTER_SHIFT_OUT 0x52 |
||||
|
void L3_task_adc_ShiftFilter(TS_TASK_ADC_SHIFTFILTER *s) |
||||
|
{ |
||||
|
TTSS_Task_init() |
||||
|
s->average = ts_adc_samples[s->ch].out2;///
|
||||
|
s->sum = s->average << s->shift; |
||||
|
L2_task_go(D_task_ADC_CHx_FILTER_SHIFT_GET); |
||||
|
|
||||
|
TTSS_Task_step(D_task_ADC_CHx_FILTER_SHIFT_GET) |
||||
|
s->sum += |
||||
|
|
||||
|
|
||||
|
TTSS_Task_step(D_task_ADC_CHx_FILTER_SHIFT_COUNT) |
||||
|
s->sum[0] -= s->shiftval[0]; |
||||
|
s->sum[0] += s->in; |
||||
|
s->shiftval[0] = s->sum[0] >> s->shiftreg[0]; |
||||
|
s->sum[1] -= s->shiftval[1]; |
||||
|
s->sum[1] += s->in; |
||||
|
s->shiftval[1] = s->sum[1] >> s->shiftreg[1]; |
||||
|
s->sum[2] -= s->shiftval[2]; |
||||
|
s->sum[2] += s->in; |
||||
|
s->shiftval[2] = s->sum[2] >> s->shiftreg[2]; |
||||
|
L2_task_go(D_task_ADC_CHx_FILTER_SHIFT_OUT); |
||||
|
|
||||
|
TTSS_Task_step(D_task_ADC_CHx_FILTER_SHIFT_OUT) |
||||
|
s->out[0][s->n] = s->shiftval[0]; |
||||
|
s->out[1][s->n] = s->shiftval[1]; |
||||
|
s->out[2][s->n] = s->shiftval[2]; |
||||
|
|
||||
|
|
||||
|
//R.adval[s->ch] = s->out[0][s->n] = s->shiftval[0];
|
||||
|
s->n++; |
||||
|
if(s->n >= MAX_OUT_NUM) |
||||
|
{ |
||||
|
s->n = 0; |
||||
|
} |
||||
|
L2_task_go(D_task_ADC_CHx_FILTER_SHIFT_GET); |
||||
|
|
||||
|
TTSS_Task_end(); |
||||
|
|
||||
|
} |
||||
|
|
||||
|
|
||||
|
//输出判定任务
|
||||
|
#define D_task_ADC_CHx_FILTER_OUT_GET 0x50 |
||||
|
#define D_task_ADC_CHx_FILTER_OUT_COUNT 0x51 |
||||
|
#define D_task_ADC_CHx_FILTER_OUT_CHANGE 0x52 |
||||
|
#define D_task_ADC_CHx_FILTER_OUT_OUT 0x53 |
||||
|
void L3_task_adc_filter_out(S_TASK_ADC_BLUR_OUT *s) |
||||
|
{ |
||||
|
TTSS_Task_init() |
||||
|
L2_task_go(D_task_ADC_CHx_FILTER_OUT_GET); |
||||
|
|
||||
|
TTSS_Task_step(D_task_ADC_CHx_FILTER_OUT_GET) |
||||
|
if(s->h != ts_adc_blur_shift[s->ch].n) |
||||
|
{ |
||||
|
s->h = ts_adc_blur_shift[s->ch].n; |
||||
|
s->in[0] = ts_adc_blur_avg[s->ch].out[count_n(ts_adc_blur_avg[s->ch].n, 1)]; |
||||
|
s->in[1] = ts_adc_blur_avg[s->ch].out[count_n(ts_adc_blur_avg[s->ch].n, 2)]; |
||||
|
//获取输出曲线val
|
||||
|
s->newout = ts_adc_blur_shift[s->ch].out[s->oldnum][count_n(ts_adc_blur_shift[s->ch].n, 1)]; |
||||
|
L2_task_go(D_task_ADC_CHx_FILTER_OUT_COUNT); |
||||
|
} |
||||
|
|
||||
|
TTSS_Task_step(D_task_ADC_CHx_FILTER_OUT_COUNT) //根据阀值选择输出的曲线
|
||||
|
//判断选择新曲线
|
||||
|
if(Lc_abs(s->in[0] , s->in[1]) >= s->threshold[0])//2KG
|
||||
|
{ |
||||
|
s->newnum = 0; |
||||
|
} |
||||
|
else if(Lc_abs(s->in[0] , s->in[1]) >= s->threshold[1]) //0.5KG
|
||||
|
{ |
||||
|
s->newnum = 1; |
||||
|
} |
||||
|
else |
||||
|
{ |
||||
|
s->newnum = 2; |
||||
|
} |
||||
|
//L2_task_go(D_task_ADC_CHx_FILTER_OUT_OUT);
|
||||
|
L2_task_go(D_task_ADC_CHx_FILTER_OUT_CHANGE); |
||||
|
|
||||
|
TTSS_Task_step(D_task_ADC_CHx_FILTER_OUT_CHANGE) |
||||
|
if(s->newnum != s->oldnum)//切换移位滤波时调整其他滤波的SUM
|
||||
|
{ |
||||
|
s->oldnum = s->newnum; //不能只调整新值,所有曲线都要一起调整
|
||||
|
//ts_adc_blur_shift[s->ch].sum[1] = (ts_adc_blur_avg[s->ch].out[ts_adc_blur_avg[s->ch].n] * R.adc_blur_avg);
|
||||
|
ts_adc_blur_shift[s->ch].sum[0] = s->newout << ts_adc_blur_shift[s->ch].shiftreg[0]; |
||||
|
ts_adc_blur_shift[s->ch].shiftval[0] = s->newout; |
||||
|
ts_adc_blur_shift[s->ch].sum[1] = s->newout << ts_adc_blur_shift[s->ch].shiftreg[1]; |
||||
|
ts_adc_blur_shift[s->ch].shiftval[1] = s->newout; |
||||
|
ts_adc_blur_shift[s->ch].sum[2] = s->newout << ts_adc_blur_shift[s->ch].shiftreg[2]; |
||||
|
ts_adc_blur_shift[s->ch].shiftval[2] = s->newout; |
||||
|
} |
||||
|
L2_task_go(D_task_ADC_CHx_FILTER_OUT_OUT); |
||||
|
|
||||
|
TTSS_Task_step(D_task_ADC_CHx_FILTER_OUT_OUT) |
||||
|
R.adval[s->ch] = s->newout; |
||||
|
//R.adval[s->ch] = ts_adc_channel_samples[s->ch].adcval;
|
||||
|
L2_task_go(D_task_ADC_CHx_FILTER_OUT_GET); |
||||
|
|
||||
|
TTSS_Task_end(); |
||||
|
|
||||
|
} |
||||
|
|
||||
|
|
||||
|
//显示任务
|
||||
|
#define D_task_ADC_CHx_SHOW 0x50 |
||||
|
void L3_task_adc_filter_show(S_TASK_ADC_BLUR_SHOW *s) |
||||
|
{ |
||||
|
TTSS_Task_init() |
||||
|
L2_task_go(D_task_ADC_CHx_SHOW); |
||||
|
|
||||
|
TTSS_Task_step(D_task_ADC_CHx_SHOW) |
||||
|
R.ch_weight[0] = D_COUNT_WEIGHT(R.adval[0]); |
||||
|
R.ch_weight[1] = D_COUNT_WEIGHT(R.adval[1]); |
||||
|
R.ch_weight[2] = D_COUNT_WEIGHT(R.adval[2]); |
||||
|
R.ch_weight[3] = D_COUNT_WEIGHT(R.adval[3]); |
||||
|
s->rough_weight = R.ch_weight[0] + R.ch_weight[1] + R.ch_weight[2] + R.ch_weight[3]; //毛重
|
||||
|
#if 0 |
||||
|
L0_uart0_ulhex(s->rough_weight); |
||||
|
L0_uart0_uc(' '); |
||||
|
#endif |
||||
|
if( ABS(R.rough_weight,s->rough_weight) >= 50) //变化超过0.05KG
|
||||
|
{ |
||||
|
R.rough_weight = s->rough_weight; |
||||
|
R.total_weight = (R.rough_weight > R.total_zweight) ? (R.rough_weight - R.total_zweight) : (0);//净重
|
||||
|
} |
||||
|
L2_task_go_Tdelay(D_task_ADC_CHx_SHOW,D_Tdelay_Msec(15)); //延时15ms
|
||||
|
|
||||
|
TTSS_Task_end(); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
/*******
|
||||
|
ts_adc_channel_samples[ch].status = (R.p.adc_ch_status >> ch) & 0x1; |
||||
|
ts_adc_channel_samples[ch].pool = 0; |
||||
|
ts_adc_channel_samples[ch].adcval = 0; |
||||
|
ts_adc_channel_samples[ch].n = 0; |
||||
|
ts_adc_channel_samples[ch].ch = D_ADCCH_1 + ch; |
||||
|
|
||||
|
//通道中值滤波任务初始化
|
||||
|
L1_task_init(&ts_adc_blur_mid[ch].task); |
||||
|
L3_task_s_go(ts_adc_blur_mid[ch],D_task_init); |
||||
|
ts_adc_blur_mid[ch].n = 0; |
||||
|
ts_adc_blur_mid[ch].max = R.p.adc_blur_mid; |
||||
|
ts_adc_blur_mid[ch].ch = D_ADCCH_1 + ch; |
||||
|
|
||||
|
//通道均值滤波任务初始化
|
||||
|
L1_task_init(&ts_adc_blur_avg[ch].task); |
||||
|
L3_task_s_go(ts_adc_blur_avg[ch],D_task_init); |
||||
|
ts_adc_blur_avg[ch].max = R.p.adc_blur_avg; |
||||
|
ts_adc_blur_avg[ch].avgval = 0; |
||||
|
ts_adc_blur_avg[ch].n = 0; |
||||
|
ts_adc_blur_avg[ch].ch = D_ADCCH_1 + ch; |
||||
|
|
||||
|
//通道移位滤波任务初始化
|
||||
|
L1_task_init(&ts_adc_blur_shift[ch].task); |
||||
|
L3_task_s_go(ts_adc_blur_shift[ch],D_task_init); |
||||
|
ts_adc_blur_shift[ch].n = 0; |
||||
|
ts_adc_blur_shift[ch].h = 0; |
||||
|
ts_adc_blur_shift[ch].shiftreg[0] = R.p.adc_blur_shift[0]; |
||||
|
ts_adc_blur_shift[ch].shiftreg[1] = R.p.adc_blur_shift[1]; |
||||
|
ts_adc_blur_shift[ch].shiftreg[2] = R.p.adc_blur_shift[2]; |
||||
|
ts_adc_blur_shift[ch].sum[0] = 0; |
||||
|
ts_adc_blur_shift[ch].sum[1] = 0; |
||||
|
ts_adc_blur_shift[ch].sum[2] = 0; |
||||
|
ts_adc_blur_shift[ch].shiftval[0] = 0; |
||||
|
ts_adc_blur_shift[ch].shiftval[1] = 0; |
||||
|
ts_adc_blur_shift[ch].shiftval[2] = 0; |
||||
|
ts_adc_blur_shift[ch].ch = D_ADCCH_1 + ch; |
||||
|
|
||||
|
//输出判定任务初始化
|
||||
|
L1_task_init(&ts_adc_blur_out[ch].task); |
||||
|
L3_task_s_go(ts_adc_blur_out[ch],D_task_init); |
||||
|
ts_adc_blur_out[ch].h= 0; |
||||
|
ts_adc_blur_out[ch].threshold[0] = D_blur_threshold_2_1(R.p.adc_blur_threshold[0]); //2KG
|
||||
|
ts_adc_blur_out[ch].threshold[1] = D_blur_threshold_2_1(R.p.adc_blur_threshold[1]); //0.5KG
|
||||
|
ts_adc_blur_out[ch].newnum = 0; |
||||
|
ts_adc_blur_out[ch].oldnum = 0; |
||||
|
ts_adc_blur_out[ch].oldout = 0; |
||||
|
ts_adc_blur_out[ch].newout = 0; |
||||
|
ts_adc_blur_out[ch].n = 0; |
||||
|
ts_adc_blur_out[ch].ch = D_ADCCH_1 + ch; |
||||
|
*****/ |
||||
|
|
||||
|
#if 0 |
||||
|
//通道切换任务初始化
|
||||
|
//L1_task_init(&ts_adc_channel_switch.task);
|
||||
|
L3_task_s_go(ts_adc_channel_switch,D_task_init); |
||||
|
#endif |
||||
|
|
||||
|
#endif |
||||
|
|
||||
|
|
||||
@ -0,0 +1,143 @@ |
|||||
|
////////////////////////////////////////////////////////////////////////////
|
||||
|
///@copyright Copyright (c) 2018, 传控科技 All rights reserved.
|
||||
|
///-------------------------------------------------------------------------
|
||||
|
/// @file bsp_drv.h
|
||||
|
/// @brief bsp @ driver config
|
||||
|
///-------------------------------------------------------------------------
|
||||
|
/// @version 1.0
|
||||
|
/// @author CC
|
||||
|
/// @date 20180331
|
||||
|
/// @note cc_AS_stc02
|
||||
|
|
||||
|
//////////////////////////////////////////////////////////////////////////////
|
||||
|
|
||||
|
#ifndef _asp_schain_H |
||||
|
#define _asp_schain_H |
||||
|
|
||||
|
#include "bsp_config.h" |
||||
|
#include "TTSS_task.h" |
||||
|
#include "c_lib.h" |
||||
|
///#include "app_config.h"
|
||||
|
|
||||
|
#define D_Wch1 0 |
||||
|
#define D_Wch2 1 |
||||
|
#define D_Wch3 2 |
||||
|
#define D_Wch4 3 |
||||
|
|
||||
|
|
||||
|
#define ADC_CHANNEL_STATUS_UNREADY 0 //UnReady状态,不能读取
|
||||
|
#define ADC_CHANNEL_STATUS_READY 1 //ready状态,可以读取
|
||||
|
|
||||
|
|
||||
|
#define D_ADC_CHANNEL_NUM 4 |
||||
|
#define D_ADC_CH_SAMPLE_BUF_MAX 50 |
||||
|
#define D_ADC_CH_BLUE_POOL_NUM 3 |
||||
|
|
||||
|
typedef struct |
||||
|
{ |
||||
|
vU32 average; ///
|
||||
|
//// vU8 shift; ///移动的位数 1-2 2-4 3-8 4-16
|
||||
|
vU32 sum; |
||||
|
vU32 new; ///新的输出值
|
||||
|
vU16 out4_shift; ///
|
||||
|
}TS_shift_averge_; |
||||
|
|
||||
|
|
||||
|
|
||||
|
typedef struct |
||||
|
{///!!!!!和 D_TS_adc_SPara_LEN 需要一一对应
|
||||
|
u8 rev1; ////= 0x30 第一次运行
|
||||
|
u8 ch; |
||||
|
vU16 wantline; ///固定的硬件参数(例如称重中的0kg,压力中的0压力)时想要输出的adc的值
|
||||
|
vU16 offset; ///当前adc被偏移到wantline的时候 和原始值out_adc的差值 一般=(wantline-原始adc)
|
||||
|
vU8 ashift; ///移动的位数 1-2 2-4 3-8 4-16
|
||||
|
vU8 bshift444; ///移动的位数 1-2 2-4 3-8 4-16 fixme:需要开放时调整
|
||||
|
// u8 rev1;
|
||||
|
// u8 rev2;
|
||||
|
// u8 rev2;
|
||||
|
}TS_adc_SPara_; |
||||
|
|
||||
|
extern TS_adc_SPara_ TS_adc_SPara[D_ADC_CHANNEL_NUM]; |
||||
|
|
||||
|
|
||||
|
#define D_TS_adc_SPara_LEN (8) |
||||
|
|
||||
|
|
||||
|
//AD_CHANNEL_SAMPLE 采样
|
||||
|
#define MAX_OUT_NUM 10 |
||||
|
typedef struct |
||||
|
{ TS_task task; |
||||
|
/////S参数区
|
||||
|
TS_adc_SPara_ *pSPara; |
||||
|
/////S参数区
|
||||
|
vU8 firstRun; |
||||
|
|
||||
|
vU8 ok; |
||||
|
vU8 jitter_start; ///刚开始的抖动,先去掉几个最开始的数据
|
||||
|
vU32 out0; |
||||
|
vU16 out1_adc; |
||||
|
vU16 out2_offset; |
||||
|
vU16 out3_Peak; |
||||
|
TS_shift_averge_ ts_SAa; |
||||
|
/// TS_shift_averge_ ts_SAb; fixme:需要开放时调整
|
||||
|
vU16 outm[3];///中值移位滤波的缓存
|
||||
|
vU16 out4_shift;//滤波输出
|
||||
|
vU16 out5;////选择后的
|
||||
|
}TS_task_adc_sample; |
||||
|
extern TS_task_adc_sample ts_adc_samples[D_ADC_CHANNEL_NUM]; |
||||
|
extern void L2_task_adc_init(U8 ch); |
||||
|
extern void L2_task_adc_sample(TS_task_adc_sample *s); |
||||
|
extern void L2_task_adc_SAinit(U8 ch,U8 *a,U8 *b); |
||||
|
void L3_out_zero(u8 ch); |
||||
|
|
||||
|
#endif // #ifndef _asp_adc_H
|
||||
|
|
||||
|
|
||||
|
|
||||
|
#if 0 |
||||
|
///cc 2023/04/08--4:7:12 准备删除
|
||||
|
|
||||
|
////cc 比较重要的滤波调整参数,根据实际需要进行调整
|
||||
|
#define D_ADC_shiftaverage_a 2 |
||||
|
#define D_ADC_shiftaverage_b 4 |
||||
|
///vtype i; vU32 rdata = 0;
|
||||
|
//任务读
|
||||
|
/// 单个传感器 D_sensor_zoom=8 2kg 289 80kg 8374
|
||||
|
/// D_sensor_zoom=6 1274 31787
|
||||
|
///#define D_sensor_zoom 6
|
||||
|
///#define D_sensor_zoom_FF 0xFFfc0000
|
||||
|
|
||||
|
#define D_sensor_zoom 7 |
||||
|
#define D_sensor_zoom_FF 0xFFfe0000 |
||||
|
|
||||
|
|
||||
|
///#define D_sensor_zoom 8///实际上8位不需要,因为强制转换成16位后自动符合要求
|
||||
|
///#define D_sensor_zoom_FF 0xfF000000
|
||||
|
//// 31688 80kg 31688/80= =400
|
||||
|
|
||||
|
//#define D_ADC_PER_KG 400 ///每公斤adc
|
||||
|
//#define D_ADC_OFFSET (20*D_ADC_PER_KG)
|
||||
|
///134
|
||||
|
///extern TS_GlobalRegister R;
|
||||
|
|
||||
|
#define D_ADC_PER_KG 0x134///每公斤adc
|
||||
|
#define D_ADC_OFFSET(ch) ts_adc_samples[ch].offset////(30*D_ADC_PER_KG)
|
||||
|
///#define D_ADC_OFFSET(ch) 0////(30*D_ADC_PER_KG)
|
||||
|
/*****
|
||||
|
000028FE 1kg 81.984375 |
||||
|
00015D85 3kg 699.0390625 617.0546875 |
||||
|
|
||||
|
2^7 128 0x134 |
||||
|
******/ |
||||
|
|
||||
|
#endif |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
@ -0,0 +1,173 @@ |
|||||
|
#include "SL_Sc7a20_FreeFall_Driver.h" |
||||
|
#include "msp_iicM1.h" |
||||
|
|
||||
|
unsigned char SL_MEMS_i2c_spi_Write(unsigned char reg, unsigned char dat) |
||||
|
{ |
||||
|
///void L2_IICM1_WriteCmd(unsigned char sla,unsigned char reg,unsigned char cmd)
|
||||
|
L2_IICM1_WriteCmd(SC7A20_IIC_ADDRESS, reg, dat); //由客户的II函数接口决定
|
||||
|
return 1; |
||||
|
} |
||||
|
|
||||
|
unsigned char SL_MEMS_i2c_spi_Read(unsigned char reg, unsigned char len, unsigned char *buf) |
||||
|
{ |
||||
|
///void L2_IICM1_ReadReg(unsigned char sla,unsigned char reg,
|
||||
|
/// unsigned char *r,unsigned char n)
|
||||
|
L2_IICM1_ReadReg( SC7A20_IIC_ADDRESS, reg, buf, len);//由客户的II函数接口决定
|
||||
|
return 1; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
/***************在线测试**********************/ |
||||
|
signed char SL_SC7A20_Online_Test(void) |
||||
|
{ |
||||
|
unsigned char SL_Read_Reg=0xff; |
||||
|
SL_SC7A20_I2c_Spi_Read(SL_SC7A20_SPI_IIC_MODE,0x0F,1, &SL_Read_Reg); |
||||
|
if(SL_Read_Reg==SC7A20_CHIP_ID_VALUE) return 1; |
||||
|
else return -1; |
||||
|
} |
||||
|
|
||||
|
/***************BOOT 重载内部寄存器值*********************/ |
||||
|
signed char SL_SC7A20_BOOT(void) |
||||
|
{ |
||||
|
unsigned char SL_Read_Reg=0xff; |
||||
|
SL_SC7A20_I2c_Spi_Read(SL_SC7A20_SPI_IIC_MODE,0x24,1, &SL_Read_Reg); |
||||
|
SL_Read_Reg=SL_SC7A20_BOOT_ENABLE|SL_Read_Reg; |
||||
|
SL_SC7A20_I2c_Spi_Write(SL_SC7A20_SPI_IIC_MODE,0x24, SL_Read_Reg); |
||||
|
return 1; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
/***************传感器量程设置**********************/ |
||||
|
signed char SL_SC7A20_FS_Config(unsigned char Sc7a20_FS_Reg) |
||||
|
{ |
||||
|
unsigned char SL_Read_Reg=0xff,SL_Write_Reg; |
||||
|
SL_SC7A20_I2c_Spi_Read(SL_SC7A20_SPI_IIC_MODE,0x23,1, &SL_Read_Reg); |
||||
|
// SL_Write_Reg=0x80|Sc7a20_FS_Reg|SL_SC7A20_HR_ENABLE;
|
||||
|
SL_Write_Reg=0x80|Sc7a20_FS_Reg; |
||||
|
SL_SC7A20_I2c_Spi_Write(SL_SC7A20_SPI_IIC_MODE,0x23, SL_Write_Reg); |
||||
|
SL_SC7A20_I2c_Spi_Read(SL_SC7A20_SPI_IIC_MODE,0x23,1, &SL_Read_Reg); |
||||
|
if(SL_Read_Reg==SL_Write_Reg) return 1; |
||||
|
else return -1; |
||||
|
} |
||||
|
|
||||
|
/***************数据更新速率**加速度计使能**********/ |
||||
|
signed char SL_SC7A20_Power_Config(unsigned char Power_Config_Reg) |
||||
|
{ |
||||
|
unsigned char SL_Read_Reg; |
||||
|
|
||||
|
#if SL_SC7A20_MTP_ENABLE == 0X01 |
||||
|
SL_Read_Reg = 0x00; |
||||
|
SL_SC7A20_I2c_Spi_Write(SL_SC7A20_SPI_IIC_MODE,0x1E, SL_SC7A20_MTP_VALUE); |
||||
|
SL_SC7A20_I2c_Spi_Read(SL_SC7A20_SPI_IIC_MODE,0x57,1, &SL_Read_Reg); |
||||
|
SL_Read_Reg=SL_Read_Reg|SL_SC7A20_SDO_PU_MSK|SL_SC7A20_I2C_PU_MSK; |
||||
|
SL_SC7A20_I2c_Spi_Write(SL_SC7A20_SPI_IIC_MODE,0x57, SL_Read_Reg); |
||||
|
#endif |
||||
|
SL_Read_Reg = 0xff; |
||||
|
SL_SC7A20_I2c_Spi_Write(SL_SC7A20_SPI_IIC_MODE,0x20, Power_Config_Reg); |
||||
|
SL_SC7A20_I2c_Spi_Read(SL_SC7A20_SPI_IIC_MODE,0x20,1, &SL_Read_Reg); |
||||
|
|
||||
|
if(SL_Read_Reg==Power_Config_Reg) return 1; |
||||
|
else return -1; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
/***************数据更新速率**加速度计使能**********/ |
||||
|
signed char SL_SC7A20_FreeFall_Config(void) |
||||
|
{ |
||||
|
unsigned char SL_Read_Reg; |
||||
|
|
||||
|
SL_SC7A20_I2c_Spi_Read(SL_SC7A20_SPI_IIC_MODE,0x24,1, &SL_Read_Reg); |
||||
|
SL_Read_Reg=0x80|SL_Read_Reg;//AOI1 LATCH
|
||||
|
SL_SC7A20_I2c_Spi_Write(SL_SC7A20_SPI_IIC_MODE,0x24, SL_Read_Reg); |
||||
|
|
||||
|
SL_SC7A20_I2c_Spi_Write(SL_SC7A20_SPI_IIC_MODE,0x22, 0x40);//AOI1 映射到INT1
|
||||
|
SL_SC7A20_I2c_Spi_Write(SL_SC7A20_SPI_IIC_MODE,0x25, 0x02);//INT1 默认高电平,有中断输出低电平
|
||||
|
|
||||
|
//FreeFall AOI1
|
||||
|
SL_SC7A20_I2c_Spi_Write(SL_SC7A20_SPI_IIC_MODE,0x30, 0x95); |
||||
|
SL_SC7A20_I2c_Spi_Write(SL_SC7A20_SPI_IIC_MODE,0x32, 0x19); |
||||
|
SL_SC7A20_I2c_Spi_Write(SL_SC7A20_SPI_IIC_MODE,0x33, 0x04); |
||||
|
|
||||
|
SL_SC7A20_I2c_Spi_Read(SL_SC7A20_SPI_IIC_MODE,0x30,1, &SL_Read_Reg); |
||||
|
|
||||
|
if(SL_Read_Reg==0x95) return 1; |
||||
|
else return -1; |
||||
|
} |
||||
|
|
||||
|
#if SL_SC7A20_16BIT_8BIT==0 |
||||
|
/***************加速度计数据读取*8bits*********/ |
||||
|
signed char SL_SC7A20_Read_XYZ_Data(signed char *SL_SC7A20_Data_XYZ_Buf) |
||||
|
{ |
||||
|
unsigned char SL_Read_Buf[7]; |
||||
|
|
||||
|
SL_SC7A20_I2c_Spi_Read(SL_SC7A20_SPI_IIC_MODE,SL_SC7A20_STATUS_REG,1, &SL_Read_Buf[0]); |
||||
|
|
||||
|
if((SL_Read_Buf[0]&0x0f)==0x0f) |
||||
|
{ |
||||
|
#if SL_SC7A20_SPI_IIC_MODE ==1//IIC
|
||||
|
SL_SC7A20_I2c_Spi_Read(SL_SC7A20_SPI_IIC_MODE,SL_SC7A20_DATA_OUT,6, &SL_Read_Buf[1]); |
||||
|
#elif SL_SC7A20_SPI_IIC_MODE ==0//SPI
|
||||
|
SL_SC7A20_I2c_Spi_Read(SL_SC7A20_SPI_IIC_MODE,SL_SC7A20_STATUS_REG,7, &SL_Read_Buf[0]); |
||||
|
#endif |
||||
|
SL_SC7A20_Data_XYZ_Buf[0]=(signed char)SL_Read_Buf[2]; |
||||
|
SL_SC7A20_Data_XYZ_Buf[1]=(signed char)SL_Read_Buf[4]; |
||||
|
SL_SC7A20_Data_XYZ_Buf[2]=(signed char)SL_Read_Buf[6]; |
||||
|
return 1; |
||||
|
} |
||||
|
else |
||||
|
{ |
||||
|
return 0; |
||||
|
} |
||||
|
} |
||||
|
#elif SL_SC7A20_16BIT_8BIT==1 |
||||
|
/***************加速度计数据读取*16bits*********/ |
||||
|
signed char SL_SC7A20_Read_XYZ_Data(signed short *SL_SC7A20_Data_XYZ_Buf) |
||||
|
{ |
||||
|
unsigned char SL_Read_Buf[7]; |
||||
|
|
||||
|
SL_SC7A20_I2c_Spi_Read(SL_SC7A20_SPI_IIC_MODE,SL_SC7A20_STATUS_REG,1, &SL_Read_Buf[0]); |
||||
|
|
||||
|
if((SL_Read_Buf[0]&0x0f)==0x0f) |
||||
|
{ |
||||
|
#if SL_SC7A20_SPI_IIC_MODE ==1//IIC
|
||||
|
SL_SC7A20_I2c_Spi_Read(SL_SC7A20_SPI_IIC_MODE,SL_SC7A20_DATA_OUT,6, &SL_Read_Buf[1]); |
||||
|
#elif SL_SC7A20_SPI_IIC_MODE ==0//SPI
|
||||
|
SL_SC7A20_I2c_Spi_Read(SL_SC7A20_SPI_IIC_MODE,SL_SC7A20_STATUS_REG,7, &SL_Read_Buf[0]); |
||||
|
#endif |
||||
|
SL_SC7A20_Data_XYZ_Buf[0]=(signed short)((SL_Read_Buf[2]<<8) + SL_Read_Buf[1]); |
||||
|
SL_SC7A20_Data_XYZ_Buf[1]=(signed short)((SL_Read_Buf[4]<<8) + SL_Read_Buf[3]); |
||||
|
SL_SC7A20_Data_XYZ_Buf[2]=(signed short)((SL_Read_Buf[6]<<8) + SL_Read_Buf[5]); |
||||
|
return 1; |
||||
|
} |
||||
|
else |
||||
|
{ |
||||
|
return 0; |
||||
|
} |
||||
|
} |
||||
|
#endif |
||||
|
|
||||
|
//自由落体检测
|
||||
|
signed char SL_SC7A20_Freefall_Status(void) |
||||
|
{ |
||||
|
unsigned char sl_freefall_reg; |
||||
|
|
||||
|
SL_SC7A20_I2c_Spi_Read(SL_SC7A20_SPI_IIC_MODE, 0x31,1, &sl_freefall_reg); |
||||
|
//USART_printf( USART1, "SL_reg31:%x!\r\n",sl_freefall_reg);
|
||||
|
if((sl_freefall_reg&0x40)==0x40) |
||||
|
{ |
||||
|
return 1;//自由落体成立
|
||||
|
} |
||||
|
|
||||
|
return 0;//自由落体不成立
|
||||
|
} |
||||
|
|
||||
|
|
||||
|
signed char SL_SC7A20_Power_Down(void)//power down
|
||||
|
{ |
||||
|
unsigned char SL_Read_Reg = 0xff; |
||||
|
SL_SC7A20_I2c_Spi_Write(SL_SC7A20_SPI_IIC_MODE, 0x20, 0x00); |
||||
|
SL_SC7A20_I2c_Spi_Read(SL_SC7A20_SPI_IIC_MODE, 0x20,1, &SL_Read_Reg); |
||||
|
if(SL_Read_Reg==0x00) return 1; |
||||
|
else return -1; |
||||
|
} |
||||
|
|
||||
@ -0,0 +1,207 @@ |
|||||
|
#ifndef __SL_SC7A20_FREEFALL_DRIVER_H__ |
||||
|
#define __SL_SC7A20_FREEFALL_DRIVER_H__ |
||||
|
|
||||
|
|
||||
|
/***使用驱动前请根据实际接线情况配置******/ |
||||
|
/**SC7A20的SDO 脚接地: 0****************/ |
||||
|
/**SC7A20的SDO 脚接电源:1****************/ |
||||
|
#define SC7A20_SDO_VDD_GND 1 |
||||
|
/*****************************************/ |
||||
|
|
||||
|
/***使用驱动前请根据实际IIC情况进行配置***/ |
||||
|
/**SC7A20的IIC 接口地址类型 7bits: 0****/ |
||||
|
/**SC7A20的IIC 接口地址类型 8bits: 1****/ |
||||
|
#define SC7A20_IIC_7BITS_8BITS 0 |
||||
|
/*****************************************/ |
||||
|
|
||||
|
#define SL_SC7A20_16BIT_8BIT 1 |
||||
|
/**SC7A20的数据位数选择 16bits: 1****/ |
||||
|
/**SC7A20的数据位数选择 8bits: 0****/ |
||||
|
/*****************************************/ |
||||
|
|
||||
|
#define SL_SC7A20_SPI_IIC_MODE 1 |
||||
|
/**SC7A20 SPI IIC 选择 SPI: 0****/ |
||||
|
/**SC7A20 SPI IIC 选择 IIC: 1****/ |
||||
|
/*****************************************/ |
||||
|
|
||||
|
|
||||
|
#if SC7A20_SDO_VDD_GND==0 |
||||
|
#define SC7A20_IIC_7BITS_ADDR 0x18 |
||||
|
#define SC7A20_IIC_8BITS_ADDR 0x30 |
||||
|
#else |
||||
|
#define SC7A20_IIC_7BITS_ADDR 0x19 |
||||
|
#define SC7A20_IIC_8BITS_ADDR 0x32 |
||||
|
#endif |
||||
|
|
||||
|
|
||||
|
#if SC7A20_IIC_7BITS_8BITS==0 |
||||
|
#define SC7A20_IIC_ADDRESS SC7A20_IIC_7BITS_ADDR |
||||
|
#else |
||||
|
#define SC7A20_IIC_ADDRESS SC7A20_IIC_8BITS_ADDR |
||||
|
#endif |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
#define SC7A20_CHIP_ID_ADDRESS (unsigned char)0x0F |
||||
|
#define SC7A20_CHIP_ID_VALUE (unsigned char)0x11 |
||||
|
|
||||
|
#define SL_SC7A20_CTRL_REG1 (unsigned char)0x20 |
||||
|
#define SL_SC7A20_CTRL_REG2 (unsigned char)0x21 |
||||
|
#define SL_SC7A20_CTRL_REG3 (unsigned char)0x22 |
||||
|
#define SL_SC7A20_CTRL_REG4 (unsigned char)0x23 |
||||
|
#define SL_SC7A20_CTRL_REG5 (unsigned char)0x24 |
||||
|
#define SL_SC7A20_CTRL_REG6 (unsigned char)0x25 |
||||
|
|
||||
|
#define SL_SC7A20_STATUS_REG (unsigned char)0x27 |
||||
|
|
||||
|
#define SL_SC7A20_OUT_X_L (unsigned char)0x28 |
||||
|
#define SL_SC7A20_OUT_X_H (unsigned char)0x29 |
||||
|
#define SL_SC7A20_OUT_Y_L (unsigned char)0x2A |
||||
|
#define SL_SC7A20_OUT_Y_H (unsigned char)0x2B |
||||
|
#define SL_SC7A20_OUT_Z_L (unsigned char)0x2C |
||||
|
#define SL_SC7A20_OUT_Z_H (unsigned char)0x2D |
||||
|
|
||||
|
#define SL_SC7A20_FIFO_CTRL_REG (unsigned char)0x2E |
||||
|
#define SL_SC7A20_FIFO_SRC_REG (unsigned char)0x2F |
||||
|
|
||||
|
#define SL_SC7A20_INT1_CFG (unsigned char)0x30 |
||||
|
#define SL_SC7A20_INT1_SRC (unsigned char)0x31 |
||||
|
#define SL_SC7A20_INT1_THS (unsigned char)0x32 |
||||
|
#define SL_SC7A20_INT1_DURATION (unsigned char)0x33 |
||||
|
|
||||
|
#define SL_SC7A20_INT2_CFG (unsigned char)0x34 |
||||
|
#define SL_SC7A20_INT2_SRC (unsigned char)0x35 |
||||
|
#define SL_SC7A20_INT2_THS (unsigned char)0x36 |
||||
|
#define SL_SC7A20_INT2_DURATION (unsigned char)0x37 |
||||
|
#define SL_SC7A20_CLICK_CFG (unsigned char)0x38 |
||||
|
#define SL_SC7A20_CLICK_SRC (unsigned char)0x39 |
||||
|
#define SL_SC7A20_CLICK_THS (unsigned char)0x3A |
||||
|
#define SL_SC7A20_TIME_LIMIT (unsigned char)0x3B |
||||
|
#define SL_SC7A20_TIME_LATENCY (unsigned char)0x3C |
||||
|
#define SL_SC7A20_TIME_WINDOW (unsigned char)0x3D |
||||
|
#define SL_SC7A20_ACT_THS (unsigned char)0x3E |
||||
|
#define SL_SC7A20_ACT_DURATION (unsigned char)0x3F |
||||
|
|
||||
|
/*连续读取数据时的数据寄存器地址*/ |
||||
|
#define SL_SC7A20_DATA_OUT (unsigned char)(SL_SC7A20_OUT_X_L|0x80) |
||||
|
|
||||
|
/**********特殊功能寄存器**********/ |
||||
|
/*非原厂技术人员请勿修改*/ |
||||
|
#define SL_SC7A20_MTP_ENABLE 0x00 |
||||
|
#define SL_SC7A20_MTP_CFG (unsigned char)0x1E |
||||
|
#define SL_SC7A20_MTP_VALUE (unsigned char)0x05 |
||||
|
#define SL_SC7A20_SDOI2C_PU_CFG (unsigned char)0x57 |
||||
|
#define SL_SC7A20_SDO_PU_MSK (unsigned char)0x08 |
||||
|
#define SL_SC7A20_I2C_PU_MSK (unsigned char)0x04 |
||||
|
#define SL_SC7A20_HR_ENABLE (unsigned char)0X08 |
||||
|
#define SL_SC7A20_BOOT_ENABLE (unsigned char)0X80 |
||||
|
/*非原厂技术人员请勿修改*/ |
||||
|
|
||||
|
|
||||
|
/***************数据更新速率**加速度计使能**********/ |
||||
|
#define SL_SC7A20_ODR_POWER_DOWN (unsigned char)0x00 |
||||
|
#define SL_SC7A20_ODR_1HZ (unsigned char)0x17 |
||||
|
#define SL_SC7A20_ODR_10HZ (unsigned char)0x27 |
||||
|
#define SL_SC7A20_ODR_25HZ (unsigned char)0x37 |
||||
|
#define SL_SC7A20_ODR_50HZ (unsigned char)0x47 |
||||
|
#define SL_SC7A20_ODR_100HZ (unsigned char)0x57 |
||||
|
#define SL_SC7A20_ODR_200HZ (unsigned char)0x67 |
||||
|
#define SL_SC7A20_ODR_400HZ (unsigned char)0x77 |
||||
|
#define SL_SC7A20_ODR_1600HZ (unsigned char)0x87 |
||||
|
#define SL_SC7A20_ODR_1250HZ (unsigned char)0x97 |
||||
|
#define SL_SC7A20_ODR_5000HZ (unsigned char)0x9F |
||||
|
|
||||
|
#define SL_SC7A20_LOWER_POWER_ODR_1HZ (unsigned char)0x1F |
||||
|
#define SL_SC7A20_LOWER_POWER_ODR_10HZ (unsigned char)0x2F |
||||
|
#define SL_SC7A20_LOWER_POWER_ODR_25HZ (unsigned char)0x3F |
||||
|
#define SL_SC7A20_LOWER_POWER_ODR_50HZ (unsigned char)0x4F |
||||
|
#define SL_SC7A20_LOWER_POWER_ODR_100HZ (unsigned char)0x5F |
||||
|
#define SL_SC7A20_LOWER_POWER_ODR_200HZ (unsigned char)0x6F |
||||
|
#define SL_SC7A20_LOWER_POWER_ODR_400HZ (unsigned char)0x7F |
||||
|
/***************数据更新速率**加速度计使能**********/ |
||||
|
|
||||
|
|
||||
|
/***************传感器量程设置**********************/ |
||||
|
#define SL_SC7A20_FS_2G (unsigned char)0x00 |
||||
|
#define SL_SC7A20_FS_4G (unsigned char)0x10 |
||||
|
#define SL_SC7A20_FS_8G (unsigned char)0x20 |
||||
|
#define SL_SC7A20_FS_16G (unsigned char)0x30 |
||||
|
/***************传感器量程设置**********************/ |
||||
|
|
||||
|
|
||||
|
/***取值在0-127之间,此处仅举例****/ |
||||
|
#define SL_SC7A20_INT1_THS_5PERCENT (unsigned char)0x06 |
||||
|
#define SL_SC7A20_INT1_THS_10PERCENT (unsigned char)0x0C |
||||
|
#define SL_SC7A20_INT1_THS_20PERCENT (unsigned char)0x18 |
||||
|
#define SL_SC7A20_INT1_THS_40PERCENT (unsigned char)0x30 |
||||
|
#define SL_SC7A20_INT1_THS_80PERCENT (unsigned char)0x60 |
||||
|
|
||||
|
|
||||
|
/***取值在0-127之间,此处仅举例 乘以ODR单位时间****/ |
||||
|
#define SL_SC7A20_INT1_DURATION_2CLK (unsigned char)0x02 |
||||
|
#define SL_SC7A20_INT1_DURATION_5CLK (unsigned char)0x05 |
||||
|
#define SL_SC7A20_INT1_DURATION_10CLK (unsigned char)0x0A |
||||
|
|
||||
|
/***中断有效时的电平设置,高电平相当于上升沿,低电平相当于下降沿****/ |
||||
|
#define SL_SC7A20_INT_ACTIVE_LOWER_LEVEL 0x02 //0x02:中断时INT1脚输出 低电平
|
||||
|
#define SL_SC7A20_INT_ACTIVE_HIGH_LEVEL 0x00 //0x00:中断时INT1脚输出 高电平
|
||||
|
|
||||
|
/***中断有效时的电平设置,高电平相当于上升沿,低电平相当于下降沿****/ |
||||
|
#define SL_SC7A20_INT_AOI1_INT1 0x40 //AOI1 TO INT1
|
||||
|
#define SL_SC7A20_INT_AOI2_INT1 0x20 //AOI2 TO INT1
|
||||
|
|
||||
|
/********客户需要进行的IIC接口封包函数****************/ |
||||
|
extern unsigned char SL_SC7A20_I2c_Spi_Write(unsigned char sl_spi_iic,unsigned char reg, unsigned char dat); |
||||
|
extern unsigned char SL_SC7A20_I2c_Spi_Read(unsigned char sl_spi_iic,unsigned char reg, unsigned char len, unsigned char *buf); |
||||
|
/**SL_SC7A20_I2c_Spi_Write 函数中, sl_spi_iic:0=spi 1=i2c Reg:寄存器地址 data:寄存器的配置值******************/ |
||||
|
/**SL_SC7A20_I2c_Spi_Write 函数 是一个单次写的函数*******************************************************************/ |
||||
|
/***SL_SC7A20_I2c_Spi_Read 函数中, sl_spi_iic:0=spi 1=i2c Reg 同上,len:读取数据长度,buf:存储数据首地址(指针)***/ |
||||
|
/***SL_SC7A20_I2c_Spi_Read 函数 是可以进行单次读或多次连续读取的函数*************************************************/ |
||||
|
|
||||
|
|
||||
|
|
||||
|
/*** 客户IIC函数封装举例
|
||||
|
unsigned char SL_MEMS_i2c_spi_Write(unsigned char reg, unsigned char data) |
||||
|
{ |
||||
|
i2cWrite(SC7A20_IIC_ADDRESS, reg, data); //由客户的II函数接口决定
|
||||
|
return 1; |
||||
|
} |
||||
|
|
||||
|
unsigned char SL_MEMS_i2c_spi_Read(unsigned char reg, unsigned char len, unsigned char *buf) |
||||
|
{ |
||||
|
i2cRead( SC7A20_IIC_ADDRESS, reg, len, buf);//由客户的II函数接口决定
|
||||
|
return 1; |
||||
|
} |
||||
|
***/ |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
signed char SL_SC7A20_Online_Test(void); |
||||
|
signed char SL_SC7A20_BOOT(void); |
||||
|
signed char SL_SC7A20_FS_Config(unsigned char Sc7a20_FS_Reg); |
||||
|
signed char SL_SC7A20_Power_Config(unsigned char Power_Config_Reg); |
||||
|
signed char SL_SC7A20_FreeFall_Config(void); |
||||
|
|
||||
|
#if SL_SC7A20_16BIT_8BIT==0 |
||||
|
signed char SL_SC7A20_Read_XYZ_Data(signed char *SL_SC7A20_Data_XYZ_Buf); |
||||
|
#elif SL_SC7A20_16BIT_8BIT==1 |
||||
|
signed char SL_SC7A20_Read_XYZ_Data(signed short *SL_SC7A20_Data_XYZ_Buf); |
||||
|
#endif |
||||
|
signed char SL_SC7A20_Freefall_Status(void); |
||||
|
|
||||
|
|
||||
|
|
||||
|
//步骤如下:
|
||||
|
//0.signed char SL_SC7A20_BOOT(void);
|
||||
|
//1.signed char SL_SC7A20_Online_Test(void);
|
||||
|
//2.signed char SL_SC7A20_FS_Config(unsigned char Sc7a20_FS_Reg);
|
||||
|
//3.signed char SL_SC7A20_Power_Config(unsigned char Power_Config_Reg);
|
||||
|
//4.signed char SL_SC7A20_FreeFall_Config(void);
|
||||
|
//6.signed char SL_SC7A20_Read_XYZ_Data(signed char *SL_SC7A20_Data_XYZ_Buf);
|
||||
|
//6.signed char SL_SC7A20_Read_XYZ_Data(signed short *SL_SC7A20_Data_XYZ_Buf);
|
||||
|
//7.signed char SL_SC7A20_Freefall_Status(void);
|
||||
|
#endif /* __SL_SC7A20_DRIVER_H */ |
||||
|
|
||||
@ -0,0 +1,350 @@ |
|||||
|
/*
|
||||
|
Copyright (c) 2017 Silan MEMS. All Rights Reserved. |
||||
|
*/ |
||||
|
|
||||
|
#ifndef SL_Watch_PEDO_KCAL_WRIST_SLEEP_SWAY_ALGO_DRV__H__ |
||||
|
#define SL_Watch_PEDO_KCAL_WRIST_SLEEP_SWAY_ALGO_DRV__H__ |
||||
|
|
||||
|
#define SL_Sensor_Algo_Release_Enable 0x01 |
||||
|
//0x00: for debug
|
||||
|
//0x01: release version
|
||||
|
|
||||
|
/***使用驱动前请根据实际接线情况配置******/ |
||||
|
/**SC7A20的SDO 脚接地: 0****************/ |
||||
|
/**SC7A20的SDO 脚接电源:1****************/ |
||||
|
#define SL_SC7A20_SDO_VDD_GND 1 |
||||
|
/*****************************************/ |
||||
|
|
||||
|
/***使用驱动前请根据实际IIC情况进行配置***/ |
||||
|
/**SC7A20的IIC 接口地址类型 7bits: 0****/ |
||||
|
/**SC7A20的IIC 接口地址类型 8bits: 1****/ |
||||
|
#define SL_SC7A20_IIC_7BITS_8BITS 1 |
||||
|
/*****************************************/ |
||||
|
|
||||
|
#if SL_SC7A20_SDO_VDD_GND==0 |
||||
|
#define SL_SC7A20_IIC_7BITS_ADDR 0x18 |
||||
|
#define SL_SC7A20_IIC_8BITS_WRITE_ADDR 0x30 |
||||
|
#define SL_SC7A20_IIC_8BITS_READ_ADDR 0x31 |
||||
|
#else |
||||
|
#define SL_SC7A20_IIC_7BITS_ADDR 0x19 |
||||
|
#define SL_SC7A20_IIC_8BITS_WRITE_ADDR 0x32 |
||||
|
#define SL_SC7A20_IIC_8BITS_READ_ADDR 0x33 |
||||
|
#endif |
||||
|
|
||||
|
#if SL_SC7A20_IIC_7BITS_8BITS==0 |
||||
|
#define SL_SC7A20_IIC_ADDRESS SL_SC7A20_IIC_7BITS_ADDR |
||||
|
#else |
||||
|
#define SL_SC7A20_IIC_WRITE_ADDRESS SL_SC7A20_IIC_8BITS_WRITE_ADDR |
||||
|
#define SL_SC7A20_IIC_READ_ADDRESS SL_SC7A20_IIC_8BITS_READ_ADDR |
||||
|
#endif |
||||
|
|
||||
|
#define SL_SC7A20_CHIP_ID_ADDR (unsigned char)0x0F |
||||
|
#define SL_SC7A20_CHIP_ID_VALUE (unsigned char)0x11 |
||||
|
#define SL_SC7A20_VERSION_ADDR (unsigned char)0x70 |
||||
|
#define SL_SC7A20_VERSION_VALUE (unsigned char)0x11 |
||||
|
#define SL_SC7A20E_VERSION_VALUE (unsigned char)0x26 |
||||
|
|
||||
|
typedef enum {FALSE = 0,TRUE = !FALSE} bool; |
||||
|
|
||||
|
/********客户需要进行的IIC接口封包函数****************/ |
||||
|
extern unsigned char SL_SC7A20_I2c_Spi_Write(bool sl_spi_iic,unsigned char reg, unsigned char dat); |
||||
|
extern unsigned char SL_SC7A20_I2c_Spi_Read(bool sl_spi_iic,unsigned char reg, unsigned char len, unsigned char *buf); |
||||
|
/**SL_SC7A20_I2c_Spi_Write 函数中, sl_spi_iic:0=spi 1=i2c Reg:寄存器地址 dat:寄存器的配置值*******************/ |
||||
|
/**SL_SC7A20_I2c_Spi_Write 函数 是一个单次写的函数*******************************************************************/ |
||||
|
/***SL_SC7A20_I2c_Spi_Read 函数中, sl_spi_iic:0=spi 1=i2c Reg 同上,len:读取数据长度,buf:存储数据首地址(指针)***/ |
||||
|
/***SL_SC7A20_I2c_Spi_Read 函数 是可以进行单次读或多次连续读取的函数*************************************************/ |
||||
|
|
||||
|
/*************驱动初始化函数**************/ |
||||
|
signed char SL_SC7A20_Driver_Init(bool Sl_spi_iic_init,unsigned char Sl_pull_up_mode); |
||||
|
/***输入参数:1,Sl_spi_iic_init:0-1***2,PULL_UP_MODE:0x00 0x08 0x04 0x0c********/ |
||||
|
/****Sl_spi_iic_init=0:SPI MODE, Sl_pull_up_mode config failed****************/ |
||||
|
/****Sl_spi_iic_init=1:IIC MODE***********************************************/ |
||||
|
/****Sl_pull_up_mode=0x00: SDO I2C pull up***********************************/ |
||||
|
/****Sl_pull_up_mode=0x08: I2C pull up and SDO open drain*******************/ |
||||
|
/****Sl_pull_up_mode=0x04: SDO pull up and I2C open drain*******************/ |
||||
|
/****Sl_pull_up_mode=0x0C: SDO I2C open drain********************************/ |
||||
|
/****SDO脚接地,推荐关闭SDO内部上拉电阻****************************************/ |
||||
|
/****SPI通讯,推荐关闭SDA,SCL内部上拉电阻,SDO内部上拉电阻会自动关闭**********/ |
||||
|
|
||||
|
/*************返回数据情况如下*****************/ |
||||
|
/**return : 0x11/0x26 表示CHIP ID 正常*********/ |
||||
|
/**return : 0 表示读取异常*************/ |
||||
|
/**return :-1; SPI 通信问题*************/ |
||||
|
/**return :-2; IIC 通信问题*************/ |
||||
|
/**return :-3; 连续读取 通信问题********/ |
||||
|
|
||||
|
/***************执行算法前需要读取FIFO数据*****/ |
||||
|
/***************FIFO数据读取后,FIFO会清空*****/ |
||||
|
/***************所以FIFO只能定时读取一次*******/ |
||||
|
unsigned char SL_SC7A20_Read_FIFO(void); |
||||
|
/**return : FIFO_LEN 表示数组长度***********/ |
||||
|
|
||||
|
|
||||
|
/****说明:该函数需要定时执行,从而保证算法执行到位**/ |
||||
|
/***************执行算法获取计步结果***************/ |
||||
|
unsigned int SL_Watch_Kcal_Pedo_Algo(bool sl_music_motor_en); |
||||
|
/***sl_music_motor_en=0: 马达电机和音乐功能未打开**/ |
||||
|
/***sl_music_motor_en=1: 马达电机和音乐功能已打开**/ |
||||
|
/**************获取当天的当前计步值****************/ |
||||
|
/*************输出数据为:计步值(步)***************/ |
||||
|
|
||||
|
/***************获取三轴原始数据***************/ |
||||
|
unsigned char SL_SC7A20_GET_FIFO_Buf(signed short *sl_x_buf,signed short *sl_y_buf,signed short *sl_z_buf,bool filter_en); |
||||
|
/****************执行算法后执行该命令**********/ |
||||
|
/**x_buf y_buf z_buf : 长度32的数组首地址****/ |
||||
|
/**filter_en:0 低通滤波禁止 1:低通滤波使能***/ |
||||
|
/****************返回数据情况如下**************/ |
||||
|
/**return : FIFO_LEN 表示数组长度***********/ |
||||
|
|
||||
|
|
||||
|
/******************复位计步值************************/ |
||||
|
void SL_Pedo_Kcal_ResetStepCount(void); |
||||
|
/**********输入数据为:无******输出数据为:无********/ |
||||
|
/*使用方法: 系统时间到第二天时,调用该函数清除计步值*/ |
||||
|
|
||||
|
/*******************计步状态复位**********************/ |
||||
|
void SL_Pedo_WorkMode_Reset(void); |
||||
|
/******************输入参数:无***********************/ |
||||
|
/******************输出值参数:无*********************/ |
||||
|
|
||||
|
/******************升级后,设置计步值,距离,热量************************/ |
||||
|
/******************升级后,请在初始化函数后,增加该函数****************/ |
||||
|
void SL_Pedo_StepCount_Set(unsigned int sl_pedo_value,unsigned int sl_dis_value,unsigned int sl_kcal_value); |
||||
|
/**********输入数据为:sl_pedo_value 计步值*****/ |
||||
|
/**********输入数据为:sl_dis_value 距离值*****/ |
||||
|
/**********输入数据为:sl_kcal_value 热量值*****/ |
||||
|
|
||||
|
/******************计步灵敏度设置********************/ |
||||
|
void SL_PEDO_TH_SET(unsigned char sl_pedo_amp,unsigned char sl_pedo_th,unsigned char sl_pedo_weak,unsigned char sl_zcr_lel,unsigned char sl_scope_lel); |
||||
|
/******sl_pedo_amp>4&&sl_pedo_amp<201**************************/ |
||||
|
/******sl_pedo_amp:越小灵敏度越高,越容易计步******************/ |
||||
|
/******sl_pedo_amp:越大灵敏度越高,越难计步********************/ |
||||
|
/******sl_pedo_amp:默认值26,不设置就是26**********************/ |
||||
|
|
||||
|
/******sl_pedo_th>5&&sl_pedo_th<50*****************************/ |
||||
|
/******sl_pedo_th:越小灵敏度越高,越容易计步*******************/ |
||||
|
/******sl_pedo_th:越大灵敏度越高,越难计步*********************/ |
||||
|
/******sl_pedo_th:默认值10,不设置就是10***********************/ |
||||
|
|
||||
|
/******sl_pedo_weak>=0&&sl_pedo_weak<6*************************/ |
||||
|
/******sl_pedo_th:0,不打开轻微走路计步功能*********************/ |
||||
|
/******sl_pedo_th:1,打开轻微走路计步功能***********************/ |
||||
|
/******sl_pedo_th:2,打开轻微走路计步功能***********************/ |
||||
|
/******sl_pedo_th:3,打开轻微走路计步功能***********************/ |
||||
|
/******sl_pedo_th:4,打开轻微走路计步功能***********************/ |
||||
|
/******sl_pedo_th:5,打开轻微走路计步功能***********************/ |
||||
|
/******sl_pedo_th:默认值0,设置的值越大,检测计步的越灵敏*******/ |
||||
|
|
||||
|
/*****sl_zcr_lel>=0&&sl_zcr_lel<=255***************************/ |
||||
|
/*****sl_zcr_lel:默认值=20,设置的值越小,越容易屏蔽喇叭震动****/ |
||||
|
/*****一定时间内的过零率计算***********************************/ |
||||
|
|
||||
|
/*****sl_scope_lel>=0&&sl_scope_lel<=255***********************/ |
||||
|
/*****整体数据幅度阈值*****************************************/ |
||||
|
|
||||
|
|
||||
|
/*******计步主轴设置****************/ |
||||
|
void SL_PEDO_SET_AXIS(unsigned char sl_xyz); |
||||
|
/***sl_xyz:0 x轴*******************/ |
||||
|
/***sl_xyz:1 y轴*******************/ |
||||
|
/***sl_xyz:2 z轴*******************/ |
||||
|
/***sl_xyz:3 算法决定**************/ |
||||
|
|
||||
|
/*设置运动检测幅度阈值和时间阈值****/ |
||||
|
void SL_PEDO_INT_SET(unsigned char V_TH,unsigned char T_TH,bool INT_EN); |
||||
|
/***V_TH:0 0-127************************************/ |
||||
|
/***T_TH:1 0-127************************************/ |
||||
|
/***INT_EN:0 关闭中断功能,1,打开中断状态监测功能***/ |
||||
|
/***USE AOI2 INT*************************************/ |
||||
|
|
||||
|
/*设置运动状态读取******************/ |
||||
|
bool SL_INT_STATUS_READ(void); |
||||
|
/*0: 没有运动*********************/ |
||||
|
/*1: 有运动***********************/ |
||||
|
/*关闭中断功能情况下,一直输出1*****/ |
||||
|
|
||||
|
/***********关闭IIC设备**************/ |
||||
|
/***********Power down 函数**********/ |
||||
|
/********不使用该设备情况下**********/ |
||||
|
/****如需重启,使用驱动初始化函数****/ |
||||
|
bool SL_SC7A20_Power_Down(void); |
||||
|
/*************输入参数:无************/ |
||||
|
/**********返回参数情况说明**********/ |
||||
|
/**return 1: Power Down Success*****/ |
||||
|
/**return 0: Power Down Fail********/ |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
/*************初始化个人参数*************/ |
||||
|
/**参数初始化,用于热量,距离计算********/ |
||||
|
void SL_Pedo_Person_Inf_Init(unsigned char *Person_Inf_Init); |
||||
|
/*********输入指针参数分别是:身高 体重 年龄 性别***举例:178,60,26 1*********/ |
||||
|
/**身高范围: 30cm ~ 250cm ***********/ |
||||
|
/**体重范围: 10Kg ~ 200Kg ***********/ |
||||
|
/**年龄范围: 3岁 ~ 150岁 ***********/ |
||||
|
/**性别范围: 0 ~ 1 0:女 1:男 ****/ |
||||
|
|
||||
|
/*********************获取运动状态值**********************/ |
||||
|
unsigned char SL_Pedo_GetMotion_Status(void); |
||||
|
/**********输入数据为:无*********************************/ |
||||
|
/**********输出数据为:0 ~ 3 *****************************/ |
||||
|
/**输出数据为:0 *静止或静坐**********/ |
||||
|
/**输出数据为:1 *慢走或散步**********/ |
||||
|
/**输出数据为:2 *正常走路************/ |
||||
|
/**输出数据为:3 *跑步或剧烈运动******/ |
||||
|
|
||||
|
/**************获取截止当前当天的行走距离*****************/ |
||||
|
unsigned int SL_Pedo_Step_Get_Distance(void); |
||||
|
/*******************输入数据为:无************************/ |
||||
|
/*******************输出数据为:当天行走距离 *************/ |
||||
|
/*******************单位: 分米(dm)******************/ |
||||
|
|
||||
|
/**************获取截止当前当天的热量消耗*****************/ |
||||
|
unsigned int SL_Pedo_Step_Get_KCal(void); |
||||
|
/*******************输入数据为:无************************/ |
||||
|
/*******************输出数据为:当天热量消耗值 ***********/ |
||||
|
/*********单位: 大卡 1个单位=0.1大卡******************/ |
||||
|
|
||||
|
/**************获取最近一段时间的走路平均幅度*************/ |
||||
|
unsigned short SL_Pedo_Step_Get_Avg_Amp(void); |
||||
|
/********************输入数据为:无***********************/ |
||||
|
/***********************1LSB≈XXXmg************************/ |
||||
|
|
||||
|
/***********************获取当前走路平均步频**************/ |
||||
|
unsigned char SL_Pedo_Step_Get_Step_Per_Min(void); |
||||
|
/********************输入数据为:无***********************/ |
||||
|
/********************输出数据为:XXX步/分钟 **************/ |
||||
|
|
||||
|
/***********************获取当前的运动等级****************/ |
||||
|
unsigned char SL_Pedo_Step_Get_Motion_Degree(void); |
||||
|
/********************输入数据为:无***********************/ |
||||
|
/********************输出数据为:0-25 ********************/ |
||||
|
|
||||
|
|
||||
|
/**********抬手亮屏算法**********/ |
||||
|
|
||||
|
/*****************抬手亮屏算法初始化函数****************/ |
||||
|
void SL_Turn_Wrist_Init(unsigned char *SL_Turn_Wrist_Para); |
||||
|
/************输入参数:*************/ |
||||
|
/******SL_Turn_Wrist_Para[0]:加速度计贴片位置设置 0--7********/ |
||||
|
/******SL_Turn_Wrist_Para[1]:抬手亮屏灵敏度设置 1--5********/ |
||||
|
/******SL_Turn_Wrist_Para[2]:水平抬手亮屏使能控制位0--1********/ |
||||
|
|
||||
|
/*************三轴加速度计贴片位置设置*************************/ |
||||
|
/***SL_Turn_Wrist_Para[0]:设定值的范围为: 0 ~ 7 **************/ |
||||
|
/***请参考文档:Silan_MEMS_手环算法说明书_V1.1.pdf**************/ |
||||
|
|
||||
|
/***SL_Turn_Wrist_Para[1]:设定值的范围为: 1 ~ 5 **/ |
||||
|
/*********默认值为:3 中等灵敏度****************/ |
||||
|
/*********设定值为:1 最低灵敏度****************/ |
||||
|
/*********默认值为:5 最高灵敏度****************/ |
||||
|
/*********设定值为:1(最迟钝)~5(最灵敏)***********/ |
||||
|
|
||||
|
/******SL_Turn_Wrist_Para[2]:水平抬手亮屏使能控制位0--1*******/ |
||||
|
/******0:禁止水平抬手功能********/ |
||||
|
/******1:使能水平抬手功能********/ |
||||
|
|
||||
|
|
||||
|
|
||||
|
/*****************抬手亮屏状态获取函数****************/ |
||||
|
signed char SL_Watch_Wrist_Algo(void); |
||||
|
/***********输入参数:无***********/ |
||||
|
/***********返回参数情况说明*******/ |
||||
|
/**Return: 2 备注说明:屏幕点亮后需要关闭*********/ |
||||
|
/**Return: 1 备注说明:屏幕需要点亮***************/ |
||||
|
/**Return: 0 备注说明:屏幕不需要点亮*************/ |
||||
|
/**Return: -1 备注说明:未初始化或初始化失败*******/ |
||||
|
|
||||
|
/*****************抬手亮屏状态复位********************/ |
||||
|
//void SL_Turn_Wrist_WorkMode_Reset(void);
|
||||
|
/******************输入参数:无***********************/ |
||||
|
/******************输出值参数:无*********************/ |
||||
|
|
||||
|
|
||||
|
//3-12
|
||||
|
//1-10
|
||||
|
//0-10
|
||||
|
/******************睡眠参数设置********************/ |
||||
|
void SL_Sleep_Para(unsigned char adom_time_th,unsigned char sleep_vpp_th,unsigned char sleep_time_th); |
||||
|
/**************************佩戴检测的时长***********************/ |
||||
|
/******adom_time_th:0-255 min***********************************/ |
||||
|
/******adom_time_th:未活动的时间,大于设置阈值才能认为未佩戴****/ |
||||
|
/******adom_time_th:设置值越小,越容易出现未佩戴情况************/ |
||||
|
|
||||
|
/**************************睡眠中间点阈值***********************/ |
||||
|
/******sleep_vpp_th:越小灵敏度越高,越容易睡眠状态切换**********/ |
||||
|
/******sleep_vpp_th:越大灵敏度越低,越难睡眠状态切换************/ |
||||
|
/******sleep_vpp_th:默认值10,不设置就是10**********************/ |
||||
|
|
||||
|
/**************************状态切换最小时间*********************/ |
||||
|
/******sleep_time_th:该值越小,睡眠状态切换的所需时间就越短*****/ |
||||
|
/******sleep_time_th:该值越大,睡眠状态切换的所需时间就越长*****/ |
||||
|
/******sleep_time_th:默认值1,不设置就是1***********************/ |
||||
|
|
||||
|
|
||||
|
/***************获取当前的睡眠状态*****************/ |
||||
|
unsigned char SL_Sleep_GetStatus(unsigned char SL_Sys_Time); |
||||
|
/*******SL_Sys_Time:当前的时间,以小时为单位******/ |
||||
|
/*******全天的输入时间范围为:0-23 ****************/ |
||||
|
/***************输出数据范围:0-7******************/ |
||||
|
/***************0:清醒状态************************/ |
||||
|
/***************7:深度睡眠************************/ |
||||
|
|
||||
|
/***************获取当前的活动等级*****************/ |
||||
|
unsigned char SL_Sleep_Active_Degree(unsigned char mode); |
||||
|
/***************mode:0 定时器0.5s中调用***********/ |
||||
|
/***************mode:1 定时器1min中调用***********/ |
||||
|
/***************输出数据范围:0-255****************/ |
||||
|
/***************0:静止****************************/ |
||||
|
/*************255:运动****************************/ |
||||
|
|
||||
|
unsigned char SL_Sleep_Get_Active_Degree(void); |
||||
|
/***************mode:0 定时器0.5s中调用***********/ |
||||
|
/***************mode:1 定时器1min中调用***********/ |
||||
|
/***************输出数据范围:0-255****************/ |
||||
|
/***************0:静止****************************/ |
||||
|
/*************255:运动****************************/ |
||||
|
|
||||
|
/***************获取当前的佩戴的情况***************/ |
||||
|
unsigned char SL_Adom_GetStatus(void); |
||||
|
/***************0:未佩戴**************************/ |
||||
|
/***************1:已佩戴**************************/ |
||||
|
|
||||
|
/***************获取当前的佩戴的情况***************/ |
||||
|
unsigned char SL_In_Sleep_Status(void); |
||||
|
/***************0:out sleep**********************/ |
||||
|
/***************1:in sleep***********************/ |
||||
|
|
||||
|
/**************************翻转功能************************/ |
||||
|
bool SL_Get_Clock_Status(bool open_close); |
||||
|
/***********输入参数:sensor_pos***********/ |
||||
|
/****sensor_pos:1 open 检测是否要关闭时输入 1*************/ |
||||
|
/****sensor_pos:0 close 关闭闹铃时时 输入 0*************/ |
||||
|
/*********************返回参数情况说明*********************/ |
||||
|
/***********************翻转功能检测***********************/ |
||||
|
/**Return: 1 备注说明:屏幕已翻转,关闭闹钟************/ |
||||
|
/**Return: 0 备注说明:屏幕未翻转,不关闭闹钟**********/ |
||||
|
|
||||
|
|
||||
|
/**************************摇晃功能************************/ |
||||
|
bool SL_Get_Phone_Answer_Status(unsigned char Sway_Degree,unsigned char Sway_Num); |
||||
|
/***********输入参数:摇晃等级0--10 摇晃数量0--10***********************/ |
||||
|
/***摇晃等级:设置值越小,需要摇晃的幅度越小,越容易触发接听动作*********/ |
||||
|
/***摇晃数量:设置值越小,需要摇晃的次数越少,越容易触发接听动作*********/ |
||||
|
/***********返回参数情况说明*******************************/ |
||||
|
/**Return: 1 备注说明:摇晃动作成立,接听电话**********/ |
||||
|
/**Return: 0 备注说明:摇晃动作不成立,不接听电话******/ |
||||
|
|
||||
|
|
||||
|
/************加测项目客户端测试***********/ |
||||
|
/***初始化的时候调用用于判断FIFO是否正常**/ |
||||
|
bool SL_SC7A20_FIFO_TEST(void); |
||||
|
/*************输入参数:无*****************/ |
||||
|
/*************返回数据情况如下************/ |
||||
|
/**return :1 FIFO 异常*******************/ |
||||
|
/**return :0 FIFO 正常*******************/ |
||||
|
#endif/****SL_Watch_ALGO_DRV__H__*********/ |
||||
|
|
||||
|
|
||||
|
|
||||
Binary file not shown.
@ -0,0 +1,264 @@ |
|||||
|
|
||||
|
#include "SL_algo1.h" |
||||
|
|
||||
|
|
||||
|
|
||||
|
#if SL_Sensor_Algo_Release_Enable==0x00 |
||||
|
#include "usart.h" |
||||
|
extern signed short SL_DEBUG_DATA[10][128]; |
||||
|
extern unsigned char SL_DEBUG_DATA_LEN; |
||||
|
extern unsigned char sl_sleep_sys_cnt; |
||||
|
#endif |
||||
|
|
||||
|
#if SL_Sensor_Algo_Release_Enable==0x00 |
||||
|
extern signed short SL_ACCEL_DATA_Buf[3][16]; |
||||
|
extern unsigned char SL_FIFO_ACCEL_PEDO_NUM; |
||||
|
signed short hp_buf[16]; |
||||
|
#endif |
||||
|
|
||||
|
|
||||
|
#define SL_SC7A20_SPI_IIC_MODE 1 |
||||
|
/***SL_SC7A20_SPI_IIC_MODE==0 :SPI*******/ |
||||
|
/***SL_SC7A20_SPI_IIC_MODE==1 :IIC*******/ |
||||
|
|
||||
|
static signed char sl_init_status=0x00; |
||||
|
/**Please modify the following parameters according to the actual situation**/ |
||||
|
signed char SL_SC7A20_PEDO_KCAL_WRIST_SLEEP_SWAY_INIT(void) |
||||
|
{ |
||||
|
#if SL_Sensor_Algo_Release_Enable==0x00 |
||||
|
unsigned char sl_version_value=0x00; |
||||
|
#endif |
||||
|
// bool fifo_status =0;
|
||||
|
unsigned char sl_person_para[4] ={178,60,26,1}; |
||||
|
unsigned char Turn_Wrist_Para[3]={1,3,0};//refer pdf
|
||||
|
|
||||
|
#if SL_Sensor_Algo_Release_Enable==0x00 |
||||
|
//sl_version_value==0x11 SC7A20
|
||||
|
//sl_version_value==0x26 SC7A20E
|
||||
|
SL_SC7A20_I2c_Spi_Read(1, SL_SC7A20_VERSION_ADDR,1, &sl_version_value); |
||||
|
USART_printf( USART1, "Version ID=0x%x!\r\n",sl_version_value); |
||||
|
if(sl_version_value==SL_SC7A20_VERSION_VALUE) |
||||
|
USART_printf( USART1, "SC7A20!\r\n"); |
||||
|
else if(sl_version_value==SL_SC7A20E_VERSION_VALUE) |
||||
|
USART_printf( USART1, "SC7A20E!\r\n"); |
||||
|
#endif |
||||
|
|
||||
|
/*****if use spi mode please config first******/ |
||||
|
#if SL_SC7A20_SPI_IIC_MODE == 0//spi
|
||||
|
sl_init_status=SL_SC7A20_Driver_Init(1,0x04);//iic mode pull up config
|
||||
|
//init sensor
|
||||
|
sl_init_status=SL_SC7A20_Driver_Init(0,0x04);//spi or iic select
|
||||
|
#else//i2c
|
||||
|
sl_init_status=SL_SC7A20_Driver_Init(1,0x00);//spi or iic select
|
||||
|
//0x08-->close sdo pull up
|
||||
|
#endif |
||||
|
/**********sc7a20 fifo test***************/ |
||||
|
//fifo_status=SL_SC7A20_FIFO_TEST();
|
||||
|
|
||||
|
/**********set pedo sensitivity***********/ |
||||
|
SL_PEDO_TH_SET(32,10,1,30,50);//36 12 0 30 50for motor
|
||||
|
/*which axis used to pedo depend on algo**/ |
||||
|
SL_PEDO_SET_AXIS(3); |
||||
|
/**********set int para*******************/ |
||||
|
SL_PEDO_INT_SET(2,1,1);//0 or 1 sleep is different
|
||||
|
/**********set motion para****************/ |
||||
|
SL_Pedo_Person_Inf_Init(&sl_person_para[0]);//personal para init
|
||||
|
/**********set turn wrist para************/ |
||||
|
SL_Turn_Wrist_Init(&Turn_Wrist_Para[0]); |
||||
|
/**********set sleep sensitivity**********/ |
||||
|
SL_Sleep_Para(120,10,1); |
||||
|
|
||||
|
return sl_init_status; |
||||
|
} |
||||
|
|
||||
|
static unsigned int SL_STEP = 0; |
||||
|
static unsigned int SL_STEP_TEMP = 0; |
||||
|
static unsigned char SL_STEP_MOTION = 0; |
||||
|
static unsigned int SL_DISTANCE = 0; |
||||
|
static unsigned int SL_KCAL = 0; |
||||
|
static unsigned char SL_CADENCE_STEP = 0;//step per minutes
|
||||
|
static unsigned short SL_CADENCE_AMP = 0;//Equal scale scaling
|
||||
|
static unsigned char SL_CADENCE_DEGREE = 0;//degree
|
||||
|
static signed char SL_WRIST = 0; |
||||
|
|
||||
|
static unsigned char SL_SLEEP_ACTIVE = 0; |
||||
|
static unsigned char SL_SLEEP_STATUS = 0; |
||||
|
static unsigned char SL_SLEEP_ADOM = 0; |
||||
|
static unsigned char SL_SLEEP_CNT = 0; |
||||
|
|
||||
|
static bool SL_CLOCK_STATUS = 0; |
||||
|
static bool SL_SWAY_STATUS = 0; |
||||
|
static bool SL_SWAY_ENABLE = 0; |
||||
|
|
||||
|
static unsigned char SL_INT_TIME_CNT = 0; |
||||
|
#define SL_INT_TIME_TH 12 //per lsb is 0.5s
|
||||
|
extern unsigned char sl_sleep_sys_hour; |
||||
|
unsigned char SL_MCU_SLEEP_ALGO_FUNCTION(void); |
||||
|
unsigned int SL_SC7A20_PEDO_KCAL_WRIST_SLEEP_SWAY_ALGO(void) |
||||
|
{ |
||||
|
#if SL_Sensor_Algo_Release_Enable==0x00 |
||||
|
unsigned char sl_i; |
||||
|
#endif |
||||
|
signed short SC7A20_XYZ_Buf[3][14]; |
||||
|
unsigned char SC7A20_FIFO_NUM; |
||||
|
bool SC7A20_INT_STATUS; |
||||
|
|
||||
|
if((sl_init_status!=SL_SC7A20_VERSION_VALUE)&&(sl_init_status!=SL_SC7A20E_VERSION_VALUE)) return 0;//initial fail
|
||||
|
|
||||
|
/*******read int status******/ |
||||
|
SC7A20_INT_STATUS=SL_INT_STATUS_READ(); |
||||
|
if((SC7A20_INT_STATUS==1)||(SL_STEP_TEMP!= SL_STEP)) |
||||
|
{ |
||||
|
SL_INT_TIME_CNT =0; |
||||
|
SL_STEP_TEMP =SL_STEP; |
||||
|
} |
||||
|
else |
||||
|
{ |
||||
|
if(SL_INT_TIME_CNT<200) |
||||
|
{ |
||||
|
SL_INT_TIME_CNT++; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
if(SL_INT_TIME_CNT<SL_INT_TIME_TH)//6s
|
||||
|
{ |
||||
|
/*******get sc7a20 FIFO data******/ |
||||
|
SC7A20_FIFO_NUM= SL_SC7A20_Read_FIFO(); |
||||
|
/*******get pedo value************/ |
||||
|
SL_STEP= SL_Watch_Kcal_Pedo_Algo(0);//涓嶆墦寮€椹揪鎴栭煶涔愭椂璋冪敤璇ュ嚱鏁?
|
||||
|
//SL_STEP= SL_Watch_Kcal_Pedo_Algo(1);//鎵撳紑椹揪鎴栭煶涔愭椂璋冪敤璇ュ嚱鏁?
|
||||
|
|
||||
|
/*********get sleep active degree value*********/ |
||||
|
SL_SLEEP_ACTIVE = SL_Sleep_Active_Degree(0); |
||||
|
|
||||
|
/*******get accel orginal data and length*******/ |
||||
|
SC7A20_FIFO_NUM = SL_SC7A20_GET_FIFO_Buf(&SC7A20_XYZ_Buf[0][0],&SC7A20_XYZ_Buf[1][0],&SC7A20_XYZ_Buf[2][0],0); |
||||
|
|
||||
|
/* SL_Pedo_GetMotion_Status */ |
||||
|
SL_STEP_MOTION = SL_Pedo_GetMotion_Status(); |
||||
|
/* SL_Pedo_Step_Get_Distance */ |
||||
|
SL_DISTANCE = SL_Pedo_Step_Get_Distance(); |
||||
|
/* SL_Pedo_Step_Get_KCal */ |
||||
|
SL_KCAL = SL_Pedo_Step_Get_KCal(); |
||||
|
/*****average step per minutes****/ |
||||
|
SL_CADENCE_STEP = SL_Pedo_Step_Get_Step_Per_Min(); |
||||
|
/*****average amp per step****/ |
||||
|
SL_CADENCE_AMP = SL_Pedo_Step_Get_Avg_Amp(); |
||||
|
/*****motion degree****/ |
||||
|
SL_CADENCE_DEGREE = SL_Pedo_Step_Get_Motion_Degree(); |
||||
|
|
||||
|
// if(SL_STEP>200)
|
||||
|
// {
|
||||
|
/**reset pedo value**/ |
||||
|
// SL_Pedo_Kcal_ResetStepCount();
|
||||
|
// }
|
||||
|
|
||||
|
/*******get wrist value******/ |
||||
|
SL_WRIST= SL_Watch_Wrist_Algo(); |
||||
|
|
||||
|
/*******get overturn value******/ |
||||
|
SL_CLOCK_STATUS=SL_Get_Clock_Status(1);//open overturn monitor
|
||||
|
if(SL_CLOCK_STATUS==1)//overturn success
|
||||
|
{ |
||||
|
SL_Get_Clock_Status(0);//close overturn monitor
|
||||
|
} |
||||
|
|
||||
|
/*******get sway value******/ |
||||
|
if(SL_SWAY_ENABLE==1) |
||||
|
{ |
||||
|
/**this function will disable pedo function**/ |
||||
|
SL_SWAY_STATUS=SL_Get_Phone_Answer_Status(4,5);//get sway value
|
||||
|
} |
||||
|
} |
||||
|
else |
||||
|
{ |
||||
|
//sc7a20 's data for heart rate algo
|
||||
|
//SC7A20_FIFO_NUM= SL_SC7A20_Read_FIFO();
|
||||
|
//SC7A20_FIFO_NUM= SL_SC7A20_GET_FIFO_Buf(&SC7A20_XYZ_Buf[0][0],&SC7A20_XYZ_Buf[1][0],&SC7A20_XYZ_Buf[2][0],0);
|
||||
|
|
||||
|
SL_Pedo_WorkMode_Reset(); |
||||
|
//SL_Turn_Wrist_WorkMode_Reset();please not use this function
|
||||
|
SC7A20_FIFO_NUM=0; |
||||
|
} |
||||
|
|
||||
|
/*******get sleep status value******/ |
||||
|
SL_SLEEP_CNT++; |
||||
|
#if SL_Sensor_Algo_Release_Enable==0x00 |
||||
|
if(SL_SLEEP_CNT>39)//1min
|
||||
|
#else |
||||
|
if(SL_SLEEP_CNT>119)//1min
|
||||
|
#endif |
||||
|
{ |
||||
|
#if SL_Sensor_Algo_Release_Enable==0 |
||||
|
sl_sleep_sys_cnt++; |
||||
|
if(sl_sleep_sys_cnt>59)//min
|
||||
|
{ |
||||
|
sl_sleep_sys_cnt=0; |
||||
|
sl_sleep_sys_hour++;//hour
|
||||
|
if(sl_sleep_sys_hour==24) |
||||
|
sl_sleep_sys_hour=0; |
||||
|
} |
||||
|
#endif |
||||
|
SL_SLEEP_CNT=0; |
||||
|
SL_MCU_SLEEP_ALGO_FUNCTION(); |
||||
|
} |
||||
|
|
||||
|
#if SL_Sensor_Algo_Release_Enable==0x00 |
||||
|
SL_DEBUG_DATA_LEN=SC7A20_FIFO_NUM; |
||||
|
for(sl_i=0;sl_i<SL_DEBUG_DATA_LEN;sl_i++) |
||||
|
{ |
||||
|
SL_DEBUG_DATA[0][sl_i]=SC7A20_XYZ_Buf[0][sl_i]; |
||||
|
SL_DEBUG_DATA[1][sl_i]=SC7A20_XYZ_Buf[1][sl_i]; |
||||
|
SL_DEBUG_DATA[2][sl_i]=SC7A20_XYZ_Buf[2][sl_i]; |
||||
|
SL_DEBUG_DATA[3][sl_i]=SL_STEP; |
||||
|
SL_DEBUG_DATA[4][sl_i]=SL_WRIST; |
||||
|
// SL_DEBUG_DATA[4][sl_i]=SL_CLOCK_STATUS;
|
||||
|
// SL_DEBUG_DATA[5][sl_i]=SL_SLEEP_STATUS;
|
||||
|
SL_DEBUG_DATA[5][sl_i]=SL_SWAY_STATUS; |
||||
|
SL_DEBUG_DATA[6][sl_i]=SL_STEP_MOTION; |
||||
|
SL_DEBUG_DATA[7][sl_i]=SL_DISTANCE; |
||||
|
// SL_DEBUG_DATA[7][sl_i]=hp_buf[sl_i];
|
||||
|
SL_DEBUG_DATA[8][sl_i]=SL_KCAL; |
||||
|
SL_DEBUG_DATA[9][sl_i]=SL_CADENCE_STEP; |
||||
|
// SL_DEBUG_DATA[8][sl_i]=SL_CADENCE_AMP;
|
||||
|
// SL_DEBUG_DATA[9][sl_i]=SL_CADENCE_DEGREE;
|
||||
|
} |
||||
|
#endif |
||||
|
return SL_STEP; |
||||
|
} |
||||
|
|
||||
|
#if SL_Sensor_Algo_Release_Enable==0x00 |
||||
|
unsigned short sl_sleep_counter=0; |
||||
|
#endif |
||||
|
#define SL_SLEEP_DEEP_TH 6 |
||||
|
#define SL_SLEEP_LIGHT_TH 3 |
||||
|
/***Call this function regularly for 1 minute***/ |
||||
|
unsigned char SL_MCU_SLEEP_ALGO_FUNCTION(void) |
||||
|
{ |
||||
|
|
||||
|
/*******get sleep status value******/ |
||||
|
SL_SLEEP_STATUS= SL_Sleep_GetStatus(sl_sleep_sys_hour); |
||||
|
SL_SLEEP_ACTIVE= SL_Sleep_Get_Active_Degree(); |
||||
|
SL_SLEEP_ADOM = SL_Adom_GetStatus(); |
||||
|
|
||||
|
#if SL_Sensor_Algo_Release_Enable==0x00 |
||||
|
sl_sleep_counter++; |
||||
|
USART_printf( USART1, "step=%d! sys_time=%d!\r\n",SL_STEP,sl_sleep_sys_hour); |
||||
|
USART_printf( USART1, "T=%d,sleep_status:%d,sleep_adom:%d!\r\n",sl_sleep_counter,SL_SLEEP_STATUS,SL_SLEEP_ADOM); |
||||
|
USART_printf( USART1, "SL_SLEEP_ACTIVE:%d!\r\n",SL_SLEEP_ACTIVE); |
||||
|
#endif |
||||
|
|
||||
|
if(SL_SLEEP_STATUS<SL_SLEEP_LIGHT_TH) |
||||
|
{ |
||||
|
return 0;//0 1 2 3
|
||||
|
} |
||||
|
else if(SL_SLEEP_STATUS<SL_SLEEP_DEEP_TH) |
||||
|
{ |
||||
|
return 1;//4 5 6
|
||||
|
} |
||||
|
else |
||||
|
{ |
||||
|
return 2;//7
|
||||
|
} |
||||
|
} |
||||
|
|
||||
@ -0,0 +1,10 @@ |
|||||
|
|
||||
|
#ifndef SL_Watch_Pedo_Kcal_Wrist_Sleep_Sway_Application__H__ |
||||
|
#define SL_Watch_Pedo_Kcal_Wrist_Sleep_Sway_Application__H__ |
||||
|
|
||||
|
|
||||
|
extern signed char SL_SC7A20_PEDO_KCAL_WRIST_SLEEP_SWAY_INIT(void); |
||||
|
extern unsigned int SL_SC7A20_PEDO_KCAL_WRIST_SLEEP_SWAY_ALGO(void); |
||||
|
|
||||
|
|
||||
|
#endif |
||||
@ -0,0 +1,46 @@ |
|||||
|
#include "asp_moto.h" |
||||
|
#include "debug_drv.h" |
||||
|
|
||||
|
|
||||
|
|
||||
|
void L2_moto_init(void) |
||||
|
{ |
||||
|
|
||||
|
; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
/// L3_moto_debug(D_cmd_filter_moto)
|
||||
|
void L3_moto_debug(u8 filter) |
||||
|
{ |
||||
|
if(filter == Ts_debug.td->filter) |
||||
|
{///filter num d1 d2 d3 ....dn
|
||||
|
//// FD 08 11 22 33 44 55 66 77 88
|
||||
|
L1_uartD_uchexArray(Ts_debug.td,Ts_debug.td->R1); |
||||
|
|
||||
|
if(0x10 == Ts_debug.td->ocr)///read 读
|
||||
|
{ |
||||
|
//NUM: 0 1 2 3 4
|
||||
|
// Fx R1 R2 R3 ocr
|
||||
|
// sla reg1 num
|
||||
|
/// f1 32 15 06 10
|
||||
|
|
||||
|
printf("\r\n ch(%d)=",(int)Ts_debug.td->R1); |
||||
|
/// Ts_debug.au16 = L1_ADC_Read_PT(Ts_debug.td->R1);
|
||||
|
printf(" %XH %d ",(int)Ts_debug.au16,(int)Ts_debug.au16); |
||||
|
} |
||||
|
else if(0x11 == Ts_debug.td->ocr) |
||||
|
{ |
||||
|
|
||||
|
} |
||||
|
else if(0x12 == Ts_debug.td->ocr) |
||||
|
{ |
||||
|
} |
||||
|
else |
||||
|
{ |
||||
|
|
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
|
||||
@ -0,0 +1,13 @@ |
|||||
|
#ifndef _ASP_MOTO_H_ |
||||
|
#define _ASP_MOTO_H_ |
||||
|
|
||||
|
#include "bsp_config.h" |
||||
|
//485_RE P33
|
||||
|
//485_DE P32
|
||||
|
///#define D_485_TX() P55 = 1;// >750us
|
||||
|
///#define D_485_RX() P55 = 0;
|
||||
|
|
||||
|
extern void L2_moto_init(void); |
||||
|
#define D_cmd_filter_moto 0xf0 |
||||
|
extern void L3_moto_debug(u8 filter); |
||||
|
#endif |
||||
@ -0,0 +1,87 @@ |
|||||
|
////////////////////////////////////////////////////////////////////////////
|
||||
|
///@copyright Copyright (c) 2018, 传控科技 All rights reserved.
|
||||
|
///-------------------------------------------------------------------------
|
||||
|
/// @file bsp_drv.c
|
||||
|
/// @brief bsp @ driver config
|
||||
|
///-------------------------------------------------------------------------
|
||||
|
/// @version 1.0
|
||||
|
/// @author CC
|
||||
|
/// @date 20180331
|
||||
|
/// @note cc_AS_stc02
|
||||
|
//////////////////////////////////////////////////////////////////////////////
|
||||
|
|
||||
|
#include "asp_para.h" |
||||
|
///#include "common.h"
|
||||
|
#include "../bsp/bsp_config.h" |
||||
|
#include "msp_uart0.h" |
||||
|
#include "msp_eeprom.h" |
||||
|
|
||||
|
/*********
|
||||
|
v3.3 |
||||
|
AA 38 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |
||||
|
#e2p read success |
||||
|
00 00 00 00 00 00 00 00 00 00 |
||||
|
AA 38 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |
||||
|
#e2p read success |
||||
|
00 00 00 00 00 00 00 00 00 00 |
||||
|
AA 38 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |
||||
|
#e2p read success |
||||
|
00 00 00 00 00 00 00 00 00 00 |
||||
|
AA 38 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |
||||
|
#e2p read success |
||||
|
00 00 00 00 00 00 00 00 00 00 |
||||
|
8ADC_SAMPLEADC_SAMPLEADC_SAMPLEADC_SAMPLE4E320 F408 2088 FA90 0000BC90 1502 |
||||
|
**********/ |
||||
|
|
||||
|
TS_eeprom_param_ eep_param; |
||||
|
|
||||
|
U8 L1_para_read(U8 *buf,U8 *len) |
||||
|
{ |
||||
|
U8 dlen = 0; |
||||
|
L0_Iap_Read_array(EEP_PARAM_ADDR, (U8*)&eep_param, 2 + EEPROM_PARAM_DATA_MAX + 2); |
||||
|
|
||||
|
/// L0_uartN_uchexArray(0,(u8 *)&eep_param,20);
|
||||
|
|
||||
|
|
||||
|
if(eep_param.filter == EEPROM_PARAM_FILTER) |
||||
|
{ |
||||
|
dlen = eep_param.len - 2; |
||||
|
crc16(eep_param.crc,(U8*)&eep_param,2+dlen); |
||||
|
if(eep_param.crc[0] == eep_param.buf[dlen] && eep_param.crc[1] == eep_param.buf[dlen+1]) |
||||
|
{ |
||||
|
/// if()
|
||||
|
//L0_uart0_uc('#');
|
||||
|
//Lc_buf_copy_uc((U8*)&G.p,(U8*)eep_param.buf,dlen);
|
||||
|
Lc_buf_copy_uc(buf,(U8*)eep_param.buf,dlen);//防止dlen>sizeof(G.P)引起的内存错误
|
||||
|
*len = dlen; |
||||
|
return 0; |
||||
|
} |
||||
|
} |
||||
|
return 1; |
||||
|
} |
||||
|
|
||||
|
U8 L1_para_write(U8 *buf, U8 len) |
||||
|
{ |
||||
|
U8 dlen = len; |
||||
|
eep_param.filter = EEPROM_PARAM_FILTER;////fxime
|
||||
|
eep_param.len = dlen + 2; |
||||
|
Lc_buf_copy_uc((U8*)eep_param.buf,buf,dlen); |
||||
|
crc16(eep_param.crc, &eep_param, 2+dlen); |
||||
|
eep_param.buf[dlen] = eep_param.crc[0]; |
||||
|
eep_param.buf[dlen+1] = eep_param.crc[1]; |
||||
|
|
||||
|
L0_Iap_Erase(EEP_PARAM_ADDR); |
||||
|
L0_Iap_Program_array(EEP_PARAM_ADDR, (U8*)&eep_param, 2 + dlen + 2); |
||||
|
L0_uart0_uc('&'); |
||||
|
|
||||
|
return 0; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
@ -0,0 +1,67 @@ |
|||||
|
////////////////////////////////////////////////////////////////////////////
|
||||
|
///@copyright Copyright (c) 2022, 传控科技 All rights reserved.
|
||||
|
///-------------------------------------------------------------------------
|
||||
|
/// @file app_save.h
|
||||
|
/// @brief @ app save
|
||||
|
///-------------------------------------------------------------------------
|
||||
|
/// @version 1.0
|
||||
|
/// @author CC
|
||||
|
/// @date 20220120
|
||||
|
/// @note cc_AS_stc02
|
||||
|
|
||||
|
//////////////////////////////////////////////////////////////////////////////
|
||||
|
|
||||
|
#ifndef _ASP_EEPROM_H |
||||
|
#define _ASP_EEPROM_H |
||||
|
|
||||
|
#include "TTSS_task.h" |
||||
|
#include "c_lib.h" |
||||
|
|
||||
|
|
||||
|
|
||||
|
#include "../bsp/bsp_config.h" |
||||
|
#include "msp_uart0.h" |
||||
|
|
||||
|
/////cc 20220127 和cup息息相关 应该和标识牌_config进行匹配
|
||||
|
/// 16k =16 1024 = 32 512 =
|
||||
|
//// 16 1024 =16384 =0x4000
|
||||
|
|
||||
|
#define EEP_SECTOR_SIZE 0x200 ///512
|
||||
|
#define EEP_PARAM_ADDR (EEP_SECTOR_SIZE * 1) |
||||
|
#define EEP_ENC_ADDR (EEP_SECTOR_SIZE * 0)//// 加密信息
|
||||
|
|
||||
|
/**
|
||||
|
* EEPROM 存储结构 |
||||
|
*/ |
||||
|
#define EEPROM_PARAM_DATA_MAX 90 |
||||
|
#define EEPROM_PARAM_FILTER 0xAA |
||||
|
|
||||
|
typedef struct |
||||
|
{ |
||||
|
U8 filter; |
||||
|
U8 len; |
||||
|
U8 buf[EEPROM_PARAM_DATA_MAX]; |
||||
|
U8 crc[2]; |
||||
|
}TS_eeprom_param_; |
||||
|
|
||||
|
#define MCU_ID_LEN 7 |
||||
|
#define MCU_ID_KEY_LEN 4 |
||||
|
#define EEPROM_ENC_DATA_MAX 64 |
||||
|
#define EEPROM_ENC_FILTER 0xAA |
||||
|
typedef struct ts_eeprom_enc |
||||
|
{ |
||||
|
U8 enc_key[MCU_ID_KEY_LEN]; |
||||
|
U8 enc_val[MCU_ID_LEN]; |
||||
|
U8 crc[2]; |
||||
|
}TS_EEPROM_ENC_; |
||||
|
|
||||
|
U8 L1_para_read(U8 *buf,U8 *len); |
||||
|
|
||||
|
U8 L1_para_write(U8 *buf, U8 len); |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
#endif // #ifndef _APP_TASK_ADC_H
|
||||
|
|
||||
@ -0,0 +1,588 @@ |
|||||
|
////////////////////////////////////////////////////////////////////////////
|
||||
|
///@copyright Copyright (c) 2018, 传控科技 All rights reserved.
|
||||
|
///-------------------------------------------------------------------------
|
||||
|
/// @file bsp_drv.c
|
||||
|
/// @brief bsp @ driver config
|
||||
|
///-------------------------------------------------------------------------
|
||||
|
/// @version 1.0
|
||||
|
/// @author CC
|
||||
|
/// @date 20180331
|
||||
|
/// @note cc_AS_stc02
|
||||
|
//////////////////////////////////////////////////////////////////////////////
|
||||
|
|
||||
|
#include "asp_schain.h" |
||||
|
///#include "common.h"
|
||||
|
#include "msp_uart0.h" |
||||
|
#include "bsp_cs1232.h" |
||||
|
|
||||
|
//=============================================
|
||||
|
|
||||
|
//S_TASK_ADC_CHANNEL_BLUR ts_adc_channel_blurs[D_ADC_CHANNEL_NUM];
|
||||
|
//S_TASK_ADC_CHANNEL_SHOW ts_adc_channel_show;
|
||||
|
|
||||
|
TS_TASK_ADC_SAMPLE ts_adc_samples[D_ADC_CHANNEL_NUM]; |
||||
|
|
||||
|
/***********
|
||||
|
TS_TASK_ADC_SHIFTFILTER ts_adc_ShiftFilter[D_ADC_CHANNEL_NUM]; |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
S_TASK_ADC_BLUR_MID ts_adc_blur_mid[D_ADC_CHANNEL_NUM]; |
||||
|
S_TASK_ADC_BLUR_AVG ts_adc_blur_avg[D_ADC_CHANNEL_NUM]; |
||||
|
S_TASK_ADC_BLUR_SHIFT ts_adc_blur_shift[D_ADC_CHANNEL_NUM]; |
||||
|
S_TASK_ADC_BLUR_OUT ts_adc_blur_out[D_ADC_CHANNEL_NUM]; |
||||
|
*********/ |
||||
|
|
||||
|
void L2_task_adc_SAinit(U8 ch,U8 *a,U8 *b) |
||||
|
{ |
||||
|
ts_adc_samples[ch].ts_SAa.shift = *a; |
||||
|
ts_adc_samples[ch].ts_SAb.shift = *b; |
||||
|
|
||||
|
|
||||
|
} |
||||
|
|
||||
|
//ch是0123,代表4通道
|
||||
|
void L2_task_adc_init(U8 ch) |
||||
|
{ |
||||
|
//通道采集任务初始化
|
||||
|
L1_task_init(&ts_adc_samples[ch].task); |
||||
|
L3_task_s_go(ts_adc_samples[ch],D_task_init); |
||||
|
ts_adc_samples[D_Wch1].ch = D_Wch1; |
||||
|
ts_adc_samples[D_Wch2].ch = D_Wch2; |
||||
|
ts_adc_samples[D_Wch3].ch = D_Wch3; |
||||
|
ts_adc_samples[D_Wch4].ch = D_Wch4; |
||||
|
|
||||
|
|
||||
|
} |
||||
|
|
||||
|
//ADC Channel 采样任务
|
||||
|
#define D_task_ADC_CHx_SAMPLE_JITTER_START_SAMPLE 0x53 |
||||
|
#define D_task_ADC_CHx_JITTER 0x63 |
||||
|
#define D_task_ADC_CHx_PIANYI 0x93 |
||||
|
#define D_task_ADC_CHx_JITTER2 0x83 |
||||
|
#define D_task_ADC_CHx_despiking_shift 0x94 |
||||
|
#define D_task_ADC_CHx_SAMPLE_WAIT_LOW 0x73 |
||||
|
#define D_task_ADC_CHx_SAMPLE_READ 0x54 |
||||
|
#define D_task_ADC_CHx_SAMPLE_OUT 0x55 |
||||
|
#define D_task_ADC_CHx_SHIFTFILTER 0x56 |
||||
|
#define D_task_ADC_CHx_SHIFTFILTER2 0x57 |
||||
|
#define D_ADC_JITTER_zero 11///还包含建立时间 至少9个
|
||||
|
#define D_ADC_JITTER_FINISH 12///还包含建立时间 至少9个
|
||||
|
|
||||
|
/********
|
||||
|
80hZ |
||||
|
1000ms/80= 12.5ms/point |
||||
|
ushex send = 4Bytes+blank = 5Byte; |
||||
|
115200 0.1ms/Byte |
||||
|
所以发送5Bytes 消耗0.5ms 发送四列 消耗2ms 系统足够响应 |
||||
|
|
||||
|
*******/ |
||||
|
|
||||
|
/****************
|
||||
|
|
||||
|
|
||||
|
^ |
||||
|
| |
||||
|
|--------------------------zeroout |
||||
|
| | | | | offset |
||||
|
| | | | . |
||||
|
| . | | |
||||
|
0------.----|-------------> 0 |
||||
|
| . |
||||
|
|
||||
|
四个点是四个传感器的采样值 |
||||
|
ts_adc_samples[3].offset = R.sd.zeroout; |
||||
|
|
||||
|
|
||||
|
ts_adc_samples[0].zeroout = R.sd.zeroout; |
||||
|
|
||||
|
|
||||
|
R.sd.zeroout= 2418 = 0x 972 offset 2418 = 0x 972 |
||||
|
|
||||
|
R.sd.zeroout= 2418 = 0x 972 offset 2418 = 0x 972 |
||||
|
|
||||
|
R.sd.zeroout= 2418 = 0x 972 offset 2418 = 0x 972 |
||||
|
|
||||
|
R.sd.zeroout= 2418 = 0x 972 offset 2418 = 0x 972 |
||||
|
4 |
||||
|
out1 offset |
||||
|
|
||||
|
Z00 0116 085C |
||||
|
Z01 F671 1301 |
||||
|
Z02 1642 F330 |
||||
|
Z03 FF66 0A0C |
||||
|
|
||||
|
092B 0967 0928 0954 0943 0000 |
||||
|
08DF 0956 08E0 0929 090F 0000 |
||||
|
0895 0945 089C 0900 08DD 0000 |
||||
|
R.sd.zeroout= 8049 = 0x1f71 offset 8049 = 0x1f71 |
||||
|
4 |
||||
|
Z00 0415 1B5C |
||||
|
|
||||
|
Z01 F482 2AEF |
||||
|
Z02 1902 066F |
||||
|
Z03 02C7 1CAA |
||||
|
|
||||
|
0000 1F4D 1F16 1F35 1766 000F |
||||
|
0000 1F34 1EB7 1F08 173C 000E |
||||
|
0000 1F19 1E6C 1E73 |
||||
|
|
||||
|
|
||||
|
*********************/ |
||||
|
void L3_out_zero(u8 ch) |
||||
|
{ |
||||
|
vS16 t,m; |
||||
|
|
||||
|
|
||||
|
t = ts_adc_samples[ch].out1; |
||||
|
m = ts_adc_samples[ch].zeroout; |
||||
|
m -= t; |
||||
|
ts_adc_samples[ch].offset = (vU16)m; |
||||
|
/// L0_waitFree_uartN(0);///混搭使用printf的时候必须加上
|
||||
|
/// printf("\r\nzeroout = %4x offset= 0x%4x\r\n", ts_adc_samples[ch].zeroout,ts_adc_samples[ch].offset);
|
||||
|
|
||||
|
/// D_ADC_OFFSET(ch) = ts_adc_samples[ch].zeroout - ts_adc_samples[ch].out1;
|
||||
|
} |
||||
|
|
||||
|
vU16 L3_out_tran2(vU32 rdata) |
||||
|
{ |
||||
|
vU16 t16; |
||||
|
//// L0_ADS1231_readCH2(0,&rdata);
|
||||
|
// L0_uart0_uc('0'+ch); L0_uart0_uc(0x09);
|
||||
|
// L0_uart0_ulhex(rdata); L0_uart0_uc(0x09);
|
||||
|
if (rdata > 0x007fFFff) |
||||
|
{ |
||||
|
rdata >>= D_sensor_zoom; ///fixme:此处正负差和移位不一致需要谨慎
|
||||
|
rdata |= D_sensor_zoom_FF; /// 1111 1100
|
||||
|
}else |
||||
|
{ |
||||
|
rdata >>= D_sensor_zoom; |
||||
|
} |
||||
|
|
||||
|
// L0_uart0_ulhex(rdata); L0_uart0_uc(0x09);
|
||||
|
t16 = rdata; |
||||
|
// L0_uart0_ushex(t16); L0_uart0_uc(0x09);
|
||||
|
///L0_uart0_0d0a();
|
||||
|
return t16; |
||||
|
} |
||||
|
|
||||
|
S16 L3_out_tran(vU32 rdata) |
||||
|
{ |
||||
|
S16 t16; |
||||
|
/// 24bits 3Bytes
|
||||
|
rdata >>= 8; |
||||
|
t16 = rdata; |
||||
|
return t16; |
||||
|
} |
||||
|
|
||||
|
vU16 L3_out_offset(u8 ch,vU16 t16) |
||||
|
{ |
||||
|
vU16 out; |
||||
|
|
||||
|
/// L0_uart0_ushex(t16); L0_uart0_uc(' ');
|
||||
|
if(t16 & 0x8000) //最高位为1,<0则
|
||||
|
{ |
||||
|
t16 = 0xffFF - t16;///转变为正数
|
||||
|
///*d = D_ADC_OFFSET - t16;
|
||||
|
out = ts_adc_samples[ch].offset - t16; |
||||
|
// L0_uart0_uc('$'); L0_uart0_ushex(ts_adc_samples[ch].offset);L0_uart0_uc(' ');
|
||||
|
}else |
||||
|
{ |
||||
|
out = t16 + ts_adc_samples[ch].offset; |
||||
|
} |
||||
|
// L0_uart0_ushex(out);L0_uart0_uc(' '); L0_uart0_uc('R');L0_uart0_0d0a();
|
||||
|
return out; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
void L2_task_adc_sample(TS_TASK_ADC_SAMPLE *s) |
||||
|
{ |
||||
|
TTSS_Task_init(): |
||||
|
////cc 初始化尽量放到这里,不要放到main ——init中,减少系统启动的时间
|
||||
|
s->jitter_start = 0; s->ok = 0; |
||||
|
/// L0_uart0_sendstr("\r\nADC_SAMPLE\r\n");
|
||||
|
|
||||
|
/// L2_task_go(D_task_ADC_CHx_SAMPLE_READ);
|
||||
|
L2_task_go_Tdelay(D_task_ADC_CHx_SAMPLE_READ,D_Tdelay_Msec(1500)); //延时15ms
|
||||
|
|
||||
|
TTSS_Task_step(D_task_ADC_CHx_SAMPLE_READ): |
||||
|
if(0 == L0_adc_DOUT_AT(s->ch)) |
||||
|
{////L0_uart0_uc('X');L0_uart0_uc(0x30+s->ch);
|
||||
|
//// L0_ADS1231_readCH2(s->ch,&(s->out1)); ////
|
||||
|
L0_ADS1231_readCH2(s->ch,&(s->out0)); |
||||
|
L2_task_go(D_task_ADC_CHx_PIANYI); |
||||
|
} |
||||
|
TTSS_Task_step(D_task_ADC_CHx_PIANYI): |
||||
|
s->out1 = L3_out_tran(s->out0); |
||||
|
////s->out1a = L3_out_tran2(s->out0);
|
||||
|
/// L0_uart0_uc('0' + s->ch);
|
||||
|
s->out2 = L3_out_offset(s->ch,s->out1); |
||||
|
L2_task_go(D_task_ADC_CHx_despiking_shift); |
||||
|
TTSS_Task_step(D_task_ADC_CHx_despiking_shift): |
||||
|
s->outm[0] = s->outm[1]; |
||||
|
s->outm[1] = s->outm[2]; |
||||
|
s->outm[2] = s->out2; |
||||
|
|
||||
|
Lc_despiking_shift3_U16(s->outm);////采样后进行削峰
|
||||
|
s->out3 = s->outm[1]; |
||||
|
L2_task_go(D_task_ADC_CHx_JITTER2); |
||||
|
TTSS_Task_step(D_task_ADC_CHx_JITTER2): |
||||
|
///刚开始的抖动,先去掉几个最开始的数据
|
||||
|
|
||||
|
if(D_ADC_JITTER_FINISH == s->jitter_start) |
||||
|
{ |
||||
|
|
||||
|
s->ts_SAa.average = (vU32)s->out3;///shiftaverage_a路初始化
|
||||
|
s->ts_SAa.sum = s->ts_SAa.average << s->ts_SAa.shift; |
||||
|
|
||||
|
s->ts_SAb.average = (vU32)s->out3;///shiftaverage_b路初始化
|
||||
|
s->ts_SAb.sum = s->ts_SAb.average << s->ts_SAb.shift; |
||||
|
L2_task_go(D_task_ADC_CHx_SHIFTFILTER); |
||||
|
}else if(D_ADC_JITTER_zero == s->jitter_start) |
||||
|
{///
|
||||
|
L3_out_zero(s->ch);///算出当前的偏移量 更新offset
|
||||
|
|
||||
|
L0_uart0_uc('Z');L0_uart0_uchex(s->ch); |
||||
|
L0_uart0_uc(' ');L0_uart0_ushex(s->out1);L0_uart0_uc(' '); |
||||
|
L0_uart0_uc(' ');L0_uart0_ushex(s->offset);L0_uart0_uc(' '); |
||||
|
s->jitter_start ++; |
||||
|
L2_task_go(D_task_ADC_CHx_SAMPLE_READ); |
||||
|
}else |
||||
|
{ |
||||
|
s->jitter_start ++; |
||||
|
L2_task_go(D_task_ADC_CHx_SAMPLE_READ); |
||||
|
} |
||||
|
|
||||
|
TTSS_Task_step(D_task_ADC_CHx_SHIFTFILTER): |
||||
|
//L0_uart0_uc('B');
|
||||
|
s->ts_SAa.sum -= s->ts_SAa.average; |
||||
|
s->ts_SAa.sum += (vU32)s->out3; |
||||
|
s->ts_SAa.average = s->ts_SAa.sum >> s->ts_SAa.shift; |
||||
|
// s->ts_SAa.new = s->ts_SAa.average;
|
||||
|
s->ts_SAa.out4 = (vU16)s->ts_SAa.average; |
||||
|
/// L0_uart0_uc('s');
|
||||
|
|
||||
|
L2_task_go(D_task_ADC_CHx_SHIFTFILTER2); |
||||
|
TTSS_Task_step(D_task_ADC_CHx_SHIFTFILTER2): |
||||
|
|
||||
|
s->ts_SAb.sum -= s->ts_SAb.average; |
||||
|
s->ts_SAb.sum += (vU32)s->out3; |
||||
|
s->ts_SAb.average = s->ts_SAb.sum >> s->ts_SAb.shift; |
||||
|
s->ts_SAb.out4 = (vU16)s->ts_SAb.average; |
||||
|
///out4 = out3
|
||||
|
|
||||
|
s->ok = 1; |
||||
|
L2_task_go(D_task_ADC_CHx_SAMPLE_READ); |
||||
|
|
||||
|
/// L2_task_go(D_task_ADC_CHx_SAMPLE_OUT);
|
||||
|
TTSS_Task_step(D_task_ADC_CHx_SAMPLE_OUT): |
||||
|
|
||||
|
/***
|
||||
|
L0_uart0_ulhex(s->out0); L0_uart0_uc(0x09); |
||||
|
L0_uart0_ushex(s->out1); L0_uart0_uc(0x09); |
||||
|
L0_uart0_ushex(s->out2); L0_uart0_uc(0x09); |
||||
|
L0_uart0_ushex(s->ts_SAa.out4); L0_uart0_uc(0x09); |
||||
|
L0_uart0_ushex(s->ts_SAb.out4); |
||||
|
L0_uart0_0d0a(); |
||||
|
|
||||
|
|
||||
|
**/ |
||||
|
|
||||
|
////
|
||||
|
//// L0_uart0_uc('0' + s->ch);L0_uart0_uc('A');//
|
||||
|
TTSS_Task_end(); |
||||
|
} |
||||
|
|
||||
|
#if 0 |
||||
|
|
||||
|
|
||||
|
void L3_task_show_init(void) |
||||
|
{ |
||||
|
//显示任务初始化
|
||||
|
L1_task_init(&ts_adc_blur_show.task); |
||||
|
L3_task_s_go(ts_adc_blur_show,D_task_init); |
||||
|
ts_adc_blur_show.rough_weight = 0; |
||||
|
|
||||
|
} |
||||
|
|
||||
|
//中值滤波任务
|
||||
|
#define D_task_ADC_CHx_FILTER_MID_GET 0x50 |
||||
|
#define D_task_ADC_CHx_FILTER_MID_COUNT 0x51 |
||||
|
#define D_task_ADC_CHx_FILTER_MID_OUT 0x52 |
||||
|
void L3_task_adc_filter_mid(S_TASK_ADC_BLUR_MID *s) |
||||
|
{ |
||||
|
TTSS_Task_init() |
||||
|
L2_task_go(D_task_ADC_CHx_FILTER_MID_GET); |
||||
|
|
||||
|
TTSS_Task_step(D_task_ADC_CHx_FILTER_MID_GET) |
||||
|
if(ts_adc_channel_samples[s->ch].n >= s->max) |
||||
|
{ |
||||
|
U8 i = 0; |
||||
|
for(i=0;i<s->max;i++) |
||||
|
{ |
||||
|
s->in[i] = ts_adc_channel_samples[s->ch].out1[i]; |
||||
|
} |
||||
|
ts_adc_channel_samples[s->ch].n = 0; |
||||
|
L2_task_go(D_task_ADC_CHx_FILTER_MID_COUNT); |
||||
|
} |
||||
|
|
||||
|
TTSS_Task_step(D_task_ADC_CHx_FILTER_MID_COUNT) |
||||
|
s->midval = Lc_S32_media(s->in, s->max); |
||||
|
L2_task_go(D_task_ADC_CHx_FILTER_MID_OUT); |
||||
|
|
||||
|
TTSS_Task_step(D_task_ADC_CHx_FILTER_MID_OUT) |
||||
|
s->out[s->n] = s->midval; |
||||
|
//R.adval[s->ch] = s->out[s->n];
|
||||
|
s->n++; |
||||
|
if(s->n >= MAX_OUT_NUM) |
||||
|
{ |
||||
|
s->n = 0; |
||||
|
} |
||||
|
L2_task_go(D_task_ADC_CHx_FILTER_MID_GET); |
||||
|
|
||||
|
TTSS_Task_end(); |
||||
|
|
||||
|
|
||||
|
} |
||||
|
|
||||
|
//均值滤波任务
|
||||
|
#define D_task_ADC_CHx_FILTER_AVG_GET 0x50 |
||||
|
#define D_task_ADC_CHx_FILTER_AVG_COUNT 0x51 |
||||
|
#define D_task_ADC_CHx_FILTER_AVG_OUT 0x52 |
||||
|
void L3_task_adc_filter_avg(S_TASK_ADC_BLUR_AVG *s) |
||||
|
{ |
||||
|
TTSS_Task_init() |
||||
|
L2_task_go(D_task_ADC_CHx_FILTER_AVG_GET); |
||||
|
|
||||
|
TTSS_Task_step(D_task_ADC_CHx_FILTER_AVG_GET) |
||||
|
if(ts_adc_channel_samples[s->ch].n >= s->max) |
||||
|
{ |
||||
|
U8 i = 0; |
||||
|
ts_adc_channel_samples[s->ch].n = 0; |
||||
|
for(i=0;i<s->max;i++) |
||||
|
{ |
||||
|
s->in[i] = ts_adc_channel_samples[s->ch].out1[i]; |
||||
|
} |
||||
|
L2_task_go(D_task_ADC_CHx_FILTER_AVG_COUNT); |
||||
|
} |
||||
|
|
||||
|
TTSS_Task_step(D_task_ADC_CHx_FILTER_AVG_COUNT) |
||||
|
s->avgval = Lc_vS32_avg(s->in,s->max); |
||||
|
L2_task_go(D_task_ADC_CHx_FILTER_AVG_OUT); |
||||
|
|
||||
|
TTSS_Task_step(D_task_ADC_CHx_FILTER_AVG_OUT) |
||||
|
s->out[s->n] = s->avgval; |
||||
|
//R.adval[s->ch] = s->out[s->n];
|
||||
|
s->n++; |
||||
|
if(s->n >= MAX_OUT_NUM) |
||||
|
{ |
||||
|
s->n = 0; |
||||
|
} |
||||
|
L2_task_go(D_task_ADC_CHx_FILTER_AVG_GET); |
||||
|
|
||||
|
TTSS_Task_end(); |
||||
|
|
||||
|
|
||||
|
} |
||||
|
|
||||
|
|
||||
|
//移位滤波任务
|
||||
|
#define D_task_ADC_CHx_FILTER_SHIFT_GET 0x50 |
||||
|
#define D_task_ADC_CHx_FILTER_SHIFT_COUNT 0x51 |
||||
|
#define D_task_ADC_CHx_FILTER_SHIFT_OUT 0x52 |
||||
|
void L3_task_adc_ShiftFilter(TS_TASK_ADC_SHIFTFILTER *s) |
||||
|
{ |
||||
|
TTSS_Task_init() |
||||
|
s->average = ts_adc_samples[s->ch].out2;///
|
||||
|
s->sum = s->average << s->shift; |
||||
|
L2_task_go(D_task_ADC_CHx_FILTER_SHIFT_GET); |
||||
|
|
||||
|
TTSS_Task_step(D_task_ADC_CHx_FILTER_SHIFT_GET) |
||||
|
s->sum += |
||||
|
|
||||
|
|
||||
|
TTSS_Task_step(D_task_ADC_CHx_FILTER_SHIFT_COUNT) |
||||
|
s->sum[0] -= s->shiftval[0]; |
||||
|
s->sum[0] += s->in; |
||||
|
s->shiftval[0] = s->sum[0] >> s->shiftreg[0]; |
||||
|
s->sum[1] -= s->shiftval[1]; |
||||
|
s->sum[1] += s->in; |
||||
|
s->shiftval[1] = s->sum[1] >> s->shiftreg[1]; |
||||
|
s->sum[2] -= s->shiftval[2]; |
||||
|
s->sum[2] += s->in; |
||||
|
s->shiftval[2] = s->sum[2] >> s->shiftreg[2]; |
||||
|
L2_task_go(D_task_ADC_CHx_FILTER_SHIFT_OUT); |
||||
|
|
||||
|
TTSS_Task_step(D_task_ADC_CHx_FILTER_SHIFT_OUT) |
||||
|
s->out[0][s->n] = s->shiftval[0]; |
||||
|
s->out[1][s->n] = s->shiftval[1]; |
||||
|
s->out[2][s->n] = s->shiftval[2]; |
||||
|
|
||||
|
|
||||
|
//R.adval[s->ch] = s->out[0][s->n] = s->shiftval[0];
|
||||
|
s->n++; |
||||
|
if(s->n >= MAX_OUT_NUM) |
||||
|
{ |
||||
|
s->n = 0; |
||||
|
} |
||||
|
L2_task_go(D_task_ADC_CHx_FILTER_SHIFT_GET); |
||||
|
|
||||
|
TTSS_Task_end(); |
||||
|
|
||||
|
} |
||||
|
|
||||
|
|
||||
|
//输出判定任务
|
||||
|
#define D_task_ADC_CHx_FILTER_OUT_GET 0x50 |
||||
|
#define D_task_ADC_CHx_FILTER_OUT_COUNT 0x51 |
||||
|
#define D_task_ADC_CHx_FILTER_OUT_CHANGE 0x52 |
||||
|
#define D_task_ADC_CHx_FILTER_OUT_OUT 0x53 |
||||
|
void L3_task_adc_filter_out(S_TASK_ADC_BLUR_OUT *s) |
||||
|
{ |
||||
|
TTSS_Task_init() |
||||
|
L2_task_go(D_task_ADC_CHx_FILTER_OUT_GET); |
||||
|
|
||||
|
TTSS_Task_step(D_task_ADC_CHx_FILTER_OUT_GET) |
||||
|
if(s->h != ts_adc_blur_shift[s->ch].n) |
||||
|
{ |
||||
|
s->h = ts_adc_blur_shift[s->ch].n; |
||||
|
s->in[0] = ts_adc_blur_avg[s->ch].out[count_n(ts_adc_blur_avg[s->ch].n, 1)]; |
||||
|
s->in[1] = ts_adc_blur_avg[s->ch].out[count_n(ts_adc_blur_avg[s->ch].n, 2)]; |
||||
|
//获取输出曲线val
|
||||
|
s->newout = ts_adc_blur_shift[s->ch].out[s->oldnum][count_n(ts_adc_blur_shift[s->ch].n, 1)]; |
||||
|
L2_task_go(D_task_ADC_CHx_FILTER_OUT_COUNT); |
||||
|
} |
||||
|
|
||||
|
TTSS_Task_step(D_task_ADC_CHx_FILTER_OUT_COUNT) //根据阀值选择输出的曲线
|
||||
|
//判断选择新曲线
|
||||
|
if(Lc_abs(s->in[0] , s->in[1]) >= s->threshold[0])//2KG
|
||||
|
{ |
||||
|
s->newnum = 0; |
||||
|
} |
||||
|
else if(Lc_abs(s->in[0] , s->in[1]) >= s->threshold[1]) //0.5KG
|
||||
|
{ |
||||
|
s->newnum = 1; |
||||
|
} |
||||
|
else |
||||
|
{ |
||||
|
s->newnum = 2; |
||||
|
} |
||||
|
//L2_task_go(D_task_ADC_CHx_FILTER_OUT_OUT);
|
||||
|
L2_task_go(D_task_ADC_CHx_FILTER_OUT_CHANGE); |
||||
|
|
||||
|
TTSS_Task_step(D_task_ADC_CHx_FILTER_OUT_CHANGE) |
||||
|
if(s->newnum != s->oldnum)//切换移位滤波时调整其他滤波的SUM
|
||||
|
{ |
||||
|
s->oldnum = s->newnum; //不能只调整新值,所有曲线都要一起调整
|
||||
|
//ts_adc_blur_shift[s->ch].sum[1] = (ts_adc_blur_avg[s->ch].out[ts_adc_blur_avg[s->ch].n] * R.adc_blur_avg);
|
||||
|
ts_adc_blur_shift[s->ch].sum[0] = s->newout << ts_adc_blur_shift[s->ch].shiftreg[0]; |
||||
|
ts_adc_blur_shift[s->ch].shiftval[0] = s->newout; |
||||
|
ts_adc_blur_shift[s->ch].sum[1] = s->newout << ts_adc_blur_shift[s->ch].shiftreg[1]; |
||||
|
ts_adc_blur_shift[s->ch].shiftval[1] = s->newout; |
||||
|
ts_adc_blur_shift[s->ch].sum[2] = s->newout << ts_adc_blur_shift[s->ch].shiftreg[2]; |
||||
|
ts_adc_blur_shift[s->ch].shiftval[2] = s->newout; |
||||
|
} |
||||
|
L2_task_go(D_task_ADC_CHx_FILTER_OUT_OUT); |
||||
|
|
||||
|
TTSS_Task_step(D_task_ADC_CHx_FILTER_OUT_OUT) |
||||
|
R.adval[s->ch] = s->newout; |
||||
|
//R.adval[s->ch] = ts_adc_channel_samples[s->ch].adcval;
|
||||
|
L2_task_go(D_task_ADC_CHx_FILTER_OUT_GET); |
||||
|
|
||||
|
TTSS_Task_end(); |
||||
|
|
||||
|
} |
||||
|
|
||||
|
|
||||
|
//显示任务
|
||||
|
#define D_task_ADC_CHx_SHOW 0x50 |
||||
|
void L3_task_adc_filter_show(S_TASK_ADC_BLUR_SHOW *s) |
||||
|
{ |
||||
|
TTSS_Task_init() |
||||
|
L2_task_go(D_task_ADC_CHx_SHOW); |
||||
|
|
||||
|
TTSS_Task_step(D_task_ADC_CHx_SHOW) |
||||
|
R.ch_weight[0] = D_COUNT_WEIGHT(R.adval[0]); |
||||
|
R.ch_weight[1] = D_COUNT_WEIGHT(R.adval[1]); |
||||
|
R.ch_weight[2] = D_COUNT_WEIGHT(R.adval[2]); |
||||
|
R.ch_weight[3] = D_COUNT_WEIGHT(R.adval[3]); |
||||
|
s->rough_weight = R.ch_weight[0] + R.ch_weight[1] + R.ch_weight[2] + R.ch_weight[3]; //毛重
|
||||
|
#if 0 |
||||
|
L0_uart0_ulhex(s->rough_weight); |
||||
|
L0_uart0_uc(' '); |
||||
|
#endif |
||||
|
if( ABS(R.rough_weight,s->rough_weight) >= 50) //变化超过0.05KG
|
||||
|
{ |
||||
|
R.rough_weight = s->rough_weight; |
||||
|
R.total_weight = (R.rough_weight > R.total_zweight) ? (R.rough_weight - R.total_zweight) : (0);//净重
|
||||
|
} |
||||
|
L2_task_go_Tdelay(D_task_ADC_CHx_SHOW,D_Tdelay_Msec(15)); //延时15ms
|
||||
|
|
||||
|
TTSS_Task_end(); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
/*******
|
||||
|
ts_adc_channel_samples[ch].status = (R.p.adc_ch_status >> ch) & 0x1; |
||||
|
ts_adc_channel_samples[ch].pool = 0; |
||||
|
ts_adc_channel_samples[ch].adcval = 0; |
||||
|
ts_adc_channel_samples[ch].n = 0; |
||||
|
ts_adc_channel_samples[ch].ch = D_ADCCH_1 + ch; |
||||
|
|
||||
|
//通道中值滤波任务初始化
|
||||
|
L1_task_init(&ts_adc_blur_mid[ch].task); |
||||
|
L3_task_s_go(ts_adc_blur_mid[ch],D_task_init); |
||||
|
ts_adc_blur_mid[ch].n = 0; |
||||
|
ts_adc_blur_mid[ch].max = R.p.adc_blur_mid; |
||||
|
ts_adc_blur_mid[ch].ch = D_ADCCH_1 + ch; |
||||
|
|
||||
|
//通道均值滤波任务初始化
|
||||
|
L1_task_init(&ts_adc_blur_avg[ch].task); |
||||
|
L3_task_s_go(ts_adc_blur_avg[ch],D_task_init); |
||||
|
ts_adc_blur_avg[ch].max = R.p.adc_blur_avg; |
||||
|
ts_adc_blur_avg[ch].avgval = 0; |
||||
|
ts_adc_blur_avg[ch].n = 0; |
||||
|
ts_adc_blur_avg[ch].ch = D_ADCCH_1 + ch; |
||||
|
|
||||
|
//通道移位滤波任务初始化
|
||||
|
L1_task_init(&ts_adc_blur_shift[ch].task); |
||||
|
L3_task_s_go(ts_adc_blur_shift[ch],D_task_init); |
||||
|
ts_adc_blur_shift[ch].n = 0; |
||||
|
ts_adc_blur_shift[ch].h = 0; |
||||
|
ts_adc_blur_shift[ch].shiftreg[0] = R.p.adc_blur_shift[0]; |
||||
|
ts_adc_blur_shift[ch].shiftreg[1] = R.p.adc_blur_shift[1]; |
||||
|
ts_adc_blur_shift[ch].shiftreg[2] = R.p.adc_blur_shift[2]; |
||||
|
ts_adc_blur_shift[ch].sum[0] = 0; |
||||
|
ts_adc_blur_shift[ch].sum[1] = 0; |
||||
|
ts_adc_blur_shift[ch].sum[2] = 0; |
||||
|
ts_adc_blur_shift[ch].shiftval[0] = 0; |
||||
|
ts_adc_blur_shift[ch].shiftval[1] = 0; |
||||
|
ts_adc_blur_shift[ch].shiftval[2] = 0; |
||||
|
ts_adc_blur_shift[ch].ch = D_ADCCH_1 + ch; |
||||
|
|
||||
|
//输出判定任务初始化
|
||||
|
L1_task_init(&ts_adc_blur_out[ch].task); |
||||
|
L3_task_s_go(ts_adc_blur_out[ch],D_task_init); |
||||
|
ts_adc_blur_out[ch].h= 0; |
||||
|
ts_adc_blur_out[ch].threshold[0] = D_blur_threshold_2_1(R.p.adc_blur_threshold[0]); //2KG
|
||||
|
ts_adc_blur_out[ch].threshold[1] = D_blur_threshold_2_1(R.p.adc_blur_threshold[1]); //0.5KG
|
||||
|
ts_adc_blur_out[ch].newnum = 0; |
||||
|
ts_adc_blur_out[ch].oldnum = 0; |
||||
|
ts_adc_blur_out[ch].oldout = 0; |
||||
|
ts_adc_blur_out[ch].newout = 0; |
||||
|
ts_adc_blur_out[ch].n = 0; |
||||
|
ts_adc_blur_out[ch].ch = D_ADCCH_1 + ch; |
||||
|
*****/ |
||||
|
|
||||
|
#if 0 |
||||
|
//通道切换任务初始化
|
||||
|
//L1_task_init(&ts_adc_channel_switch.task);
|
||||
|
L3_task_s_go(ts_adc_channel_switch,D_task_init); |
||||
|
#endif |
||||
|
|
||||
|
#endif |
||||
|
|
||||
|
|
||||
@ -0,0 +1,127 @@ |
|||||
|
////////////////////////////////////////////////////////////////////////////
|
||||
|
///@copyright Copyright (c) 2018, 传控科技 All rights reserved.
|
||||
|
///-------------------------------------------------------------------------
|
||||
|
/// @file bsp_drv.h
|
||||
|
/// @brief bsp @ driver config
|
||||
|
///-------------------------------------------------------------------------
|
||||
|
/// @version 1.0
|
||||
|
/// @author CC
|
||||
|
/// @date 20180331
|
||||
|
/// @note cc_AS_stc02
|
||||
|
|
||||
|
//////////////////////////////////////////////////////////////////////////////
|
||||
|
|
||||
|
#ifndef _asp_schain_H |
||||
|
#define _asp_schainH |
||||
|
|
||||
|
#include "../bsp/bsp_config.h" |
||||
|
#include "TTSS_task.h" |
||||
|
#include "c_lib.h" |
||||
|
///#include "app_config.h"
|
||||
|
|
||||
|
#define D_Wch1 0 |
||||
|
#define D_Wch2 1 |
||||
|
#define D_Wch3 2 |
||||
|
#define D_Wch4 3 |
||||
|
|
||||
|
|
||||
|
#define ADC_CHANNEL_STATUS_UNREADY 0 //UnReady状态,不能读取
|
||||
|
#define ADC_CHANNEL_STATUS_READY 1 //ready状态,可以读取
|
||||
|
|
||||
|
|
||||
|
#define D_ADC_CHANNEL_NUM 4 |
||||
|
#define D_ADC_CH_SAMPLE_BUF_MAX 50 |
||||
|
#define D_ADC_CH_BLUE_POOL_NUM 3 |
||||
|
|
||||
|
typedef struct |
||||
|
{ |
||||
|
vU32 average; ///
|
||||
|
vU8 shift; ///移动的位数 1-2 2-4 3-8 4-16
|
||||
|
vU32 sum; |
||||
|
vU32 new; ///新的输出值
|
||||
|
vU16 out4; ///
|
||||
|
}TS_shift_averge_; |
||||
|
|
||||
|
|
||||
|
////cc 比较重要的滤波调整参数,根据实际需要进行调整
|
||||
|
#define D_ADC_shiftaverage_a 2 |
||||
|
#define D_ADC_shiftaverage_b 4 |
||||
|
///vtype i; vU32 rdata = 0;
|
||||
|
//任务读
|
||||
|
/// 单个传感器 D_sensor_zoom=8 2kg 289 80kg 8374
|
||||
|
/// D_sensor_zoom=6 1274 31787
|
||||
|
///#define D_sensor_zoom 6
|
||||
|
///#define D_sensor_zoom_FF 0xFFfc0000
|
||||
|
|
||||
|
#define D_sensor_zoom 7 |
||||
|
#define D_sensor_zoom_FF 0xFFfe0000 |
||||
|
|
||||
|
|
||||
|
///#define D_sensor_zoom 8///实际上8位不需要,因为强制转换成16位后自动符合要求
|
||||
|
///#define D_sensor_zoom_FF 0xfF000000
|
||||
|
//// 31688 80kg 31688/80= =400
|
||||
|
|
||||
|
//#define D_ADC_PER_KG 400 ///每公斤adc
|
||||
|
//#define D_ADC_OFFSET (20*D_ADC_PER_KG)
|
||||
|
///134
|
||||
|
///extern TS_GlobalRegister R;
|
||||
|
|
||||
|
#define D_ADC_PER_KG 0x134///每公斤adc
|
||||
|
#define D_ADC_OFFSET(ch) ts_adc_samples[ch].offset////(30*D_ADC_PER_KG)
|
||||
|
///#define D_ADC_OFFSET(ch) 0////(30*D_ADC_PER_KG)
|
||||
|
/*****
|
||||
|
000028FE 1kg 81.984375 |
||||
|
00015D85 3kg 699.0390625 617.0546875 |
||||
|
|
||||
|
2^7 128 0x134 |
||||
|
******/ |
||||
|
|
||||
|
|
||||
|
//AD_CHANNEL_SAMPLE 采样
|
||||
|
#define MAX_OUT_NUM 10 |
||||
|
typedef struct _s_task_adc_sample |
||||
|
{ |
||||
|
TS_task task; |
||||
|
vU8 ok; |
||||
|
vU8 ch; |
||||
|
/// vS32 adcval;
|
||||
|
// vS32 pool;
|
||||
|
vU8 jitter_start; ///刚开始的抖动,先去掉几个最开始的数据
|
||||
|
vU32 out0; |
||||
|
vU16 out1; |
||||
|
S16 out1a; |
||||
|
|
||||
|
vU16 outm[3];///中值移位滤波的缓存
|
||||
|
|
||||
|
vU16 out2; |
||||
|
vU16 out3; |
||||
|
|
||||
|
/****************
|
||||
|
^ |
||||
|
| |
||||
|
|--------------------------zeroout |
||||
|
| | | | | offset |
||||
|
| | | | . |
||||
|
| . | | |
||||
|
0------.----|-------------> 0 |
||||
|
| . |
||||
|
|
||||
|
四个点是四个传感器的采样值 |
||||
|
*********************/ |
||||
|
vU16 offset; |
||||
|
vU16 zeroout; |
||||
|
|
||||
|
TS_shift_averge_ ts_SAa; |
||||
|
TS_shift_averge_ ts_SAb; |
||||
|
|
||||
|
vU16 out4;//滤波输出
|
||||
|
vU16 out5;////选择后的
|
||||
|
}TS_TASK_ADC_SAMPLE; |
||||
|
extern TS_TASK_ADC_SAMPLE ts_adc_samples[D_ADC_CHANNEL_NUM]; |
||||
|
extern void L2_task_adc_init(U8 ch); |
||||
|
extern void L2_task_adc_sample(TS_TASK_ADC_SAMPLE *s); |
||||
|
extern void L2_task_adc_SAinit(U8 ch,U8 *a,U8 *b); |
||||
|
void L3_out_zero(u8 ch); |
||||
|
|
||||
|
#endif // #ifndef _asp_adc_H
|
||||
|
|
||||
@ -0,0 +1,620 @@ |
|||||
|
////////////////////////////////////////////////////////////////////////////
|
||||
|
///@copyright Copyright (c) 2022, 传控科技 All rights reserved.
|
||||
|
///-------------------------------------------------------------------------
|
||||
|
/// @file app_save.c
|
||||
|
/// @brief @ app save
|
||||
|
///-------------------------------------------------------------------------
|
||||
|
/// @version 1.0
|
||||
|
/// @author CC
|
||||
|
/// @date 20220120
|
||||
|
/// @note cc_AS_stc02
|
||||
|
|
||||
|
#ifdef doc453453 |
||||
|
|
||||
|
app_save 需要保存的参数 逻辑 数据流 |
||||
|
asp_para L1_para_write 为应用服务的eeprom的读写函数和地址配置 |
||||
|
U8 L1_para_write(U8 *buf, U8 len) |
||||
|
|
||||
|
msp_eeprom mcu的eeprom的底层驱动函数 |
||||
|
|
||||
|
|
||||
|
----------global_register--------------------------------> |
||||
|
寄存器化的结构 |
||||
|
全局化调用 里面有需要保存的iapData数据的映射 |
||||
|
TS_GlobalRegisterd S |
||||
|
.......................................... |
||||
|
|
||||
|
//RO Register
|
||||
|
U16 reserved1; |
||||
|
//RW Register
|
||||
|
TS_IapData_ sd;//// save data 需要保存的额参数
|
||||
|
|
||||
|
-----------iapData--------------------------------------> |
||||
|
需要保存的数据 |
||||
|
TS_IapData_ iapData |
||||
|
TS_IapData_ code iapData_factory |
||||
|
|
||||
|
.................................................. |
||||
|
|
||||
|
S16 slaver_id; |
||||
|
|
||||
|
TS_weight_point_ factory_ws[3]; ///出厂的设置,发布出厂指令后更新 由上位机命令更改,实时保存
|
||||
|
TS_weight_point_ zerows[3]; ///手工清零后的参数, 没有清零或者出错恢复到和出厂设置一样,需要实时保存
|
||||
|
vS16 zerodiff_max; /// 上电时,如果和zerows的零点ADC的差值小于 zerodiff_max 说明没有人,启动上电校准;
|
||||
|
vS16 zerodiff; ///零点的差值 零公斤位置和手工的差值
|
||||
|
////此值上电后更改, 顺便保存(区别于实时保存),
|
||||
|
u8 ADC_shiftaverage_a; ///a路移位滤波的参数 由上位机命令更改,实时保存
|
||||
|
u8 ADC_shiftaverage_b; ///b路移位滤波的参数 由上位机命令更改,实时保存
|
||||
|
|
||||
|
-----------eep_param-----------------------------------> |
||||
|
eeprom中的缓存 |
||||
|
eeprom ---底层硬件,一般按扇区保存,需要批量擦除写入. |
||||
|
TS_eeprom_param_ |
||||
|
......................................... |
||||
|
U8 filter; |
||||
|
U8 len; |
||||
|
U8 buf[EEPROM_PARAM_DATA_MAX]; |
||||
|
U8 crc[2]; |
||||
|
|
||||
|
#endif |
||||
|
|
||||
|
//////////////////////////////////////////////////////////////////////////////
|
||||
|
|
||||
|
#include "asp_weight_save.h" |
||||
|
#include "app_config.h" |
||||
|
#include "debug_drv.h" |
||||
|
#include "msp_eeprom.h" |
||||
|
#define D_0kg 0 |
||||
|
#define D_20kg 200 |
||||
|
#define D_85kg 850 |
||||
|
///#define D_20kg 190
|
||||
|
///cc 2023/04/06--6:41:48 西安方块 传感器 根据传感器调配 程序应该专门数据结构
|
||||
|
/*
|
||||
|
///cc 2023/04/06--6:43:39
|
||||
|
\--------adc--------- |
||||
|
hex dec kg adc/kg |
||||
|
68F 1679 10 168 |
||||
|
|
||||
|
4196 16790 100 |
||||
|
37BF 14272 85 |
||||
|
D1E 3358 20 |
||||
|
|
||||
|
|
||||
|
|
||||
|
称重更换传感器后的步骤 |
||||
|
1,打印原始out_adc |
||||
|
2,添加10kg 修改D_Rsensor_per_10kg |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
step 1 采集adc |
||||
|
step 2 offset 变成正值 |
||||
|
step 3 滤波 |
||||
|
step 4 拉到设定的正值零点zeroout |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
step 5 |
||||
|
|
||||
|
|
||||
|
|
||||
|
^ |
||||
|
| |
||||
|
| |
||||
|
| | | | | offset |
||||
|
| | | | . |
||||
|
| . | | |
||||
|
0------.----|-------------> 0 |
||||
|
| . |
||||
|
|
||||
|
四个点是四个传感器的采样值 |
||||
|
|
||||
|
vU16 offset; |
||||
|
vU16 zeroout; ///默认的零点输出吧所有通道都调整成同一个起点 ,应该远大于原始采样值out_adc的最大值
|
||||
|
|
||||
|
*/ |
||||
|
///打开adc输出监控,0kg的试试每一路的输出就是 0kg_out1_adc
|
||||
|
#define D_ch1_0kg_out1_adc (vS16)0xFF3D |
||||
|
#define D_ch2_0kg_out1_adc (vS16)0xFF8D |
||||
|
#define D_ch3_0kg_out1_adc (vS16)0x00D9 |
||||
|
#define D_ch4_0kg_out1_adc (vS16)0xFFE0 |
||||
|
/////需要通过测试配置 如果不在意符号位 可以优化 diao
|
||||
|
#define D_ch1_out1_offset (D_ch1_wantline-D_ch1_0kg_out1_adc) |
||||
|
#define D_ch2_out1_offset (D_ch2_wantline-D_ch2_0kg_out1_adc) |
||||
|
#define D_ch3_out1_offset (D_ch3_wantline-D_ch3_0kg_out1_adc) |
||||
|
#define D_ch4_out1_offset (D_ch4_wantline-D_ch4_0kg_out1_adc) |
||||
|
|
||||
|
#define D_ch1_wantline 0x18da |
||||
|
#define D_ch2_wantline 0x18da |
||||
|
#define D_ch3_wantline 0x18da |
||||
|
#define D_ch4_wantline 0x18da |
||||
|
|
||||
|
///cc 2023/04/06--7:39:40 每个传感器放置10kg
|
||||
|
///应变片传感器10kg的adc值,选择这个是因为10kg容易获得 并且有一定的重量差
|
||||
|
///这个值需要实验获得
|
||||
|
#define D_ch1_10kg_out1_adc (vS16)0x0584 |
||||
|
#define D_ch2_10kg_out1_adc (vS16)0x05DE |
||||
|
#define D_ch3_10kg_out1_adc (vS16)0x0731 |
||||
|
#define D_ch4_10kg_out1_adc (vS16)0x066C |
||||
|
|
||||
|
#define D_Rsensor_per_10kg ((vS16)10) |
||||
|
#define D_adc_per_kg ((D_ch1_10kg_out1_adc-D_ch1_out1_adc)/D_Rsensor_per_10kg) |
||||
|
#define D_adc_zeroout (10*D_adc_per_kg) ///零点都拉到10kg
|
||||
|
|
||||
|
|
||||
|
///cc 2023/04/06--7:50:26 应该是tst_weight.out6的值
|
||||
|
#define D_Rsensor_adc_D_0kg 0x5e2 |
||||
|
#define D_Rsensor_adc_D_20kg 0x11a6 |
||||
|
#define D_Rsensor_adc_D_85kg 0x37E3 |
||||
|
|
||||
|
///TS_weight_save_ ts_weight_save;
|
||||
|
|
||||
|
TS_weight_SPara_ ts_weight_SPara= |
||||
|
{ |
||||
|
0xaabcd, |
||||
|
D_ch1_out1_offset,D_ch2_out1_offset,D_ch3_out1_offset,D_ch4_out1_offset,///0x18da,0x18d9 0x18d9 0x18d9 4x2与第一个传感器的差值,第一个传感器为偏移量
|
||||
|
|
||||
|
|
||||
|
/// ts_weight_sheet_ zerows[3]; ///手工清零后的参数, 没有清零或者出错恢复到和出厂设置一样,需要实时保存
|
||||
|
D_0kg,D_Rsensor_adc_D_0kg, |
||||
|
D_20kg,D_Rsensor_adc_D_20kg, |
||||
|
D_85kg,D_Rsensor_adc_D_85kg, |
||||
|
|
||||
|
|
||||
|
|
||||
|
/// vS16 zerodiff_max; /// 上电时,如果和zerows的零点ADC的差值小于 zerodiff_max 说明没有人,启动上电校准;
|
||||
|
/// 123,
|
||||
|
/// vS16 zerodiff; ///零点的差值 零公斤位置和手工的差值
|
||||
|
/// -123, ////此值上电后更改, 顺便保存(区别于实时保存),
|
||||
|
///vU16 zeroout; //2
|
||||
|
/// D_adc_zeroout,
|
||||
|
|
||||
|
|
||||
|
/// u8 ADC_shiftaverage_a; ///a路移位滤波的参数 由上位机命令更改,实时保存
|
||||
|
/// u8 ADC_shiftaverage_b; ///b路移位滤波的参数 由上位机命令更改,实时保存
|
||||
|
2,5, |
||||
|
D_rev0x55aa55aa |
||||
|
}; |
||||
|
|
||||
|
TS_weight_SPara_ code ts_weight__factory= |
||||
|
{ |
||||
|
0xaabcd, |
||||
|
D_ch1_out1_offset,D_ch2_out1_offset,D_ch3_out1_offset,D_ch4_out1_offset,///
|
||||
|
|
||||
|
/// ts_weight_sheet_ zerows[3]; ///手工清零后的参数, 没有清零或者出错恢复到和出厂设置一样,需要实时保存
|
||||
|
0,0x1f7f, |
||||
|
D_20kg,0x25ed, |
||||
|
D_85kg,0x3236, |
||||
|
|
||||
|
|
||||
|
/// vS16 zerodiff_max; /// 上电时,如果和zerows的零点ADC的差值小于 zerodiff_max 说明没有人,启动上电校准;
|
||||
|
// 123,
|
||||
|
/// vS16 zerodiff; ///零点的差值 零公斤位置和手工的差值
|
||||
|
////// -123, ////此值上电后更改, 顺便保存(区别于实时保存),
|
||||
|
///vU16 zeroout; //2
|
||||
|
/// D_adc_zeroout,
|
||||
|
/// u8 ADC_shiftaverage_a; ///a路移位滤波的参数 由上位机命令更改,实时保存
|
||||
|
/// u8 ADC_shiftaverage_b; ///b路移位滤波的参数 由上位机命令更改,实时保存
|
||||
|
2,5, |
||||
|
D_rev0x55aa55aa |
||||
|
}; |
||||
|
|
||||
|
#if 0 |
||||
|
///cc 2023/04/06--6:41:28 长条的传感器数据150kg?
|
||||
|
|
||||
|
///cc 2023/04/06--6:41:48 西安方块 传感器
|
||||
|
|
||||
|
|
||||
|
TS_IapData_ iapData= |
||||
|
{ |
||||
|
0xaabcd, |
||||
|
0x18da,0x18d9,0x18d9,0x18d9,///0x18da,0x18d9 0x18d9 0x18d9
|
||||
|
/// ts_weight_sheet_ factory_ws[3]; ///出厂的设置,发布出厂指令后更新 由上位机命令更改,实时保存
|
||||
|
0,0x1f7f, |
||||
|
D_20kg,0x25ed, |
||||
|
D_85kg,0x3236, |
||||
|
/// ts_weight_sheet_ zerows[3]; ///手工清零后的参数, 没有清零或者出错恢复到和出厂设置一样,需要实时保存
|
||||
|
0,0x1f7f, |
||||
|
D_20kg,0x25ed, |
||||
|
D_85kg,0x3236, |
||||
|
|
||||
|
|
||||
|
/// vS16 zerodiff_max; /// 上电时,如果和zerows的零点ADC的差值小于 zerodiff_max 说明没有人,启动上电校准;
|
||||
|
123, |
||||
|
/// vS16 zerodiff; ///零点的差值 零公斤位置和手工的差值
|
||||
|
-123, ////此值上电后更改, 顺便保存(区别于实时保存),
|
||||
|
///vU16 zeroout; //2
|
||||
|
8049,///30*0x134
|
||||
|
|
||||
|
|
||||
|
/// u8 ADC_shiftaverage_a; ///a路移位滤波的参数 由上位机命令更改,实时保存
|
||||
|
/// u8 ADC_shiftaverage_b; ///b路移位滤波的参数 由上位机命令更改,实时保存
|
||||
|
2,5, |
||||
|
D_rev0x55aa55aa |
||||
|
}; |
||||
|
|
||||
|
TS_IapData_ code iapData_factory= |
||||
|
{ |
||||
|
0xaabcd, |
||||
|
0x18da,0x18d9,0x18d9,0x18d9,///
|
||||
|
/// ts_weight_sheet_ factory_ws[3]; ///出厂的设置,发布出厂指令后更新 由上位机命令更改,实时保存
|
||||
|
0,0x1f7f, |
||||
|
D_20kg,0x25ed, |
||||
|
D_85kg,0x3236, |
||||
|
/// ts_weight_sheet_ zerows[3]; ///手工清零后的参数, 没有清零或者出错恢复到和出厂设置一样,需要实时保存
|
||||
|
0,0x1f7f, |
||||
|
D_20kg,0x25ed, |
||||
|
D_85kg,0x3236, |
||||
|
|
||||
|
|
||||
|
/// vS16 zerodiff_max; /// 上电时,如果和zerows的零点ADC的差值小于 zerodiff_max 说明没有人,启动上电校准;
|
||||
|
123, |
||||
|
/// vS16 zerodiff; ///零点的差值 零公斤位置和手工的差值
|
||||
|
-123, ////此值上电后更改, 顺便保存(区别于实时保存),
|
||||
|
///vU16 zeroout; //2
|
||||
|
8049,///30*0x134
|
||||
|
/// u8 ADC_shiftaverage_a; ///a路移位滤波的参数 由上位机命令更改,实时保存
|
||||
|
/// u8 ADC_shiftaverage_b; ///b路移位滤波的参数 由上位机命令更改,实时保存
|
||||
|
2,5, |
||||
|
D_rev0x55aa55aa |
||||
|
}; |
||||
|
|
||||
|
#endif |
||||
|
//读取reg内容,写入iap
|
||||
|
u8 L4_reg_2_iap(void) |
||||
|
{ |
||||
|
|
||||
|
|
||||
|
} |
||||
|
|
||||
|
|
||||
|
//读取factory内容,写入iap
|
||||
|
u8 L4_factory_2_iap(void) |
||||
|
{ |
||||
|
|
||||
|
|
||||
|
} |
||||
|
|
||||
|
#define D_EEP_SAVE_ADDR 0 |
||||
|
///// 多次读取
|
||||
|
void L4_iap_2_reg(void) |
||||
|
{ |
||||
|
|
||||
|
L0_Iap_Read_array(D_EEP_SAVE_ADDR, (U8*)&S, 128); |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
} |
||||
|
|
||||
|
void L4_print_iap(TS_weight_SPara_ *s) |
||||
|
{ |
||||
|
|
||||
|
|
||||
|
L0_waitFree_uartN(0);///混搭使用printf的时候必须加上
|
||||
|
|
||||
|
|
||||
|
|
||||
|
printf("\r\nzerows\r\n %d kg = 0x%4x\r\n", s->zerows[0].kg,s->zerows[0].adc); |
||||
|
printf(" %d kg = 0x%4x\r\n", s->zerows[1].kg,s->zerows[1].adc); |
||||
|
printf(" %d kg = 0x%4x\r\n", s->zerows[2].kg,s->zerows[2].adc); |
||||
|
|
||||
|
|
||||
|
/// printf("\r\ns->zeroout= %d = 0x%4x\r\n", s->zeroout, s->zeroout);
|
||||
|
|
||||
|
|
||||
|
//// printf("\r\ns->offset 0x%04x 0x%04x 0x%04x 0x%04x\r\n",s->offset[0],s->offset[1],s->offset[2],s->offset[3]);
|
||||
|
printf("\r\n-----print_reg end--------\r\n"); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
/*******
|
||||
|
///cc 2023/04/06--6:51:31
|
||||
|
1.out1 1.out2 |
||||
|
1F7F FF3D FF8E 00D9 FFE0 1F6C 1F6F 1F75 1F6E (0)0x 0 -194 -113 217 -31 |
||||
|
1F7F FF3D FF8D 00D9 FFE0 1F6C 1F6E 1F75 1F6E (0)0x 0 -194 -114 217 -31 |
||||
|
1F7F FF3D FF8E 00D9 FFE0 1F6C 1F6F 1F75 1F6E (0)0x 0 -194 -113 217 -31 |
||||
|
1F7F FF3D FF8D 00D9 FFE0 1F6C 1F6E 1F75 1F6E (0)0x 0 -194 -114 217 -31 |
||||
|
1F7F FF3D FF8E 00DA FFE0 1F6C 1F6F 1F76 1F6E (0)0x 0 -194 -113 218 -31 |
||||
|
1F7F FF3D FF8E 00D9 FFE0 1F6C 1F6F 1F75 1F6E (0)0x 0 -194 -113 217 -31 |
||||
|
1F7F FF3D FF8E 00D9 FFE0 1F6C 1F6F 1F75 1F6E (0)0x 0 -194 -113 217 -31 |
||||
|
1F7F FF3D FF8E 00D9 FFE1 1F6C 1F6F 1F75 1F6F (0)0x 0 -194 -113 217 -30 |
||||
|
1F7F FF3B FF8E 00D8 FFDF 1F6A 1F6F 1F74 1F6D (0)0x 0 -196 -113 216 -32 |
||||
|
1F7F FF3E FF8E 00D9 FFE0 1F6D 1F6F 1F75 1F6E (0)0x 0 -193 -113 217 -31 |
||||
|
1F7F FF3D FF8C 00D9 FFE0 1F6C 1F6D 1F75 1F6E (0)0x 0 -194 -115 217 -31 |
||||
|
1F7F FF3E FF8D 00D9 FFE0 1F6D 1F6E 1F75 1F6E (0)0x 0 -193 -114 217 -31 |
||||
|
1F7F FF3D FF8C 00D9 FFE0 1F6C 1F6D 1F75 1F6E (0)0x 0 -194 -115 217 -31 |
||||
|
1F7F FF3E FF8C 00D9 FFE0 1F6D 1F6D 1F75 1F6E (0)0x 0 -193 -115 217 -31 |
||||
|
1F7F FFB7 FF88 00D9 FFE1 1FE6 1F69 1F75 1F6F (1)0x 1 -72 -119 217 -30 |
||||
|
1F8C 033F FF8A 00D9 FFE1 236D 1F6B 1F75 1F6F (28)0x 1c 831 -117 217 -30 |
||||
|
2069 0478 FF8A 00D9 FFE0 24A6 1F6B 1F75 1F6E (38)0x 26 1144 -117 217 -31 |
||||
|
20BA 04D3 FF8B 00D9 FFE1 2501 1F6C 1F75 1F6F (41)0x 29 1235 -116 217 -30 |
||||
|
20D3 0520 FF8D 00D9 FFE1 254E 1F6E 1F75 1F6F (43)0x 2b 1312 -114 217 -30 |
||||
|
20E5 053C FF8B 00D9 FFE1 256A 1F6C 1F75 1F6F (44)0x 2c 1340 -116 217 -30 |
||||
|
20EE 0542 FF8B 00D9 FFE1 2570 1F6C 1F75 1F6F (45)0x 2d 1346 -116 217 -30 |
||||
|
20F3 0575 FF8C 00D9 FFE1 25A3 1F6D 1F75 1F6F (46)0x 2e 1397 -115 217 -30 |
||||
|
20FB 0562 FF8C 00D9 FFE0 2590 1F6D 1F75 1F6E (45)0x 2d 1378 -115 217 -31 |
||||
|
20F8 056E FF8D 00D9 FFE1 259C 1F6E 1F75 1F6F (46)0x 2e 1390 -114 217 -30 |
||||
|
20FC 0581 FF8D 00D9 FFE1 25AF 1F6E 1F75 1F6F (46)0x 2e 1409 -114 217 -30 |
||||
|
2100 057C FF8C 00D9 FFE1 25AA 1F6D 1F75 1F6F (46)0x 2e 1404 -115 217 -30 |
||||
|
20FE 0584 FF8C 00DA FFE1 25B2 1F6D 1F76 1F6F (46)0x 2e 1412 -115 218 -30 |
||||
|
2101 0585 FF8D 00DA FFE1 25B3 1F6E 1F76 1F6F (46)0x 2e 1413 -114 218 -30 |
||||
|
2101 05A4 FF8D 00D9 FFE0 25D2 1F6E 1F75 1F6E (47)0x 2f 1444 -114 217 -31 |
||||
|
2109 05AD FF8C 00D9 FFE1 25DB 1F6D 1F75 1F6F (48)0x 30 1453 -115 217 -30 |
||||
|
210B 05C0 FF8D 00D9 FFE1 25EE 1F6E 1F75 1F6F (48)0x 30 1472 -114 217 -30 |
||||
|
210F 05BD FF8C 00D9 FFE0 25EB 1F6D 1F75 1F6E (48)0x 30 1469 -115 217 -31 |
||||
|
210E 0584 FF8D 00D9 FFE1 25B2 1F6E 1F75 1F6F (47)0x 2f 1412 -114 217 -30 |
||||
|
2105 FF3E FF8D 00D9 FFE0 1F6D 1F6E 1F75 1F6E (0)0x 0 -193 -114 217 -31 |
||||
|
1F7F FF3D FF8D 00D9 FFE0 1F6C 1F6E 1F75 1F6E (0)0x 0 -194 -114 217 -31 |
||||
|
1F7F FF3E FF8D 00DA FFE1 1F6D 1F6E 1F76 1F6F (0)0x 0 -193 -114 218 -30 |
||||
|
1F7F FF3D FF8D 00D9 FFE0 1F6C 1F6E 1F75 1F6E (0)0x 0 -194 -114 217 -31 |
||||
|
1F7F FF3E 005C 00DA FFE0 1F6D 203C 1F76 1F6E (2)0x 2 -193 92 218 -31 |
||||
|
1F97 FF3D 04BA 00D9 FFE0 1F6C 249A 1F75 1F6E (37)0x 25 -194 1210 217 -31 |
||||
|
20B5 FF3E 05D0 00D9 FFE0 1F6D 25B0 1F75 1F6E (47)0x 2f -193 1488 217 -31 |
||||
|
2103 FF3E 0608 00D9 FFE0 1F6D 25E8 1F75 1F6E (48)0x 30 -193 1544 217 -31 |
||||
|
210E FF3E 05EE 00D9 FFE1 1F6D 25CE 1F75 1F6F (48)0x 30 -193 1518 217 -30 |
||||
|
210B FF3E 05DE 00D9 FFE0 1F6D 25BE 1F75 1F6E (47)0x 2f -193 1502 217 -31 |
||||
|
2103 FF3D 05E5 00D9 FFE0 1F6C 25C5 1F75 1F6E (47)0x 2f -194 1509 217 -31 |
||||
|
2105 FF3E 05E1 00D9 FFE0 1F6D 25C1 1F75 1F6E (47)0x 2f -193 1505 217 -31 |
||||
|
2105 FF3D 05E1 00D9 FFE0 1F6C 25C1 1F75 1F6E (47)0x 2f -194 1505 217 -31 |
||||
|
2104 FF3E 05C3 00DA FFE0 1F6D 25A3 1F76 1F6E (46)0x 2e -193 1475 218 -31 |
||||
|
20FE FF3E 054D 00D9 FFE0 1F6D 252D 1F75 1F6E (43)0x 2b -193 1357 217 -31 |
||||
|
20E5 FF3D FF8F 00D9 FFE0 1F6C 1F70 1F75 1F6E (0)0x 0 -194 -112 217 -31 |
||||
|
1F7F FF3E FF8E 00D9 FFE0 1F6D 1F6F 1F75 1F6E (0)0x 0 -193 -113 217 -31 |
||||
|
1F7F FF3E FF8F 00D9 FFE0 1F6D 1F70 1F75 1F6E (0)0x 0 -193 -112 217 -31 |
||||
|
1F7F FF3E FF8E 00D9 FFE0 1F6D 1F6F 1F75 1F6E (0)0x 0 -193 -113 217 -31 |
||||
|
1F7F FF3D FF8E 00D9 FFE0 1F6C 1F6F 1F75 1F6E (0)0x 0 -194 -113 217 -31 |
||||
|
1F7F FF3E FF8E 00D9 FFE0 1F6D 1F6F 1F75 1F6E (0)0x 0 -193 -113 217 -31 |
||||
|
1F7F FF3D FF8E 01FE FFE0 1F6C 1F6F 209A 1F6E (5)0x 5 -194 -113 510 -31 |
||||
|
1FAB FF3D FF8E 066F FFE0 1F6C 1F6F 250B 1F6E (41)0x 29 -194 -113 1647 -31 |
||||
|
20D2 FF3E FF8E 06EA FFE0 1F6D 1F6F 2586 1F6E (45)0x 2d -193 -113 1770 -31 |
||||
|
20F4 FF3E FF8E 0736 FFE0 1F6D 1F6F 25D2 1F6E (47)0x 2f -193 -113 1846 -31 |
||||
|
2105 FF3E FF8E 072A FFE0 1F6D 1F6F 25C6 1F6E (47)0x 2f -193 -113 1834 -31 |
||||
|
2104 FF3E FF8E 072A FFE0 1F6D 1F6F 25C6 1F6E (47)0x 2f -193 -113 1834 -31 |
||||
|
2104 FF3E FF8E 0715 FFE0 1F6D 1F6F 25B1 1F6E (46)0x 2e -193 -113 1813 -31 |
||||
|
20FF FF3E FF8E 0731 FFE0 1F6D 1F6F 25CD 1F6E (47)0x 2f -193 -113 1841 -31 |
||||
|
2105 FF3E FF8E 0744 FFE0 1F6D 1F6F 25E0 1F6E (47)0x 2f -193 -113 1860 -31 |
||||
|
210A FF3E FF8E 076A FFE0 1F6D 1F6F 2606 1F6E (49)0x 31 -193 -113 1898 -31 |
||||
|
2114 FF3D FF8E 0762 FFE0 1F6C 1F6F 25FE 1F6E (48)0x 30 -194 -113 1890 -31 |
||||
|
2112 FF3E FF8E 0767 FFE0 1F6D 1F6F 2603 1F6E (48)0x 30 -193 -113 1895 -31 |
||||
|
2112 FF3E FF8E 076A FFE0 1F6D 1F6F 2606 1F6E (49)0x 31 -193 -113 1898 -31 |
||||
|
2114 FF3E FF8E 06F2 FFE0 1F6D 1F6F 258E 1F6E (46)0x 2e -193 -113 1778 -31 |
||||
|
20FC FF3E FF8E 00D9 FFE1 1F6D 1F6F 1F75 1F6F (0)0x 0 -193 -113 217 -30 |
||||
|
1F7F FF3E FF8E 00D9 FFE0 1F6D 1F6F 1F75 1F6E (0)0x 0 -193 -113 217 -31 |
||||
|
1F7F FF3E FF8E 00D9 FFE0 1F6D 1F6F 1F75 1F6E (0)0x 0 -193 -113 217 -31 |
||||
|
1F7F FF3E FF8E 00D9 FFE0 1F6D 1F6F 1F75 1F6E (0)0x 0 -193 -113 217 -31 |
||||
|
1F7F FF3F FF8E 00D9 FFE0 1F6E 1F6F 1F75 1F6E (0)0x 0 -192 -113 217 -31 |
||||
|
1F7F FF3E FF8E 00D9 0230 1F6D 1F6F 1F75 21BD (13)0x d -193 -113 217 560 |
||||
|
1FEE FF3F FF8E 00D9 0629 1F6E 1F6F 1F75 25B6 (46)0x 2e -192 -113 217 1577 |
||||
|
20FA FF3E FF8E 00D9 066A 1F6D 1F6F 1F75 25F7 (48)0x 30 -193 -113 217 1642 |
||||
|
2112 FF3E FF8E 00D9 0670 1F6D 1F6F 1F75 25FD (49)0x 31 -193 -113 217 1648 |
||||
|
2113 FF3E FF8F 00D9 0664 1F6D 1F70 1F75 25F1 (48)0x 30 -193 -112 217 1636 |
||||
|
2111 FF3D FF8E 00D9 0669 1F6C 1F6F 1F75 25F6 (48)0x 30 -194 -113 217 1641 |
||||
|
2111 FF3F FF8F 00D9 066C 1F6E 1F70 1F75 25F9 (48)0x 30 -192 -112 217 1644 |
||||
|
2112 FF3E FF8E 00D9 066B 1F6D 1F6F 1F75 25F8 (48)0x 30 -193 -113 217 1643 |
||||
|
2112 FF3E FF8F 00D9 066D 1F6D 1F70 1F75 25FA (48)0x 30 -193 -112 217 1645 |
||||
|
2112 FF3E FF8F 00D9 066C 1F6D 1F70 1F75 25F9 (48)0x 30 -193 -112 217 1644 |
||||
|
2112 FF3E FF8E 00D9 067D 1F6D 1F6F 1F75 260A (49)0x 31 -193 -113 217 1661 |
||||
|
2116 FF3E FF8E 00D9 065E 1F6D 1F6F 1F75 25EB (48)0x 30 -193 -113 217 1630 |
||||
|
210F FF3E FF8E 00D9 0673 1F6D 1F6F 1F75 2600 (49)0x 31 -193 -113 217 1651 |
||||
|
2113 FF3E FF8F 00D9 066B 1F6D 1F70 1F75 25F8 (48)0x 30 -193 -112 217 1643 |
||||
|
2112 FF3E FF8E 00D9 0674 1F6D 1F6F 1F75 2601 (49)0x 31 -193 -113 217 1652 |
||||
|
2114 FF3F FF8E 00D9 067E 1F6E 1F6F 1F75 260B (49)0x 31 -192 -113 217 1662 |
||||
|
2117 FF3E FF8F 00D9 0665 1F6D 1F70 1F75 25F2 (48)0x 30 -193 -112 217 1637 |
||||
|
2110 FF3E FF8E 00D9 0610 1F6D 1F6F 1F75 259D (46)0x 2e -193 -113 217 1552 |
||||
|
20FE FF3E FF8D 00D9 FFE1 1F6D 1F6E 1F75 1F6F (0)0x 0 -193 -114 217 -30 |
||||
|
1F7F FF3E FF8E 00DA FFE0 1F6D 1F6F 1F76 1F6E (0)0x 0 -193 -113 218 -31 |
||||
|
1F7F FF3E FF8E 00D9 FFE0 1F6D 1F6F 1F75 1F6E (0)0x 0 -193 -113 217 -31 |
||||
|
1F7F FF3E FF8E 00D9 FFE1 1F6D 1F6F 1F75 1F6F (0)0x 0 -193 -113 217 -30 |
||||
|
1F7F FF3F FF8E 00DA FFE0 1F6E 1F6F 1F76 1F6E (0)0x 0 -192 -113 218 -31 |
||||
|
1F7F FF3E FF8E 00D9 FFE1 1F6D 1F6F 1F75 1F6F (0)0x 0 -193 -113 217 -30 |
||||
|
1F7F FF3F FF8D 00D9 FFE0 1F6E 1F6E 1F75 1F6E (0)0x 0 -192 -114 217 -31 |
||||
|
1F7F FF3F FF8D 00D9 FFE0 1F6E 1F6E 1F75 1F6E (0)0x 0 -192 -114 217 -31 |
||||
|
1F7F FF3F FF96 00D9 FFE0 1F6E 1F77 1F75 1F6E (0)0x 0 -192 -105 217 -31 |
||||
|
1F7F FF3F FF96 00D9 FFE0 1F6E 1F77 1F75 1F6E (0)0x 0 -192 -105 217 -31 |
||||
|
1F7F FF3F FF96 00D9 FFE0 1F6E 1F77 1F75 1F6E (0)0x 0 -192 -105 217 -31 |
||||
|
1F7F FF3F FF95 00D9 FFE0 1F6E 1F76 1F75 1F6E (0)0x 0 -192 -106 217 -31 |
||||
|
1F7F FF3F FF94 00D9 FFE0 1F6E 1F75 1F75 1F6E (0)0x 0 -192 -107 217 -31 |
||||
|
1F7F FF3F FF93 00D9 FFE0 1F6E 1F74 1F75 1F6E (0)0x 0 -192 -108 217 -31 |
||||
|
|
||||
|
|
||||
|
|
||||
|
L0_uart0_sendstr("\r\nfactory_ws= "); |
||||
|
|
||||
|
L0_uart0_ushex(iapData.factory_ws[0].kg);L0_uart0_uc(' '); |
||||
|
L0_uart0_ushex(iapData.factory_ws[0].adc);L0_uart0_0d0a(); |
||||
|
|
||||
|
|
||||
|
L0_uart0_ushex(iapData.factory_ws[1].kg);L0_uart0_uc(' '); |
||||
|
L0_uart0_ushex(iapData.factory_ws[1].adc);L0_uart0_0d0a(); |
||||
|
|
||||
|
|
||||
|
L0_uart0_ushex(iapData.factory_ws[2].kg);L0_uart0_uc(' '); |
||||
|
L0_uart0_ushex(iapData.factory_ws[3].adc);L0_uart0_0d0a(); |
||||
|
|
||||
|
|
||||
|
L0_uart0_sendstr("\r\nzerows= "); |
||||
|
|
||||
|
L0_uart0_ushex(iapData.zerows[0].kg);L0_uart0_uc(' '); |
||||
|
L0_uart0_ushex(iapData.zerows[0].adc);L0_uart0_0d0a(); |
||||
|
|
||||
|
|
||||
|
L0_uart0_ushex(iapData.zerows[1].kg);L0_uart0_uc(' '); |
||||
|
L0_uart0_ushex(iapData.zerows[1].adc);L0_uart0_0d0a(); |
||||
|
|
||||
|
|
||||
|
L0_uart0_ushex(iapData.zerows[2].kg);L0_uart0_uc(' '); |
||||
|
L0_uart0_ushex(iapData.zerows[3].adc);L0_uart0_0d0a(); |
||||
|
|
||||
|
瞡6辐3 = 0x 3 |
||||
|
|
||||
|
R.sd.zeroout= 8049 = 0x1f71 offset 4 = 0x 4 |
||||
|
4 |
||||
|
v3.4 |
||||
|
|
||||
|
RRRRRRRRRRRRRRRRRRRRRRRRRRRRR |
||||
|
2800 01 00 02 00 03 00 04 00 00 12 35 00 C8 56 78 01 90 78 9A 00 00 12 34 00 C8 56 78 01 90 78 9B 00 7B FF 85 1F 71 02 05 |
||||
|
|
||||
|
--print_reg-- |
||||
|
a b= 02 05 |
||||
|
factory_ws |
||||
|
0 kg = 0x1235 |
||||
|
200 kg = 0x5678 |
||||
|
400 kg = 0x789a |
||||
|
|
||||
|
zerows |
||||
|
0 kg = 0x1234 |
||||
|
200 kg = 0x5678 |
||||
|
400 kg = 0x789b |
||||
|
|
||||
|
s->zeroout= 8049 = 0x1f71 |
||||
|
|
||||
|
s->sensor 0x0001 0x0002 0x0003 0x0004 |
||||
|
e2p read success |
||||
|
|
||||
|
--print_reg-- |
||||
|
a b= 02 05 |
||||
|
factory_ws |
||||
|
0 kg = 0x1235 |
||||
|
200 kg = 0x5678 |
||||
|
400 kg = 0x789a |
||||
|
|
||||
|
zerows |
||||
|
0 kg = 0x1234 |
||||
|
200 kg = 0x5678 |
||||
|
400 kg = 0x789b |
||||
|
|
||||
|
s->zeroout= 8049 = 0x1f71 |
||||
|
|
||||
|
s->sensor 0x0001 0x0002 0x0003 0x0004 |
||||
|
8 |
||||
|
ADC_SAMPLE |
||||
|
|
||||
|
ADC_SAMPLE |
||||
|
|
||||
|
ADC_SAMPLE |
||||
|
|
||||
|
ADC_SAMPLE |
||||
|
|
||||
|
R.sd.zeroout= 8049 = 0x1f71 offset 1 = 0x 1 |
||||
|
|
||||
|
R.sd.zeroout= 8049 = 0x1f71 offset 2 = 0x 2 |
||||
|
|
||||
|
R.sd.zeroout= 8049 = 0x1f71 offset 3 = 0x 3 |
||||
|
|
||||
|
R.sd.zeroout= 8049 = 0x1f71 offset 4 = 0x 4 |
||||
|
4Z00 FDAA 21C7 Z02 13EF 0B82 Z03 FD31 2240 Z01 F49D 2AD4 1F3D 1F6D 13F2 1F35 1C74 001E |
||||
|
1EF0 1F64 13F2 1EF7 1C4F 001D |
||||
|
1EA8 1F4A 1EAF 1EB8 1ED6 0025 |
||||
|
1E5F 1F44 1E5A 1E55 1E94 0024 |
||||
|
1E14 1F3D 1E19 1E74 1E77 0023 |
||||
|
1DD3 1F2F 1DD4 1E39 1E43 0023 |
||||
|
1D92 1F20 1D8C 1E37 1E1D 0022 |
||||
|
1D4C 1F0E 1D4F 1DCF 1DDE 0022 |
||||
|
1D0B 1EFF 1D01 1D7F 1DA2 0021 |
||||
|
1CEA 1EF4 1CBD 1D49 1D79 0021 |
||||
|
FD 04 33 44 55 00 00 00 |
||||
|
|
||||
|
4sensor zero |
||||
|
|
||||
|
R.sd.sensor 0x245d 0x2b5a 0x e46 0x2478 |
||||
|
&e2p write success |
||||
|
RRRRRRRRRRRRRRRRRRRRRRRRRRRRR |
||||
|
2824 5D 2B 5A 0E 46 24 78 00 00 12 35 00 C8 56 78 01 90 78 9A 00 00 12 34 00 C8 56 78 01 90 78 9B 00 7B FF 85 1F 71 02 05 |
||||
|
|
||||
|
--print_reg-- |
||||
|
a b= 02 05 |
||||
|
factory_ws |
||||
|
0 kg = 0x1235 |
||||
|
200 kg = 0x5678 |
||||
|
400 kg = 0x789a |
||||
|
|
||||
|
zerows |
||||
|
0 kg = 0x1234 |
||||
|
200 kg = 0x5678 |
||||
|
400 kg = 0x789b |
||||
|
|
||||
|
s->zeroout= 8049 = 0x1f71 |
||||
|
|
||||
|
s->sensor 0x245d 0x2b5a 0x0e46 0x2478 |
||||
|
e2p read success |
||||
|
|
||||
|
--print_reg-- |
||||
|
a b= 02 05 |
||||
|
factory_ws |
||||
|
0 kg = 0x1235 |
||||
|
200 kg = 0x5678 |
||||
|
400 kg = 0x789a |
||||
|
|
||||
|
zerows |
||||
|
0 kg = 0x1234 |
||||
|
200 kg = 0x5678 |
||||
|
400 kg = 0x789b |
||||
|
|
||||
|
s->zeroout= 8049 = 0x1f71 |
||||
|
|
||||
|
s->sensor 0x245d 0x2b5a 0x0e46 0x2478 |
||||
|
1F28 1F65 1CAE 1F2D 1E9A 0024 |
||||
|
1EEA 1F58 1EF4 1F37 1F1B 0025 |
||||
|
1EA3 1F45 1EB3 1ECE 1EDA 0025 |
||||
|
1E72 1F35 1E69 1E92 1EA8 0024 |
||||
|
1E2A 1F25 1E2B 1E7B 1E7D 0023 |
||||
|
FD 02 33 44 55 00 00 00 |
||||
|
|
||||
|
--read -- |
||||
|
a b= |
||||
|
--print_reg-- |
||||
|
a b= 02 05 |
||||
|
factory_ws |
||||
|
0 kg = 0x1235 |
||||
|
200 kg = 0x5678 |
||||
|
400 kg = 0x789a |
||||
|
|
||||
|
zerows |
||||
|
0 kg = 0x1234 |
||||
|
200 kg = 0x5678 |
||||
|
400 kg = 0x789b |
||||
|
|
||||
|
s->zeroout= 8049 = 0x1f71 |
||||
|
|
||||
|
s->sensor 0x245d 0x2b5a 0x0e46 0x2478 |
||||
|
1DE4 1F16 1DE6 1E20 1E40 0023 |
||||
|
1DA3 1F06 1DA8 1DFB 1E13 0022 |
||||
|
1D7C 1EF4 1D67 1DA9 1DE0 0022 |
||||
|
1D37 1EE6 1D28 1D53 1DA6 0021 |
||||
|
1CE9 1ED4 1CE7 1D37 1D76 0020 |
||||
|
1CA7 1EC2 1CA6 1D02 1D44 0020 |
||||
|
1C5F 1EAF 1C60 1CA3 1D04 001F |
||||
|
1C2D 1EA1 1C24 1C58 1CD2 001F |
||||
|
1BEB 1E93 1BDC 1C21 1C9E 001E |
||||
|
FD 03 33 44 55 00 00 00 |
||||
|
|
||||
|
--read R.sd-- |
||||
|
a b= |
||||
|
--print_reg-- |
||||
|
a b= 02 05 |
||||
|
factory_ws |
||||
|
0 kg = 0x1235 |
||||
|
200 kg = 0x5678 |
||||
|
400 kg = 0x789a |
||||
|
|
||||
|
zerows |
||||
|
0 kg = 0x1234 |
||||
|
200 kg = 0x5678 |
||||
|
400 kg = 0x789b |
||||
|
|
||||
|
s->zeroout= 8049 = 0x1f71 |
||||
|
|
||||
|
s->sensor 0x245d 0x2b5a 0x0e46 0x2478 |
||||
|
1BAB 1E83 1B98 1BDB 1C68 001D |
||||
|
1B7D 1E70 1B5A 1BA3 1C3A 001D |
||||
|
1B32 1E5F 1B0B 1AF9 1BE5 001C |
||||
|
1AEA 1E53 1AD3 1AEE 1BBF 001B |
||||
|
*********/ |
||||
|
|
||||
|
|
||||
@ -0,0 +1,126 @@ |
|||||
|
////////////////////////////////////////////////////////////////////////////
|
||||
|
///@copyright Copyright (c) 2022, 传控科技 All rights reserved.
|
||||
|
///-------------------------------------------------------------------------
|
||||
|
/// @file app_save.h
|
||||
|
/// @brief @ app save
|
||||
|
///-------------------------------------------------------------------------
|
||||
|
/// @version 1.0
|
||||
|
/// @author CC
|
||||
|
/// @date 20220120
|
||||
|
/// @note cc_AS_stc02
|
||||
|
|
||||
|
|
||||
|
/*********
|
||||
|
写操作1字节, |
||||
|
擦除1扇区 512字节---4-6ms |
||||
|
字节中的0写为1时 擦除扇区 |
||||
|
最安全最简单,最逻辑清楚的事,就是 |
||||
|
每次擦一个扇区每次写一个扇区, |
||||
|
--->每次擦一个扇区每次写一个扇区的前面的有效数据, |
||||
|
|
||||
|
1,要求我们尽量小,最好少于512字节 |
||||
|
次数限制 30万次 |
||||
|
2, 尽量减少写,擦.--->调试的时候要谨慎,最后才可打开写; |
||||
|
|
||||
|
背景知识和应用需求决定了存储策略是如何设计的 |
||||
|
|
||||
|
|
||||
|
flash 28k 分出8k EEp 则物理地址位28K的最后8K 物理地址为5000h-6FFFh |
||||
|
|
||||
|
*******/ |
||||
|
|
||||
|
/*******
|
||||
|
app_config 可以调用app_save 偏向应用级别的配置文件 |
||||
|
app_save 保存的策略,不同程序可能要求不同 |
||||
|
|
||||
|
|
||||
|
板子有什么外设,这些几乎是纯硬件的东西,另外根据基本的应用,需要板子的外设如何使用的大部分放到bsp中 |
||||
|
asp 已经有模式的配置了,app通过参数调用asp,来决定使用外设什么模式. |
||||
|
协议发送,尽量是透明的. |
||||
|
|
||||
|
|
||||
|
app 结果 重量,保存校准参数 |
||||
|
asp app support program wifi的模式设置,adc的读取后的处理 |
||||
|
bsp board support program 板子上有的外设,wdt,wifi的底层配置函数,sensor |
||||
|
msp mcu support program ,cpu自身的外设,uart led |
||||
|
cpu |
||||
|
|
||||
|
*****/ |
||||
|
|
||||
|
/*******
|
||||
|
adc采样值 |
||||
|
^ |
||||
|
| |
||||
|
| o |
||||
|
| | |
||||
|
| o | |
||||
|
| | | |
||||
|
| ---|---- |------------0=adc=0 |
||||
|
0 | |D_ADC_OFFSET |
||||
|
|____|_____|____________>重量 adc + D_ADC_OFFSET |
||||
|
|
||||
|
0 40 80 重量点 |
||||
|
|
||||
|
|
||||
|
|
||||
|
称重需要保存的东西: |
||||
|
1,传感器正负转换的<偏移量 > |
||||
|
2,传感器找平的偏移量 一般选择四个传感器在0kg的时候的<最小值> |
||||
|
3,<三个重量点的校准> + <零点偏移量> |
||||
|
3.1 极端重量的过滤,超过250kg,或者坐偏的时候出现异常值,无效,维持上次值.<超过250kg,> |
||||
|
4, 上电自动校准零点:零点校准 刚上电的时候如果重量小于某个范围<(+-10kg)>,默认这个重量为此时的<零点> |
||||
|
所以这个范围需要配置,需要存储. |
||||
|
5,手工清零的时候,此时重量<零点>需要修改,产生一个偏移量,同时其他的两个校准点需要程序计算时同步更新. |
||||
|
相当于调用4,但是范围不限. |
||||
|
|
||||
|
|
||||
|
|
||||
|
策略B:4不用保存零点,只有手工清零才保存一下. |
||||
|
---->策略C: 4.5 都不保存,只有用户校准状态才保存 |
||||
|
选择c,按键配合,长按按键时重量为0 闪烁(H1sL0.5s)3下 |
||||
|
|
||||
|
本次称重功能需要保存的东西: |
||||
|
正负转换的<偏移量 > Byte x n=? 出厂才定. |
||||
|
找平的偏移量 Byte x n=? 出厂才定. |
||||
|
<三个重量点的校准> Byte x n=? 出厂才定. |
||||
|
<零点偏移量> 出厂定,校准清零 |
||||
|
极端重量的过滤,超过250kg 出厂定 |
||||
|
|
||||
|
其他需要保存 |
||||
|
版本号,id之类的 |
||||
|
|
||||
|
写3个扇区,之后判定两个扇区以上相同,并且在合理范围内,此参数才可使用.否则使用程序出厂内置的参数. |
||||
|
|
||||
|
|
||||
|
|
||||
|
*****/ |
||||
|
|
||||
|
|
||||
|
|
||||
|
//////////////////////////////////////////////////////////////////////////////
|
||||
|
|
||||
|
#ifndef _asp_weight_save_H |
||||
|
#define _asp_weight_save_H |
||||
|
|
||||
|
#include "TTSS_task.h" |
||||
|
#include "c_lib.h" |
||||
|
|
||||
|
#include "../bsp/bsp_config.h" |
||||
|
#include "msp_uart1.h" |
||||
|
#include "msp_uartN.h" |
||||
|
///#include "asp_para.h"
|
||||
|
///#include "app_weight.h"
|
||||
|
////#include "asp_adc.h"
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
extern void L4_iap_2_reg(void); |
||||
|
|
||||
|
void L4_print_iap(TS_weight_SPara_ *s); |
||||
|
u8 L4_reg_2_iap(void); |
||||
|
|
||||
|
|
||||
|
|
||||
|
#endif // #ifndef _APP_TASK_ADC_H
|
||||
|
|
||||
@ -0,0 +1,21 @@ |
|||||
|
#include "bsp_config.h" |
||||
|
///#include "../tpc/tpc_modbus.h"
|
||||
|
///#include "app_config.h"
|
||||
|
#include "msp_uart1.h" |
||||
|
|
||||
|
///#include "bsp_AiP650E.h"
|
||||
|
////////////////////////////////////////////////////////////////////////////
|
||||
|
///@copyright Copyright (c) 2023 CCSENS All rights reserved.
|
||||
|
///-------------------------------------------------------------------------
|
||||
|
/// @file bsp_func.c
|
||||
|
/// @brief bsp @ fuctiong ; io复用选择等,和cpu型号息息相关
|
||||
|
///-------------------------------------------------------------------------
|
||||
|
/// @version 1.0
|
||||
|
/// @author CC
|
||||
|
/// @date 20180308
|
||||
|
/// @note cc_AS_stc02
|
||||
|
|
||||
|
//////////////////////////////////////////////////////////////////////////////
|
||||
|
|
||||
|
|
||||
|
|
||||
@ -0,0 +1,544 @@ |
|||||
|
////////////////////////////////////////////////////////////////////////////
|
||||
|
///@copyright Copyright (c) 2017, 传控科技 All rights reserved.
|
||||
|
///-------------------------------------------------------------------------
|
||||
|
/// @file hard_config.h
|
||||
|
/// @brief hard config include
|
||||
|
/// @info FILE FOR HARDWARE SETUP AND SOFTWARE SETUP///FOR EXAMPLE: BAORD ,MCU,IDE
|
||||
|
/// @info YOU CAN CHANGE OR ADD THE DEFINE IF YOU NEED
|
||||
|
/// @info 整个嵌入式项目的入口 首先是确认电路板 然后确认cpu 芯片型号 然后确认编译器 之后是软件框架 最后是应用程序
|
||||
|
/// @info bsp_CONFIG 为其他头文件的始祖 TYPE_BOARD_xx
|
||||
|
///-------------------------------------------------------------------------
|
||||
|
/// @version 1.1
|
||||
|
/// @author CC
|
||||
|
/// @date 20180308
|
||||
|
/// @note
|
||||
|
//////////////////////////////////////////////////////////////////////////////
|
||||
|
/// @version 5.1
|
||||
|
/// @author CC
|
||||
|
/// @date 20200301
|
||||
|
/// @note
|
||||
|
//////////////////////////////////////////////////////////////////////////////
|
||||
|
|
||||
|
|
||||
|
//////////////////////////////////////////////////////////////////////////
|
||||
|
#ifndef _BSP_CONFIG_H |
||||
|
#define _BSP_CONFIG_H |
||||
|
|
||||
|
#include <INTRINS.H> |
||||
|
|
||||
|
#include "c_bit.h" |
||||
|
#include "bsp_config_const.h"// |
||||
|
|
||||
|
//STEP 1 TYPE_UASER_BOARD SELECT >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
||||
|
#define TYPE_UASER_BOARD TYPE_BOARD_TTSS2_w5 |
||||
|
|
||||
|
|
||||
|
//STEP 2 TYPE_UASER_BOARD CONFIG >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
||||
|
#if(TYPE_UASER_BOARD == TYPE_BOARD_TTSS2_w5) |
||||
|
#include <stdio.h> |
||||
|
#include <string.h> |
||||
|
#include <intrins.h> |
||||
|
|
||||
|
|
||||
|
//基本配置(工作频率、时钟、看门狗、字节序)
|
||||
|
#define TYPE_MCU TYPE_MCU_STC_8H |
||||
|
#define TYPE_IDE TYPE_IDE_KEIL |
||||
|
/// #define D_sys_MainFre MainFre_11M////STC8A8K64D4 z最大45M
|
||||
|
#define D_sys_MainFre MainFre_22M////STC8A8K64D4 z最大45M
|
||||
|
/// #define D_sys_MainFre MainFre_44M////STC8A8K64D4 z最大45M
|
||||
|
#define D_sys_Jiffies TYPE_JIFFIES_12MS |
||||
|
|
||||
|
#warning "MainFre_22M" |
||||
|
|
||||
|
#define D_MCU_NAME "STC8A8K64U4" |
||||
|
#define D_str_version "\r\n stcTTSS2NB2_" |
||||
|
#define D_BOARD_NAME " NB2" |
||||
|
#include "c_type51.h" |
||||
|
|
||||
|
/**************
|
||||
|
正在检测目标单片机 ... |
||||
|
单片机型号: STC8H3K48S2 |
||||
|
固件版本号: 7.4.1U |
||||
|
|
||||
|
当前芯片的硬件选项为: |
||||
|
. 系统ISP工作频率: 23.844MHz |
||||
|
. 内部IRC振荡器的频率: 11.057MHz |
||||
|
. 掉电唤醒定时器的频率: 35.250KHz |
||||
|
. 振荡器放大增益使能 |
||||
|
. P3.2和P3.3与下次下载无关 |
||||
|
. 上电复位时增加额外的复位延时 |
||||
|
. 复位引脚用作普通I/O口 |
||||
|
. 检测到低压时复位 |
||||
|
. 低压检测门槛电压 : 2.00 V |
||||
|
. 上电复位时,硬件不启动内部看门狗 |
||||
|
. 上电自动启动内部看门狗时的预分频数为 : 256 |
||||
|
. 空闲状态时看门狗定时器停止计数 |
||||
|
. 下次下载用户程序时,将用户EEPROM区一并擦除 |
||||
|
. 下次下载用户程序时,没有相关的端口控制485 |
||||
|
. 下次下载时不需要校验下载口令 |
||||
|
. 内部参考电压: 1195 mV (参考范围: 1100~1300mV) |
||||
|
. 内部安排测试时间: 2021年9月2日 |
||||
|
|
||||
|
单片机型号: STC8H3K48S2 |
||||
|
固件版本号: 7.4.1U |
||||
|
|
||||
|
开始调节频率 ... [0.906"] |
||||
|
调节后的频率: 22.094MHz (-0.109%) |
||||
|
|
||||
|
正在重新握手 ... 成功 [0.125"] |
||||
|
当前的波特率: 460800 |
||||
|
正在擦除目标区域 ... 完成 ! [0.656"] |
||||
|
正在下载用户代码 ... 完成 ! [2.860"] |
||||
|
正在设置硬件选项 ... 完成 ! [0.016"] |
||||
|
|
||||
|
更新后的硬件选项为: |
||||
|
. 系统ISP工作频率: 23.844MHz |
||||
|
. 内部IRC振荡器的频率: 22.094MHz |
||||
|
. 掉电唤醒定时器的频率: 35.250KHz |
||||
|
. 振荡器放大增益使能 |
||||
|
. P3.2和P3.3与下次下载无关 |
||||
|
. 上电复位时增加额外的复位延时 |
||||
|
. 复位引脚用作普通I/O口 |
||||
|
. 检测到低压时复位 |
||||
|
. 低压检测门槛电压 : 2.00 V |
||||
|
. 上电复位时,硬件不启动内部看门狗 |
||||
|
. 上电自动启动内部看门狗时的预分频数为 : 256 |
||||
|
. 空闲状态时看门狗定时器停止计数 |
||||
|
. 下次下载用户程序时,将用户EEPROM区一并擦除 |
||||
|
. 下次下载用户程序时,没有相关的端口控制485 |
||||
|
. 下次下载时不需要校验下载口令 |
||||
|
. 内部参考电压: 1195 mV (参考范围: 1100~1300mV) |
||||
|
. 内部安排测试时间: 2021年9月2日 |
||||
|
芯片出厂序列号 : F74DC52602599C |
||||
|
|
||||
|
单片机型号: STC8H3K48S2 |
||||
|
固件版本号: 7.4.1U |
||||
|
|
||||
|
. 用户设定频率: 22.118MHz |
||||
|
. 调节后的频率: 22.094MHz (主时钟分频系数 = 1) |
||||
|
. 频率调节误差: -0.109% |
||||
|
|
||||
|
|
||||
|
操作成功 !(2023-04-06 21:16:42) |
||||
|
|
||||
|
|
||||
|
-------------------------------------------------------------- |
||||
|
电源开关 |
||||
|
EN_DEC3V3 P14 PIN8 网络模块 |
||||
|
EN_DC5V P37 PIN28 |
||||
|
LED5VEN1 P20 PIN33 4位数码管 LED5VEN4 |
||||
|
RFID5VEN P41 PIN29 RFID |
||||
|
|
||||
|
-------------------------------------------------------------- |
||||
|
|
||||
|
蜂鸣器 |
||||
|
BEE P22 |
||||
|
-------------------------------------------------------------- |
||||
|
20230317_ CCmodify |
||||
|
|
||||
|
U1 DEBUG |
||||
|
U2 5311 |
||||
|
U3 485 |
||||
|
U4 xx |
||||
|
|
||||
|
-------------------------------------------------------------- |
||||
|
|
||||
|
TTSS 使用定时器0 作为任务的主要时间 |
||||
|
定时器1 作为溢出的工123 |
||||
|
|
||||
|
uart1 使用定时器2 实现文件 uart1.c |
||||
|
uart2 使 实现文件 uart2.c |
||||
|
|
||||
|
|
||||
|
modbus使用定时器2 作为uart空闲状态的判定 (区分协议的结束) 定时器有限的情况下可以使用定时器0,只是关联受限 |
||||
|
|
||||
|
|
||||
|
*******************************************************/ |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
#include "bsp_config_stc.h" |
||||
|
#define D_WDT_STATUS TYPE_WDT_DISABLE //如果配置为enable,请在bsp_config.c中设置wdt溢出时间
|
||||
|
#define D_MCU_ENDIAN TYPE_MCU_BIGENDIAN |
||||
|
#define D_CODE_ENCRYPTION_TYPE TYPE_ENCRYPTION_ENABLE //是否代码加密
|
||||
|
|
||||
|
//串口配置
|
||||
|
/// #define D_UART1_BRT BRT_460800
|
||||
|
/// #define D_UART1_BRT BRT_921600
|
||||
|
#define D_UART1_BRT BRT_115200 |
||||
|
#define D_UART1_SBIT SBIT_1 |
||||
|
#define D_PIN_UART1 PIN_UART1_Rxd_30_Txd_31 |
||||
|
#define D_UART2_BRT BRT_115200///BRT_921600///BRT_115200///
|
||||
|
#define D_UART3_BRT BRT_115200///BRT_921600///BRT_115200
|
||||
|
#define D_UART4_BRT BRT_115200///BRT_921600///BRT_115200
|
||||
|
|
||||
|
//485配置
|
||||
|
#define D_UART1_485_TYPE TYPE_485_SLAVER //UART1启用485
|
||||
|
#define D_UART1_485_SLAVER_ID_BROADCAST 0xFF //485从机总是响应0xFF消息
|
||||
|
#define D_UART1_485_SLAVER_ID 0x11 //板卡作为485从机 slaverId
|
||||
|
#define D_UART1_485_TX() D_P55_stdIO();D_P55_ON(); |
||||
|
#define D_UART1_485_RX() D_P55_stdIO();D_P55_OFF(); |
||||
|
#define D_UART2_485_TYPE TYPE_485_NONE //UART2不启用485
|
||||
|
#define D_UART3_485_TYPE TYPE_485_NONE //UART2不启用485
|
||||
|
#define D_UART4_485_TYPE TYPE_485_NONE //UART2不启用485
|
||||
|
|
||||
|
//MODBUS协议配置
|
||||
|
#define D_MODBUS_ENABLE //MODBS启用开关,如果不使用modbus,可以注释掉本行
|
||||
|
#define D_MODBUS_SPLIT_ENTRY L1_modbus_split //modbus切割函数,在tpc_modbus.c中实现,依据实际情况修改
|
||||
|
#define D_MODBUS_REG_MAX_NUM 32 //每次最多读取/写入的寄存器数量,此处的数量要注意和 D_tp_handle_x_len 对应
|
||||
|
|
||||
|
//外设定义
|
||||
|
|
||||
|
#define D_LED1_INIT() D_LED1_OFF() |
||||
|
#define D_LED1_ON() D_P17_stdIO();D_P17_OFF() |
||||
|
#define D_LED1_OFF() D_P17_stdIO();D_P17_ON() |
||||
|
#define D_LED1_REV() D_P17_stdIO();D_P17_REV() |
||||
|
|
||||
|
#define D_LED2_INIT() D_LED2_OFF() |
||||
|
#define D_LED2_ON() D_P54_stdIO();D_P54_OFF() |
||||
|
#define D_LED2_OFF() D_P54_stdIO();D_P54_ON() |
||||
|
#define D_LED2_REV() D_P54_stdIO();D_P54_REV() |
||||
|
|
||||
|
|
||||
|
|
||||
|
//EEP存储地址定义
|
||||
|
#define D_EEP_SECTOR_SIZE 0x200 |
||||
|
#define D_EEP_PARAM_ADDR (D_EEP_SECTOR_SIZE * 0) //eeprom参数区扇区地址
|
||||
|
|
||||
|
//存储器特殊参数地址配置
|
||||
|
#define D_MCU_SPEC_PARAM_CHIPID 0xFDF9 |
||||
|
//...其他参数
|
||||
|
|
||||
|
|
||||
|
#define D_iicch_0 0 |
||||
|
#define D_iicch_1 1 |
||||
|
#define D_iicch_2 2 |
||||
|
#define D_iicch_3 3 |
||||
|
#define D_iicch_4 4 |
||||
|
#define D_iicch_5 5 |
||||
|
#define D_iicch_6 6 |
||||
|
#define D_iicch_7 7 |
||||
|
#define D_iicch_8 8 |
||||
|
#define D_iicch_9 9 |
||||
|
|
||||
|
#define D_iic_chnum 2 |
||||
|
|
||||
|
|
||||
|
#define D_SIIC_USE_0 |
||||
|
#define D_SIIC_USE_1 |
||||
|
///#define D_SIIC_USE_2
|
||||
|
///#define D_SIIC_USE_3
|
||||
|
///#define D_SIIC_USE_4
|
||||
|
///#define D_SIIC_USE_5
|
||||
|
///#define D_SIIC_USE_6
|
||||
|
///#define D_SIIC_USE_7
|
||||
|
///#define D_SIIC_USE_8
|
||||
|
|
||||
|
#define D_iicch_MSA D_iicch_1///第3路iic配置程mas301加速度传感器
|
||||
|
#define D_iicch_CLK D_iicch_0 |
||||
|
|
||||
|
|
||||
|
|
||||
|
///////////////////////////3//////////////////////////////////////////////
|
||||
|
|
||||
|
//////////////////////////ch=1 /0///////////////////////////////////////////////
|
||||
|
|
||||
|
|
||||
|
#ifdef D_SIIC_USE_0 |
||||
|
|
||||
|
//IICM0 SDA
|
||||
|
//IICM0 SDA
|
||||
|
#define L0_IICM0_SDA_init() D_PUON_P2(BITN2) ;D_OpenD_P4(BITN2) |
||||
|
#define L0_IICM0_SDA_OUT() D_P22_OUT() |
||||
|
#define L0_IICM0_SDA_IN() D_P22_IN() |
||||
|
#define L0_IICM0_SDA_ON() D_P22_ON() |
||||
|
#define L0_IICM0_SDA_OFF() D_P22_OFF() |
||||
|
#define L0_IICM0_SDA_AT() D_P22_AT() |
||||
|
|
||||
|
|
||||
|
//IICM0 SCL
|
||||
|
#define L0_IICM0_SCL_init() D_PUON_P2(BITN3) ;D_stdIO_P2(BITN3) |
||||
|
|
||||
|
#define L0_IICM0_SCL_OUT() D_P23_OUT() |
||||
|
#define L0_IICM0_SCL_IN() D_P23_IN() |
||||
|
#define L0_IICM0_SCL_ON() D_P23_ON() |
||||
|
#define L0_IICM0_SCL_OFF() D_P23_OFF() |
||||
|
#endif |
||||
|
|
||||
|
//--------------------------------------------
|
||||
|
|
||||
|
|
||||
|
#ifdef D_SIIC_USE_1 |
||||
|
|
||||
|
#define L0_IICM1_SDA_init() D_PUON_P4(BITN1);D_OpenD_P4(BITN1) |
||||
|
#define L0_IICM1_SDA_OUT() D_P41_OUT() |
||||
|
#define L0_IICM1_SDA_IN() D_P41_IN() |
||||
|
#define L0_IICM1_SDA_ON() D_P41_ON() |
||||
|
#define L0_IICM1_SDA_OFF() D_P41_OFF() |
||||
|
#define L0_IICM1_SDA_AT() D_P41_AT() |
||||
|
|
||||
|
#define L0_IICM1_SCL_init() D_PUON_P4(BITN2);D_stdIO_P4(BITN2) |
||||
|
|
||||
|
#define L0_IICM1_SCL_OUT() D_P42_OUT() |
||||
|
#define L0_IICM1_SCL_IN() D_P42_IN() |
||||
|
#define L0_IICM1_SCL_ON() D_P42_ON() |
||||
|
#define L0_IICM1_SCL_OFF() D_P42_OFF() |
||||
|
#endif |
||||
|
|
||||
|
|
||||
|
#ifdef D_SIIC_USE_2 |
||||
|
|
||||
|
///DOUT2 P04 sch;MAS_SDA MAS_SCL P50
|
||||
|
#define L0_IICM2_SDA_init() D_PUON_P3(BITN4) ;D_OpenD_P3(BITN4) |
||||
|
#define L0_IICM2_SDA_OUT() D_P34_OUT() |
||||
|
#define L0_IICM2_SDA_IN() D_P34_IN() |
||||
|
#define L0_IICM2_SDA_ON() D_P34_ON() |
||||
|
#define L0_IICM2_SDA_OFF() D_P34_OFF() |
||||
|
#define L0_IICM2_SDA_AT() D_P34_AT() |
||||
|
|
||||
|
#define L0_IICM2_SCL_init() D_PUON_P5(BITN0) ;D_stdIO_P5(BITN0) |
||||
|
#define L0_IICM2_SCL_OUT() D_P50_OUT() |
||||
|
#define L0_IICM2_SCL_IN() D_P50_IN() |
||||
|
#define L0_IICM2_SCL_ON() D_P50_ON() |
||||
|
#define L0_IICM2_SCL_OFF() D_P50_OFF() |
||||
|
/////////////////////////ch=3 //2//////////////////////////////////////////////
|
||||
|
#endif |
||||
|
#ifdef D_SIIC_USE_3 |
||||
|
|
||||
|
#define L0_IICM3_SDA_init() D_PUON_P3(BITN7) ;D_OpenD_P3(BITN7) |
||||
|
#define L0_IICM3_SDA_OUT() D_P37_OUT() |
||||
|
#define L0_IICM3_SDA_IN() D_P37_IN() |
||||
|
#define L0_IICM3_SDA_ON() D_P37_ON() |
||||
|
#define L0_IICM3_SDA_OFF() D_P37_OFF() |
||||
|
#define L0_IICM3_SDA_AT() D_P37_AT() |
||||
|
|
||||
|
#define L0_IICM3_SCL_init() D_PUON_P4(BITN1) ;D_stdIO_P4(BITN1) |
||||
|
#define L0_IICM3_SCL_OUT() D_P41_OUT() |
||||
|
#define L0_IICM3_SCL_IN() D_P41_IN() |
||||
|
#define L0_IICM3_SCL_ON() D_P41_ON() |
||||
|
#define L0_IICM3_SCL_OFF() D_P41_OFF() |
||||
|
|
||||
|
#endif |
||||
|
#ifdef D_SIIC_USE_4 |
||||
|
|
||||
|
/////////////////////////ch=4 //2//////////////////////////////////////////////
|
||||
|
|
||||
|
|
||||
|
|
||||
|
#define L0_IICM4_SDA_init() D_PUON_P3(BITN7) ;D_OpenD_P3(BITN7) |
||||
|
#define L0_IICM4_SDA_OUT() D_P37_OUT() |
||||
|
#define L0_IICM4_SDA_IN() D_P37_IN() |
||||
|
#define L0_IICM4_SDA_ON() D_P37_ON() |
||||
|
#define L0_IICM4_SDA_OFF() D_P37_OFF() |
||||
|
#define L0_IICM4_SDA_AT() D_P37_AT() |
||||
|
|
||||
|
#define L0_IICM4_SCL_init() D_PUON_P4(BITN1) ;D_stdIO_P4(BITN1) |
||||
|
#define L0_IICM4_SCL_OUT() D_P41_OUT() |
||||
|
#define L0_IICM4_SCL_IN() D_P41_IN() |
||||
|
#define L0_IICM4_SCL_ON() D_P41_ON() |
||||
|
#define L0_IICM4_SCL_OFF() D_P41_OFF() |
||||
|
|
||||
|
#endif |
||||
|
#ifdef D_SIIC_USE_5 |
||||
|
|
||||
|
|
||||
|
//IICM5 SDA
|
||||
|
#define L0_IICM5_SDA_init() D_stdIO_P1(BITN5) |
||||
|
#define L0_IICM5_SDA_OUT() D_P15_OUT() |
||||
|
#define L0_IICM5_SDA_IN() D_P15_IN() |
||||
|
#define L0_IICM5_SDA_ON() D_P15_ON() |
||||
|
#define L0_IICM5_SDA_OFF() D_P15_OFF() |
||||
|
#define L0_IICM5_SDA_AT() D_P15_AT() |
||||
|
|
||||
|
|
||||
|
|
||||
|
//IICM5 SCL
|
||||
|
#define L0_IICM5_SCL_init() D_stdIO_P1(BITN4) |
||||
|
|
||||
|
#define L0_IICM5_SCL_OUT() D_P14_OUT() |
||||
|
#define L0_IICM5_SCL_IN() D_P14_IN() |
||||
|
#define L0_IICM5_SCL_ON() D_P14_ON() |
||||
|
#define L0_IICM5_SCL_OFF() D_P14_OFF() |
||||
|
|
||||
|
#endif |
||||
|
#ifdef D_SIIC_USE_6 |
||||
|
|
||||
|
|
||||
|
|
||||
|
//IICM6 SDA
|
||||
|
#define L0_IICM6_SDA_init() D_stdIO_P1(BITN5) |
||||
|
#define L0_IICM6_SDA_OUT() D_P15_OUT() |
||||
|
#define L0_IICM6_SDA_IN() D_P15_IN() |
||||
|
#define L0_IICM6_SDA_ON() D_P15_ON() |
||||
|
#define L0_IICM6_SDA_OFF() D_P15_OFF() |
||||
|
#define L0_IICM6_SDA_AT() D_P15_AT() |
||||
|
|
||||
|
//IICM6 SCL
|
||||
|
#define L0_IICM6_SCL_init() D_stdIO_P1(BITN4) |
||||
|
|
||||
|
#define L0_IICM6_SCL_OUT() D_P14_OUT() |
||||
|
#define L0_IICM6_SCL_IN() D_P14_IN() |
||||
|
#define L0_IICM6_SCL_ON() D_P14_ON() |
||||
|
#define L0_IICM6_SCL_OFF() D_P14_OFF() |
||||
|
#endif |
||||
|
#ifdef D_SIIC_USE_7 |
||||
|
|
||||
|
//IICM7 SDA
|
||||
|
#define L0_IICM7_SDA_init() D_stdIO_P1(BITN5) |
||||
|
#define L0_IICM7_SDA_OUT() D_P15_OUT() |
||||
|
#define L0_IICM7_SDA_IN() D_P15_IN() |
||||
|
#define L0_IICM7_SDA_ON() D_P15_ON() |
||||
|
#define L0_IICM7_SDA_OFF() D_P15_OFF() |
||||
|
#define L0_IICM7_SDA_AT() D_P15_AT() |
||||
|
|
||||
|
//IICM7 SCL
|
||||
|
#define L0_IICM7_SCL_init() D_stdIO_P1(BITN4) |
||||
|
|
||||
|
#define L0_IICM7_SCL_OUT() D_P14_OUT() |
||||
|
#define L0_IICM7_SCL_IN() D_P14_IN() |
||||
|
#define L0_IICM7_SCL_ON() D_P14_ON() |
||||
|
#define L0_IICM7_SCL_OFF() D_P14_OFF() |
||||
|
#endif |
||||
|
#ifdef D_SIIC_USE_8 |
||||
|
|
||||
|
//IICM8 SDA
|
||||
|
#define L0_IICM8_SDA_init() D_stdIO_P1(BITN5) |
||||
|
#define L0_IICM8_SDA_OUT() D_P15_OUT() |
||||
|
#define L0_IICM8_SDA_IN() D_P15_IN() |
||||
|
#define L0_IICM8_SDA_ON() D_P15_ON() |
||||
|
#define L0_IICM8_SDA_OFF() D_P15_OFF() |
||||
|
#define L0_IICM8_SDA_AT() D_P15_AT() |
||||
|
|
||||
|
|
||||
|
//IICM8 SCL
|
||||
|
#define L0_IICM8_SCL_init() D_stdIO_P1(BITN4) |
||||
|
|
||||
|
#define L0_IICM8_SCL_OUT() D_P14_OUT() |
||||
|
#define L0_IICM8_SCL_IN() D_P14_IN() |
||||
|
#define L0_IICM8_SCL_ON() D_P14_ON() |
||||
|
#define L0_IICM8_SCL_OFF() D_P14_OFF() |
||||
|
#endif |
||||
|
|
||||
|
#define D_LPCD_INT_INIT(); P_SW2|=0x80;IT0 = 1;//下降沿中断
|
||||
|
#define D_LPCD_INT_OPEN(); EX0 = 1; |
||||
|
#define D_LPCD_INT_CLOSE(); EX0 = 0; |
||||
|
|
||||
|
#define D_RTC_INT_INIT(); INTCLKO = EX2; |
||||
|
#define D_RTC_INT_OPEN(); INTCLKO = EX2; |
||||
|
#define D_RTC_INT_CLOSE(); INTCLKO = 0; |
||||
|
|
||||
|
|
||||
|
#define D_MSA_INT_INIT(); IT1 = 1;//下降沿中断
|
||||
|
#define D_MSA_INT_OPEN(); EX1 = 1; |
||||
|
#define D_MSA_INT_CLOSE(); EX1 = 0; |
||||
|
|
||||
|
|
||||
|
typedef struct |
||||
|
{ |
||||
|
U8 time_f; |
||||
|
U8 clear_dog; |
||||
|
U8 weak_up; |
||||
|
U8 dog_ok; |
||||
|
U8 who_wake; /// 谁让我醒来 =D_int_RTC 20221002_18542 CCmodify
|
||||
|
vU16 sleeptime; ///系统休眠的时间间隔
|
||||
|
vU16 sleeptime_left; ///系统休眠的时间间隔
|
||||
|
U8 start_sleep; ///上电后多久进入睡眠状态 时间颗粒1秒
|
||||
|
U8 nb_status; |
||||
|
}TS_low_time; |
||||
|
extern TS_low_time ts_low_time; |
||||
|
|
||||
|
|
||||
|
|
||||
|
/***********
|
||||
|
|
||||
|
|
||||
|
|
||||
|
#define L0_IICM1_SDA_init() D_stdIO_P4(BITN2) |
||||
|
#define L0_IICM1_SDA_OUT() D_P42_OUT() |
||||
|
#define L0_IICM1_SDA_IN() D_P42_IN() |
||||
|
#define L0_IICM1_SDA_ON() D_P42_ON() |
||||
|
#define L0_IICM1_SDA_OFF() D_P42_OFF() |
||||
|
#define L0_IICM1_SDA_AT() D_P42_AT() |
||||
|
|
||||
|
#define L0_IICM1_SCL_init() D_stdIO_P4(BITN1) |
||||
|
|
||||
|
#define L0_IICM1_SCL_OUT() D_P41_OUT() |
||||
|
#define L0_IICM1_SCL_IN() D_P41_IN() |
||||
|
#define L0_IICM1_SCL_ON() D_P41_ON() |
||||
|
#define L0_IICM1_SCL_OFF() D_P41_OFF() |
||||
|
|
||||
|
|
||||
|
|
||||
|
***********/ |
||||
|
|
||||
|
#else |
||||
|
#error "未指定当前板卡" |
||||
|
|
||||
|
|
||||
|
|
||||
|
#endif///#if(TYPE_UASER_BOARD
|
||||
|
|
||||
|
|
||||
|
//STEP 3 Register CONFIG >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
||||
|
|
||||
|
|
||||
|
//STEP 5 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<Uart CONFIG
|
||||
|
#define SERIAL_MAX_NUM 1 |
||||
|
////fixme:和cpu的程序容量息息相关
|
||||
|
/// 9600bps = 10000bps = 1000 Bps = 1Byte/ms
|
||||
|
/// 19200bps = 20000bps = 2000Bps = 2Byte/ms = 1Byte/0.5ms
|
||||
|
/// 128Bytes = 128*0.5ms = 64ms
|
||||
|
#define D_UART_send_buf2_max 8 //此处改动会影响L0_uartN_ulhex函数
|
||||
|
//STEP 5 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<Uart CONFIG End
|
||||
|
|
||||
|
|
||||
|
|
||||
|
//======================================================== 以下为协议配置 ====================================================
|
||||
|
#define D_CMD_Filter1_ff 0xFF |
||||
|
#define D_CMD_Filter2_fe 0xFE |
||||
|
#define D_HETU_FX_fi 0xF0 |
||||
|
#define D_HETU_FX_MASK 0x0F |
||||
|
#define D_tp_handle_x_len 32 |
||||
|
|
||||
|
//STEP 6 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<Transmission Protocol Config
|
||||
|
#define D_TPC_CCMODBUS_Filter0 0xFF |
||||
|
#define D_TPC_CCMODBUS_Filter1 0xFE |
||||
|
#define D_TPC_DEBUG_FX_fi 0xF0 |
||||
|
#define D_TPC_DEBUG_FX_MASK 0x0F |
||||
|
#define D_TPC_HANDLER_X_LEN 128 |
||||
|
|
||||
|
extern void L0_board_config(void); |
||||
|
extern void L0_reg_init(void); |
||||
|
extern void L3_reg_2_iap(void); |
||||
|
extern void L3_iap_2_reg(void); |
||||
|
extern void L0_uartboard_config(void); |
||||
|
|
||||
|
void L0_moto_init(unsigned char onf); |
||||
|
|
||||
|
void L0_moto_run(unsigned char mode); |
||||
|
|
||||
|
////#pragma message("#pragma message验证测试")
|
||||
|
/// pack(4)
|
||||
|
|
||||
|
typedef struct |
||||
|
{ |
||||
|
u8 req; |
||||
|
u8 mac[6];/// 1、帧头: 帧起始标志,固定值为 0x68。
|
||||
|
u8 netid; |
||||
|
u8 band; |
||||
|
u8 buf[12]; |
||||
|
}TS_para_; |
||||
|
extern TS_para_ ts_para; |
||||
|
|
||||
|
///#pragma pack()
|
||||
|
|
||||
|
|
||||
|
void L0_board_key(void); |
||||
|
|
||||
|
#endif//_BSP_CONFIG_H
|
||||
|
/*********************************end file*********************************************/ |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
@ -0,0 +1,205 @@ |
|||||
|
////////////////////////////////////////////////////////////////////////////
|
||||
|
///@copyright Copyright (c) 2017, 传控科技 All rights reserved.
|
||||
|
///-------------------------------------------------------------------------
|
||||
|
/// @file bsp_config.h
|
||||
|
/// @brief hard config include
|
||||
|
/// @info FILE FOR HARDWARE SETUP AND SOFTWARE SETUP///FOR EXAMPLE: BAORD ,MCU,IDE
|
||||
|
/// @info YOU CAN CHANGE OR ADD THE DEFINE IF YOU NEED
|
||||
|
/// @info 整个嵌入式项目的入口 首先是确认电路板 然后确认cpu 芯片型号 然后确认编译器 之后是软件框架 最后是应用程序
|
||||
|
/// @info bsp_CONFIG 为其他头文件的始祖 TYPE_BOARD_xx
|
||||
|
///-------------------------------------------------------------------------
|
||||
|
/// @version 1.1
|
||||
|
/// @author CC
|
||||
|
/// @date 20180308
|
||||
|
/// @note
|
||||
|
//////////////////////////////////////////////////////////////////////////////
|
||||
|
/// @version 5.1
|
||||
|
/// @author CC
|
||||
|
/// @date 20200301
|
||||
|
/// @note
|
||||
|
//////////////////////////////////////////////////////////////////////////////
|
||||
|
|
||||
|
|
||||
|
//////////////////////////////////////////////////////////////////////////
|
||||
|
///存储器中的特殊参数
|
||||
|
///全球唯一ID号 7FF9H~7FFFH BFF9H~BFFFH EFF9H~EFFFH FDF9H~FDFFH 7字节
|
||||
|
///内部1.19V参考信号源 7FF7H~7FF8H BFF7H~BFF8H EFF7H~EFF8H FDF7H~FDF8H 毫伏(高字节在前)
|
||||
|
///32K掉电唤醒定时器的频率 7FF5H~7FF6H BFF5H~BFF6H EFF5H~EFF6H FDF5H~FDF6H Hz (高字节在前)
|
||||
|
///22.1184MHz的IRC参数(20M频段) 7FF4H BFF4H EFF4H FDF4H -
|
||||
|
///24MHz的IRC参数(20M频段) 7FF3H BFF3H EFF3H FDF3H -
|
||||
|
///20MHz的IRC参数(20M频段) 7FF2H BFF2H EFF2H FDF2H
|
||||
|
///固件版本为7.3.12U
|
||||
|
///以及后续版本有效
|
||||
|
///27MHz的IRC参数(35M频段) 7FF1H BFF1H EFF1H FDF1H
|
||||
|
///30MHz的IRC参数(35M频段) 7FF0H BFF0H EFF0H FDF0H
|
||||
|
///33.1776MHz的IRC参数(35M频段) 7FEFH BFEFH EFEFH FDEFH
|
||||
|
///35MHz的IRC参数(35M频段) 7FEEH BFEEH EFEEH FDEEH
|
||||
|
///36.864MHz的IRC参数(35M频段) 7FEDH BFEDH EFEDH FDEDH
|
||||
|
///保留 7FECH BFECH EFECH FDECH
|
||||
|
///保留 7FEBH BFEBH EFEBH FDEBH
|
||||
|
///20M频段的VRTRIM参数 7FEAH BFEAH EFEAH FDEAH
|
||||
|
///35M频段的VRTRIM参数 7FE9H BFE9H EFE9H FDE9H
|
||||
|
//////////////////////////////////////////////////////////////////////////
|
||||
|
|
||||
|
#ifndef _BSP_CONFIG_CONST_H |
||||
|
#define _BSP_CONFIG_CONST_H |
||||
|
|
||||
|
#include <INTRINS.H> |
||||
|
///#include "type.h"
|
||||
|
#include "c_bit.h" |
||||
|
|
||||
|
//>>>>>>>>>>>>>>>>>>>>>>.BORAD TYPE
|
||||
|
#define TYPE_BOARD_hhnew 1 |
||||
|
#define TYPE_BOARD_st_sleep04_01 4 |
||||
|
#define TYPE_BOARD_st_sleep03 5 |
||||
|
#define TYPE_BOARD_SMMM_MB_VH032_0E 6 |
||||
|
#define TYPE_BOARD_LPC17xx_ 8 |
||||
|
#define TYPE_BOARD_STM32F_103ZET6_READBULL 1036 |
||||
|
#define TYPE_BOARD_hh_CC_MD_VH05_anyriny_simple_m51 0x0551 |
||||
|
#define TYPE_BOARD_hh_CC_MD_VH06_asMain_m6a7 0x6a7 |
||||
|
#define TYPE_BOARD_TI26_MT01_M178 0x178 //会议计时器版v TI26_MT01-M178
|
||||
|
#define TYPE_BOARD_stc5as32_WIFIBV01 532 |
||||
|
#define TYPE_BOARD_SHC16LAXXQN32 1632 //SHC16LAXXQN32
|
||||
|
#define TYPE_BOARD_PAPER6133_M0A6 0xa6 //打印机纸张传感
|
||||
|
#define TYPE_BOARD_GSM_MAIN_V07 0xa7 //打印机运维板
|
||||
|
#define TYPE_BOARD_ADDA_MAIN_V02 0xa8 //ADDA
|
||||
|
#define TYPE_BOARD_433_0A 0xa9 //433
|
||||
|
#define TYPE_BOARD_WEIGH_0B 0xaa //称重
|
||||
|
#define TYPE_BOARD_TOUCH_PEN_0B 0xab //点读笔
|
||||
|
#define TYPE_BOARD_TOUCH_PEN_0C 0xabc //点读笔2 20210103 cc 最新版本
|
||||
|
//<<<<<<<<<<<<<<<<<<<<<<<<<<<.BORAD TYPE end
|
||||
|
|
||||
|
#define TYPE_BOARD_paper6133_m0a6 0xa6 //纸张传感器
|
||||
|
#define TYPE_BOARD_paper_main_m10 0x10 //纸张传感器2 CC_SE_paper_main_m10_smt01.sch
|
||||
|
#define ccSensor_CG_V02_m08_debug 0x0208 //CG传感器2
|
||||
|
#define TYPE_BOARD_cc_Light_Speed0B 0x11b //LR光电感器2
|
||||
|
|
||||
|
#define TYPE_BOARD_cc_G0A03 0x123 //倾角感器2
|
||||
|
#define ccSensor_WS_ps5ws 0x0258 ///称重传感
|
||||
|
#define ccSensor_WS_ps6wifi 0x0268 ///带2.4g的动作采集类 20200102 芯片价格变化 stc建议使用tssop20 LQFP32 取代 SOP28, TSSOP20 取代 SOP20 是趋势,有 LQFP48
|
||||
|
#define TYPE_BOARD_SD_SAVE 0xd //SD 读取新式的加速度芯片
|
||||
|
|
||||
|
#define TYPE_BOARD_point_read 0xddd //点读笔的测试程序
|
||||
|
|
||||
|
#define TYPE_BOARD_sensor_sca720 0x720 //
|
||||
|
|
||||
|
#define TYPE_BOARD_TTSS2PLC 0x2 //
|
||||
|
|
||||
|
#define TYPE_BOARD_TTSS2lora 0x110 //
|
||||
|
#define TYPE_BOARD_TTSS2elc 0x111 // 大医院
|
||||
|
#define TYPE_BOARD_TTSS2f8 0xf8 // 足底stc版本
|
||||
|
#define TYPE_BOARD_TTSS2cam8 0xc8 //cam8 ocr版 64U
|
||||
|
#define TYPE_BOARD_TTSS2car2m 0x28 //平车2主板_主机
|
||||
|
#define TYPE_BOARD_TTSS2car2s 0x285 //平车2主板_从机
|
||||
|
|
||||
|
|
||||
|
#define TYPE_BOARD_TTSS2_NB2 0x2112 //智能闭户锁_0DM03
|
||||
|
#define TYPE_BOARD_TTSS2_w5 0x1115 //智能闭户锁_0DM03
|
||||
|
|
||||
|
|
||||
|
//>>>>>>>>>>>>>>>>>>>>>>MCU TYPE
|
||||
|
#define TYPE_MCU_VENDOR_MSK 0xF0 |
||||
|
#define TYPE_MCU_VENDOR_STC 0x10 |
||||
|
#define TYPE_MCU_STC_8A 0x11 |
||||
|
#define TYPE_MCU_STC_8F 0x12 |
||||
|
#define TYPE_MCU_STC_8G 0x13 |
||||
|
#define TYPE_MCU_STC_8H 0x14 |
||||
|
|
||||
|
#define TYPE_MCU_VENDOR_TI 0x60 |
||||
|
#define TYPE_MCU_SHC6601 0x66 |
||||
|
#define TYPE_MCU_LPC17xx 0x67 |
||||
|
#define TYPE_MCU_STM32 0x68 |
||||
|
|
||||
|
#define D_CPUfamily_8bits 8 |
||||
|
#define D_CPUfamily_16bits 16 |
||||
|
#define D_CPUfamily_32bits 32 |
||||
|
//<<<<<<<<<<<<<<<<<<<<<<MCU TYPE end
|
||||
|
|
||||
|
//>>>>>>>>>>>>>>>>>>>>>>IDE TYPE
|
||||
|
#define TYPE_IDE_KEIL 1 |
||||
|
#define TYPE_IDE_MDK 2 |
||||
|
#define TYPE_IDE_IAR 3 |
||||
|
//<<<<<<<<<<<<<<<<<<<<<<IDE TYPE end
|
||||
|
|
||||
|
//>>>>>>>>>>>>>>>>>>>>>>SysTimer TYPE
|
||||
|
|
||||
|
#define TYPE_JIFFIES_600US 600 |
||||
|
#define TYPE_JIFFIES_5MS 5000 |
||||
|
#define TYPE_JIFFIES_10MS 10000 |
||||
|
#define TYPE_JIFFIES_25MS 250000 |
||||
|
|
||||
|
#define TYPE_JIFFIES_12MS 125000 |
||||
|
|
||||
|
////#define TYPE_JIFFIES_25MS 44.2368
|
||||
|
|
||||
|
//<<<<<<<<<<<<<<<<<<<<<<<<<<<SysTimer TYPE end
|
||||
|
|
||||
|
//>>>>>>>>>>>>>>>>>>>>>>.WDT TYPE
|
||||
|
#define TYPE_WDT_DISABLE 1 |
||||
|
#define TYPE_WDT_ENABLE 2 |
||||
|
#define WDT_FEED() WDT_CONTR |= 0x10 |
||||
|
//#define WDT_FEED() WDT_CONTR |= 0x10
|
||||
|
//<<<<<<<<<<<<<<<<<<<<<<<<<<<.SysTimer TYPE end
|
||||
|
|
||||
|
//>>>>>>>>>>>>>>>>>>>>>>.ByteOrder TYPE
|
||||
|
#define TYPE_MCU_BIGENDIAN 1 //大端字节序
|
||||
|
#define TYPE_MCU_LITENDIAN 2 //小端字节序
|
||||
|
//<<<<<<<<<<<<<<<<<<<<<<<<<<<.ByteOrder TYPE end
|
||||
|
|
||||
|
//>>>>>>>>>>>>>>>>>>>>>>.代码加密 TYPE
|
||||
|
#define TYPE_ENCRYPTION_ENABLE 1 //代码加密
|
||||
|
#define TYPE_ENCRYPTION_DISABLE 2 //代码不加密
|
||||
|
//<<<<<<<<<<<<<<<<<<<<<<<<<<<.ByteOrder TYPE end
|
||||
|
|
||||
|
//>>>>>>>>>>>>>>>>>>>>>>BUADRATE & StopBit
|
||||
|
#define SBIT_1 1 //1 stop bit
|
||||
|
#define SBIT_2 2 //2 stop bit
|
||||
|
|
||||
|
#define BRT_921600 921600 |
||||
|
|
||||
|
#define BRT_460800 460800 |
||||
|
#define BRT_230400 230400 |
||||
|
#define BRT_115200 115200 |
||||
|
#define BRT_19200 19200 |
||||
|
#define BRT_9600 9600 |
||||
|
#define BRT_4800 4800 |
||||
|
//<<<<<<<<<<<<<<<<<<<<<<BUADRATE & StopBit end
|
||||
|
|
||||
|
//>>>>>>>>>>>>>>>>>>>>>>MainFre
|
||||
|
#define MainFre_5M 5529600L |
||||
|
#define MainFre_11M 11059200L |
||||
|
#define MainFre_22M 22118400L |
||||
|
#define MainFre_24M 24000000L |
||||
|
#define MainFre_27M 27000000L |
||||
|
#define MainFre_33M 33177600L |
||||
|
#define MainFre_44M 44236800L |
||||
|
//<<<<<<<<<<<<<<<<<<<<<<MainFre end
|
||||
|
|
||||
|
//>>>>>>>>>>>>>>>>>>>>>>UART0 PIN
|
||||
|
#define PIN_UART1_Rxd_30_Txd_31 1 |
||||
|
#define PIN_UART1_Rxd_36_Txd_37 2 |
||||
|
#define PIN_UART1_Rxd_16_Txd_17 3 |
||||
|
#define PIN_UART1_Rxd_43_Txd_44 4 |
||||
|
//<<<<<<<<<<<<<<<<<<<<<<<<<<<.UART0 PIN
|
||||
|
//>>>>>>>>>>>>>>>>>>>>>>UART2 PIN
|
||||
|
#define PIN_UART2_Rxd_10_Txd_11 5 |
||||
|
|
||||
|
//<<<<<<<<<<<<<<<<<<<<<<<<<<<.UART2 PIN
|
||||
|
|
||||
|
//>>>>>>>>>>>>>>>>>>>>>>485 Type
|
||||
|
#define TYPE_485_NONE 0 |
||||
|
#define TYPE_485_MASTER 1 |
||||
|
#define TYPE_485_SLAVER 2 |
||||
|
//<<<<<<<<<<<<<<<<<<<<<<485 Type end
|
||||
|
|
||||
|
//>>>>>>>>>>>>>>>>>>>>>>G-SENSOR TYPE
|
||||
|
#define TYPE_ASENSOR_ADXL362 362 |
||||
|
#define TYPE_ASENSOR_MSA300 300 |
||||
|
#define TYPE_ASENSOR TYPE_ASENSOR_MSA300 |
||||
|
//<<<<<<<<<<<<<<<<<<<<<<G-SENSOR TYPE end
|
||||
|
|
||||
|
|
||||
|
|
||||
|
#endif//_BSP_CONFIG_CONST_H
|
||||
|
/*********************************end file*********************************************/ |
||||
|
|
||||
@ -0,0 +1,96 @@ |
|||||
|
////////////////////////////////////////////////////////////////////////////
|
||||
|
///@copyright Copyright (c) 2017, 传控科技 All rights reserved.
|
||||
|
///-------------------------------------------------------------------------
|
||||
|
/// @file _bsp_config_stc_H.h
|
||||
|
/// @brief hard _bsp_config_stc_H include
|
||||
|
/// @info FILE FOR HARDWARE SETUP AND SOFTWARE SETUP///FOR EXAMPLE: BAORD ,MCU,IDE
|
||||
|
/// @info YOU CAN CHANGE OR ADD THE DEFINE IF YOU NEED
|
||||
|
/// @info 整个嵌入式项目的入口 首先是确认电路板 然后确认cpu 芯片型号 然后确认编译器 之后是软件框架 最后是应用程序
|
||||
|
/// @info 确认cpu类型后调用对应的cpu的配置参数,主要为了兼容c51 arm avr等
|
||||
|
///-------------------------------------------------------------------------
|
||||
|
/// @version 1.0
|
||||
|
/// @author CC
|
||||
|
/// @date 20220313
|
||||
|
/// @note
|
||||
|
//////////////////////////////////////////////////////////////////////////////
|
||||
|
|
||||
|
#ifndef _bsp_config_stc_H |
||||
|
#define _bsp_config_stc_H |
||||
|
|
||||
|
#if(TYPE_MCU == TYPE_MCU_STC_8H) |
||||
|
#define D_CPUfamily_type D_CPUfamily_8bits |
||||
|
/// #include "../cpu/STC_stc8h3k.h"
|
||||
|
/// #include "../cpu/STC_stc8f.h"
|
||||
|
|
||||
|
#include "STC8H.h" |
||||
|
#include "stc_8A8K64D4_ext.h"////扩展 依据规格书 |
||||
|
|
||||
|
#include "stc_8_delay.h" |
||||
|
|
||||
|
#include "../cpu/STC_only.h" |
||||
|
#include "../cpu/c51_macro.h" |
||||
|
#include "TTSS_time_stc.h" |
||||
|
|
||||
|
#include "c_lib.h" |
||||
|
|
||||
|
|
||||
|
#if(MainFre_5M == D_sys_MainFre) |
||||
|
#define D_Cdelay_200us 20 |
||||
|
#define D_Cdelay_1us 1 ////while p21翻转时测定 500k 2us 一个指令
|
||||
|
/// #define Lc_delay_ms L0_Delay_1ms
|
||||
|
#elif(MainFre_22M == D_sys_MainFre) |
||||
|
#define D_Cdelay_200us 20 |
||||
|
#define D_Cdelay_1us 1 ////while p21翻转时测定 500k 2us 一个指令
|
||||
|
|
||||
|
#define L0_delay_1us() Lc_delay_nop(0) // 5个nop() 100ns 50个nop() 1us (20)=10us (2)1.5us
|
||||
|
#define L0_delay_10us() Lc_delay_nop(4) // 5个nop() 100ns 50个nop() 1us (20)=10us (2)1.5us
|
||||
|
#define L0_delay_40us() Lc_delay_nop(18) // 5个nop() 100ns 50个nop() 1us (20)=10us (2)1.5us
|
||||
|
//// #define Lc_delay_ms L0_Delay_1ms
|
||||
|
|
||||
|
#define L0_Delay_1ms Delay1ms |
||||
|
#define D_delay_para1ms 90 |
||||
|
#elif(MainFre_27M == D_sys_MainFre) |
||||
|
#define D_Cdelay_200us 20 |
||||
|
#define D_Cdelay_1us 1 ////while p21翻转时测定 500k 2us 一个指令
|
||||
|
/// #define Lc_delay_ms L0_Delay_1ms
|
||||
|
|
||||
|
#define L0_Delay_1ms Delay1ms |
||||
|
|
||||
|
#elif(MainFre_44M == D_sys_MainFre) |
||||
|
#define D_Cdelay_200us 5 |
||||
|
#define D_Cdelay_1us 1 ////while p21翻转时测定 500k 2us 一个指令
|
||||
|
/// #define Lc_delay_ms L0_Delay_1ms
|
||||
|
#define L0_delay_1us() Lc_delay_nop(0) // 5个nop() 100ns 50个nop() 1us (20)=10us (2)1.5us
|
||||
|
#define L0_delay_10us() Lc_delay_nop(4) // 5个nop() 100ns 50个nop() 1us (20)=10us (2)1.5us
|
||||
|
#define L0_delay_40us() Lc_delay_nop(18) // 5个nop() 100ns 50个nop() 1us (20)=10us (2)1.5us
|
||||
|
//// #define Lc_delay_ms L0_Delay_1ms
|
||||
|
|
||||
|
#define L0_Delay_1ms Delay1ms |
||||
|
#define D_delay_para1ms 90 |
||||
|
|
||||
|
#define L0_Delay_1ms Delay1ms |
||||
|
|
||||
|
|
||||
|
#else ///MainFre_11M
|
||||
|
#define D_Cdelay_200us 20 |
||||
|
#define D_Cdelay_1us 1 ////while p21翻转时测定 500k 2us 一个指令
|
||||
|
#define L0_delay_1us() Lc_delay_nop(0) // 5个nop() 100ns 50个nop() 1us (20)=10us (2)1.5us
|
||||
|
#define L0_delay_10us() Lc_delay_nop(4) // 5个nop() 100ns 50个nop() 1us (20)=10us (2)1.5us
|
||||
|
#define L0_delay_40us() Lc_delay_nop(18) // 5个nop() 100ns 50个nop() 1us (20)=10us (2)1.5us
|
||||
|
#define D_delay_para1ms 90 |
||||
|
/// #define Lc_delay_ms L0_Delay_1ms
|
||||
|
#define L0_Delay_1ms Delay1ms |
||||
|
|
||||
|
/// #define L0_Delay_1ms() Lc_for_int16()
|
||||
|
|
||||
|
#endif//D_sys_MainFre)
|
||||
|
|
||||
|
#endif///TYPE_MCU
|
||||
|
|
||||
|
|
||||
|
#endif//_bsp_config_after_H
|
||||
|
/*********************************end file*********************************************/ |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
@ -0,0 +1,936 @@ |
|||||
|
#include "MLX90615.h" |
||||
|
#include "stc_8_delay.h"///// |
||||
|
|
||||
|
|
||||
|
|
||||
|
/*******************************************************************************
|
||||
|
* Filename: bsp_mlx90615.c |
||||
|
* Revised: All copyrights reserved to Roger. |
||||
|
* Date: 2022-05-04 |
||||
|
* Revision: v1.0 |
||||
|
* Writer: Roger-WY. |
||||
|
* |
||||
|
* Description: 非接触式红外温度传感器模块驱动(数字式) |
||||
|
* |
||||
|
* |
||||
|
* Notes: |
||||
|
* All copyrights reserved to Roger-WY |
||||
|
*******************************************************************************/ |
||||
|
////#include "bsp_mlx90615.h"
|
||||
|
|
||||
|
|
||||
|
TS_mx95_ ts_mx95; |
||||
|
void delay_ms2(unsigned int ms) |
||||
|
{ |
||||
|
unsigned int a; |
||||
|
while(ms) |
||||
|
{ |
||||
|
///a=1800;
|
||||
|
a=290; |
||||
|
while(a--); |
||||
|
ms--; |
||||
|
} |
||||
|
return; |
||||
|
} |
||||
|
void L1_mlx95_cal_tmp(void) |
||||
|
{///27315
|
||||
|
///x*2 - 27315
|
||||
|
ts_mx95.u16b = D_2uc_u16(ts_mx95.Object[1],ts_mx95.Object[0]); |
||||
|
ts_mx95.u16b *=2; |
||||
|
ts_mx95.u16out_o = ts_mx95.u16b - 27315; |
||||
|
|
||||
|
ts_mx95.u16b = D_2uc_u16(ts_mx95.Ambient[1],ts_mx95.Ambient[0]); |
||||
|
ts_mx95.u16b *=2; |
||||
|
ts_mx95.u16out_a = ts_mx95.u16b - 27315; |
||||
|
|
||||
|
printf("obj*100 %d A: %d ",(int)ts_mx95.u16out_o,(int)ts_mx95.u16out_a); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
void L1_mlx95_get_tmp(void) |
||||
|
{ |
||||
|
////100us 10k 1ms/10=100us 100k--10us
|
||||
|
L0_mlx95_wakeup(); |
||||
|
L2_IICMx_ReadReg(D_iicch_mlx96015,MLX90615_ADDR_WR, |
||||
|
MLX90615_AMBIENT_TEMPERATURE,&ts_mx95.Ambient,3); |
||||
|
/// printf("\r\nmlx95 %X %X %X ",(int)0x123,(int)ts_mx95.Ambient[0],(int)ts_mx95.Ambient[1]);
|
||||
|
L2_IICMx_ReadReg(D_iicch_mlx96015,MLX90615_ADDR_WR, |
||||
|
MLX90615_OBJECT_TEMPERATURE,&ts_mx95.Object,3); |
||||
|
/// printf("obj %X %X ",(int)ts_mx95.Object[0],(int)ts_mx95.Object[1]);
|
||||
|
L1_mlx95_cal_tmp(); |
||||
|
|
||||
|
} |
||||
|
|
||||
|
#if 0 |
||||
|
|
||||
|
|
||||
|
//----------------------------------------------------------------------------//
|
||||
|
#define MLX90615_I2C_SCL_RCC RCC_APB2Periph_GPIOC |
||||
|
#define MLX90615_I2C_SCL_PIN GPIO_Pin_4 /* 连接到SCL时钟线的GPIO */ |
||||
|
#define MLX90615_I2C_SCL_PORT GPIOC |
||||
|
|
||||
|
#define MLX90615_I2C_SDA_RCC RCC_APB2Periph_GPIOC |
||||
|
#define MLX90615_I2C_SDA_PIN GPIO_Pin_5 /* 连接到SDA数据线的GPIO */ |
||||
|
#define MLX90615_I2C_SDA_PORT GPIOC |
||||
|
|
||||
|
|
||||
|
/* 定义读写SCL和SDA的宏 */ |
||||
|
#define MLX90615_I2C_SCL_1() MLX90615_I2C_SCL_PORT->BSRR = MLX90615_I2C_SCL_PIN /* SCL = 1 */ |
||||
|
#define MLX90615_I2C_SCL_0() MLX90615_I2C_SCL_PORT->BRR = MLX90615_I2C_SCL_PIN /* SCL = 0 */ |
||||
|
|
||||
|
#define MLX90615_I2C_SDA_1() MLX90615_I2C_SDA_PORT->BSRR = MLX90615_I2C_SDA_PIN /* SDA = 1 */ |
||||
|
#define MLX90615_I2C_SDA_0() MLX90615_I2C_SDA_PORT->BRR = MLX90615_I2C_SDA_PIN /* SDA = 0 */ |
||||
|
|
||||
|
#define MLX90615_I2C_SDA_READ() ((MLX90615_I2C_SDA_PORT->IDR & MLX90615_I2C_SDA_PIN) != 0) /* 读SDA口线状态 */ |
||||
|
#define MLX90615_I2C_SCL_READ() ((MLX90615_I2C_SCL_PORT->IDR & MLX90615_I2C_SCL_PIN) != 0) /* 读SCL口线状态 */ |
||||
|
|
||||
|
|
||||
|
//----------------------------------------------------------------------------//
|
||||
|
|
||||
|
|
||||
|
|
||||
|
//============================================================================//
|
||||
|
|
||||
|
|
||||
|
/*
|
||||
|
******************************************************************************** |
||||
|
* 函 数 名: Mlx90615_i2c_Delay |
||||
|
* 功能说明: I2C总线位延迟,最快400KHz |
||||
|
* 形 参: 无 |
||||
|
* 返 回 值: 无 |
||||
|
******************************************************************************** |
||||
|
*/ |
||||
|
static void Mlx90615_i2c_Delay(void) |
||||
|
{ |
||||
|
volatile uint8_t i; |
||||
|
|
||||
|
for (i = 0; i < 50; i++); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
static void Mlx90615_i2c_Start(void) |
||||
|
{ |
||||
|
/* 当SCL高电平时,SDA出现一个下跳沿表示I2C总线启动信号 */ |
||||
|
MLX90615_I2C_SDA_1(); |
||||
|
Mlx90615_i2c_Delay(); |
||||
|
MLX90615_I2C_SCL_1(); |
||||
|
Mlx90615_i2c_Delay(); |
||||
|
|
||||
|
MLX90615_I2C_SDA_0(); |
||||
|
Mlx90615_i2c_Delay(); |
||||
|
MLX90615_I2C_SCL_0(); |
||||
|
// Mlx90615_i2c_Delay();
|
||||
|
} |
||||
|
|
||||
|
/*******************************************************************************
|
||||
|
* 名 称: i2c_Stop |
||||
|
* 功 能: CPU发起I2C总线停止信号 |
||||
|
* 入口参数: 无 |
||||
|
* 出口参数: 无 |
||||
|
* 作 者: Roger-WY |
||||
|
* 创建日期: 2018-05-20 |
||||
|
* 修 改: |
||||
|
* 修改日期: |
||||
|
* 备 注: 停止时序 |
||||
|
* SCL _____/ˉˉˉˉˉˉˉ |
||||
|
* SDA _________/ˉˉˉˉˉ |
||||
|
* | | |
||||
|
* STOP |
||||
|
*******************************************************************************/ |
||||
|
static void Mlx90615_i2c_Stop(void) |
||||
|
{ |
||||
|
/* 当SCL高电平时,SDA出现一个上跳沿表示I2C总线停止信号 */ |
||||
|
|
||||
|
MLX90615_I2C_SCL_0(); |
||||
|
Mlx90615_i2c_Delay(); |
||||
|
MLX90615_I2C_SDA_0(); |
||||
|
Mlx90615_i2c_Delay(); |
||||
|
|
||||
|
MLX90615_I2C_SCL_1(); |
||||
|
Mlx90615_i2c_Delay(); |
||||
|
MLX90615_I2C_SDA_1(); |
||||
|
// Mlx90615_i2c_Delay();
|
||||
|
} |
||||
|
|
||||
|
/*******************************************************************************
|
||||
|
* 名 称: i2c_WaitAck |
||||
|
* 功 能: CPU产生一个时钟,并读取器件的ACK应答信号 |
||||
|
* 入口参数: 无 |
||||
|
* 出口参数: 返回0表示正确应答,1表示无器件响应 |
||||
|
* 作 者: Roger-WY |
||||
|
* 创建日期: 2018-05-20 |
||||
|
* 修 改: |
||||
|
* 修改日期: |
||||
|
* 备 注: |
||||
|
*******************************************************************************/ |
||||
|
static uint8_t Mlx90615_i2c_WaitAck(void) |
||||
|
{ |
||||
|
uint8_t re; |
||||
|
uint8_t TimeOutCnt = 20; /* 超时计数器 */ |
||||
|
|
||||
|
MLX90615_I2C_SDA_1(); /* CPU释放SDA总线 */ |
||||
|
Mlx90615_i2c_Delay(); |
||||
|
MLX90615_I2C_SCL_1(); /* CPU驱动SCL = 1, 此时器件会返回ACK应答 */ |
||||
|
Mlx90615_i2c_Delay(); |
||||
|
|
||||
|
while(TimeOutCnt -- ) { |
||||
|
if (MLX90615_I2C_SDA_READ()) {/* CPU读取SDA口线状态 */ |
||||
|
re = 1; |
||||
|
} else { |
||||
|
re = 0; |
||||
|
} |
||||
|
} |
||||
|
MLX90615_I2C_SCL_0(); |
||||
|
Mlx90615_i2c_Delay(); |
||||
|
return re; |
||||
|
} |
||||
|
|
||||
|
/*******************************************************************************
|
||||
|
* 名 称: i2c_Ack |
||||
|
* 功 能: CPU产生一个ACK信号 |
||||
|
* 入口参数: 无 |
||||
|
* 出口参数: 无 |
||||
|
* 作 者: Roger-WY |
||||
|
* 创建日期: 2018-05-20 |
||||
|
* 修 改: |
||||
|
* 修改日期: |
||||
|
* 备 注: |
||||
|
*******************************************************************************/ |
||||
|
static void Mlx90615_i2c_Ack(void) |
||||
|
{ |
||||
|
MLX90615_I2C_SDA_0(); /* CPU驱动SDA = 0 */ |
||||
|
Mlx90615_i2c_Delay(); |
||||
|
MLX90615_I2C_SCL_1(); /* CPU产生1个时钟 */ |
||||
|
Mlx90615_i2c_Delay(); |
||||
|
MLX90615_I2C_SCL_0(); |
||||
|
Mlx90615_i2c_Delay(); |
||||
|
MLX90615_I2C_SDA_1(); /* CPU释放SDA总线 */ |
||||
|
} |
||||
|
|
||||
|
/*******************************************************************************
|
||||
|
* 名 称: i2c_NAck |
||||
|
* 功 能: CPU产生1个NACK信号 |
||||
|
* 入口参数: 无 |
||||
|
* 出口参数: 无 |
||||
|
* 作 者: Roger-WY |
||||
|
* 创建日期: 2018-05-20 |
||||
|
* 修 改: |
||||
|
* 修改日期: |
||||
|
* 备 注: |
||||
|
*******************************************************************************/ |
||||
|
static void Mlx90615_i2c_NAck(void) |
||||
|
{ |
||||
|
MLX90615_I2C_SDA_1(); /* CPU驱动SDA = 1 */ |
||||
|
Mlx90615_i2c_Delay(); |
||||
|
MLX90615_I2C_SCL_1(); /* CPU产生1个时钟 */ |
||||
|
Mlx90615_i2c_Delay(); |
||||
|
MLX90615_I2C_SCL_0(); |
||||
|
Mlx90615_i2c_Delay(); |
||||
|
} |
||||
|
|
||||
|
/*******************************************************************************
|
||||
|
* 名 称: bsp_InitI2C |
||||
|
* 功 能: 配置I2C总线的GPIO,采用模拟IO的方式实现 |
||||
|
* 入口参数: 无 |
||||
|
* 出口参数: 无 |
||||
|
* 作 者: Roger-WY |
||||
|
* 创建日期: 2018-06-29 |
||||
|
* 修 改: |
||||
|
* 修改日期: |
||||
|
* 备 注: |
||||
|
*******************************************************************************/ |
||||
|
static void Mlx90615_InitI2C(void) |
||||
|
{ |
||||
|
GPIO_InitTypeDef GPIO_InitStructure; |
||||
|
|
||||
|
RCC_APB2PeriphClockCmd(MLX90615_I2C_SCL_RCC | MLX90615_I2C_SDA_RCC, ENABLE); /* 打开GPIO时钟 */ |
||||
|
|
||||
|
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; |
||||
|
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD; /* 开漏输出模式 */ |
||||
|
|
||||
|
GPIO_InitStructure.GPIO_Pin = MLX90615_I2C_SCL_PIN; |
||||
|
GPIO_Init(MLX90615_I2C_SCL_PORT, &GPIO_InitStructure); |
||||
|
|
||||
|
GPIO_InitStructure.GPIO_Pin = MLX90615_I2C_SDA_PIN; |
||||
|
GPIO_Init(MLX90615_I2C_SDA_PORT, &GPIO_InitStructure); |
||||
|
|
||||
|
/* 给一个停止信号, 复位I2C总线上的所有设备到待机模式 */ |
||||
|
Mlx90615_i2c_Stop(); |
||||
|
} |
||||
|
|
||||
|
/*******************************************************************************
|
||||
|
* 名 称: i2c_SendByte |
||||
|
* 功 能: CPU向I2C总线设备发送8bit数据 |
||||
|
* 入口参数: _ucByte : 等待发送的字节 |
||||
|
* 出口参数: 无 |
||||
|
* 作 者: Roger-WY |
||||
|
* 创建日期: 2018-05-20 |
||||
|
* 修 改: |
||||
|
* 修改日期: |
||||
|
* 备 注: |
||||
|
*******************************************************************************/ |
||||
|
static void Mlx90615_i2c_SendByte(uint8_t _ucByte) |
||||
|
{ |
||||
|
uint8_t i; |
||||
|
|
||||
|
/* 先发送字节的高位bit7 */ |
||||
|
for (i = 0; i < 8; i++) { |
||||
|
MLX90615_I2C_SCL_0(); |
||||
|
Mlx90615_i2c_Delay(); |
||||
|
|
||||
|
if (_ucByte & 0x80) { |
||||
|
MLX90615_I2C_SDA_1(); |
||||
|
} else { |
||||
|
MLX90615_I2C_SDA_0(); |
||||
|
} |
||||
|
|
||||
|
_ucByte <<= 1; /* 左移一个bit */ |
||||
|
|
||||
|
Mlx90615_i2c_Delay(); |
||||
|
|
||||
|
MLX90615_I2C_SCL_1(); |
||||
|
Mlx90615_i2c_Delay(); |
||||
|
} |
||||
|
MLX90615_I2C_SCL_0(); |
||||
|
Mlx90615_i2c_Delay(); |
||||
|
|
||||
|
} |
||||
|
|
||||
|
/*******************************************************************************
|
||||
|
* 名 称: Mlx90615_i2c_ReadByte |
||||
|
* 功 能: CPU从I2C总线设备读取8bit数据 |
||||
|
* 入口参数: 无 |
||||
|
* 出口参数: 读到的数据 |
||||
|
* 作 者: Roger-WY |
||||
|
* 创建日期: 2018-05-20 |
||||
|
* 修 改: |
||||
|
* 修改日期: |
||||
|
* 备 注: |
||||
|
*******************************************************************************/ |
||||
|
static uint8_t Mlx90615_i2c_ReadByte(void) |
||||
|
{ |
||||
|
uint8_t i; |
||||
|
uint8_t value; |
||||
|
|
||||
|
/* 读到第1个bit为数据的bit7 */ |
||||
|
value = 0; |
||||
|
for (i = 0; i < 8; i++) { |
||||
|
value <<= 1; |
||||
|
MLX90615_I2C_SCL_0(); |
||||
|
Mlx90615_i2c_Delay(); |
||||
|
MLX90615_I2C_SCL_1(); |
||||
|
Mlx90615_i2c_Delay(); |
||||
|
|
||||
|
if (MLX90615_I2C_SDA_READ()) { |
||||
|
value++; |
||||
|
} |
||||
|
} |
||||
|
MLX90615_I2C_SCL_0(); |
||||
|
Mlx90615_i2c_Delay(); |
||||
|
|
||||
|
return value; |
||||
|
} |
||||
|
|
||||
|
/*******************************************************************************
|
||||
|
* 名 称: bsp_Mlx90615ScanDevice |
||||
|
* 功 能: 检测I2C总线设备,CPU向发送设备地址,然后读取设备应答来判断该设备是否存在 |
||||
|
* 入口参数: _Address:设备的I2C总线地址 |
||||
|
* 出口参数: 返回值 0 表示正确, 返回1表示未探测到 |
||||
|
* 作 者: Roger-WY |
||||
|
* 创建日期: 2018-05-20 |
||||
|
* 修 改: |
||||
|
* 修改日期: |
||||
|
* 备 注: |
||||
|
*******************************************************************************/ |
||||
|
int8_t bsp_Mlx90615ScanDevice(uint8_t *pSlaveAddr) |
||||
|
{ |
||||
|
uint8_t ucAck; |
||||
|
|
||||
|
Mlx90615_InitI2C(); |
||||
|
if (MLX90615_I2C_SDA_READ() && MLX90615_I2C_SCL_READ()) { |
||||
|
|
||||
|
for(uint8_t i = 0; i < 128; i++) |
||||
|
{ |
||||
|
Mlx90615_i2c_Start(); /* 发送启动信号 */ |
||||
|
Mlx90615_i2c_SendByte(i << 1); |
||||
|
ucAck = Mlx90615_i2c_WaitAck(); /* 检测设备的ACK应答 */ |
||||
|
Mlx90615_i2c_Stop(); /* 发送停止信号 */ |
||||
|
if(ucAck == 0) |
||||
|
{ |
||||
|
*pSlaveAddr = i; //找到设备并获取从机地址
|
||||
|
return 0; |
||||
|
} |
||||
|
} |
||||
|
return -1; //没有找到设备
|
||||
|
|
||||
|
} |
||||
|
return -2; /* I2C总线异常 */ |
||||
|
} |
||||
|
|
||||
|
//============================================================================//
|
||||
|
static const uint8_t crc_table[] = { |
||||
|
0x00, 0x07, 0x0e, 0x09, 0x1c, 0x1b, 0x12, 0x15, 0x38, 0x3f, 0x36, 0x31, |
||||
|
0x24, 0x23, 0x2a, 0x2d, 0x70, 0x77, 0x7e, 0x79, 0x6c, 0x6b, 0x62, 0x65, |
||||
|
0x48, 0x4f, 0x46, 0x41, 0x54, 0x53, 0x5a, 0x5d, 0xe0, 0xe7, 0xee, 0xe9, |
||||
|
0xfc, 0xfb, 0xf2, 0xf5, 0xd8, 0xdf, 0xd6, 0xd1, 0xc4, 0xc3, 0xca, 0xcd, |
||||
|
0x90, 0x97, 0x9e, 0x99, 0x8c, 0x8b, 0x82, 0x85, 0xa8, 0xaf, 0xa6, 0xa1, |
||||
|
0xb4, 0xb3, 0xba, 0xbd, 0xc7, 0xc0, 0xc9, 0xce, 0xdb, 0xdc, 0xd5, 0xd2, |
||||
|
0xff, 0xf8, 0xf1, 0xf6, 0xe3, 0xe4, 0xed, 0xea, 0xb7, 0xb0, 0xb9, 0xbe, |
||||
|
0xab, 0xac, 0xa5, 0xa2, 0x8f, 0x88, 0x81, 0x86, 0x93, 0x94, 0x9d, 0x9a, |
||||
|
0x27, 0x20, 0x29, 0x2e, 0x3b, 0x3c, 0x35, 0x32, 0x1f, 0x18, 0x11, 0x16, |
||||
|
0x03, 0x04, 0x0d, 0x0a, 0x57, 0x50, 0x59, 0x5e, 0x4b, 0x4c, 0x45, 0x42, |
||||
|
0x6f, 0x68, 0x61, 0x66, 0x73, 0x74, 0x7d, 0x7a, 0x89, 0x8e, 0x87, 0x80, |
||||
|
0x95, 0x92, 0x9b, 0x9c, 0xb1, 0xb6, 0xbf, 0xb8, 0xad, 0xaa, 0xa3, 0xa4, |
||||
|
0xf9, 0xfe, 0xf7, 0xf0, 0xe5, 0xe2, 0xeb, 0xec, 0xc1, 0xc6, 0xcf, 0xc8, |
||||
|
0xdd, 0xda, 0xd3, 0xd4, 0x69, 0x6e, 0x67, 0x60, 0x75, 0x72, 0x7b, 0x7c, |
||||
|
0x51, 0x56, 0x5f, 0x58, 0x4d, 0x4a, 0x43, 0x44, 0x19, 0x1e, 0x17, 0x10, |
||||
|
0x05, 0x02, 0x0b, 0x0c, 0x21, 0x26, 0x2f, 0x28, 0x3d, 0x3a, 0x33, 0x34, |
||||
|
0x4e, 0x49, 0x40, 0x47, 0x52, 0x55, 0x5c, 0x5b, 0x76, 0x71, 0x78, 0x7f, |
||||
|
0x6a, 0x6d, 0x64, 0x63, 0x3e, 0x39, 0x30, 0x37, 0x22, 0x25, 0x2c, 0x2b, |
||||
|
0x06, 0x01, 0x08, 0x0f, 0x1a, 0x1d, 0x14, 0x13, 0xae, 0xa9, 0xa0, 0xa7, |
||||
|
0xb2, 0xb5, 0xbc, 0xbb, 0x96, 0x91, 0x98, 0x9f, 0x8a, 0x8d, 0x84, 0x83, |
||||
|
0xde, 0xd9, 0xd0, 0xd7, 0xc2, 0xc5, 0xcc, 0xcb, 0xe6, 0xe1, 0xe8, 0xef, |
||||
|
0xfa, 0xfd, 0xf4, 0xf3 |
||||
|
}; |
||||
|
|
||||
|
uint8_t CRC8_Calc (uint8_t *p, uint8_t len) |
||||
|
{ |
||||
|
uint16_t i; |
||||
|
uint16_t crc = 0x0; |
||||
|
|
||||
|
while (len--) { |
||||
|
i = (crc ^ *p++) & 0xFF; |
||||
|
crc = (crc_table[i] ^ (crc << 8)) & 0xFF; |
||||
|
} |
||||
|
|
||||
|
return (crc & 0xFF); |
||||
|
} |
||||
|
|
||||
|
/*******************************************************************************
|
||||
|
* 名 称: bsp_Mlx90615Init |
||||
|
* 功 能: Mlx90615传感器的初始化 |
||||
|
* 入口参数: 无 |
||||
|
* 出口参数: 无 |
||||
|
* 作 者: Roger-WY. |
||||
|
* 创建日期: 2018-08-08 |
||||
|
* 修 改: |
||||
|
* 修改日期: |
||||
|
* 备 注: |
||||
|
*******************************************************************************/ |
||||
|
int8_t bsp_Mlx90615Init(void) |
||||
|
{ |
||||
|
int8_t ucError = 0; |
||||
|
|
||||
|
Mlx90615_InitI2C(); |
||||
|
|
||||
|
return (ucError); |
||||
|
|
||||
|
} |
||||
|
|
||||
|
int8_t bsp_Mlx90615WriteReg(uint8_t devAddr, uint8_t regAddr, uint16_t data) |
||||
|
{ |
||||
|
uint8_t ucAck = 0; |
||||
|
uint8_t i = 0; |
||||
|
uint8_t crcSendBuffer[5] = {0x00,0x00,0x00,0x00,0x00}; //used to save the data to send
|
||||
|
|
||||
|
crcSendBuffer[0] = devAddr << 1; |
||||
|
crcSendBuffer[1] = regAddr; |
||||
|
crcSendBuffer[2] = (uint8_t)data; |
||||
|
crcSendBuffer[3] = (uint8_t)(data >> 8); |
||||
|
crcSendBuffer[4] = CRC8_Calc(crcSendBuffer,4); |
||||
|
|
||||
|
Mlx90615_i2c_Start(); |
||||
|
|
||||
|
for(i = 0; i < 5; i++) |
||||
|
{ |
||||
|
Mlx90615_i2c_SendByte(crcSendBuffer[i]); |
||||
|
ucAck = Mlx90615_i2c_WaitAck(); |
||||
|
if(ucAck) { /* 如果Mlx90615,没有应答 */ |
||||
|
goto cmd_fail; /* 器件无应答 */ |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
/* 发送I2C总线停止信号 */ |
||||
|
Mlx90615_i2c_Stop(); |
||||
|
return 0; /* 执行成功 */ |
||||
|
|
||||
|
cmd_fail: /* 命令执行失败后,切记发送停止信号,避免影响I2C总线上其他设备 */ |
||||
|
/* 发送I2C总线停止信号 */ |
||||
|
Mlx90615_i2c_Stop(); |
||||
|
return -1; |
||||
|
|
||||
|
} |
||||
|
|
||||
|
int8_t bsp_Mlx90615ReadReg(uint8_t devAddr, uint8_t regAddr,uint16_t *pReadData) |
||||
|
{ |
||||
|
uint8_t ucAck = 0; |
||||
|
uint8_t ValBuf[6] = {0}; |
||||
|
uint8_t prcRegVal = 0; |
||||
|
|
||||
|
ValBuf[0] = devAddr << 1; |
||||
|
ValBuf[1] = regAddr; |
||||
|
ValBuf[2] = (devAddr << 1) | 0x01; |
||||
|
|
||||
|
|
||||
|
Mlx90615_i2c_Start(); |
||||
|
Mlx90615_i2c_SendByte(ValBuf[0]); |
||||
|
ucAck = Mlx90615_i2c_WaitAck(); |
||||
|
if(ucAck) { /* 如果LM75X,没有应答 */ |
||||
|
goto cmd_fail; /* 器件无应答 */ |
||||
|
} |
||||
|
Mlx90615_i2c_SendByte(ValBuf[1]); |
||||
|
ucAck = Mlx90615_i2c_WaitAck(); |
||||
|
if(ucAck) { /* 如果LM75X,没有应答 */ |
||||
|
goto cmd_fail; /* 器件无应答 */ |
||||
|
} |
||||
|
//------------------------------------------------------------------------//
|
||||
|
Mlx90615_i2c_Start(); |
||||
|
Mlx90615_i2c_SendByte(ValBuf[2]); |
||||
|
ucAck = Mlx90615_i2c_WaitAck(); |
||||
|
if(ucAck) { /* 如果LM75X,没有应答 */ |
||||
|
goto cmd_fail; /* 器件无应答 */ |
||||
|
} |
||||
|
|
||||
|
ValBuf[3] = Mlx90615_i2c_ReadByte(); |
||||
|
Mlx90615_i2c_Ack(); |
||||
|
ValBuf[4] = Mlx90615_i2c_ReadByte(); |
||||
|
Mlx90615_i2c_Ack(); |
||||
|
ValBuf[5] = Mlx90615_i2c_ReadByte(); |
||||
|
Mlx90615_i2c_Ack(); |
||||
|
|
||||
|
/* 发送I2C总线停止信号 */ |
||||
|
Mlx90615_i2c_Stop(); |
||||
|
|
||||
|
prcRegVal = CRC8_Calc(ValBuf,5); |
||||
|
if(prcRegVal == ValBuf[5]) |
||||
|
{ |
||||
|
*pReadData = (ValBuf[4] << 8) + ValBuf[3]; |
||||
|
return 0; /* 执行成功 */ |
||||
|
} |
||||
|
else |
||||
|
{ |
||||
|
return -2; //校验不正确
|
||||
|
} |
||||
|
|
||||
|
cmd_fail: /* 命令执行失败后,切记发送停止信号,避免影响I2C总线上其他设备 */ |
||||
|
/* 发送I2C总线停止信号 */ |
||||
|
Mlx90615_i2c_Stop(); |
||||
|
return -1; |
||||
|
} |
||||
|
|
||||
|
/* 读取环境温度 */ |
||||
|
int8_t bsp_Mlx90615ReadTempAmbient(uint8_t slaveAddr, float *ao) |
||||
|
{ |
||||
|
int8_t ret = 0; |
||||
|
uint16_t data = 0; |
||||
|
|
||||
|
ret = bsp_Mlx90615ReadReg(slaveAddr,MLX90615_AMBIENT_TEMPERATURE,&data); |
||||
|
|
||||
|
if( 0 == ret) |
||||
|
{ |
||||
|
*ao = (data * 0.02) - 273.15; |
||||
|
} |
||||
|
else |
||||
|
{ |
||||
|
*ao = MLX90615_TEMP_READ_ERR_CODE; |
||||
|
} |
||||
|
|
||||
|
return ret; |
||||
|
} |
||||
|
|
||||
|
/* 读取目标温度 */ |
||||
|
int8_t bsp_Mlx90615ReadTempObject(uint8_t slaveAddr, float *to) |
||||
|
{ |
||||
|
int8_t ret = 0; |
||||
|
uint16_t data = 0; |
||||
|
|
||||
|
ret = bsp_Mlx90615ReadReg(slaveAddr,MLX90615_OBJECT_TEMPERATURE,&data); |
||||
|
if( 0 == ret) |
||||
|
{ |
||||
|
*to = (data * 0.02) - 273.15; |
||||
|
} |
||||
|
else |
||||
|
{ |
||||
|
*to = MLX90615_TEMP_READ_ERR_CODE; |
||||
|
} |
||||
|
|
||||
|
return ret; |
||||
|
} |
||||
|
|
||||
|
int8_t bsp_Mlx90615ReadIrData(uint8_t slaveAddr, uint16_t *ir) |
||||
|
{ |
||||
|
int8_t ret = 0; |
||||
|
uint16_t data = 0; |
||||
|
ret = bsp_Mlx90615ReadReg(slaveAddr,MLX90615_RAW_IR_DATA,&data); |
||||
|
if(ret == 0) |
||||
|
{ |
||||
|
*ir = data; |
||||
|
} |
||||
|
else |
||||
|
{ |
||||
|
*ir = (uint16_t)MLX90615_TEMP_READ_ERR_CODE; |
||||
|
} |
||||
|
return (ret); |
||||
|
} |
||||
|
|
||||
|
int8_t bsp_Mlx90615ReadEmissivity(uint8_t slaveAddr, float *emissivity) |
||||
|
{ |
||||
|
int8_t ret = 0; |
||||
|
uint16_t data = 0; |
||||
|
ret = bsp_Mlx90615ReadReg(slaveAddr,MLX90615_EEPROM_EMISSIVITY,&data); |
||||
|
|
||||
|
if(data < 32768) |
||||
|
{ |
||||
|
*emissivity = (float)data / 0x4000; |
||||
|
} |
||||
|
else |
||||
|
{ |
||||
|
*emissivity = (32768 - (float)data) / 0x4000; |
||||
|
} |
||||
|
|
||||
|
return (ret); |
||||
|
} |
||||
|
|
||||
|
int8_t bsp_Mlx90615SetEmissivity(uint8_t slaveAddr, float emissivity) |
||||
|
{ |
||||
|
int8_t ret = 0; |
||||
|
uint16_t newE = 0; |
||||
|
|
||||
|
float temp = 0; |
||||
|
|
||||
|
if(emissivity > 1.0 || emissivity < 0.05) |
||||
|
{ |
||||
|
return -6; |
||||
|
} |
||||
|
|
||||
|
temp = emissivity * 0x4000 + 0.5; |
||||
|
newE = (uint16_t)temp; |
||||
|
|
||||
|
ret = bsp_Mlx90615WriteReg(slaveAddr, MLX90615_EEPROM_EMISSIVITY, 0x0000); |
||||
|
|
||||
|
if(ret == 0) |
||||
|
{ |
||||
|
ret = bsp_Mlx90615WriteReg(slaveAddr, MLX90615_EEPROM_EMISSIVITY, newE); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
return (ret); |
||||
|
} |
||||
|
|
||||
|
/***************************** (END OF FILE) **********************************/ |
||||
|
|
||||
|
|
||||
|
|
||||
|
内部配置: |
||||
|
|
||||
|
1)MLX90615只有3V供电,而MLX90614则有5V和3V选项; |
||||
|
|
||||
|
2)MLX90615只集成了IIR数字滤波,MLX90614同时集成FIR和IIR滤波; |
||||
|
|
||||
|
3)SMBus地址不兼容,MLX90615出厂设置为0x5B,而MLX90614为0x5B; |
||||
|
|
||||
|
4)PWM频率,MLX90615可选为10Hz或者1kHz,而MLX90614是在1Hz和1kHz之间支持编程调节; |
||||
|
|
||||
|
5)两者在对RAM和EEPROM进行操作时,其操作指令不同,开发者在两者切换时需要注意; |
||||
|
|
||||
|
6)唤醒指令脉冲施加引脚不同,MLX90615在SCL脚,而MLX90614在SDA脚。 |
||||
|
|
||||
|
#endif |
||||
|
|
||||
|
|
||||
|
#if 0 |
||||
|
|
||||
|
|
||||
|
|
||||
|
#include "intrins.h" |
||||
|
|
||||
|
|
||||
|
|
||||
|
##define SA 0x00 // Slave address
|
||||
|
#define DEFAULT_SA 0x5B // Default Slave address
|
||||
|
#define RAM_Access 0x20 // RAM access command
|
||||
|
#define EEPROM_Access 0x10 // EEPROM access command
|
||||
|
#define RAM_Ta 0x06 // Ta address in the ram
|
||||
|
#define RAM_To 0x07 // To address in the ram
|
||||
|
|
||||
|
#define _NOP() _nop_() |
||||
|
|
||||
|
// 5us
|
||||
|
void delay_Tbuf() |
||||
|
{ |
||||
|
unsigned char a, b; |
||||
|
for ( b = 1; b > 0; b-- ) |
||||
|
for ( a = 1; a > 0; a-- ); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
void delay_Thd() |
||||
|
{ |
||||
|
_nop_(); |
||||
|
} |
||||
|
|
||||
|
void MLX90615_init ( void ) |
||||
|
{ |
||||
|
mSDA_OUT; // Set SDA as Output
|
||||
|
mSCL_OUT; // Set SCL as Output
|
||||
|
mSDA_HIGH(); // bus free
|
||||
|
mSCL_HIGH(); |
||||
|
} |
||||
|
|
||||
|
void START_bit ( void ) |
||||
|
{ |
||||
|
mSDA_OUT; |
||||
|
mSDA_HIGH(); // Set SDA line
|
||||
|
delay_Tbuf(); // Wait a few microseconds
|
||||
|
mSCL_HIGH(); // Set SCL line
|
||||
|
delay_Tbuf(); // Generate bus free time between Stop
|
||||
|
// and Start condition (Tbuf=4.7us min)
|
||||
|
mSDA_LOW(); // Clear SDA line
|
||||
|
delay_Tbuf(); // Hold time after (Repeated) Start
|
||||
|
// Condition. After this period, the first clock is generated.
|
||||
|
//(Thd:sta=4.0us min)
|
||||
|
mSCL_LOW(); // Clear SCL line
|
||||
|
delay_Tbuf(); // Wait a few microseconds
|
||||
|
} |
||||
|
|
||||
|
void STOP_bit ( void ) |
||||
|
{ |
||||
|
mSDA_OUT; |
||||
|
mSCL_LOW(); // Clear SCL line
|
||||
|
delay_Tbuf(); // Wait a few microseconds
|
||||
|
mSDA_LOW(); // Clear SDA line
|
||||
|
delay_Tbuf(); // Wait a few microseconds
|
||||
|
mSCL_HIGH(); // Set SCL line
|
||||
|
delay_Tbuf(); // Stop condition setup time(Tsu:sto=4.0us min)
|
||||
|
mSDA_HIGH(); // Set SDA line
|
||||
|
} |
||||
|
|
||||
|
unsigned char TX_byte ( unsigned char Tx_buffer ) |
||||
|
{ |
||||
|
unsigned char Bit_counter; |
||||
|
unsigned char Ack_bit; |
||||
|
unsigned char bit_out; |
||||
|
|
||||
|
for ( Bit_counter = 8; Bit_counter; Bit_counter-- ) |
||||
|
{ |
||||
|
if ( Tx_buffer & 0x80 ) |
||||
|
bit_out = 1; // If the current bit of Tx_buffer is 1 set bit_out
|
||||
|
else |
||||
|
bit_out = 0; // else clear bit_out
|
||||
|
|
||||
|
send_bit ( bit_out ); // Send the current bit on SDA
|
||||
|
Tx_buffer <<= 1; // Get next bit for checking
|
||||
|
} |
||||
|
|
||||
|
Ack_bit = Receive_bit(); // Get acknowledgment bit
|
||||
|
|
||||
|
return Ack_bit; |
||||
|
}// End of TX_bite()
|
||||
|
|
||||
|
unsigned char RX_byte ( unsigned char ack_nack ) |
||||
|
{ |
||||
|
unsigned char RX_buffer; |
||||
|
unsigned char Bit_Counter; |
||||
|
|
||||
|
for ( Bit_Counter = 8; Bit_Counter; Bit_Counter-- ) |
||||
|
{ |
||||
|
if ( Receive_bit() ) // Get a bit from the SDA line
|
||||
|
{ |
||||
|
RX_buffer <<= 1; // If the bit is HIGH save 1 in RX_buffer
|
||||
|
RX_buffer |= 0x01; |
||||
|
} |
||||
|
else |
||||
|
{ |
||||
|
RX_buffer <<= 1; // If the bit is LOW save 0 in RX_buffer
|
||||
|
RX_buffer &= 0xfe; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
send_bit ( ack_nack ); // Sends acknowledgment bit
|
||||
|
|
||||
|
return RX_buffer; |
||||
|
} |
||||
|
|
||||
|
//---------------------------------------------------------------------------------------------
|
||||
|
void send_bit ( unsigned char bit_out ) |
||||
|
{ |
||||
|
mSDA_OUT; |
||||
|
if ( bit_out ) |
||||
|
mSDA_HIGH(); |
||||
|
else |
||||
|
mSDA_LOW(); |
||||
|
|
||||
|
delay_Thd(); // Tsu:dat = 250ns minimum
|
||||
|
|
||||
|
mSCL_HIGH(); // Set SCL line
|
||||
|
delay_Tbuf(); // High Level of Clock Pulse------------------
|
||||
|
mSCL_LOW(); // Clear SCL line
|
||||
|
delay_Tbuf(); // Low Level of Clock Pulse----------------------
|
||||
|
// mSDA_HIGH(); // Master release SDA line ,
|
||||
|
|
||||
|
return; |
||||
|
}//End of send_bit()
|
||||
|
//---------------------------------------------------------------------------------------------
|
||||
|
|
||||
|
unsigned char Receive_bit ( void ) |
||||
|
{ |
||||
|
unsigned char Ack_bit; |
||||
|
|
||||
|
mSDA_IN; // SDA-input
|
||||
|
_NOP(); |
||||
|
_NOP(); |
||||
|
_NOP(); |
||||
|
mSCL_HIGH(); // Set SCL line
|
||||
|
delay_Tbuf(); // High Level of Clock Pulse
|
||||
|
// if(P2Input(BIT2))
|
||||
|
SDA = 1; |
||||
|
if ( SDA ) |
||||
|
Ack_bit = 1; // \ Read acknowledgment bit, save it in Ack_bit
|
||||
|
else |
||||
|
Ack_bit = 0; // /
|
||||
|
mSCL_LOW(); // Clear SCL line
|
||||
|
delay_Tbuf(); // Low Level of Clock Pulse
|
||||
|
|
||||
|
return Ack_bit; |
||||
|
}//End of Receive_bit
|
||||
|
|
||||
|
unsigned int MemRead ( unsigned char SlaveAddress, unsigned char command ) |
||||
|
{ |
||||
|
unsigned int tdata; // Data storage (DataH:DataL)
|
||||
|
unsigned char Pec; // PEC byte storage
|
||||
|
unsigned char DataL; // Low data byte storage
|
||||
|
unsigned char DataH; // High data byte storage
|
||||
|
unsigned char arr[6]; // Buffer for the sent bytes
|
||||
|
unsigned char PecReg; // Calculated PEC byte storage
|
||||
|
unsigned char ErrorCounter; // Defines the number of the attempts for communication with MLX90614
|
||||
|
|
||||
|
ErrorCounter = 0x00; // Initialising of ErrorCounter
|
||||
|
|
||||
|
do |
||||
|
{ |
||||
|
repeat: |
||||
|
STOP_bit(); //If slave send NACK stop comunication
|
||||
|
--ErrorCounter; //Pre-decrement ErrorCounter
|
||||
|
if ( !ErrorCounter ) //ErrorCounter=0?
|
||||
|
{ |
||||
|
break; //Yes,go out from do-while{}
|
||||
|
} |
||||
|
START_bit(); //Start condition
|
||||
|
|
||||
|
if ( TX_byte ( SlaveAddress ) ) //Send SlaveAddress
|
||||
|
{ |
||||
|
goto repeat; //Repeat comunication again
|
||||
|
} |
||||
|
|
||||
|
if ( TX_byte ( command ) ) //Send command
|
||||
|
{ |
||||
|
goto repeat; //Repeat comunication again
|
||||
|
} |
||||
|
START_bit(); //Repeated Start condition
|
||||
|
|
||||
|
if ( TX_byte ( SlaveAddress ) ) //Send SlaveAddress-------------------???
|
||||
|
{ |
||||
|
goto repeat; //Repeat comunication again
|
||||
|
} |
||||
|
|
||||
|
DataL = RX_byte ( ACK ); //Read low data,master must send ACK
|
||||
|
DataH = RX_byte ( ACK ); //Read high data,master must send ACK
|
||||
|
Pec = RX_byte ( NACK ); //Read PEC byte, master must send NACK
|
||||
|
STOP_bit(); //Stop condition
|
||||
|
|
||||
|
|
||||
|
arr[5] = SlaveAddress; //
|
||||
|
arr[4] = command; //
|
||||
|
arr[3] = SlaveAddress; //Load array arr
|
||||
|
arr[2] = DataL; //
|
||||
|
arr[1] = DataH; //
|
||||
|
arr[0] = 0; //
|
||||
|
PecReg = PEC_calculation ( arr ); //Calculate CRC
|
||||
|
// UART1_SendOneChar ( PecReg );
|
||||
|
// UART1_SendOneChar ( Pec );
|
||||
|
} |
||||
|
while ( PecReg != Pec ); //If received and calculated CRC are equal go out from do-while{}
|
||||
|
|
||||
|
* ( ( unsigned char * ) ( &tdata ) ) = DataH; //
|
||||
|
* ( ( unsigned char * ) ( &tdata ) + 1 ) = DataL; //data=DataH:DataL
|
||||
|
|
||||
|
return tdata; |
||||
|
} |
||||
|
|
||||
|
unsigned char PEC_calculation ( unsigned char pec[] ) |
||||
|
{ |
||||
|
unsigned char crc[6]; |
||||
|
unsigned char BitPosition = 47; |
||||
|
unsigned char shift; |
||||
|
unsigned char i; |
||||
|
unsigned char j; |
||||
|
unsigned char temp; |
||||
|
|
||||
|
do |
||||
|
{ |
||||
|
crc[5] = 0; /* Load CRC value 0x000000000107 */ |
||||
|
crc[4] = 0; |
||||
|
crc[3] = 0; |
||||
|
crc[2] = 0; |
||||
|
crc[1] = 0x01; |
||||
|
crc[0] = 0x07; |
||||
|
BitPosition = 47; /* Set maximum bit position at 47 */ |
||||
|
shift = 0; |
||||
|
|
||||
|
//Find first 1 in the transmited message
|
||||
|
i = 5; /* Set highest index */ |
||||
|
j = 0; |
||||
|
while ( ( pec[i]& ( 0x80 >> j ) ) == 0 && i > 0 ) |
||||
|
{ |
||||
|
BitPosition--; |
||||
|
if ( j < 7 ) |
||||
|
{ |
||||
|
j++; |
||||
|
} |
||||
|
else |
||||
|
{ |
||||
|
j = 0x00; |
||||
|
i--; |
||||
|
} |
||||
|
}/*End of while */ |
||||
|
|
||||
|
shift = BitPosition - 8; /*Get shift value for crc value*/ |
||||
|
|
||||
|
|
||||
|
//Shift crc value
|
||||
|
while ( shift ) |
||||
|
{ |
||||
|
for ( i = 5; i < 0xFF; i-- ) |
||||
|
{ |
||||
|
if ( ( crc[i-1] & 0x80 ) && ( i > 0 ) ) |
||||
|
{ |
||||
|
temp = 1; |
||||
|
} |
||||
|
else |
||||
|
{ |
||||
|
temp = 0; |
||||
|
} |
||||
|
crc[i] <<= 1; |
||||
|
crc[i] += temp; |
||||
|
}/*End of for*/ |
||||
|
shift--; |
||||
|
}/*End of while*/ |
||||
|
|
||||
|
|
||||
|
//Exclusive OR between pec and crc
|
||||
|
for ( i = 0; i <= 5; i++ ) |
||||
|
{ |
||||
|
pec[i] ^= crc[i]; |
||||
|
}/*End of for*/ |
||||
|
} |
||||
|
while ( BitPosition > 8 ); /*End of do-while*/ |
||||
|
|
||||
|
return pec[0]; |
||||
|
}/*End of PEC_calculation*/ |
||||
|
|
||||
|
#endif |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
@ -0,0 +1,90 @@ |
|||||
|
|
||||
|
|
||||
|
/*******************************************************************************
|
||||
|
* Filename: bsp_mlx90615.h |
||||
|
* Revised: All copyrights reserved to Roger. |
||||
|
* Date: 2022-05-04 |
||||
|
* Revision: v1.0 |
||||
|
* Writer: Roger-WY. |
||||
|
* |
||||
|
* Description: 非接触式红外温度传感器模块驱动(数字式) 头文件 |
||||
|
*******************************************************************************/ |
||||
|
#ifndef __BSP_MLX90615_H__ |
||||
|
#define __BSP_MLX90615_H__ |
||||
|
|
||||
|
#include "msp_iicMx.h"/////使用iic1 作为 |
||||
|
#include "c_type51.h"///// |
||||
|
|
||||
|
#include "stc_8_delay.h"///// |
||||
|
|
||||
|
|
||||
|
#define MLX90615_TEMP_READ_ERR_CODE -99 |
||||
|
|
||||
|
/* MLX90615 内部寄存器地址定义 */ |
||||
|
/* Private defines -----------------------------------------------------------*/ |
||||
|
/* DEFAULT SLAVE ADDRESS */ |
||||
|
#define MLX90615_ADDR 0x5B |
||||
|
#define MLX90615_ADDR_WR (MLX90615_ADDR << 1) |
||||
|
|
||||
|
|
||||
|
#define MLX90615_EEPROM_SA 0x10 |
||||
|
#define MLX90615_EEPROM_PWMT_MIN MLX90615_EEPROM_SA |
||||
|
#define MLX90615_EEPROM_PWMT_RNG 0x11 |
||||
|
#define MLX90615_EEPROM_CONFIG 0x12 |
||||
|
#define MLX90615_EEPROM_EMISSIVITY 0x13 |
||||
|
|
||||
|
#define MLX90615_RAW_IR_DATA 0x25 |
||||
|
#define MLX90615_AMBIENT_TEMPERATURE 0x26 |
||||
|
#define MLX90615_OBJECT_TEMPERATURE 0x27 |
||||
|
|
||||
|
#define MLX90615_SLEEP 0xC6 |
||||
|
|
||||
|
// DEPRECATED! (just emissivity, not the whole EEPROM)
|
||||
|
#define AccessEEPROM MLX90615_EEPROM_EMISSIVITY |
||||
|
|
||||
|
#define Default_Emissivity 0x4000 |
||||
|
|
||||
|
|
||||
|
|
||||
|
/* MLX90615 供外部调用函数 */ |
||||
|
u8 bsp_Mlx90615Init(void); |
||||
|
int8_t bsp_Mlx90615ScanDevice(uint8_t *pSlaveAddr); |
||||
|
int8_t bsp_Mlx90615ReadTempAmbient(uint8_t slaveAddr, float *ao); |
||||
|
int8_t bsp_Mlx90615ReadTempObject(uint8_t slaveAddr, float *to); |
||||
|
int8_t bsp_Mlx90615ReadIrData(uint8_t slaveAddr, uint16_t *ir); |
||||
|
int8_t bsp_Mlx90615ReadEmissivity(uint8_t slaveAddr, float *emissivity); |
||||
|
int8_t bsp_Mlx90615SetEmissivity(uint8_t slaveAddr, float emissivity); |
||||
|
|
||||
|
|
||||
|
#define L0_mlx95_wakeup() L0_IICMx_SCL(D_iicch_mlx96015,1);\ |
||||
|
delay_ms2(1);\ |
||||
|
L0_IICMx_SCL(D_iicch_mlx96015,0);\ |
||||
|
delay_ms2(40);\ |
||||
|
L0_IICMx_SCL(D_iicch_mlx96015,1); |
||||
|
|
||||
|
|
||||
|
typedef struct |
||||
|
{ |
||||
|
u8 d[12]; |
||||
|
u8 Object[3]; |
||||
|
u8 Ambient[3]; |
||||
|
u16 tmp; |
||||
|
/// u32 u32a;
|
||||
|
u16 u16b; |
||||
|
u16 u16t; |
||||
|
u16 u16out_o;///目标温度 放大100倍
|
||||
|
|
||||
|
u16 u16out_a;///环境温度 放大100倍
|
||||
|
}TS_mx95_; |
||||
|
extern TS_mx95_ ts_mx95; |
||||
|
|
||||
|
|
||||
|
void L1_mlx95_get_tmp(void); |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
#endif |
||||
|
/***************************** (END OF FILE) **********************************/ |
||||
|
|
||||
@ -0,0 +1,159 @@ |
|||||
|
#include "SL_Sc7a20_FreeFall_Driver.h" |
||||
|
|
||||
|
|
||||
|
|
||||
|
/***************在线测试**********************/ |
||||
|
signed char SL_SC7A20_Online_Test(void) |
||||
|
{ |
||||
|
unsigned char SL_Read_Reg=0xff; |
||||
|
SL_SC7A20_I2c_Spi_Read(SL_SC7A20_SPI_IIC_MODE,0x0F,1, &SL_Read_Reg); |
||||
|
if(SL_Read_Reg==SC7A20_CHIP_ID_VALUE) return 1; |
||||
|
else return -1; |
||||
|
} |
||||
|
|
||||
|
/***************BOOT 重载内部寄存器值*********************/ |
||||
|
signed char SL_SC7A20_BOOT(void) |
||||
|
{ |
||||
|
unsigned char SL_Read_Reg=0xff; |
||||
|
SL_SC7A20_I2c_Spi_Read(SL_SC7A20_SPI_IIC_MODE,0x24,1, &SL_Read_Reg); |
||||
|
SL_Read_Reg=SL_SC7A20_BOOT_ENABLE|SL_Read_Reg; |
||||
|
SL_SC7A20_I2c_Spi_Write(SL_SC7A20_SPI_IIC_MODE,0x24, SL_Read_Reg); |
||||
|
return 1; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
/***************传感器量程设置**********************/ |
||||
|
signed char SL_SC7A20_FS_Config(unsigned char Sc7a20_FS_Reg) |
||||
|
{ |
||||
|
unsigned char SL_Read_Reg=0xff,SL_Write_Reg; |
||||
|
SL_SC7A20_I2c_Spi_Read(SL_SC7A20_SPI_IIC_MODE,0x23,1, &SL_Read_Reg); |
||||
|
// SL_Write_Reg=0x80|Sc7a20_FS_Reg|SL_SC7A20_HR_ENABLE;
|
||||
|
SL_Write_Reg=0x80|Sc7a20_FS_Reg; |
||||
|
SL_SC7A20_I2c_Spi_Write(SL_SC7A20_SPI_IIC_MODE,0x23, SL_Write_Reg); |
||||
|
SL_SC7A20_I2c_Spi_Read(SL_SC7A20_SPI_IIC_MODE,0x23,1, &SL_Read_Reg); |
||||
|
if(SL_Read_Reg==SL_Write_Reg) return 1; |
||||
|
else return -1; |
||||
|
} |
||||
|
|
||||
|
/***************数据更新速率**加速度计使能**********/ |
||||
|
signed char SL_SC7A20_Power_Config(unsigned char Power_Config_Reg) |
||||
|
{ |
||||
|
unsigned char SL_Read_Reg; |
||||
|
|
||||
|
#if SL_SC7A20_MTP_ENABLE == 0X01 |
||||
|
SL_Read_Reg = 0x00; |
||||
|
SL_SC7A20_I2c_Spi_Write(SL_SC7A20_SPI_IIC_MODE,0x1E, SL_SC7A20_MTP_VALUE); |
||||
|
SL_SC7A20_I2c_Spi_Read(SL_SC7A20_SPI_IIC_MODE,0x57,1, &SL_Read_Reg); |
||||
|
SL_Read_Reg=SL_Read_Reg|SL_SC7A20_SDO_PU_MSK|SL_SC7A20_I2C_PU_MSK; |
||||
|
SL_SC7A20_I2c_Spi_Write(SL_SC7A20_SPI_IIC_MODE,0x57, SL_Read_Reg); |
||||
|
#endif |
||||
|
SL_Read_Reg = 0xff; |
||||
|
SL_SC7A20_I2c_Spi_Write(SL_SC7A20_SPI_IIC_MODE,0x20, Power_Config_Reg); |
||||
|
SL_SC7A20_I2c_Spi_Read(SL_SC7A20_SPI_IIC_MODE,0x20,1, &SL_Read_Reg); |
||||
|
|
||||
|
if(SL_Read_Reg==Power_Config_Reg) return 1; |
||||
|
else return -1; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
/***************数据更新速率**加速度计使能**********/ |
||||
|
signed char SL_SC7A20_FreeFall_Config(void) |
||||
|
{ |
||||
|
unsigned char SL_Read_Reg; |
||||
|
|
||||
|
SL_SC7A20_I2c_Spi_Read(SL_SC7A20_SPI_IIC_MODE,0x24,1, &SL_Read_Reg); |
||||
|
SL_Read_Reg=0x80|SL_Read_Reg;//AOI1 LATCH
|
||||
|
SL_SC7A20_I2c_Spi_Write(SL_SC7A20_SPI_IIC_MODE,0x24, SL_Read_Reg); |
||||
|
|
||||
|
SL_SC7A20_I2c_Spi_Write(SL_SC7A20_SPI_IIC_MODE,0x22, 0x40);//AOI1 映射到INT1
|
||||
|
SL_SC7A20_I2c_Spi_Write(SL_SC7A20_SPI_IIC_MODE,0x25, 0x02);//INT1 默认高电平,有中断输出低电平
|
||||
|
|
||||
|
//FreeFall AOI1
|
||||
|
SL_SC7A20_I2c_Spi_Write(SL_SC7A20_SPI_IIC_MODE,0x30, 0x95); |
||||
|
SL_SC7A20_I2c_Spi_Write(SL_SC7A20_SPI_IIC_MODE,0x32, 0x19); |
||||
|
SL_SC7A20_I2c_Spi_Write(SL_SC7A20_SPI_IIC_MODE,0x33, 0x04); |
||||
|
|
||||
|
SL_SC7A20_I2c_Spi_Read(SL_SC7A20_SPI_IIC_MODE,0x30,1, &SL_Read_Reg); |
||||
|
|
||||
|
if(SL_Read_Reg==0x95) return 1; |
||||
|
else return -1; |
||||
|
} |
||||
|
|
||||
|
#if SL_SC7A20_16BIT_8BIT==0 |
||||
|
/***************加速度计数据读取*8bits*********/ |
||||
|
signed char SL_SC7A20_Read_XYZ_Data(signed char *SL_SC7A20_Data_XYZ_Buf) |
||||
|
{ |
||||
|
unsigned char SL_Read_Buf[7]; |
||||
|
|
||||
|
SL_SC7A20_I2c_Spi_Read(SL_SC7A20_SPI_IIC_MODE,SL_SC7A20_STATUS_REG,1, &SL_Read_Buf[0]); |
||||
|
|
||||
|
if((SL_Read_Buf[0]&0x0f)==0x0f) |
||||
|
{ |
||||
|
#if SL_SC7A20_SPI_IIC_MODE ==1//IIC
|
||||
|
SL_SC7A20_I2c_Spi_Read(SL_SC7A20_SPI_IIC_MODE,SL_SC7A20_DATA_OUT,6, &SL_Read_Buf[1]); |
||||
|
#elif SL_SC7A20_SPI_IIC_MODE ==0//SPI
|
||||
|
SL_SC7A20_I2c_Spi_Read(SL_SC7A20_SPI_IIC_MODE,SL_SC7A20_STATUS_REG,7, &SL_Read_Buf[0]); |
||||
|
#endif |
||||
|
SL_SC7A20_Data_XYZ_Buf[0]=(signed char)SL_Read_Buf[2]; |
||||
|
SL_SC7A20_Data_XYZ_Buf[1]=(signed char)SL_Read_Buf[4]; |
||||
|
SL_SC7A20_Data_XYZ_Buf[2]=(signed char)SL_Read_Buf[6]; |
||||
|
return 1; |
||||
|
} |
||||
|
else |
||||
|
{ |
||||
|
return 0; |
||||
|
} |
||||
|
} |
||||
|
#elif SL_SC7A20_16BIT_8BIT==1 |
||||
|
/***************加速度计数据读取*16bits*********/ |
||||
|
signed char SL_SC7A20_Read_XYZ_Data(signed short *SL_SC7A20_Data_XYZ_Buf) |
||||
|
{ |
||||
|
unsigned char SL_Read_Buf[7]; |
||||
|
|
||||
|
SL_SC7A20_I2c_Spi_Read(SL_SC7A20_SPI_IIC_MODE,SL_SC7A20_STATUS_REG,1, &SL_Read_Buf[0]); |
||||
|
|
||||
|
if((SL_Read_Buf[0]&0x0f)==0x0f) |
||||
|
{ |
||||
|
#if SL_SC7A20_SPI_IIC_MODE ==1//IIC
|
||||
|
SL_SC7A20_I2c_Spi_Read(SL_SC7A20_SPI_IIC_MODE,SL_SC7A20_DATA_OUT,6, &SL_Read_Buf[1]); |
||||
|
#elif SL_SC7A20_SPI_IIC_MODE ==0//SPI
|
||||
|
SL_SC7A20_I2c_Spi_Read(SL_SC7A20_SPI_IIC_MODE,SL_SC7A20_STATUS_REG,7, &SL_Read_Buf[0]); |
||||
|
#endif |
||||
|
SL_SC7A20_Data_XYZ_Buf[0]=(signed short)((SL_Read_Buf[2]<<8) + SL_Read_Buf[1]); |
||||
|
SL_SC7A20_Data_XYZ_Buf[1]=(signed short)((SL_Read_Buf[4]<<8) + SL_Read_Buf[3]); |
||||
|
SL_SC7A20_Data_XYZ_Buf[2]=(signed short)((SL_Read_Buf[6]<<8) + SL_Read_Buf[5]); |
||||
|
return 1; |
||||
|
} |
||||
|
else |
||||
|
{ |
||||
|
return 0; |
||||
|
} |
||||
|
} |
||||
|
#endif |
||||
|
|
||||
|
//自由落体检测
|
||||
|
signed char SL_SC7A20_Freefall_Status(void) |
||||
|
{ |
||||
|
unsigned char sl_freefall_reg; |
||||
|
|
||||
|
SL_SC7A20_I2c_Spi_Read(SL_SC7A20_SPI_IIC_MODE, 0x31,1, &sl_freefall_reg); |
||||
|
//USART_printf( USART1, "SL_reg31:%x!\r\n",sl_freefall_reg);
|
||||
|
if((sl_freefall_reg&0x40)==0x40) |
||||
|
{ |
||||
|
return 1;//自由落体成立
|
||||
|
} |
||||
|
|
||||
|
return 0;//自由落体不成立
|
||||
|
} |
||||
|
|
||||
|
|
||||
|
signed char SL_SC7A20_Power_Down(void)//power down
|
||||
|
{ |
||||
|
unsigned char SL_Read_Reg = 0xff; |
||||
|
SL_SC7A20_I2c_Spi_Write(SL_SC7A20_SPI_IIC_MODE, 0x20, 0x00); |
||||
|
SL_SC7A20_I2c_Spi_Read(SL_SC7A20_SPI_IIC_MODE, 0x20,1, &SL_Read_Reg); |
||||
|
if(SL_Read_Reg==0x00) return 1; |
||||
|
else return -1; |
||||
|
} |
||||
|
|
||||
|
|
||||
Binary file not shown.
@ -0,0 +1,34 @@ |
|||||
|
////////////////////////////////////////////////////////////////////////////
|
||||
|
///@copyright Copyright (c) 2018, ´«¿Ø¿Æ¼¼ All rights reserved.
|
||||
|
///-------------------------------------------------------------------------
|
||||
|
/// @file APP_433.c
|
||||
|
/// @brief APP_POWER driver app µçÔ´¹ÜÀí
|
||||
|
|
||||
|
///-------------------------------------------------------------------------
|
||||
|
/// @version 1.0
|
||||
|
/// @author CC
|
||||
|
/// @date 20181010
|
||||
|
/// @note cc_AS_stc01
|
||||
|
//////////////////////////////////////////////////////////////////////////////
|
||||
|
|
||||
|
|
||||
|
|
||||
|
/******************************************************************************/ |
||||
|
/***************************** Include Files **********************************/ |
||||
|
/******************************************************************************/ |
||||
|
//#include "app_Gsensor.h"
|
||||
|
|
||||
|
#include "bsp_433.h" |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
////L0_uart0_sendArray( (unsigned char *)&TS_paer_value,5);
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
@ -0,0 +1,19 @@ |
|||||
|
////////////////////////////////////////////////////////////////////////////
|
||||
|
///@copyright Copyright (c) 2018, ´«¿Ø¿Æ¼¼ All rights reserved.
|
||||
|
///-------------------------------------------------------------------------
|
||||
|
/// @file APP_433.c
|
||||
|
/// @brief APP_POWER driver app µçÔ´¹ÜÀí
|
||||
|
|
||||
|
///-------------------------------------------------------------------------
|
||||
|
/// @version 1.0
|
||||
|
/// @author CC
|
||||
|
/// @date 20181010
|
||||
|
/// @note cc_AS_stc01
|
||||
|
//////////////////////////////////////////////////////////////////////////////
|
||||
|
|
||||
|
|
||||
|
#ifndef _BSP_433_H |
||||
|
#define _BSP_433_H |
||||
|
#include "../msp/uart0.h" |
||||
|
#endif // #ifndef _BSP_433_H
|
||||
|
|
||||
@ -0,0 +1,574 @@ |
|||||
|
////////////////////////////////////////////////////////////////////////////
|
||||
|
///@copyright Copyright (c) 2018, 传控科技 All rights reserved.
|
||||
|
///-------------------------------------------------------------------------
|
||||
|
/// @file bsp_gc6133.c.c
|
||||
|
/// @brief bsp @ driver config
|
||||
|
///-------------------------------------------------------------------------
|
||||
|
/// @version 1.0
|
||||
|
/// @author CC
|
||||
|
/// @date 20180331
|
||||
|
/// @note cc_AS_stc02
|
||||
|
//////////////////////////////////////////////////////////////////////////////
|
||||
|
|
||||
|
#include "Bsp_debug.h" |
||||
|
#include "bsp_func.h" |
||||
|
#include "bsp_power.h" |
||||
|
#include "bsp_cam_isr.h" |
||||
|
#include "bsp_cam.h" |
||||
|
#include "../msp/uart0.h" |
||||
|
#include "cw63xx.h" |
||||
|
#include "../clib/Clib.h" |
||||
|
#include "../clib/bit.h" |
||||
|
#include "../msp/time.h" |
||||
|
|
||||
|
TS_P_rf433 TS_paer_value= |
||||
|
{ |
||||
|
0xaa,///vU8 ha;
|
||||
|
// 0xaa,///vU8 hb;
|
||||
|
0xad, |
||||
|
0x0123, |
||||
|
// 0x00,///U16 paperNum:12; //12bit纸张数据
|
||||
|
///U8 cameraIndex:2; //摄像头编号
|
||||
|
///U8 cameraWorking:1; //是否正常工作
|
||||
|
///U8 reserved: 1; //保留
|
||||
|
0x56,///U8 cameraBoardPower; //电量
|
||||
|
0xcc//, 0xaa///vU8 hc;
|
||||
|
|
||||
|
}; |
||||
|
|
||||
|
void GC032A_port_init(void) |
||||
|
{ |
||||
|
///00 准双向口 灌电流20mA 拉电流270-150uS
|
||||
|
///01 推挽输出 20mA 加限流
|
||||
|
///10 高阻
|
||||
|
///11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
|
||||
|
|
||||
|
//p3.6 --HSYNC
|
||||
|
// BITN_0(P3M1,BITN6);BITN_0(P3M0,BITN6);
|
||||
|
///P3.7 -- VSYNC
|
||||
|
// BITN_0(P3M1,BITN7);BITN_0(P3M0,BITN7);
|
||||
|
L0_GC032A_standby(); |
||||
|
D_cam_AVDD_on(); |
||||
|
|
||||
|
} |
||||
|
////>>>>>>>>>>>>>>>>>>>>>_s_task_GC032A_>>>>>>>>>>>>>>>>>>>>>>
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
struct _s_task_GC032A_ s_task_GC032A; |
||||
|
|
||||
|
void L2_task_GC032A_init(void) |
||||
|
{ |
||||
|
L0_cam_isr_init(); |
||||
|
|
||||
|
L1_task_init(&s_task_GC032A.task); |
||||
|
///L3_task_s_go(s_task_GC032A,D_task_init);
|
||||
|
s_task_GC032A.next_line = D_clear; |
||||
|
s_task_GC032A.run = D_run; |
||||
|
s_task_GC032A.line_get = D_clear; |
||||
|
s_task_GC032A.cal_ok = D_clear; |
||||
|
s_task_GC032A.frames = 0; |
||||
|
s_task_GC032A.vs_ok = D_clear; |
||||
|
s_task_GC032A.line_en = D_ON; |
||||
|
s_task_GC032A.cal_en = D_OFF; |
||||
|
/// D_HSYNCS_open();//BITN_1(INT_CLKO, INT_EX2);//使能INT2中断
|
||||
|
} |
||||
|
|
||||
|
#if 10 |
||||
|
|
||||
|
///// get
|
||||
|
void L2_task_GC032A_handle(struct _s_task_GC032A_ *s) |
||||
|
{ |
||||
|
|
||||
|
TTSS_Task_init(); |
||||
|
//PWDN引脚拉低(0 -- 正常工作,1 -- 休眠)
|
||||
|
L0_GC032A_standby(); |
||||
|
L0_uart0_uc('2'); |
||||
|
L2_task_go(D_task_GC032A_init_DVDD); |
||||
|
TTSS_Task_step(D_task_GC032A_init_DVDD); |
||||
|
L0_GC032A_work(); |
||||
|
//IOVDD上电,并延时50us以上;
|
||||
|
D_cam_DVDD_on(); |
||||
|
// L0_uart0_uc('3');
|
||||
|
L2_task_go(D_task_GC032A_init_AVDD); |
||||
|
//L1_task_Tdelay(D_Tdelay_10ms);
|
||||
|
TTSS_Task_step(D_task_GC032A_init_AVDD); |
||||
|
//AVDD28上电,并延时0us以上
|
||||
|
D_cam_AVDD_on(); |
||||
|
L0_uart0_uc('4'); |
||||
|
L2_task_go(D_task_GC032A_init_pwdn); |
||||
|
TTSS_Task_step(D_task_GC032A_init_pwdn); |
||||
|
//提供032A系统频率
|
||||
|
/// L0_MCLKO_init(D_ON);
|
||||
|
//L0_uart0_uc('n');
|
||||
|
//PWDN引脚拉高,延时,拉低
|
||||
|
L0_GC032A_standby();DL0_WDT();//
|
||||
|
L2_task_go(D_task_GC032A_init_pwdn_wait); |
||||
|
L1_task_Tdelay(D_Tdelay_10ms); |
||||
|
TTSS_Task_step(D_task_GC032A_init_pwdn_wait); |
||||
|
L0_GC032A_work(); |
||||
|
GC032a_L0_uart0_uc('5');/// Lc_delay_ms(20);
|
||||
|
gRccUs03 = 0; |
||||
|
// L0_GC032A_write(GC6133_init_reg_tbl[gRccUs03][0],GC6133_init_reg_tbl[gRccUs03][1]);///
|
||||
|
L2_task_go(D_task_GC032A_write_reg); |
||||
|
//L2_task_go(0);
|
||||
|
L1_task_Tdelay(D_Tdelay_10ms); |
||||
|
TTSS_Task_step(D_task_GC032A_write_reg); |
||||
|
//设置摄像头参数 大约2s时间
|
||||
|
if(0 != GC6133_init_reg_tbl[gRccUs03][0]) |
||||
|
{ |
||||
|
//GC032a_L0_uart0_uc('k');
|
||||
|
L0_GC032A_write(GC6133_init_reg_tbl[gRccUs03][0],GC6133_init_reg_tbl[gRccUs03][1]);///
|
||||
|
gRccUs03 ++; |
||||
|
}else |
||||
|
{ |
||||
|
L2_task_go(D_task_GC032A_div); |
||||
|
///L1_task_Tdelay(D_Tdelay_500ms);
|
||||
|
L1_task_Tdelay(D_Tdelay_1s);///重要 这个时间很关键aaaaaa
|
||||
|
} |
||||
|
TTSS_Task_step(D_task_GC032A_div); |
||||
|
//L0_GC032A_write(0xfc,0x02); //复位??
|
||||
|
L0_GC032A_write(0xf8,0x03);/// 恢复分频
|
||||
|
L0_GC032A_write(0xfa,D_0xfa);DL0_WDT();//
|
||||
|
GC032a_L0_uart0_uc('6'); |
||||
|
L2_task_go(D_task_GC032A_start_time); |
||||
|
///------------------------------------------------------cam init over
|
||||
|
///------------------------------------------------------cam init over
|
||||
|
///------------------------------------------------------cam init over
|
||||
|
|
||||
|
////等待 其他任务的启动后才工作
|
||||
|
TTSS_Task_step(D_task_GC032A_start_time); |
||||
|
D_cam_led_on();D_VSYNCS_open(); |
||||
|
L1_GC032A_sleep(D_wakeup); |
||||
|
GC032a_L0_uart0_uc('7'); |
||||
|
/// s->one_line_ok = D_clear;D_ledb_OFF();
|
||||
|
L2_task_go(D_task_GC032A_led); |
||||
|
TTSS_Task_step(D_task_GC032A_led); |
||||
|
///vs /```24.8ms````\__________________________..1.16s...____________________________/````````\___________
|
||||
|
///cam_led ```````````\_________________________________________________________/`````````````````\____
|
||||
|
if(D_ready == s->vs_ok)///为了关灯
|
||||
|
{ |
||||
|
s_task_GC032A.vs_ok = D_clear; |
||||
|
D_cam_led_off(); GC032a_L0_uart0_uc('D'); |
||||
|
L2_task_go(D_task_GC032A_wait); |
||||
|
} |
||||
|
TTSS_Task_step(D_task_GC032A_wait);////>>>>>>>>>>>>>>>>>>>>>>>---
|
||||
|
///捕获到需要的行
|
||||
|
|
||||
|
if(D_ready == s->line_get) |
||||
|
{DL0_WDT();//
|
||||
|
s->line_get = D_clear; |
||||
|
/// 1.standby
|
||||
|
/// D_cam_led_off();
|
||||
|
if(D_ON == s->line_en) |
||||
|
{ |
||||
|
GC032a_L0_uart0_uc(0xfe); |
||||
|
GC032a_L0_uart0_uc(0xfd); |
||||
|
D_send_us(DR_pclk_n); |
||||
|
//D_send_us(s->lines);
|
||||
|
L2_task_go(D_task_GC032A_send_line); |
||||
|
}else |
||||
|
{ |
||||
|
L2_task_go(D_task_GC032A_cal); |
||||
|
} |
||||
|
|
||||
|
L1_task_Tdelay(D_Tdelay_10ms); |
||||
|
} |
||||
|
TTSS_Task_step(D_task_GC032A_send_line); |
||||
|
if(D_uart0_free()) |
||||
|
{ |
||||
|
L0_uart0_sendArraylong(s->buf,0,199); |
||||
|
L2_task_go(D_task_GC032A_send2); |
||||
|
} |
||||
|
TTSS_Task_step(D_task_GC032A_send2); |
||||
|
if(D_uart0_free()) |
||||
|
{ |
||||
|
L0_uart0_sendArraylong(s->buf,200,399); |
||||
|
L2_task_go(D_task_GC032A_send3); |
||||
|
} |
||||
|
TTSS_Task_step(D_task_GC032A_send3); |
||||
|
if(D_uart0_free()) |
||||
|
{ |
||||
|
L0_uart0_sendArraylong(s->buf,400,509); |
||||
|
L2_task_go(D_task_GC032A_send5); |
||||
|
} |
||||
|
TTSS_Task_step(D_task_GC032A_send4); |
||||
|
if(D_uart0_free()) |
||||
|
{ |
||||
|
L0_uart0_sendArraylong(s->buf,600,639); |
||||
|
L2_task_go(D_task_GC032A_send5); |
||||
|
} |
||||
|
TTSS_Task_step(D_task_GC032A_send5); |
||||
|
if(D_uart0_free()) |
||||
|
{ |
||||
|
// 'fe','fd','fd','fc'
|
||||
|
// GC032a_L0_uart0_uc(0xfd);
|
||||
|
// GC032a_L0_uart0_uc(0xfc);
|
||||
|
L2_task_go(D_task_GC032A_line1); |
||||
|
//L2_task_go(D_task_GC032A_sleep);
|
||||
|
} |
||||
|
|
||||
|
TTSS_Task_step(D_task_GC032A_line1) |
||||
|
for(gRccUs03 = 1;gRccUs03 < 568;gRccUs03 ++) |
||||
|
{ |
||||
|
if((s->buf[gRccUs03 - 1] == 0)&& |
||||
|
(s->buf[gRccUs03] == 1))//// _/``上升沿
|
||||
|
{ |
||||
|
if(s->buf[gRccUs03 + 1] == 0) |
||||
|
{//_/`\_ 尖峰需要过滤
|
||||
|
|
||||
|
}else |
||||
|
{// ___/````上升沿开始高电平
|
||||
|
s->up_point = gRccUs03; |
||||
|
} |
||||
|
}else if((s->buf[gRccUs03 - 1] == 1)&& |
||||
|
(s->buf[gRccUs03] == 0))//// ``\_ 下降沿
|
||||
|
{ |
||||
|
s->down_point = gRccUs03; |
||||
|
|
||||
|
}else |
||||
|
{ |
||||
|
|
||||
|
} |
||||
|
} |
||||
|
L2_task_go(D_task_GC032A_line2); |
||||
|
|
||||
|
TTSS_Task_step(D_task_GC032A_line2) |
||||
|
|
||||
|
D_send_us(s->up_point); |
||||
|
D_send_us(s->down_point); |
||||
|
D_send_us(s->down_point - s->up_point); |
||||
|
// DR_pdata_n =0;
|
||||
|
// 'fe','fd','fd','fc'
|
||||
|
GC032a_L0_uart0_uc(0xfd); |
||||
|
GC032a_L0_uart0_uc(0xfc); |
||||
|
if(D_ON == s->cal_en) |
||||
|
{ |
||||
|
L2_task_go(D_task_GC032A_cal); |
||||
|
}else |
||||
|
{ |
||||
|
L2_task_go(D_task_GC032A_sleep); |
||||
|
} |
||||
|
TTSS_Task_step(D_task_GC032A_cal) |
||||
|
|
||||
|
|
||||
|
GC032a_L0_uart0_uc('8');//2.1ms
|
||||
|
L2_task_go(D_task_GC032A_sleep); |
||||
|
|
||||
|
|
||||
|
TTSS_Task_step(D_task_GC032A_sample); |
||||
|
///20181007本想调试成 分段的led 不通过vs 关断 但是发现不好调整
|
||||
|
///采样的时候led打开照亮
|
||||
|
D_cam_led_on();GC032a_L0_uart0_uc('`'); |
||||
|
L2_task_go(D_task_GC032A_sleep); |
||||
|
// L1_task_Tdelay(D_Tdelay_500ms+6);
|
||||
|
TTSS_Task_step(D_task_GC032A_sleep); |
||||
|
/// 收到外部命令run后 决定进入睡眠状态 ,低功耗处理
|
||||
|
////CAL 10MS 433 10MS 总共20ms / 1160ms/vs 取行数消耗10ms
|
||||
|
/////1160-10 - 20 = 1130ms
|
||||
|
/// GC032a_L0_uart0_uc(0x88);
|
||||
|
if(D_run == s->run) |
||||
|
{ |
||||
|
GC032a_L0_uart0_uc('9');//2.1ms
|
||||
|
L2_task_go(D_task_GC032A_led); |
||||
|
L1_task_Tdelay(D_Tdelay_10ms); |
||||
|
}else |
||||
|
{ |
||||
|
D_cam_led_off(); |
||||
|
L1_GC032A_sleep(D_sleep); |
||||
|
L2_task_go(0); |
||||
|
} |
||||
|
///<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
|
||||
|
TTSS_Task_end(); |
||||
|
} |
||||
|
|
||||
|
#else |
||||
|
|
||||
|
///// get
|
||||
|
void L2_task_GC032A_handle(struct _s_task_GC032A_ *s) |
||||
|
{ |
||||
|
|
||||
|
TTSS_Task_init(); |
||||
|
//PWDN引脚拉低(0 -- 正常工作,1 -- 休眠)
|
||||
|
L0_GC032A_standby(); |
||||
|
L0_uart0_uc('2'); |
||||
|
L2_task_go(D_task_GC032A_init_DVDD); |
||||
|
TTSS_Task_step(D_task_GC032A_init_DVDD); |
||||
|
L0_GC032A_work(); |
||||
|
//IOVDD上电,并延时50us以上;
|
||||
|
D_cam_DVDD_on(); |
||||
|
// L0_uart0_uc('3');
|
||||
|
L2_task_go(D_task_GC032A_init_AVDD); |
||||
|
//L1_task_Tdelay(D_Tdelay_10ms);
|
||||
|
TTSS_Task_step(D_task_GC032A_init_AVDD); |
||||
|
//AVDD28上电,并延时0us以上
|
||||
|
D_cam_AVDD_on(); |
||||
|
L0_uart0_uc('4'); |
||||
|
L2_task_go(D_task_GC032A_init_pwdn); |
||||
|
TTSS_Task_step(D_task_GC032A_init_pwdn); |
||||
|
//提供032A系统频率
|
||||
|
/// L0_MCLKO_init(D_ON);
|
||||
|
//L0_uart0_uc('n');
|
||||
|
//PWDN引脚拉高,延时,拉低
|
||||
|
L0_GC032A_standby();DL0_WDT();//
|
||||
|
L2_task_go(D_task_GC032A_init_pwdn_wait); |
||||
|
L1_task_Tdelay(D_Tdelay_10ms); |
||||
|
TTSS_Task_step(D_task_GC032A_init_pwdn_wait); |
||||
|
L0_GC032A_work(); |
||||
|
GC032a_L0_uart0_uc('5');/// Lc_delay_ms(20);
|
||||
|
gRccUs03 = 0; |
||||
|
// L0_GC032A_write(GC6133_init_reg_tbl[gRccUs03][0],GC6133_init_reg_tbl[gRccUs03][1]);///
|
||||
|
L2_task_go(D_task_GC032A_write_reg); |
||||
|
//L2_task_go(0);
|
||||
|
L1_task_Tdelay(D_Tdelay_10ms); |
||||
|
TTSS_Task_step(D_task_GC032A_write_reg); |
||||
|
//设置摄像头参数 大约2s时间
|
||||
|
if(0 != GC6133_init_reg_tbl[gRccUs03][0]) |
||||
|
{ |
||||
|
//GC032a_L0_uart0_uc('k');
|
||||
|
L0_GC032A_write(GC6133_init_reg_tbl[gRccUs03][0],GC6133_init_reg_tbl[gRccUs03][1]);///
|
||||
|
gRccUs03 ++; |
||||
|
}else |
||||
|
{ |
||||
|
L2_task_go(D_task_GC032A_div); |
||||
|
///L1_task_Tdelay(D_Tdelay_500ms);
|
||||
|
L1_task_Tdelay(D_Tdelay_1s);///重要 这个时间很关键aaaaaa
|
||||
|
} |
||||
|
TTSS_Task_step(D_task_GC032A_div); |
||||
|
//L0_GC032A_write(0xfc,0x02); //复位??
|
||||
|
L0_GC032A_write(0xf8,0x03);/// 恢复分频
|
||||
|
L0_GC032A_write(0xfa,D_0xfa);DL0_WDT();//
|
||||
|
GC032a_L0_uart0_uc('6'); |
||||
|
L2_task_go(D_task_GC032A_start_time); |
||||
|
///------------------------------------------------------cam init over
|
||||
|
///------------------------------------------------------cam init over
|
||||
|
///------------------------------------------------------cam init over
|
||||
|
|
||||
|
////等待 其他任务的启动后才工作
|
||||
|
TTSS_Task_step(D_task_GC032A_start_time); |
||||
|
D_cam_led_on();D_VSYNCS_open(); |
||||
|
L1_GC032A_sleep(D_wakeup); |
||||
|
GC032a_L0_uart0_uc('7'); |
||||
|
/// s->one_line_ok = D_clear;D_ledb_OFF();
|
||||
|
L2_task_go(D_task_GC032A_led); |
||||
|
TTSS_Task_step(D_task_GC032A_led); |
||||
|
///vs /```24.8ms````\__________________________..1.16s...____________________________/````````\___________
|
||||
|
///cam_led ```````````\_________________________________________________________/`````````````````\____
|
||||
|
if(D_ready == s->vs_ok)///为了关灯
|
||||
|
{ |
||||
|
s_task_GC032A.vs_ok = D_clear; |
||||
|
D_cam_led_off(); GC032a_L0_uart0_uc('_'); |
||||
|
L2_task_go(D_task_GC032A_wait); |
||||
|
} |
||||
|
TTSS_Task_step(D_task_GC032A_wait);////>>>>>>>>>>>>>>>>>>>>>>>---
|
||||
|
///捕获到需要的行
|
||||
|
if(1 == s->line_get) |
||||
|
{DL0_WDT();//
|
||||
|
s->line_get = 0; |
||||
|
L2_task_go(D_task_GC032A_cal);//// 单行计算
|
||||
|
} |
||||
|
TTSS_Task_step(D_task_GC032A_cal); |
||||
|
///计算一个 line的数据
|
||||
|
///D_txd4_wakeup();
|
||||
|
///GC032a_L0_uart0_uc(0xd); GC032a_L0_uart0_uc(0xa);//
|
||||
|
s->buf[D_pclk_per_hs + 1] =s->buf[30]; |
||||
|
///GC032a_L0_uart0_uchex(s->buf[D_pclk_per_hs + 1]);
|
||||
|
gRccUs04 = 0; |
||||
|
for(gRccUs03 = 0;gRccUs03 < D_pclk_per_hs_2;gRccUs03 ++) |
||||
|
{ //s->buf[gRccUs03] = 0x10;
|
||||
|
//debug 开关 显示当前收到的数据
|
||||
|
//L0_uart0_uc(s->buf[gRccUs03]);
|
||||
|
if(s->buf[gRccUs03] >= 0x10) |
||||
|
{ |
||||
|
s->buf[gRccUs03] -= 0x10; |
||||
|
} |
||||
|
s->buf[gRccUs03] >>= 1; |
||||
|
gRccUs04 += s->buf[gRccUs03]; |
||||
|
} |
||||
|
gRccUs04 >>= 2;//gRccUs04 >>= 4;
|
||||
|
TS_paer_value.r123.paperNum = gRccUs04; |
||||
|
///GC032a_L0_uart0_uchex((unsigned char)(gRccUs04>>8));
|
||||
|
s_task_GC032A.cal_ok = D_ready; |
||||
|
|
||||
|
L2_task_go(D_task_GC032A_sample);/// 发送完成延时后开始采样,
|
||||
|
L1_task_Tdelay(D_Tdelay_300ms); //700=1a 600=1e 500 21 400 25 300 26
|
||||
|
|
||||
|
TTSS_Task_step(D_task_GC032A_sample); |
||||
|
///20181007本想调试成 分段的led 不通过vs 关断 但是发现不好调整
|
||||
|
///采样的时候led打开照亮
|
||||
|
D_cam_led_on();GC032a_L0_uart0_uc('`'); |
||||
|
L2_task_go(D_task_GC032A_sleep); |
||||
|
// L1_task_Tdelay(D_Tdelay_500ms+6);
|
||||
|
TTSS_Task_step(D_task_GC032A_sleep); |
||||
|
/// 收到外部命令run后 决定进入睡眠状态 ,低功耗处理
|
||||
|
////CAL 10MS 433 10MS 总共20ms / 1160ms/vs 取行数消耗10ms
|
||||
|
/////1160-10 - 20 = 1130ms
|
||||
|
/// GC032a_L0_uart0_uc(0x88);
|
||||
|
if(D_run == s->run) |
||||
|
{ |
||||
|
GC032a_L0_uart0_uc('r');//2.1ms
|
||||
|
L2_task_go(D_task_GC032A_led); |
||||
|
}else |
||||
|
{ |
||||
|
D_cam_led_off(); |
||||
|
L1_GC032A_sleep(D_sleep); |
||||
|
L2_task_go(0); |
||||
|
} |
||||
|
///<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
|
||||
|
TTSS_Task_end(); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
#endif |
||||
|
|
||||
|
void L1_GC032A_sleep(unsigned char onf) |
||||
|
{///FE 15 Fd 33 44//standby
|
||||
|
///FE 05 Fd 33 44//wakeup
|
||||
|
if(D_sleep == onf) |
||||
|
{ |
||||
|
GC032a_L0_uart0_uc('L'); |
||||
|
/// 进入standby:
|
||||
|
L0_GC032A_write(0xfc,0x03); L0_GC032A_write(0xf7,0x00); L0_GC032A_write(0xf9,0xcf); L0_GC032A_write(0xf3,0x00); |
||||
|
Lc_delay_nop(30); |
||||
|
Lc_delay_nop(30); |
||||
|
/// D_cam_AVDD_off();
|
||||
|
// D_cam_led_off();
|
||||
|
}else |
||||
|
{ |
||||
|
GC032a_L0_uart0_uc('X'); |
||||
|
/// 退出standby:
|
||||
|
L0_GC032A_write(0xfc,0x02); L0_GC032A_write(0xf7,0x01); L0_GC032A_write(0xf9,0xce); L0_GC032A_write(0xf3,0xff); |
||||
|
/// D_cam_led_on();
|
||||
|
} |
||||
|
} |
||||
|
|
||||
|
#if 10 |
||||
|
void L3_GC032A_fun(U8 *pPara) |
||||
|
{ |
||||
|
|
||||
|
|
||||
|
} |
||||
|
#else |
||||
|
|
||||
|
//// fe 01 reg data 0cx
|
||||
|
/// Ac 01 02 03 ocr ---bsp_debug.c
|
||||
|
/// p.cmd p.R2 p.R3 p.ocr
|
||||
|
///Ac 00 03 01 00/// ACC_X[13:6]
|
||||
|
|
||||
|
void L3_GC032A_fun(U8 *pPara) |
||||
|
{ |
||||
|
U8 i,val[2]; |
||||
|
// unsigned short j;
|
||||
|
TS_P_debug *p = pPara; |
||||
|
switch(p->cmd) |
||||
|
{ |
||||
|
|
||||
|
case 0x01: |
||||
|
///AE 01 FE 33 44 // L0_GC032A_read(0xFE,&i,1); 读取当前页面
|
||||
|
///AE 01 F0 33 44 // L0_GC032A_read(0xF0,&i,1); 读取id i= 0x23
|
||||
|
L0_GC032A_read(p->R2,&i,1); |
||||
|
L0_uart0_uc(i); |
||||
|
break; |
||||
|
//修改摄像头配置参数
|
||||
|
case 0x02: |
||||
|
/// fe 02 r2 r3 xx 设置寄存器(r2) = r3
|
||||
|
/// sysreg FE 02 FE 01 44 //设置当前页面01
|
||||
|
L0_GC032A_write(p->R2,p->R3); |
||||
|
L0_uart0_uc(p->R2); |
||||
|
L0_uart0_uc(p->R3); |
||||
|
break; |
||||
|
//启动摄像头进行拍照;
|
||||
|
case 0x03:/// sysreg FE 03 03 04 05 //设置是否发送一line数据(数据分为一帧=640Line = 640line*480pclk )
|
||||
|
///AE 03 01 33 44 //s_task_GC032A.line_onf = 01
|
||||
|
///AE 03 00 33 44 //s_task_GC032A.line_onf = 00
|
||||
|
s_task_GC032A.line_onf = p->R2; |
||||
|
L0_uart0_uc(0x30|s_task_GC032A.line_onf); |
||||
|
break; |
||||
|
case 0x05: |
||||
|
///AE 05 01 33 44 //进入 standby
|
||||
|
///AE 05 00 33 44 //退出 standby
|
||||
|
L1_GC032A_sleep(p->R2); |
||||
|
L0_uart0_uc(0x30|s_task_GC032A.line_onf); |
||||
|
break; |
||||
|
case 6:///AE 06 22 33 44
|
||||
|
D_cam_led_off(); |
||||
|
break; |
||||
|
case 7:///AE 07 22 33 44
|
||||
|
D_cam_led_on(); |
||||
|
|
||||
|
break; |
||||
|
/*******************
|
||||
|
case 0x00: |
||||
|
L0_GC032A_read(p->R2,val,p->R3); |
||||
|
L0_uart0_uc(p->cmd); |
||||
|
L0_uart0_uc(p->R2); |
||||
|
L0_uart0_uc(p->R3); |
||||
|
L0_uart0_uc('G'); |
||||
|
for(i = 0;i < p->R3;i++) |
||||
|
{ |
||||
|
L0_uart0_uc(val[i]); |
||||
|
} |
||||
|
break; |
||||
|
//读取摄像头配置参数
|
||||
|
case 0x35: |
||||
|
L0_GC032A_standby();// led 17.1-16.9ma standby 6.2ma
|
||||
|
L0_uart0_uc(0x31); |
||||
|
break; |
||||
|
case 0x36: |
||||
|
/// 退出standby:
|
||||
|
L0_GC032A_work(); |
||||
|
L0_uart0_uc(0x30); |
||||
|
break; |
||||
|
|
||||
|
|
||||
|
****************************/ |
||||
|
|
||||
|
default: |
||||
|
break; |
||||
|
}; |
||||
|
} |
||||
|
|
||||
|
#endif |
||||
|
|
||||
|
|
||||
|
|
||||
|
#if 0 |
||||
|
FE 02 88 15 10 13 11 15 11 16 12 14 11 15 12 16 12 16 14 17 13 17 13 16 13 16 12 16 13 16 12 18 |
||||
|
14 15 12 15 13 15 12 16 14 15 13 15 12 15 13 16 14 18 14 17 13 16 10 16 15 1A 15 22 2D 3A 3F 47 |
||||
|
41 53 5E 63 65 69 6C 6F 71 7A 72 73 75 7A 7B 7E 7D 82 85 8B 8F 90 8F 93 96 9A 9D 9A 97 98 96 99 |
||||
|
9A 9B 9A 9C 9E 9F 9F 9D 9A 9A 99 9C 9B 9B 9A 9A 9B 9C 9D 9F 9F A0 A1 A2 A3 A2 A2 A3 A1 A3 A4 A4 |
||||
|
A4 A4 A3 A3 A2 A2 A3 A5 A6 A7 A8 A7 A6 A6 A5 A6 A6 A8 AA AA AA AA AA AB AB AB AC AC AB AC AC AD |
||||
|
AF AE AD AD AC AC AB AC AC AD AD AE AE AE AF AD AE AE AD AE AE AE AE AE AF AF AF AF AF AF B0 B1 |
||||
|
B1 B1 B2 B1 B1 B1 B1 B1 B1 B2 B2 B2 B3 B2 B2 B2 B3 B3 B3 B4 B4 B4 B4 B4 B4 B4 B4 B4 B4 B4 B4 B5 |
||||
|
B4 B5 B6 B5 B5 B4 B4 B4 B3 B4 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B6 B6 B5 B6 B6 B6 B6 B6 B6 B6 |
||||
|
B6 B6 B6 B6 B6 B6 B6 B6 B7 B6 B6 B7 B6 B7 B7 B7 B7 B7 B7 B7 B7 B7 B7 B7 B7 B7 B7 B7 B7 B7 B7 B7 |
||||
|
B8 B7 B7 B8 B8 B7 B8 B8 B7 B8 B9 B8 B8 B8 B7 B7 B7 B7 B7 B7 B7 B7 B7 B7 B7 B7 B7 B8 B7 B7 B8 B8 |
||||
|
B8 B8 B8 B8 B8 B8 B7 B7 B7 B7 B8 B8 B9 B8 B9 B8 B8 B8 B8 B7 B7 B7 B7 B7 B8 B8 B8 B8 B8 B8 B8 B8 |
||||
|
B9 B8 B8 B8 B8 B9 BA B8 B8 B8 B7 B8 B8 B8 B8 B8 B8 B8 B9 B8 B7 B7 B7 B7 B7 B7 B6 B6 B7 B7 B7 B7 |
||||
|
B7 B7 B7 B8 B8 B8 B8 B8 B8 B8 B8 B8 B9 B9 B9 B8 B9 B8 B8 B9 BA B9 B8 B8 B8 B8 B9 B8 B9 B8 B8 B8 |
||||
|
B8 B8 B9 B9 B8 B9 B9 B9 B9 B8 B8 B8 B8 B8 B8 B8 B8 B8 B8 B8 B8 B9 B9 B8 B9 B9 B9 B9 B9 B9 BA B9 |
||||
|
B9 B9 B9 B9 B8 B9 B9 B9 B9 B9 B9 B9 B8 B9 B9 B9 B9 B9 B9 B9 B9 B9 BB B9 B9 B9 B9 B9 B9 B9 BA BA |
||||
|
BB B9 B8 B8 B8 B8 B8 B9 B9 BA BA B9 BA B9 B9 B9 B9 B9 B8 B8 B8 B8 B9 B9 B9 B9 BA BA BB B9 B9 B9 |
||||
|
B9 B9 B9 B9 B9 B9 B9 B9 B9 B9 B9 B9 BA B9 B9 B9 B9 BA BA BB BB BA BB BA B9 B9 B9 B9 B9 B9 B9 BA |
||||
|
BB BA BA BA BA B9 B8 B8 B8 B8 B8 B9 B9 BA BB BB BB BA BA B9 B9 B9 B9 B9 BA fd fc |
||||
|
|
||||
|
|
||||
|
|
||||
|
#endif |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
@ -0,0 +1,706 @@ |
|||||
|
////////////////////////////////////////////////////////////////////////////
|
||||
|
///@copyright Copyright (c) 2018, 传控科技 All rights reserved.
|
||||
|
///-------------------------------------------------------------------------
|
||||
|
/// @file bsp_gc6133.c.c
|
||||
|
/// @brief bsp @ driver config
|
||||
|
///-------------------------------------------------------------------------
|
||||
|
/// @version 1.0
|
||||
|
/// @author CC
|
||||
|
/// @date 20180331
|
||||
|
/// @note cc_AS_stc02
|
||||
|
//////////////////////////////////////////////////////////////////////////////
|
||||
|
|
||||
|
#include "Bsp_debug.h" |
||||
|
#include "bsp_func.h" |
||||
|
#include "bsp_power.h" |
||||
|
#include "bsp_cam_isr.h" |
||||
|
#include "bsp_cam.h" |
||||
|
#include "../msp/uart0.h" |
||||
|
#include "cw63xx.h" |
||||
|
#include "../clib/Clib.h" |
||||
|
#include "../clib/bit.h" |
||||
|
#include "../msp/time.h" |
||||
|
|
||||
|
/// 第一个比第二个延迟20ms 发送 这样同样触发后,第一个10.5ms发送完成 第二个还没有发送,不构成干扰
|
||||
|
|
||||
|
#define D_p_send_delay(); L1_task_Cdelay(D_Cdelay_15ms*(1+D_cameralIndex)); |
||||
|
|
||||
|
////>>>>>>>>>>>>>>>>>>>>>_s_task_GC032A_>>>>>>>>>>>>>>>>>>>>>>
|
||||
|
|
||||
|
|
||||
|
void L0_p_send(void); |
||||
|
extern TS_P_rf433 TS_paer_value; |
||||
|
|
||||
|
|
||||
|
struct _s_task_GC032A_ s_task_GC032A; |
||||
|
|
||||
|
void L2_task_GC032A_init(void) |
||||
|
{ |
||||
|
L0_cam_isr_init(); |
||||
|
|
||||
|
L1_task_init(&s_task_GC032A.task); |
||||
|
|
||||
|
s_task_GC032A.next_line = D_clear; |
||||
|
s_task_GC032A.line_ok = D_run; |
||||
|
s_task_GC032A.line_get = D_clear; |
||||
|
s_task_GC032A.cal_ok = D_clear; |
||||
|
s_task_GC032A.vs_ok = D_clear; |
||||
|
} |
||||
|
|
||||
|
//// 采集单行的程序 20190217
|
||||
|
//// step01 上电时序初始化
|
||||
|
///step02 输入配置寄存器
|
||||
|
///step03 打开中断进入采集模式
|
||||
|
///step04 捕捉第一帧数据 开始采样每一行 同时可以关闭led节约电
|
||||
|
/// step05 捕获到需要的行数 采集到需要的一行数据
|
||||
|
/// step06------>进入休眠状态
|
||||
|
/// |----->持续采集下一行
|
||||
|
|
||||
|
|
||||
|
#if(MODE_CAM_LINE == MODE_CAM) |
||||
|
|
||||
|
|
||||
|
#if 0 |
||||
|
|
||||
|
/// 采集完后延时一定时间 打开led灯 为下次的cam工作提供光源
|
||||
|
/// 等待run信号 如果关闭工作,休眠 fixme:冷启动还是热启动
|
||||
|
void L2_task_GC032A_handle(struct _s_task_GC032A_ *s) |
||||
|
{ |
||||
|
TTSS_Task_init() |
||||
|
//#define D_pclk_per_hs 6
|
||||
|
// PrintCam_L0_uart0_uc('$');
|
||||
|
L2_task_go(D_task_GC032A_init_standby); |
||||
|
TTSS_Task_step(D_task_GC032A_init_standby) |
||||
|
L0_GC032A_standby(); |
||||
|
D_cam_led_on(); |
||||
|
//PWDN引脚拉低(0 -- 正常工作,1 -- 休眠)
|
||||
|
// PrintCam_L0_uart0_uc('2');
|
||||
|
L2_task_go(D_task_GC032A_init_DVDD); |
||||
|
TTSS_step01(D_task_GC032A_init_DVDD); |
||||
|
L0_GC032A_work(); |
||||
|
//IOVDD上电,并延时50us以上;
|
||||
|
L2_task_go(D_task_GC032A_init_AVDD); |
||||
|
TTSS_Task_step(D_task_GC032A_init_AVDD); |
||||
|
//AVDD28上电,并延时0us以上
|
||||
|
D_cam_AVDD_on(); |
||||
|
L2_task_go(D_task_GC032A_init_pwdn); |
||||
|
TTSS_Task_step(D_task_GC032A_init_pwdn); |
||||
|
//提供032A系统频率
|
||||
|
L0_MCLKO_init(D_ON); |
||||
|
L2_task_GC032A_init(); |
||||
|
//PWDN引脚拉高,延时,拉低
|
||||
|
L0_GC032A_standby(); |
||||
|
DL0_WDT();//
|
||||
|
L2_task_go(D_task_GC032A_init_pwdn_wait); |
||||
|
L1_task_Cdelay(D_Cdelay_15ms); |
||||
|
TTSS_Task_step(D_task_GC032A_init_pwdn_wait); |
||||
|
L0_GC032A_work(); |
||||
|
gRccUs03 = 0; |
||||
|
L2_task_go(D_task_GC032A_write_reg); |
||||
|
L1_task_Cdelay(D_Cdelay_15ms); |
||||
|
TTSS_Task_step(D_task_GC032A_write_reg); |
||||
|
//设置摄像头参数 大约2s时间
|
||||
|
if(0 != GC6133_init_reg_tbl[gRccUs03][0]) |
||||
|
{ |
||||
|
//GC032a_L0_uart0_uc('k');
|
||||
|
L0_GC032A_write(GC6133_init_reg_tbl[gRccUs03][0],GC6133_init_reg_tbl[gRccUs03][1]);///
|
||||
|
gRccUs03 ++; |
||||
|
}else |
||||
|
{ |
||||
|
L2_task_go(D_task_GC032A_div); |
||||
|
L1_task_Tdelay(D_Tdelay_1s);///重要 这个时间很关键aaaaaa
|
||||
|
} |
||||
|
TTSS_Task_step(D_task_GC032A_div); |
||||
|
//L0_GC032A_write(0xfc,0x02); //复位??
|
||||
|
L0_GC032A_write(0xf8,0x03);/// 恢复分频
|
||||
|
L0_GC032A_write(0xfa,D_0xfa);DL0_WDT(); |
||||
|
L2_task_go(D_task_GC032A_wakup_sample); |
||||
|
///------------------------------------------------------cam init over
|
||||
|
///------------------------------------------------------cam init over
|
||||
|
///------------------------------------------------------cam init over
|
||||
|
|
||||
|
////等待 其他任务的启动后才工作
|
||||
|
TTSS_step03(D_task_GC032A_wakup_sample) |
||||
|
L1_GC032A_sleep(D_wakeup); |
||||
|
GC032a_L0_uart0_uc('w'); |
||||
|
///D_ledb_OFF();
|
||||
|
L2_task_go((D_task_GC032A_wakup_sample2)); |
||||
|
L1_task_Tdelay(D_Tdelay_1s5); |
||||
|
TTSS_step04(D_task_GC032A_wakup_sample2); |
||||
|
D_VSYNCS_open();////后台的中断开始工作
|
||||
|
L2_task_go(D_task_GC032A_one_frame); |
||||
|
//////////////////////////////////////////////////////////////////////////////
|
||||
|
TTSS_step04(D_task_GC032A_one_frame); |
||||
|
////捕获到一帧数据的开始((来自于后台的中断))
|
||||
|
///vs /```24.8ms````\__________________________..1.16s...____________________________/````````\___________
|
||||
|
///cam_led ```````````\_________________________________________________________/`````````````````\____
|
||||
|
if(D_ready == s->vs_ok)///为了关灯
|
||||
|
{ |
||||
|
/// PrintCam_L0_uart0_uc('V');
|
||||
|
s_task_GC032A.vs_ok = D_clear; |
||||
|
D_cam_led_off(); |
||||
|
L2_task_go(D_task_GC032A_wait); |
||||
|
//L1_task_Tdelay(D_Tdelay_50ms); ////取决于getline的行数 和cam需要亮灯的时间
|
||||
|
} |
||||
|
TTSS_step05(D_task_GC032A_wait);////>>>>>>>>>>>>>>>>>>>>>>>---
|
||||
|
///捕获到需要的Line(来自于后台的中断)
|
||||
|
if(D_clear != s->line_get) |
||||
|
{DL0_WDT(); ////memo20190217 : 间隔1.15s
|
||||
|
//PrintCam_L0_uart0_uc(s->line_get);// L2_line_send();
|
||||
|
s->buf2_ok = D_ready;///buf2_ok数据准备好可供算法查询
|
||||
|
L2_task_go(D_task_GC032A_sleep); |
||||
|
/// L1_task_Tdelay(D_Tdelay_10ms);
|
||||
|
} |
||||
|
TTSS_Task_step(D_task_GC032A_sleep) |
||||
|
///采样结束
|
||||
|
L1_GC032A_sleep(D_sleep); |
||||
|
L0_GC032A_standby(); |
||||
|
L0_MCLKO_init(D_OFF); |
||||
|
D_cam_led_off(); |
||||
|
L2_task_go(D_task_FLOW_PreSend); |
||||
|
|
||||
|
////>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
||||
|
TTSS_Task_step(D_task_FLOW_PreSend); |
||||
|
D_txd4_wakeup();///上升沿 1ms后433 从sleep到可以发送
|
||||
|
/// TS_paer_value.r123.cameraBoardPower = s->t_stamp+0x30;
|
||||
|
L0_p_send(); |
||||
|
//D_txd4_low();
|
||||
|
L2_task_go(D_task_FLOW_send); |
||||
|
// L1_task_Tdelay(D_Tdelay_10ms);
|
||||
|
///L1_task_Cdelay(60);//2ms---mcu+433无法接收
|
||||
|
TTSS_Task_step(D_task_FLOW_send); |
||||
|
//D_txd4_wakeup();
|
||||
|
L0_uart0_sendArray((unsigned char *)&TS_paer_value,6); |
||||
|
L2_task_go(D_task_FLOW_send2); |
||||
|
TTSS_Task_step(D_task_FLOW_send2); |
||||
|
if(D_uart0_free()) |
||||
|
{ |
||||
|
L2_task_go(D_task_FLOW_send3);///
|
||||
|
D_p_send_delay(); |
||||
|
|
||||
|
} |
||||
|
TTSS_Task_step(D_task_FLOW_send3); |
||||
|
L0_uart0_sendArray((unsigned char *)&TS_paer_value,6); |
||||
|
L2_task_go(D_task_FLOW_send4); |
||||
|
TTSS_Task_step(D_task_FLOW_send4); |
||||
|
if(D_uart0_free()) |
||||
|
{ |
||||
|
L2_task_go(D_task_FLOW_send5); |
||||
|
} |
||||
|
TTSS_Task_step(D_task_FLOW_send5); |
||||
|
D_txd4_low();///共计耗时15ms
|
||||
|
D_cam_AVDD_off();///注意影响发送
|
||||
|
L2_task_go(0); |
||||
|
|
||||
|
///<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
|
||||
|
TTSS_Task_end(); |
||||
|
} |
||||
|
#endif |
||||
|
|
||||
|
#elif(MODE_CAM_FRAME == MODE_CAM) |
||||
|
|
||||
|
#elif(MODE_CAM_TEST == MODE_CAM) |
||||
|
|
||||
|
#define PrintCam_L0_uart0_uc(x) L0_uart0_uc(x) |
||||
|
#define PrintCam_D_send_us(x) L0_uart0_us(x) |
||||
|
|
||||
|
///#define L0_uart0_sendArraylong(a,start,end) L0_uart0_sendArray(a(start))
|
||||
|
|
||||
|
/// 采集完后延时一定时间 打开led灯 为下次的cam工作提供光源
|
||||
|
/// 等待run信号 如果关闭工作,休眠 fixme:冷启动还是热启动
|
||||
|
void L2_task_GC032A_handleTest(struct _s_task_GC032A_ *s) |
||||
|
{ |
||||
|
TTSS_Task_init() |
||||
|
//#define D_pclk_per_hs 6
|
||||
|
// PrintCam_L0_uart0_uc('$');
|
||||
|
L2_task_go(D_task_GC032A_init_standby); |
||||
|
TTSS_Task_step(D_task_GC032A_init_standby) |
||||
|
L0_GC032A_standby(); |
||||
|
D_cam_led_on(); |
||||
|
//PWDN引脚拉低(0 -- 正常工作,1 -- 休眠)
|
||||
|
// PrintCam_L0_uart0_uc('2');
|
||||
|
L2_task_go(D_task_GC032A_init_DVDD); |
||||
|
TTSS_step01(D_task_GC032A_init_DVDD); |
||||
|
L0_GC032A_work(); |
||||
|
//IOVDD上电,并延时50us以上;
|
||||
|
L2_task_go(D_task_GC032A_init_AVDD); |
||||
|
TTSS_Task_step(D_task_GC032A_init_AVDD); |
||||
|
//AVDD28上电,并延时0us以上
|
||||
|
D_cam_AVDD_on(); |
||||
|
L2_task_go(D_task_GC032A_init_pwdn); |
||||
|
TTSS_Task_step(D_task_GC032A_init_pwdn); |
||||
|
//提供032A系统频率
|
||||
|
L0_MCLKO_init(D_ON); |
||||
|
L2_task_GC032A_init(); |
||||
|
//PWDN引脚拉高,延时,拉低
|
||||
|
L0_GC032A_standby(); |
||||
|
DL0_WDT();//
|
||||
|
L2_task_go(D_task_GC032A_init_pwdn_wait); |
||||
|
L1_task_Cdelay(D_Cdelay_15ms); |
||||
|
TTSS_Task_step(D_task_GC032A_init_pwdn_wait); |
||||
|
L0_GC032A_work(); |
||||
|
gRccUs03 = 0; |
||||
|
L2_task_go(D_task_GC032A_write_reg); |
||||
|
L1_task_Cdelay(D_Cdelay_15ms); |
||||
|
TTSS_Task_step(D_task_GC032A_write_reg); |
||||
|
//设置摄像头参数 大约2s时间
|
||||
|
if(0 != GC6133_init_reg_tbl[gRccUs03][0]) |
||||
|
{ |
||||
|
L0_GC032A_write(GC6133_init_reg_tbl[gRccUs03][0],GC6133_init_reg_tbl[gRccUs03][1]);///
|
||||
|
gRccUs03 ++; |
||||
|
}else |
||||
|
{ |
||||
|
L2_task_go(D_task_GC032A_div); |
||||
|
L1_task_Tdelay(D_Tdelay_1s);///重要 这个时间很关键aaaaaa
|
||||
|
} |
||||
|
TTSS_Task_step(D_task_GC032A_div); |
||||
|
//L0_GC032A_write(0xfc,0x02); //复位??
|
||||
|
L0_GC032A_write(0xf8,0x03);/// 恢复分频
|
||||
|
L0_GC032A_write(0xfa,D_0xfa);DL0_WDT(); |
||||
|
L2_task_go(D_task_GC032A_wakup_sample); |
||||
|
///------------------------------------------------------cam init over
|
||||
|
///------------------------------------------------------cam init over
|
||||
|
///------------------------------------------------------cam init over
|
||||
|
|
||||
|
////等待 其他任务的启动后才工作
|
||||
|
TTSS_step03(D_task_GC032A_wakup_sample) |
||||
|
L1_GC032A_sleep(D_wakeup); |
||||
|
///D_ledb_OFF();
|
||||
|
L2_task_go((D_task_GC032A_wakup_sample2)); |
||||
|
L1_task_Tdelay(D_Tdelay_1s5); |
||||
|
TTSS_step04(D_task_GC032A_wakup_sample2); |
||||
|
D_VSYNCS_open();////后台的中断开始工作
|
||||
|
PrintCam_L0_uart0_uc('w'); |
||||
|
L2_task_go(D_task_GC032A_one_frame); |
||||
|
//////////////////////////////////////////////////////////////////////////////
|
||||
|
TTSS_step04(D_task_GC032A_one_frame); |
||||
|
|
||||
|
|
||||
|
PrintCam_L0_uart0_uc('.'); |
||||
|
|
||||
|
////捕获到一帧数据的开始((来自于后台的中断))
|
||||
|
///vs /```24.8ms````\__________________________..1.16s...____________________________/````````\___________
|
||||
|
///cam_led ```````````\_________________________________________________________/`````````````````\____
|
||||
|
if(D_ready == s->vs_ok)///为了关灯
|
||||
|
{ |
||||
|
s->vs_ok = D_clear; |
||||
|
PrintCam_L0_uart0_uc('V'); |
||||
|
/// D_cam_led_off();
|
||||
|
D_HSYNCS_open(); |
||||
|
L2_task_go(D_task_GC032A_send2); |
||||
|
//L1_task_Tdelay(D_Tdelay_50ms); ////取决于getline的行数 和cam需要亮灯的时间
|
||||
|
} |
||||
|
|
||||
|
TTSS_Task_step(D_task_GC032A_send2)///----------------------开始一行一行的发送
|
||||
|
|
||||
|
if(1 == s_task_GC032A.line_ok) |
||||
|
{ |
||||
|
s_task_GC032A.line_ok = 0; |
||||
|
///采样结束
|
||||
|
PrintCam_L0_uart0_uc(0xfe); |
||||
|
PrintCam_L0_uart0_uc(0xfd); |
||||
|
///PrintCam_D_send_us(DR_pclk_n);
|
||||
|
PrintCam_D_send_us(DR_line_n); |
||||
|
L0_uart0_sendArray(&s_task_GC032A.buf[0],200); |
||||
|
|
||||
|
L2_task_go(D_task_GC032A_06); |
||||
|
/// L1_task_Tdelay(D_Tdelay_50ms);
|
||||
|
}else { } |
||||
|
TTSS_step06(D_task_GC032A_06); |
||||
|
/*********************************************************
|
||||
|
TTS_for_add(s_task_GC032A.lines,0,627)///[0]--[199]199
|
||||
|
|
||||
|
/// s_task_GC032A.buf[s_task_GC032A.lines] = s_task_GC032A.lines;
|
||||
|
s_task_GC032A.buf[s_task_GC032A.lines] = 0; |
||||
|
TTS_for_add_end() |
||||
|
|
||||
|
**************************************************/ |
||||
|
if(D_uart0_send_over()) |
||||
|
{ |
||||
|
L0_uart0_sendArray(&s_task_GC032A.buf[200],200); |
||||
|
L2_task_go(D_task_GC032A_07); |
||||
|
} |
||||
|
TTSS_step06(D_task_GC032A_07); |
||||
|
if(D_uart0_send_over()) |
||||
|
{ |
||||
|
L0_uart0_sendArray(&s_task_GC032A.buf[400],200); |
||||
|
L2_task_go(D_task_GC032A_08); |
||||
|
} |
||||
|
TTSS_step06(D_task_GC032A_08); |
||||
|
if(D_uart0_send_over()) |
||||
|
{ |
||||
|
L0_uart0_sendArray(&s_task_GC032A.buf[600],D_pclk_per_hs-600);/// 628point
|
||||
|
|
||||
|
// 'fe','fd','fd','fc' 46 44 20 46 43 0d 0a
|
||||
|
PrintCam_L0_uart0_uc(0xfd); |
||||
|
PrintCam_L0_uart0_uc(0xfc); |
||||
|
s_task_GC032A.next_line = 1; |
||||
|
L2_task_go(D_task_GC032A_send2); |
||||
|
L1_task_Tdelay(D_Tdelay_10ms); |
||||
|
} |
||||
|
///<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
|
||||
|
TTSS_Task_end(); |
||||
|
} |
||||
|
#endif |
||||
|
|
||||
|
void L1_GC032A_sleep(unsigned char onf) |
||||
|
{///FE 15 Fd 33 44//standby
|
||||
|
///FE 05 Fd 33 44//wakeup
|
||||
|
if(D_sleep == onf) |
||||
|
{ |
||||
|
// GC032a_L0_uart0_uc('L');
|
||||
|
/// 进入standby:
|
||||
|
L0_GC032A_write(0xfc,0x03); L0_GC032A_write(0xf7,0x00); L0_GC032A_write(0xf9,0xcf); L0_GC032A_write(0xf3,0x00); |
||||
|
Lc_delay_nop(30); |
||||
|
Lc_delay_nop(30); |
||||
|
}else |
||||
|
{ |
||||
|
// GC032a_L0_uart0_uc('X');
|
||||
|
/// 退出standby:
|
||||
|
L0_GC032A_write(0xfc,0x02); L0_GC032A_write(0xf7,0x01); L0_GC032A_write(0xf9,0xce); L0_GC032A_write(0xf3,0xff); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
void L2_line_send(void) |
||||
|
{ |
||||
|
#if 0 |
||||
|
PrintCam_L0_uart0_uc(0x0d); |
||||
|
PrintCam_L0_uart0_uc(0x0a); |
||||
|
// PrintCam_L0_uart0_uc(0xfe);
|
||||
|
// PrintCam_L0_uart0_uc(0xfd);
|
||||
|
PrintCam_D_send_us(DR_pclk_n); |
||||
|
/// PrintCam_D_send_us(s_task_GC032A.usSum);
|
||||
|
PrintCam_L0_uart0_uc(0x09); |
||||
|
// PrintCam_D_send_us(0x1234); PrintCam_D_send_us(0x5678); PrintCam_D_send_us(0xabcd);
|
||||
|
|
||||
|
// PrintCam_L0_uart0_uc(0x0d);
|
||||
|
// PrintCam_L0_uart0_uc(0x0a);
|
||||
|
PrintCam_L0_uart0_sendArray(&(s_task_GC032A.buf[50]),40); |
||||
|
|
||||
|
PrintCam_L0_uart0_uc(0x09); |
||||
|
PrintCam_L0_uart0_sendArray(&(s_task_GC032A.buf[50]),40); |
||||
|
PrintCam_L0_uart0_uc(0x09); |
||||
|
PrintCam_L0_uart0_sendArray(&s_task_GC032A.buf[D_pclk_per_hs_570-21],20); |
||||
|
|
||||
|
///Lc_hex2ascii(&(s_task_GC032A.buf[0]),10,ts_uart_send_shop.buf);
|
||||
|
// Lc_hex2ascii(&s_task_GC032A.buf[D_pclk_per_hs_570-10],2,ts_uart_send_shop.buf2);
|
||||
|
// L0_uart0_sendArray(ts_uart_send_shop.buf2,2*3);
|
||||
|
///#ifdef D_debug_add_send
|
||||
|
|
||||
|
// PrintCam_L0_uart0_uc('P');
|
||||
|
|
||||
|
///L0_uart0_sendArraylong(s_task_GC032A.buf,D_pclk_per_hs_570-10,D_pclk_per_hs_570);
|
||||
|
// 'fe','fd','fd','fc'
|
||||
|
// PrintCam_L0_uart0_uc(0xfd);
|
||||
|
// PrintCam_L0_uart0_uc(0xfc);
|
||||
|
PrintCam_L0_uart0_uc(0x0d); |
||||
|
PrintCam_L0_uart0_uc(0x0a); |
||||
|
///#else
|
||||
|
/*****
|
||||
|
?? |
||||
|
10 10 10 10 10 10 10 10 10 10 |
||||
|
10 10 10 10 11 11 11 11 11 11 |
||||
|
11 11 11 11 11 11 11 11 11 11 |
||||
|
11 11 |
||||
|
10 10 10 10 10 10 10 10 10 10 |
||||
|
10 10 10 10 10 10 10 10 10 10 |
||||
|
CRpaper =04F8-g-offdiff :. |
||||
|
|
||||
|
******/ |
||||
|
///vU16 i; for(i = 0;i <= D_pclk_per_hs_570; i ++) {s_task_GC032A.buf[i]=i; }
|
||||
|
PrintCam_L0_uart0_uc(0xfe); |
||||
|
PrintCam_L0_uart0_uc(0xfd); |
||||
|
PrintCam_D_send_us(DR_pclk_n); |
||||
|
L0_uart0_sendArray(s_task_GC032A.buf,200); |
||||
|
L0_uart0_sendArray(&s_task_GC032A.buf[200],200); |
||||
|
L0_uart0_sendArray(&s_task_GC032A.buf[400],(D_pclk_per_hs_570-400)); |
||||
|
|
||||
|
// PrintCam_D_send_us(ts_task_ALGO.usSum_temp);
|
||||
|
//// PrintCam_D_send_us(s_task_GC032A.down_point);
|
||||
|
// PrintCam_D_send_us(s_task_GC032A.down_point - s_task_GC032A.up_point);
|
||||
|
// DR_pdata_n =0;
|
||||
|
// PrintCam_D_send_us(0x1234);
|
||||
|
// 'fe','fd','fd','fc'
|
||||
|
// PrintCam_L0_uart0_uc(0xfd);
|
||||
|
// PrintCam_L0_uart0_uc(0xfc);
|
||||
|
#endif |
||||
|
/* */ |
||||
|
} |
||||
|
|
||||
|
|
||||
|
#if 0 |
||||
|
|
||||
|
void GC032A_port_init(void) |
||||
|
{ |
||||
|
///00 准双向口 灌电流20mA 拉电流270-150uS
|
||||
|
///01 推挽输出 20mA 加限流
|
||||
|
///10 高阻
|
||||
|
///11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
|
||||
|
|
||||
|
//p3.6 --HSYNC
|
||||
|
// BITN_0(P3M1,BITN6);BITN_0(P3M0,BITN6);
|
||||
|
///P3.7 -- VSYNC
|
||||
|
// BITN_0(P3M1,BITN7);BITN_0(P3M0,BITN7);
|
||||
|
L0_GC032A_standby(); |
||||
|
D_cam_AVDD_on(); |
||||
|
|
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
//// AX CMD R2 R3 R4
|
||||
|
/// Ae 01 01 03 04
|
||||
|
void L3_GC032A_fun(U8 *pPara) |
||||
|
{ |
||||
|
*pPara = 0; |
||||
|
} |
||||
|
/********
|
||||
|
void L3_GC032A_fun(U8 *pPara) |
||||
|
{ |
||||
|
U8 i,val[2]; |
||||
|
// unsigned short j;
|
||||
|
TS_P_debug *p = pPara; |
||||
|
switch(p->cmd) |
||||
|
{ |
||||
|
|
||||
|
case 3: //Ae 03 03 04 00
|
||||
|
//xx 03 R2 R3 xx
|
||||
|
|
||||
|
PrintCam_L0_uart0_uc(0x0d); |
||||
|
PrintCam_L0_uart0_uc(0x0a); |
||||
|
PrintCam_L0_uart0_uc('l'); |
||||
|
Lc_delay_ms(12); |
||||
|
s_task_GC032A.vline_get = p->R2 << 8; |
||||
|
s_task_GC032A.vline_get |= p->R3; |
||||
|
L0_uart0_uchex(p->R2); |
||||
|
Lc_delay_ms(12); |
||||
|
L0_uart0_uchex(p->R3); |
||||
|
Lc_delay_ms(1200); |
||||
|
PrintCam_L0_uart0_uc(0x0d); |
||||
|
PrintCam_L0_uart0_uc(0x0a); |
||||
|
PrintCam_L0_uart0_uc(0x0d); |
||||
|
PrintCam_L0_uart0_uc(0x0a); |
||||
|
PrintCam_L0_uart0_uc(0x0d); |
||||
|
PrintCam_L0_uart0_uc(0x0a); |
||||
|
|
||||
|
break; |
||||
|
|
||||
|
default: |
||||
|
break; |
||||
|
}; |
||||
|
|
||||
|
|
||||
|
} |
||||
|
********/ |
||||
|
///#else
|
||||
|
|
||||
|
//// fe 01 reg data 0cx
|
||||
|
/// Ac 01 02 03 ocr ---bsp_debug.c
|
||||
|
/// U8 i,val[2];
|
||||
|
// unsigned short j;
|
||||
|
TS_P_debug *p = pPara; |
||||
|
switch(p->cmd) |
||||
|
{ |
||||
|
|
||||
|
case 0x01: p.cmd p.R2 p.R3 p.ocr |
||||
|
///Ac 00 03 01 00/// ACC_X[13:6]
|
||||
|
|
||||
|
void L3_GC032A_fun(U8 *pPara) |
||||
|
{ |
||||
|
U8 i,val[2]; |
||||
|
// unsigned short j;
|
||||
|
TS_P_debug *p = pPara; |
||||
|
switch(p->cmd) |
||||
|
{ |
||||
|
|
||||
|
case 0x01: |
||||
|
///AE 01 FE 33 44 // L0_GC032A_read(0xFE,&i,1); 读取当前页面
|
||||
|
///AE 01 F0 33 44 // L0_GC032A_read(0xF0,&i,1); 读取id i= 0x23
|
||||
|
L0_GC032A_read(p->R2,&i,1); |
||||
|
PrintCam_L0_uart0_uc(i); |
||||
|
break; |
||||
|
//修改摄像头配置参数
|
||||
|
case 0x02: |
||||
|
/// fe 02 r2 r3 xx 设置寄存器(r2) = r3
|
||||
|
/// sysreg FE 02 FE 01 44 //设置当前页面01
|
||||
|
L0_GC032A_write(p->R2,p->R3); |
||||
|
PrintCam_L0_uart0_uc(p->R2); |
||||
|
PrintCam_L0_uart0_uc(p->R3); |
||||
|
break; |
||||
|
//启动摄像头进行拍照;
|
||||
|
case 0x03:/// sysreg FE 03 03 04 05 //设置是否发送一line数据(数据分为一帧=640Line = 640line*480pclk )
|
||||
|
///AE 03 01 33 44 //s_task_GC032A.line_onf = 01
|
||||
|
///AE 03 00 33 44 //s_task_GC032A.line_onf = 00
|
||||
|
s_task_GC032A.line_onf = p->R2; |
||||
|
PrintCam_L0_uart0_uc(0x30|s_task_GC032A.line_onf); |
||||
|
break; |
||||
|
case 0x05: |
||||
|
///AE 05 01 33 44 //进入 standby
|
||||
|
///AE 05 00 33 44 //退出 standby
|
||||
|
L1_GC032A_sleep(p->R2); |
||||
|
PrintCam_L0_uart0_uc(0x30|s_task_GC032A.line_onf); |
||||
|
break; |
||||
|
case 6:///AE 06 22 33 44
|
||||
|
D_cam_led_off(); |
||||
|
break; |
||||
|
case 7:///AE 07 22 33 44
|
||||
|
D_cam_led_on(); |
||||
|
|
||||
|
break; |
||||
|
/*******************
|
||||
|
case 0x00: |
||||
|
L0_GC032A_read(p->R2,val,p->R3); |
||||
|
PrintCam_L0_uart0_uc(p->cmd); |
||||
|
PrintCam_L0_uart0_uc(p->R2); |
||||
|
PrintCam_L0_uart0_uc(p->R3); |
||||
|
PrintCam_L0_uart0_uc('G'); |
||||
|
for(i = 0;i < p->R3;i++) |
||||
|
{ |
||||
|
PrintCam_L0_uart0_uc(val[i]); |
||||
|
} |
||||
|
break; |
||||
|
//读取摄像头配置参数
|
||||
|
case 0x35: |
||||
|
L0_GC032A_standby();// led 17.1-16.9ma standby 6.2ma
|
||||
|
PrintCam_L0_uart0_uc(0x31); |
||||
|
break; |
||||
|
case 0x36: |
||||
|
/// 退出standby:
|
||||
|
L0_GC032A_work(); |
||||
|
PrintCam_L0_uart0_uc(0x30); |
||||
|
break; |
||||
|
|
||||
|
|
||||
|
****************************/ |
||||
|
|
||||
|
default: |
||||
|
break; |
||||
|
}; |
||||
|
} |
||||
|
|
||||
|
#endif |
||||
|
|
||||
|
|
||||
|
|
||||
|
#if 0 |
||||
|
254 253 |
||||
|
|
||||
|
FE FD 02 7F ///639
|
||||
|
1A 1B 1B 1B 1B 1B 1A 1C 1B 1B 1B 1A 1A 19 19 1A 19 1A 19 1A 19 1A 19 19 18 19 19 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 17 16 17 16 18 18 18 18 18 18 18 18 18 18 18 18 17 17 17 17 18 18 17 17 17 17 17 16 17 17 17 17 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 17 17 17 17 17 17 17 17 17 17 18 18 18 18 18 19 19 19 19 19 19 18 18 19 19 19 18 18 18 1A 19 19 19 19 19 1A 1A 1A 1A 1A 1A 19 19 18 19 19 19 1A 1A 1A 1B 1B 1B 1C 1C 1C 1C 1C 1C 1C 1D 1D 1D 1C 1C 1C 1C 1D 1E 1C 1C 1C 1D 1C 1C 1C 1C 1C 1C 1C 1D 1D 1D 1D 1C 1B 1A 1B 1A 1B 1D 1D 1D 1D 1D 1C 1C 1C 1C 1C 1C 1C 1C 1C 1C 1C 1B 1B 1B 1B 1B 1B 1C 1C 1C 1C 1B 1B 1C 1C 1C 1E 1C 1C 1C 1C 1C 1C 1C 1C 1C 1C 1C 1C 1B 1C 1B 1C 1C 1D 1D 1C 1C 1C 1C 1C 1C 1C 1C 1C 1C 1C 1C 1D 1D 1D 1C 1C 1C 1C 1C 1D 1D 1E 1D 1E 1F 1F 1E 1E 1E 1E 1E 1E 1E 1E 1D 1D 1C 1C 1C 1C 1C 1C 1C 1C 1C 1D 1D 1D 1D 1C 1D 1D 1D 1D 1D 1E 1E 1E 1E 1E 1E 1E 1E 1E 1E 1E 1E 1D 1C 1C 1C 1C 1C 1C 1C 1B 1C 1C 1C 1C 1C 1C 1C 1C 1C 1C 1B 1C 1C 1C 1C 1C 1C 1D 1C 1C 1C 1C 1D 1F 1F 1D 1C 1C 1B 1C 1C 1C 1C 1C 1C 1B 1B 1B 1B 1B 1B 1B 1C 1C 1C 1C 1C 1D 1C 1C 1C 1D 1D 1D 1D 1E 1D 1C 1C 1C 1C 1C 1C 1C 1C 1D 1D 1E 1E 1E 1D 1D 1D 1D 1C 1D 1C 1C 1C 1C 1D 1D 1D 1D 1C 1C 1C 1C 1C 1C 1B 1B 1C 1C 1C 1C 1B 1B 1B 1B 1D 1B 1C 1B 1B 1B 1C 1D 1C 1B 19 1A 19 1B 1C 1A 1A 1A 1A 1A 1A 1B 1B 1B 1A 1B 19 1B 1A 1A 1A 1A 1A 19 18 19 19 1A 1A 1A 1A 1A 19 19 18 18 18 18 18 1A 18 18 18 18 18 18 18 18 19 1A 19 19 19 19 19 19 19 1A 1A 1A 1A 19 19 18 18 18 18 18 18 19 18 18 18 19 18 18 18 18 18 1A 18 18 18 18 18 18 18 18 17 17 17 18 18 18 18 17 17 17 17 17 16 17 17 18 18 19 19 19 19 19 19 18 18 18 18 18 18 17 17 18 18 17 17 17 17 17 17 19 17 17 17 17 17 17 17 17 17 17 17 17 18 17 17 17 17 17 17 17 17 16 16 17 17 17 17 17 16 16 17 17 17 17 16 16 16 16 16 16 16 17 16 16 16 16 16 16 16 16 16 16 18 19 16 16 16 16 15 16 17 17 16 15 15 16 16 16 15 14 14 15 17 15 15 15 15 16 16 16 16 16 15 16 16 16 15 15 15 15 15 |
||||
|
FD FC |
||||
|
253 252 |
||||
|
|
||||
|
254 253 /639./ 253 252 |
||||
|
|
||||
|
|
||||
|
#endif |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
#if 0/// memo
|
||||
|
//memo20190217 : 间隔1.15s
|
||||
|
/*********
|
||||
|
[15:37:04.337]收←◆�v 4.337 |
||||
|
[15:37:05.487]收←◆�v 5.487 1.15 |
||||
|
[15:37:06.637]收←◆�v 6.637 1.15 |
||||
|
[15:37:07.787]收←◆�k 7.787 1.15 |
||||
|
[15:37:08.947]收←◆�v 8.947 1.16 |
||||
|
[15:37:10.097]收←◆�v 10.097 1.15 |
||||
|
[15:37:11.247]收←◆�v 11.247 1.15 |
||||
|
[15:37:12.397]收←◆�v 12.397 1.15 |
||||
|
[15:37:13.547]收←◆�k 13.547 1.15 |
||||
|
48 31 61 77 77 77 77 2E 56 77 77 77 33 76 01 D3 56 2E 77 77 77 00 |
||||
|
|
||||
|
***/ |
||||
|
|
||||
|
void GC032A_port_init(void) |
||||
|
{ |
||||
|
///00 准双向口 灌电流20mA 拉电流270-150uS
|
||||
|
///01 推挽输出 20mA 加限流
|
||||
|
///10 高阻
|
||||
|
///11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
|
||||
|
//p3.6 --HSYNC
|
||||
|
// BITN_0(P3M1,BITN6);BITN_0(P3M0,BITN6);
|
||||
|
///P3.7 -- VSYNC
|
||||
|
// BITN_0(P3M1,BITN7);BITN_0(P3M0,BITN7);
|
||||
|
// L0_GC032A_standby();
|
||||
|
// D_cam_AVDD_on();
|
||||
|
} |
||||
|
|
||||
|
void L2_line_send(void) |
||||
|
{ |
||||
|
// /// vU16 usi;
|
||||
|
PrintCam_D_send_us(0x1234); |
||||
|
PrintCam_D_send_us(0x5678); |
||||
|
PrintCam_D_send_us(0xabcd); |
||||
|
#if 0 |
||||
|
|
||||
|
PrintCam_L0_uart0_uc(0x0d); |
||||
|
PrintCam_L0_uart0_uc(0x0a); |
||||
|
// PrintCam_L0_uart0_uc(0xfe);
|
||||
|
// PrintCam_L0_uart0_uc(0xfd);
|
||||
|
PrintCam_D_send_us(DR_pclk_n); |
||||
|
PrintCam_D_send_us(0x1234); |
||||
|
PrintCam_D_send_us(0x5678); |
||||
|
PrintCam_D_send_us(0xabcd); |
||||
|
|
||||
|
PrintCam_L0_uart0_uc(0x0d); |
||||
|
PrintCam_L0_uart0_uc(0x0a); |
||||
|
|
||||
|
PrintCam_L0_uart0_sendArray(&(s_task_GC032A.buf[0]),2); |
||||
|
|
||||
|
PrintCam_L0_uart0_uc(0x09); |
||||
|
/// PrintCam_L0_uart0_sendArray(&s_task_GC032A.buf[D_pclk_per_hs_570-10],9);
|
||||
|
///Lc_hex2ascii(&(s_task_GC032A.buf[0]),10,ts_uart_send_shop.buf);
|
||||
|
Lc_hex2ascii(&s_task_GC032A.buf[D_pclk_per_hs_570-10],2,ts_uart_send_shop.buf2); |
||||
|
L0_uart0_sendArray(ts_uart_send_shop.buf2,2*3); |
||||
|
///#ifdef D_debug_add_send
|
||||
|
|
||||
|
PrintCam_L0_uart0_uc('P'); |
||||
|
|
||||
|
///L0_uart0_sendArraylong(s_task_GC032A.buf,D_pclk_per_hs_570-10,D_pclk_per_hs_570);
|
||||
|
// 'fe','fd','fd','fc'
|
||||
|
// PrintCam_L0_uart0_uc(0xfd);
|
||||
|
// PrintCam_L0_uart0_uc(0xfc);
|
||||
|
// PrintCam_L0_uart0_uc(0x0d);
|
||||
|
// PrintCam_L0_uart0_uc(0x0a);
|
||||
|
///#else
|
||||
|
|
||||
|
[18:41:16.591]ê?????02 FE FD 02 42 12 12 12 12 12 12 12 12 12 12 12 11 11 11 11 11 11 11 11 11 11 11 11 11 12 12 12 12 12 12 12 12 12 12 12 11 11 11 11 11 11 11 12 12 12 13 13 14 15 16 16 17 18 18 17 17 16 16 17 19 1C 1F 25 28 2A 2C 2D 2E 2F 30 31 31 32 32 32 32 31 31 32 32 32 32 33 33 33 33 33 33 33 33 33 33 33 33 33 32 32 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 34 33 34 34 34 34 34 34 34 34 34 34 34 35 35 34 35 35 35 35 35 35 36 35 35 36 36 11 11 11 FD FC |
||||
|
|
||||
|
|
||||
|
|
||||
|
PrintCam_L0_uart0_uc(0xfe); |
||||
|
PrintCam_L0_uart0_uc(0xfd); |
||||
|
PrintCam_D_send_us(DR_pclk_n); |
||||
|
L0_uart0_sendArraylong(s_task_GC032A.buf,0,199); |
||||
|
L0_uart0_sendArraylong(s_task_GC032A.buf,200,399); |
||||
|
if(D_pclk_per_hs < 600) |
||||
|
{ |
||||
|
L0_uart0_sendArraylong(s_task_GC032A.buf,400,599); |
||||
|
}else |
||||
|
{ |
||||
|
L0_uart0_sendArraylong(s_task_GC032A.buf,400,599); |
||||
|
L0_uart0_sendArraylong(s_task_GC032A.buf,600,(D_pclk_per_hs-1)); |
||||
|
} |
||||
|
// PrintCam_D_send_us(ts_task_ALGO.usSum_temp);
|
||||
|
//// PrintCam_D_send_us(s_task_GC032A.down_point);
|
||||
|
// PrintCam_D_send_us(s_task_GC032A.down_point - s_task_GC032A.up_point);
|
||||
|
// DR_pdata_n =0;
|
||||
|
// PrintCam_D_send_us(0x1234);
|
||||
|
// 'fe','fd','fd','fc'
|
||||
|
PrintCam_L0_uart0_uc(0xfd); |
||||
|
PrintCam_L0_uart0_uc(0xfc); |
||||
|
#endif |
||||
|
/* */ |
||||
|
} |
||||
|
|
||||
|
#endif |
||||
|
|
||||
|
|
||||
@ -0,0 +1,189 @@ |
|||||
|
////////////////////////////////////////////////////////////////////////////
|
||||
|
///@copyright Copyright (c) 2018, 传控科技 All rights reserved.
|
||||
|
///-------------------------------------------------------------------------
|
||||
|
/// @file bsp_gc6133.c.h
|
||||
|
/// @brief bsp @ driver config
|
||||
|
///-------------------------------------------------------------------------
|
||||
|
/// @version 1.0
|
||||
|
/// @author CC
|
||||
|
/// @date 20180331
|
||||
|
/// @note cc_AS_stc02
|
||||
|
|
||||
|
//////////////////////////////////////////////////////////////////////////////
|
||||
|
|
||||
|
#ifndef _bsp_cam_H |
||||
|
#define _bsp_cam_H |
||||
|
|
||||
|
#include "../bsp/bsp_config.h" |
||||
|
|
||||
|
#include "../tpc/tpc_uart.h" |
||||
|
|
||||
|
#include "../msp/uart0.h" |
||||
|
|
||||
|
#include "bsp_gc032a.h" |
||||
|
|
||||
|
//>>>>>>>>>>>>>>>>>>>>>0gc63xxtask
|
||||
|
|
||||
|
//#define D_i2c_addr_gc61xx 0x80 //page8/30 @pdf
|
||||
|
#define D_i2c_addr_gc032A 0x42 //page15/31 @pdf
|
||||
|
///// 400KHz Tlow > 1.3us
|
||||
|
#define L0_GC032A_write(R,D) L2_I2C_WriteCmd(D_i2c_addr_gc032A,(R),(D)) |
||||
|
#define L0_GC032A_read(R,D,N) L2_I2C_ReadReg(D_i2c_addr_gc032A,(R),(D),(N)) |
||||
|
#define L0_GC032A_reg(R,D) L2_tws_ReadReg(D_i2c_addr_gc032A,(R),(D)) |
||||
|
|
||||
|
/// p55 pwdn
|
||||
|
/// p54 inclk
|
||||
|
/// p3.7 vsync
|
||||
|
/// p3.6 hsync
|
||||
|
#if 0 |
||||
|
#define L0_GC032A_work() D_P55_OFF(); |
||||
|
#define L0_GC032A_standby() |
||||
|
|
||||
|
#else |
||||
|
#define L0_GC032A_work() D_P55_OFF();D_stdIO_P1_ALL();\ |
||||
|
D_stdIO_P5(BITN4);\ |
||||
|
D_stdIO_P5(BITN5);\ |
||||
|
D_stdIO_P3(BITN7);\ |
||||
|
D_stdIO_P3(BITN6); |
||||
|
#define L0_GC032A_standby() D_HighR_P1_ALL();\ |
||||
|
D_HighI_P5(BITN4);\ |
||||
|
D_HighI_P5(BITN5);\ |
||||
|
D_HighI_P3(BITN7);\ |
||||
|
D_HighI_P3(BITN6);D_P55_ON(); |
||||
|
///pwdn 100uAD_P55_OFF();//
|
||||
|
|
||||
|
|
||||
|
#endif |
||||
|
|
||||
|
|
||||
|
|
||||
|
#define GC6123_SERIAL_write_cmos_sensor L0_GC032A_write |
||||
|
|
||||
|
///#define D_pclk_per_hs 628
|
||||
|
///#define D_pclk_per_hs 688
|
||||
|
#define D_pclk_per_hs 639 ///027F
|
||||
|
|
||||
|
#define D_pclk_per_hs_570 570 |
||||
|
|
||||
|
//#define D_pclk_per_hs 580
|
||||
|
|
||||
|
#define D_pclk_per_hs_2 D_pclk_per_hs |
||||
|
///#define D_pclk_per_hs_2 (110)
|
||||
|
|
||||
|
//#define D_pclk_per_hs 6
|
||||
|
|
||||
|
struct _s_task_GC032A_ |
||||
|
{ |
||||
|
TS_task task; |
||||
|
/// vU32 t_stamp;
|
||||
|
unsigned short lines; ///当前行采样结束
|
||||
|
unsigned short frames; ///当前行采样结束
|
||||
|
|
||||
|
unsigned char next_line:1; ///下一行采样开始
|
||||
|
unsigned char cal_ok:1; ///当前行采样结束//
|
||||
|
unsigned char lamp:1; ///当前灯的标志
|
||||
|
unsigned char line_get:1; ///当前需要的行采样结束 可以计算了
|
||||
|
unsigned char line_ok:1; /// 采样的开关
|
||||
|
unsigned char vs_ok:1; /// 开始一帧的采样 代表收到了vs信号
|
||||
|
unsigned char line_onf:2; /// D_line_onf_get=0发送需要发送的一个line\\ D_line_onf_all=1 发送连续line
|
||||
|
|
||||
|
|
||||
|
// volatile unsigned short usHs_count;
|
||||
|
// volatile unsigned short usPclk;
|
||||
|
unsigned char buf2_ok; |
||||
|
|
||||
|
/// volatile unsigned short usN;
|
||||
|
////// unsigned short usMax;
|
||||
|
unsigned char buf[D_pclk_per_hs +2]; |
||||
|
}; |
||||
|
#define D_line_onf_all 1 |
||||
|
#define D_line_onf_get 0 |
||||
|
|
||||
|
|
||||
|
extern struct _s_task_GC032A_ s_task_GC032A; |
||||
|
|
||||
|
|
||||
|
void L2_task_GC032A_init(void); |
||||
|
|
||||
|
#define D_task_GC032A_init_standby 0x36 |
||||
|
|
||||
|
#define D_task_GC032A_init_DVDD 0x30 |
||||
|
#define D_task_GC032A_init_AVDD 0x31 |
||||
|
#define D_task_GC032A_init_pwdn 0x32 |
||||
|
#define D_task_GC032A_init_pwdn_wait 0x33 |
||||
|
|
||||
|
|
||||
|
#define D_task_FLOW_PreSend 0xa3 |
||||
|
#define D_task_FLOW_PreSend2 0xa4 |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
#define D_task_FLOW_send 0x90 |
||||
|
#define D_task_FLOW_send2 0x91 |
||||
|
#define D_task_FLOW_send3 0x92 |
||||
|
#define D_task_FLOW_send4 0x93 |
||||
|
#define D_task_FLOW_send5 0x94 |
||||
|
|
||||
|
|
||||
|
|
||||
|
#define D_task_GC032A_write_reg 0x40 |
||||
|
#define D_task_GC032A_wakup_sample 0x41 |
||||
|
#define D_task_GC032A_start_time2 0x43 |
||||
|
|
||||
|
#define D_task_GC032A_wakup_sample2 0x44 |
||||
|
|
||||
|
|
||||
|
#define D_task_GC032A_wait 0x51 |
||||
|
#define D_task_GC032A_one_frame 0x52 |
||||
|
#define D_task_GC032A_write_reg2 0x53 |
||||
|
#define D_task_GC032A_div 0x54 |
||||
|
#define D_task_GC032A_dat 0x55 |
||||
|
|
||||
|
|
||||
|
#define D_task_GC032A_led 0x56 |
||||
|
|
||||
|
|
||||
|
|
||||
|
#define D_task_GC032A_send_line 0x61 |
||||
|
#define D_task_GC032A_send2 0x62 |
||||
|
#define D_task_GC032A_send3 0x63 |
||||
|
#define D_task_GC032A_send4 0x64 |
||||
|
|
||||
|
////#define D_task_GC032A_over 0x63
|
||||
|
#define D_task_GC032A_cal 0x65 |
||||
|
///#define D_task_GC032A_send_over 0x64
|
||||
|
|
||||
|
#define D_task_GC032A_sleep 0x67 |
||||
|
#define D_task_GC032A_06 0x68 |
||||
|
#define D_task_GC032A_07 0x69 |
||||
|
#define D_task_GC032A_08 0x6a |
||||
|
#define D_task_GC032A_09 0x6b |
||||
|
|
||||
|
#define D_task_GC032A_sample 0x68 |
||||
|
|
||||
|
#define D_task_GC032A_end 0x69 |
||||
|
|
||||
|
#define D_task_GC032A_next_line 0x70 |
||||
|
|
||||
|
|
||||
|
extern void L2_task_GC032A_handle(struct _s_task_GC032A_ *s); |
||||
|
extern void L2_task_GC032A_handleTest(struct _s_task_GC032A_ *s); |
||||
|
|
||||
|
|
||||
|
////////////////////////////////////////////////////////////////////
|
||||
|
|
||||
|
|
||||
|
extern void GC032A_port_init(void); |
||||
|
extern void L3_GC032A_fun(U8 *pPara); |
||||
|
|
||||
|
extern void L1_GC032A_sleep(unsigned char onf); |
||||
|
|
||||
|
#define D_cam_led_on(); L1_cw63_reg_set(D_power_VCC2,D_CW63XX_ON|D_CW63XX_3V2);//P34 = 1;/////s_task_GC032A.lamp = D_ON;
|
||||
|
#define D_cam_led_off(); L1_cw63_reg_set(D_power_VCC2,D_CW63XX_OFF|D_CW63XX_3V2);///P34 = 0;/////s_task_GC032A.lamp = D_OFF;
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
#endif // #ifndef _bsp_gc6133_H
|
||||
|
|
||||
@ -0,0 +1,218 @@ |
|||||
|
////////////////////////////////////////////////////////////////////////////
|
||||
|
///@copyright Copyright (c) 2018, 传控科技 All rights reserved.
|
||||
|
///-------------------------------------------------------------------------
|
||||
|
/// @file bsp_gc6133.c.c
|
||||
|
/// @brief bsp @ driver config
|
||||
|
///-------------------------------------------------------------------------
|
||||
|
/// @version 1.0
|
||||
|
/// @author CC
|
||||
|
/// @date 20180331
|
||||
|
/// @note cc_AS_stc02
|
||||
|
///-------------------------------------------------------------------------
|
||||
|
/// @version 1.2
|
||||
|
/// @author CC
|
||||
|
/// @date 20180703
|
||||
|
/// @note cc_AS_stc02
|
||||
|
//////////////////////////////////////////////////////////////////////////////
|
||||
|
|
||||
|
//#include "Bsp_debug.h"
|
||||
|
#include "bsp_func.h" |
||||
|
#include "bsp_cam_isr.h" |
||||
|
#include "bsp_cam.h" |
||||
|
#include "../msp/uart0.h" |
||||
|
#include "cw63xx.h" |
||||
|
#include "../clib/Clib.h" |
||||
|
#include "../clib/bit.h" |
||||
|
#include "../msp/time.h" |
||||
|
#define D_pclk_div_hs 1 ///D_pclk_per_hs*D_pclk_div_hs < 680
|
||||
|
|
||||
|
///vs p3.7 int3
|
||||
|
///hs p3.6 int2
|
||||
|
///pclk p3.2 int0
|
||||
|
/// row line确可以表示一条线 一行的意思.而column则形象的表示一个纵向的“列
|
||||
|
|
||||
|
#define D_line_get 10 |
||||
|
#define D_row_get2 4 |
||||
|
#ifdef doc_98989 |
||||
|
vs /```24.8ms````\_______________________________..1.16s..._____________________________________________/```````````\__________ |
||||
|
hs /\————————/\_2.14MS_/\____/\____/\____ ...... __/\____/\____/\__480个__/\____/\____/\____/\————————/\ |
||||
|
|
||||
|
hs /``\________________________hs______________________/``\ |
||||
|
pclk |||||||||||||||||||||||||||||||||||||||||||||||640 |
||||
|
|
||||
|
|
||||
|
Line0 L1 L2 L1 L1 L1 L1 L1 L1 L480 |
||||
|
---------------------------------------------------------------------- |
||||
|
1 1 1 1 1 1 1 1 1 --- --- 1 |
||||
|
2 2 2 2 2 2 2 2 2 --- --- 2 |
||||
|
3 3 3 3 3 3 3 3 3 --- --- 3 |
||||
|
4 4 4 4 4 4 4 4 4 --- --- 4 |
||||
|
5 5 5 5 5 5 5 5 5 --- --- 5 |
||||
|
6 6 6 6 6 6 6 6 6 --- --- 6 |
||||
|
7 7 7 7 7 7 7 7 7 --- --- 7 |
||||
|
8 8 8 8 8 8 8 8 8 --- --- 8 |
||||
|
9 9 9 9 9 9 9 9 9 --- --- 9 |
||||
|
10 10 10 10 10 10 10 10 10 --- --- 10 |
||||
|
11 11 11 11 11 11 11 11 11 --- --- 11 |
||||
|
12 12 12 12 12 12 12 12 12 --- --- 12 |
||||
|
13 13 13 13 13 13 13 13 13 --- --- 13 |
||||
|
14 14 14 14 14 14 14 14 14 --- --- 14 |
||||
|
. . . . . . . . . --- --- . |
||||
|
. . . . . . . . . --- --- . |
||||
|
. . . . . . . . . --- --- . |
||||
|
. . . . . . . . . --- --- . |
||||
|
640 640 640 640 640 640 640 640 640 --- --- 640 |
||||
|
|
||||
|
#endif ///doc_98989
|
||||
|
|
||||
|
|
||||
|
void L0_cam_isr_init(void) |
||||
|
{ |
||||
|
IT0 = 1;///int0 下降沿触发 = 0 上下沿均可触发
|
||||
|
/// IT0 = 0;////int0 下降沿触发 = 0 上下沿均可触发
|
||||
|
/// L0_INT0_OPEN();
|
||||
|
D_HSYNCS_close(); |
||||
|
D_VSYNCS_open(); |
||||
|
D_PCLK_close(); |
||||
|
|
||||
|
} |
||||
|
|
||||
|
#if(MODE_CAM_LINE == MODE_CAM) |
||||
|
|
||||
|
|
||||
|
#if 0 |
||||
|
//////////
|
||||
|
/////一帧数据的开始
|
||||
|
void L0_VSYNCS_Isr (void) interrupt D_ISR_int3////下降沿
|
||||
|
{////找到一帧数据的开头:第一行
|
||||
|
L0_INT3_CLEAR(); |
||||
|
///s_task_GC032A.usHs_count = 0;
|
||||
|
DR_line_n = 0; |
||||
|
/// s_task_GC032A.next_line = D_ready;///启动第一行 这样确保帧头是第一行,对齐的///
|
||||
|
/// s_task_GC032A.one_line_ok = D_clear;
|
||||
|
s_task_GC032A.line_get = D_clear; |
||||
|
s_task_GC032A.vs_ok = D_ready; |
||||
|
//s_task_GC032A.frames ++;
|
||||
|
//if(s_task_GC032A.frames > 10)
|
||||
|
{/// 时间溢出
|
||||
|
///s_task_GC032A.frames = 0;
|
||||
|
} |
||||
|
D_ledb_OFF(); |
||||
|
/// D_leda_ON();
|
||||
|
D_HSYNCS_open(); |
||||
|
} |
||||
|
|
||||
|
/////一行line row数据的开始
|
||||
|
void L0_HSYNCS_Isr(void) interrupt D_ISR_int2/// using 1 /下降沿
|
||||
|
{///hs 下沿有效
|
||||
|
L0_INT2_CLEAR(); |
||||
|
//// hs信号的计数在vs有效的时候清零,这样usHs_count=D_row_get就代表
|
||||
|
//// 当前一帧画面里面的第D_row_get个hs,也就是一个画面中的第几行数据
|
||||
|
///if(D_ready == s_task_GC032A.next_line)
|
||||
|
{///D_P33_REV();
|
||||
|
//D_leda_OFF();
|
||||
|
/// s_task_GC032A.next_line = D_clear;///因为接收一行数据的时间远远小于发送的时间
|
||||
|
///因此添加这个为了提高可靠性
|
||||
|
///发送完了后由“gc032a任务”启动
|
||||
|
s_task_GC032A.lines = DR_line_n;////保存当前的行号到缓存中,因为行号变化的速度超过
|
||||
|
////发送的速度,当在"gc032A任务"中使用的时候DR_line_n 已经变化了
|
||||
|
///0 24 58 94 129 165 200 236 271 307 342 378
|
||||
|
D_PCLK_open(); |
||||
|
//D_P35_REV() ;
|
||||
|
DR_pclk_n = 0; |
||||
|
if(DR_line_n >= D_line_get) |
||||
|
{ |
||||
|
s_task_GC032A.line_get = D_ready; |
||||
|
D_HSYNCS_close();D_PCLK_close(); |
||||
|
} |
||||
|
} |
||||
|
DR_line_n ++;///当前行数增加
|
||||
|
} |
||||
|
|
||||
|
////s_task_GC032A.buf 存放的是一行的数据
|
||||
|
//// pclk int0 每个点的采样
|
||||
|
void L0_PCLK_Isr(void) interrupt D_ISR_int0 /// using 10///
|
||||
|
{///PCLK
|
||||
|
// D_P34_REV();
|
||||
|
DR_Dat = P1; |
||||
|
s_task_GC032A.buf[DR_pclk_n] = DR_Dat; // s_task_GC032A.buf[DR_pclk_n] = 0xaa;//P1&0xf0; //s_task_GC032A.buf[s_task_GC032A.usN] = s_task_GC032A.usN;
|
||||
|
DR_pclk_n++;// D_P34_REV();
|
||||
|
if(DR_pclk_n > D_pclk_per_hs)////一行的有效数据接收完成 采样了 D_pclk_per_hs个固定数据
|
||||
|
{ |
||||
|
D_PCLK_close(); |
||||
|
|
||||
|
//D_ledb_REV() ;
|
||||
|
DR_pclk_n = D_pclk_per_hs; ///fixme
|
||||
|
DR_pclk_n = 0; |
||||
|
/// s_task_GC032A.one_line_ok = D_ready;////给“gc032a任务”传递消息 可以开始计算或者发送了
|
||||
|
D_ledb_ON(); |
||||
|
} |
||||
|
} |
||||
|
#endif |
||||
|
|
||||
|
#elif(MODE_CAM_FRAME == MODE_CAM) |
||||
|
|
||||
|
#elif(MODE_CAM_TEST == MODE_CAM) |
||||
|
/////连续发送
|
||||
|
void L0_VSYNCS_Isr (void) interrupt D_ISR_int3////下降沿
|
||||
|
{////找到一帧数据的开头:第一行
|
||||
|
///s_task_GC032A.usHs_count = 0;
|
||||
|
DR_line_n = 0; |
||||
|
s_task_GC032A.next_line = 1;///启动第一行 这样确保帧头是第一行,对齐的///
|
||||
|
s_task_GC032A.vs_ok = D_ready; |
||||
|
} |
||||
|
|
||||
|
/////一行line row数据的开始
|
||||
|
void L0_HSYNCS_Isr(void) interrupt D_ISR_int2/// using 1 /下降沿
|
||||
|
{///hs 下沿有效
|
||||
|
//// hs信号的计数在vs有效的时候清零,这样usHs_count=D_row_get就代表
|
||||
|
//// 当前一帧画面里面的第D_row_get个hs,也就是一个画面中的第几行数据
|
||||
|
if(s_task_GC032A.next_line) |
||||
|
{///D_P33_REV();
|
||||
|
s_task_GC032A.next_line = 0;///因为接收一行数据的时间远远小于发送的时间
|
||||
|
///因此添加这个为了提高可靠性
|
||||
|
///发送完了后由“gc032a任务”启动
|
||||
|
s_task_GC032A.lines = DR_line_n;////保存当前的行号到缓存中,因为行号变化的速度超过
|
||||
|
////发送的速度,当在"gc032A任务"中使用的时候DR_line_n 已经变化了
|
||||
|
///0 24 58 94 129 165 200 236 271 307 342 378
|
||||
|
|
||||
|
/*****
|
||||
|
if(D_line_get == DR_line_n) |
||||
|
{ |
||||
|
s_task_GC032A.line_get = 1; |
||||
|
} |
||||
|
******/ |
||||
|
D_PCLK_open();///启动记录下一行数据
|
||||
|
DR_pclk_n = 0; |
||||
|
} |
||||
|
DR_line_n ++;///当前行数增加
|
||||
|
} |
||||
|
|
||||
|
////s_task_GC032A.buf 存放的是一行的数据
|
||||
|
//// pclk int0 每个点的采样
|
||||
|
void L0_PCLK_Isr(void) interrupt D_ISR_int0 //// using 10///
|
||||
|
{///PCLK
|
||||
|
// D_P34_REV();
|
||||
|
//// DR_Dat = P1; s_task_GC032A.buf[DR_pclk_n] = DR_Dat;
|
||||
|
s_task_GC032A.buf[DR_pclk_n] = P1; |
||||
|
|
||||
|
|
||||
|
////s_task_GC032A.buf[DR_pclk_n] = 0xcc;
|
||||
|
///s_task_GC032A.buf[DR_pclk_n] = DR_pclk_n;
|
||||
|
DR_pclk_n++;// D_P34_REV();
|
||||
|
if(DR_pclk_n > D_pclk_per_hs) ////一行的有效数据接收完成 采样了 D_pclk_per_hs个固定数据
|
||||
|
{ |
||||
|
D_PCLK_close(); |
||||
|
DR_pclk_n = D_pclk_per_hs; ///fixme
|
||||
|
|
||||
|
s_task_GC032A.line_ok = 1; ////给“gc032a任务”传递消息 可以开始计算或者发送了
|
||||
|
} |
||||
|
} |
||||
|
|
||||
|
|
||||
|
////收到 next_line 记录当前第几行lines,启动 pclk,采集数据到buf中,然后line_ok
|
||||
|
///// send buf, set next_line after send buf over
|
||||
|
|
||||
|
#endif |
||||
|
|
||||
|
|
||||
@ -0,0 +1,62 @@ |
|||||
|
////////////////////////////////////////////////////////////////////////////
|
||||
|
///@copyright Copyright (c) 2018, ´«¿Ø¿Æ¼¼ All rights reserved.
|
||||
|
///-------------------------------------------------------------------------
|
||||
|
/// @file bsp_gc6133.c.h
|
||||
|
/// @brief bsp @ driver config
|
||||
|
///-------------------------------------------------------------------------
|
||||
|
/// @version 1.0
|
||||
|
/// @author CC
|
||||
|
/// @date 20180331
|
||||
|
/// @note cc_AS_stc02
|
||||
|
|
||||
|
//////////////////////////////////////////////////////////////////////////////
|
||||
|
|
||||
|
#ifndef _bsp_cam_isr_H |
||||
|
#define _bsp_cam_isr_H |
||||
|
|
||||
|
#include "../bsp/bsp_config.h" |
||||
|
|
||||
|
#include "../tpc/tpc_uart.h" |
||||
|
|
||||
|
#include "../msp/uart0.h" |
||||
|
|
||||
|
#include "bsp_gc032a.h" |
||||
|
|
||||
|
#define D_VSYNCS_open(); L0_INT3_OPEN(); |
||||
|
#define D_VSYNCS_close(); L0_INT3_CLOSE(); |
||||
|
|
||||
|
#define D_HSYNCS_open(); L0_INT2_OPEN(); |
||||
|
#define D_HSYNCS_close(); L0_INT2_CLOSE(); |
||||
|
|
||||
|
#define D_PCLK_open(); L0_INT0_OPEN(); |
||||
|
#define D_PCLK_close(); L0_INT0_CLOSE(); |
||||
|
|
||||
|
|
||||
|
#define DR_pclk_n gRccUs05 |
||||
|
|
||||
|
#define DR_line_n gRccUs01 |
||||
|
#define DR_line_n_H gRccUs01_H |
||||
|
#define DR_line_n_L gRccUs01_L |
||||
|
|
||||
|
|
||||
|
///// #define DR_Hs_count gRccUs02//s_task_GC032A.usPclk
|
||||
|
///#define DR_Dat CCAP1L
|
||||
|
#define DR_Dat SPDAT |
||||
|
|
||||
|
//>>>>>>>>>>>>>>>>>>>>>0gc63xxtask
|
||||
|
|
||||
|
//#define D_row_max 640
|
||||
|
|
||||
|
////////////////////////////////////////////////////////////////////
|
||||
|
|
||||
|
|
||||
|
extern void L0_cam_isr_init(void) ; |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
#endif // #ifndef _bsp_cam_isr_H
|
||||
|
|
||||
@ -0,0 +1,95 @@ |
|||||
|
////////////////////////////////////////////////////////////////////////////
|
||||
|
///@copyright Copyright (c) 2017, 传控科技 All rights reserved.
|
||||
|
///-------------------------------------------------------------------------
|
||||
|
/// @file _bsp_config_stc_H.h
|
||||
|
/// @brief hard _bsp_config_stc_H include
|
||||
|
/// @info FILE FOR HARDWARE SETUP AND SOFTWARE SETUP///FOR EXAMPLE: BAORD ,MCU,IDE
|
||||
|
/// @info YOU CAN CHANGE OR ADD THE DEFINE IF YOU NEED
|
||||
|
/// @info 整个嵌入式项目的入口 首先是确认电路板 然后确认cpu 芯片型号 然后确认编译器 之后是软件框架 最后是应用程序
|
||||
|
/// @info 确认cpu类型后调用对应的cpu的配置参数,主要为了兼容c51 arm avr等
|
||||
|
///-------------------------------------------------------------------------
|
||||
|
/// @version 1.0
|
||||
|
/// @author CC
|
||||
|
/// @date 20220313
|
||||
|
/// @note
|
||||
|
//////////////////////////////////////////////////////////////////////////////
|
||||
|
|
||||
|
#ifndef _bsp_config_stc_H |
||||
|
#define _bsp_config_stc_H |
||||
|
|
||||
|
#if(TYPE_MCU == TYPE_MCU_STC_8H) |
||||
|
#define D_CPUfamily_type D_CPUfamily_8bits |
||||
|
/// #include "../cpu/STC_stc8h3k.h"
|
||||
|
/// #include "../cpu/STC_stc8f.h"
|
||||
|
|
||||
|
#include "../cpu/stc_8A8K64D4.h" |
||||
|
#include "../cpu/stc_8A8K64D4_ext.h"////扩展 依据规格书 |
||||
|
|
||||
|
#include "../cpu/STC_only.h" |
||||
|
#include "../cpu/c51_macro.h" |
||||
|
#include "TTSS_time_stc.h" |
||||
|
|
||||
|
|
||||
|
#if(MainFre_5M == D_sys_MainFre) |
||||
|
#define D_Cdelay_200us 20 |
||||
|
#define D_Cdelay_1us 1 ////while p21翻转时测定 500k 2us 一个指令
|
||||
|
#elif(MainFre_22M == D_sys_MainFre) |
||||
|
#define D_Cdelay_200us 20 |
||||
|
#define D_Cdelay_1us 1 ////while p21翻转时测定 500k 2us 一个指令
|
||||
|
#define D_Cdelay_1us 1 ////while p21翻转时测定 500k 2us 一个指令
|
||||
|
#define L0_delay_1us() Lc_delay_nop(0) // 5个nop() 100ns 50个nop() 1us (20)=10us (2)1.5us
|
||||
|
#define L0_delay_10us() Lc_delay_nop(4) // 5个nop() 100ns 50个nop() 1us (20)=10us (2)1.5us
|
||||
|
#define L0_delay_40us() Lc_delay_nop(18) // 5个nop() 100ns 50个nop() 1us (20)=10us (2)1.5us
|
||||
|
#define D_delay_para1ms 90 |
||||
|
#elif(MainFre_27M == D_sys_MainFre) |
||||
|
#define D_Cdelay_200us 20 |
||||
|
#define D_Cdelay_1us 1 ////while p21翻转时测定 500k 2us 一个指令
|
||||
|
#else ///MainFre_11M
|
||||
|
#define D_Cdelay_200us 20 |
||||
|
#define D_Cdelay_1us 1 ////while p21翻转时测定 500k 2us 一个指令
|
||||
|
#define L0_delay_1us() Lc_delay_nop(0) // 5个nop() 100ns 50个nop() 1us (20)=10us (2)1.5us
|
||||
|
#define L0_delay_10us() Lc_delay_nop(4) // 5个nop() 100ns 50个nop() 1us (20)=10us (2)1.5us
|
||||
|
#define L0_delay_40us() Lc_delay_nop(18) // 5个nop() 100ns 50个nop() 1us (20)=10us (2)1.5us
|
||||
|
#define D_delay_para1ms 90 |
||||
|
|
||||
|
#endif//D_sys_MainFre)
|
||||
|
|
||||
|
#endif///TYPE_MCU
|
||||
|
|
||||
|
|
||||
|
//Step4: IRQ Config
|
||||
|
|
||||
|
|
||||
|
///这种不允许换行,即使后面没有其他字符也不可以.
|
||||
|
#if 0 |
||||
|
#define D_SERVE_INT0 interrupt 0 |
||||
|
#define D_SERVE_TIMER0 interrupt 1 |
||||
|
#define D_SERVE_INT1 interrupt 2 |
||||
|
#define D_SERVE_TIMER1 interrupt 3 |
||||
|
#define D_SERVE_UART interrupt UART1_VECTOR |
||||
|
#define D_SERVE_ADC interrupt 5 |
||||
|
#define D_SERVE_LVD interrupt 6 |
||||
|
#define D_SERVE_PCA interrupt 7 |
||||
|
#define D_SERVE_UART2 interrupt 8 |
||||
|
#define D_SERVE_SPI interrupt 9 |
||||
|
#define D_SERVE_INT2 interrupt 10 |
||||
|
#define D_SERVE_INT3 interrupt 11 |
||||
|
#define D_SERVE_TIMER2 interrupt 12 |
||||
|
#define D_SERVE_INT4 interrupt 16 |
||||
|
#define D_SERVE_UART3 interrupt 17 |
||||
|
#define D_SERVE_UART4 interrupt 18 |
||||
|
|
||||
|
#define D_SERVE_TIMER3 interrupt 19 |
||||
|
#define D_SERVE_TIMER4 interrupt 20 |
||||
|
#define D_SERVE_CMP interrupt 21 |
||||
|
#define D_SERVE_PWM interrupt 22 |
||||
|
#define D_SERVE_PWMFD interrupt 23 |
||||
|
#define D_SERVE_I2C interrupt 24 |
||||
|
#endif |
||||
|
|
||||
|
#endif//_bsp_config_after_H
|
||||
|
/*********************************end file*********************************************/ |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
@ -0,0 +1,328 @@ |
|||||
|
////////////////////////////////////////////////////////////////////////////
|
||||
|
///@copyright Copyright (c) 2020, 传控科技 All rights reserved.
|
||||
|
///-------------------------------------------------------------------------
|
||||
|
/// @file cs1232.h
|
||||
|
/// @brief hard cs1232 include
|
||||
|
/// @info FILE FOR HARDWARE cs1232
|
||||
|
///-------------------------------------------------------------------------
|
||||
|
|
||||
|
|
||||
|
//////////////////////////////////////////////////////////////////////////////
|
||||
|
/// @version 1.0
|
||||
|
/// @author CC
|
||||
|
/// @date 20200530
|
||||
|
/// @note
|
||||
|
//////////////////////////////////////////////////////////////////////////////
|
||||
|
|
||||
|
#include "bsp_cs1232.h" |
||||
|
///TS_cs1232_ ts_adc;///TSS_FLOW_ tss_ads;
|
||||
|
|
||||
|
void L0_ADS1213_mode(vtype mode) |
||||
|
{ |
||||
|
switch(mode) |
||||
|
{ |
||||
|
case D_ADS1213_POWERDOWN: |
||||
|
D_ADC_SCLK1_CLOSE(); |
||||
|
D_ADC_DOUT1_CLOSE(); |
||||
|
D_ADC_SCLK2_CLOSE(); |
||||
|
D_ADC_DOUT2_CLOSE(); |
||||
|
D_ADC_SCLK3_CLOSE(); |
||||
|
D_ADC_DOUT3_CLOSE(); |
||||
|
D_ADC_SCLK4_CLOSE(); |
||||
|
D_ADC_DOUT4_CLOSE(); |
||||
|
D_ADC_POWERDOWN(); |
||||
|
L0_uart0_uc('d'); |
||||
|
break; |
||||
|
case D_ADS1213_GAIN_128: |
||||
|
D_ADC_GAIN0_128(); |
||||
|
L0_uart0_uc('8'); |
||||
|
break; |
||||
|
case D_ADS1213_GAIN_64: |
||||
|
D_ADC_GAIN0_64(); |
||||
|
L0_uart0_uc('6'); |
||||
|
break; |
||||
|
default: |
||||
|
D_ADC_GAIN0_64(); |
||||
|
L0_uart0_uc('q'); |
||||
|
break; |
||||
|
}; |
||||
|
} |
||||
|
|
||||
|
void L0_ADS1213_INIT(vtype mode) |
||||
|
{ |
||||
|
D_ADC_GAIN0_INIT(); |
||||
|
D_ADC_SCLK1_INIT(); |
||||
|
D_ADC_DOUT1_INIT(); |
||||
|
D_ADC_SCLK2_INIT(); |
||||
|
D_ADC_DOUT2_INIT(); |
||||
|
D_ADC_SCLK3_INIT(); |
||||
|
D_ADC_DOUT3_INIT(); |
||||
|
D_ADC_SCLK4_INIT(); |
||||
|
D_ADC_DOUT4_INIT(); |
||||
|
D_ADC_PDWN_INIT(); |
||||
|
D_ADC_PD_WACKUP(); |
||||
|
L0_ADS1213_mode(mode); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
void L0_adc_SCLK(vtype ch,vtype onf) |
||||
|
{ |
||||
|
switch (ch) |
||||
|
{ |
||||
|
case D_ADCCH_1: |
||||
|
if(onf){D_ADC_SCLK1_ON();}else{D_ADC_SCLK1_OFF();} |
||||
|
break; |
||||
|
case D_ADCCH_2: |
||||
|
if(onf){D_ADC_SCLK2_ON();}else{D_ADC_SCLK2_OFF();} |
||||
|
break; |
||||
|
case D_ADCCH_3: |
||||
|
if(onf){D_ADC_SCLK3_ON();}else{D_ADC_SCLK3_OFF();} |
||||
|
break; |
||||
|
case D_ADCCH_4: |
||||
|
if(onf){D_ADC_SCLK4_ON();}else{D_ADC_SCLK4_OFF();} |
||||
|
break; |
||||
|
default: |
||||
|
break; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
vtype L0_adc_DOUT_AT(vtype ch) |
||||
|
{ |
||||
|
vtype r = 9; |
||||
|
|
||||
|
switch (ch) |
||||
|
{ |
||||
|
case D_ADCCH_1: |
||||
|
r = D_ADC_DOUT1_AT(); |
||||
|
break; |
||||
|
case D_ADCCH_2: |
||||
|
r = D_ADC_DOUT2_AT(); |
||||
|
break; |
||||
|
case D_ADCCH_3: |
||||
|
r = D_ADC_DOUT3_AT(); |
||||
|
break; |
||||
|
case D_ADCCH_4: |
||||
|
r = D_ADC_DOUT4_AT(); |
||||
|
break; |
||||
|
default: |
||||
|
break; |
||||
|
} |
||||
|
return r; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
void L0_ADS1231_readCH2(vtype ch,vU32 *d) |
||||
|
{ |
||||
|
u8 i = 0; |
||||
|
vU32 rdata; |
||||
|
/// vU16 t16;
|
||||
|
rdata = 0; |
||||
|
|
||||
|
for(i = 0; i < 24; i++) |
||||
|
{ |
||||
|
L0_adc_SCLK(ch,1);/// D_ADC_SCLK1_ON();
|
||||
|
rdata <<= 1; |
||||
|
L0_adc_SCLK(ch,0);///D_ADC_SCLK1_OFF();
|
||||
|
if(L0_adc_DOUT_AT(ch)) |
||||
|
{ |
||||
|
rdata += 1; |
||||
|
} |
||||
|
} |
||||
|
///25 puls make DOUT high
|
||||
|
L0_adc_SCLK(ch,1); |
||||
|
///FF84 CC09 FF84 CC09
|
||||
|
L0_adc_SCLK(ch,0); |
||||
|
*d = rdata; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
#if 0 |
||||
|
|
||||
|
|
||||
|
void L0_ADS1231_readCH2555(vtype ch,vU16 *d) |
||||
|
{ |
||||
|
u8 i = 0; |
||||
|
vU32 rdata; |
||||
|
vU16 t16; |
||||
|
rdata = 0; |
||||
|
|
||||
|
for(i = 0; i < 24; i++) |
||||
|
{ |
||||
|
L0_adc_SCLK(ch,1);/// D_ADC_SCLK1_ON();
|
||||
|
rdata <<= 1; |
||||
|
L0_adc_SCLK(ch,0);///D_ADC_SCLK1_OFF();
|
||||
|
if(L0_adc_DOUT_AT(ch)) |
||||
|
{ |
||||
|
rdata += 1; |
||||
|
} |
||||
|
} |
||||
|
///25 puls make DOUT high
|
||||
|
L0_adc_SCLK(ch,1); |
||||
|
///FF84 CC09 FF84 CC09
|
||||
|
|
||||
|
L0_uart0_uc('0'+ch); L0_uart0_uc(0x09); |
||||
|
L0_uart0_ulhex(rdata); L0_uart0_uc(0x09); |
||||
|
if (rdata > 0x007fFFff) |
||||
|
{ |
||||
|
rdata >>= D_sensor_zoom; ///fixme:此处正负差和移位不一致需要谨慎
|
||||
|
rdata |= D_sensor_zoom_FF; /// 1111 1100
|
||||
|
}else |
||||
|
{ |
||||
|
rdata >>= D_sensor_zoom; |
||||
|
} |
||||
|
|
||||
|
// L0_uart0_ulhex(rdata); L0_uart0_uc(0x09);
|
||||
|
t16 = rdata; |
||||
|
// L0_uart0_ushex(t16); L0_uart0_uc(0x09);
|
||||
|
///L0_uart0_0d0a();
|
||||
|
|
||||
|
|
||||
|
if(t16 & 0x8000) //最高位为1,<0则
|
||||
|
{ |
||||
|
t16 = 0xffFF - t16;///转变为正数
|
||||
|
///*d = D_ADC_OFFSET - t16;
|
||||
|
*d = D_ADC_OFFSET - t16; |
||||
|
}else |
||||
|
{ |
||||
|
*d = t16 + D_ADC_OFFSET; |
||||
|
} |
||||
|
// L0_uart0_ushex(*d); L0_uart0_0d0a();
|
||||
|
|
||||
|
|
||||
|
L0_adc_SCLK(ch,0); |
||||
|
} |
||||
|
#endif |
||||
|
|
||||
|
/*********************************end file*********************************************/ |
||||
|
|
||||
|
|
||||
|
//#define D_ADC_GATHER_Way1 1
|
||||
|
#if 0 |
||||
|
|
||||
|
|
||||
|
//调试阻塞读
|
||||
|
vS32 L0_ADS1231_read(U8 ch) |
||||
|
{ |
||||
|
vU32 e = 0;u8 i;vS32 rdata = 0; |
||||
|
while(1 == L0_2dc_DOUT_AT(ch)) |
||||
|
{ |
||||
|
if(e ++ > 100000) |
||||
|
{ |
||||
|
//return 0;
|
||||
|
} |
||||
|
} |
||||
|
for(i = 0; i < 24; i++) |
||||
|
{ |
||||
|
L0_2dc_SCLK(ch,1); |
||||
|
rdata <<= 1; |
||||
|
L0_2dc_SCLK(ch,0); |
||||
|
if(L0_2dc_DOUT_AT(ch)) |
||||
|
{ |
||||
|
rdata += 1; |
||||
|
} |
||||
|
} |
||||
|
L0_2dc_SCLK(ch,1); |
||||
|
if(rdata & 0x800000) //???λ?1??<0??
|
||||
|
{ |
||||
|
rdata |= 0xFF000000; |
||||
|
} |
||||
|
return rdata; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
void L1_ADS1213_main(void) |
||||
|
{ |
||||
|
U8 ch = D_ADCCH_2; |
||||
|
while(1) |
||||
|
{ |
||||
|
while(1 == L0_2dc_DOUT_AT(ch)) |
||||
|
; |
||||
|
tss_ads.u32_i = L0_ADS1231_readCH(ch); |
||||
|
tss_ads.u16_v = (vU16)( tss_ads.u32_i >> 16); |
||||
|
L0_uart0_ushex(tss_ads.u16_v); |
||||
|
tss_ads.u16_v = (vU16)(tss_ads.u32_i & 0x0000ffff); |
||||
|
L0_uart0_ushex(tss_ads.u16_v);//Lc_delay_us(500);
|
||||
|
L0_uart0_uc(0x0d); L0_uart0_uc(0x0a); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
u8 Read_byte_adcIC(void) |
||||
|
{ |
||||
|
u8 i; |
||||
|
u8 rdata = 0; //初始化返回值为 0
|
||||
|
for(i = 0; i < 8; i++) |
||||
|
{ |
||||
|
D_ADC_SCLK1_ON(); |
||||
|
rdata <<= 1; //返回值左移 1 位
|
||||
|
/// CS1231_Clk(); //上升沿接收数据,下降沿更新数据
|
||||
|
|
||||
|
D_ADC_SCLK1_OFF(); |
||||
|
|
||||
|
|
||||
|
if(D_ADC_DOUT1_AT()) |
||||
|
{ |
||||
|
rdata += 1; //若数据线上数据为 1,则返回值加 1
|
||||
|
} |
||||
|
} |
||||
|
return(rdata); |
||||
|
} |
||||
|
|
||||
|
void L0_ADS1213_CH(u8 ch) |
||||
|
{ |
||||
|
/// /// SPEED = 1 57--57 ms 硬件配置成高电平
|
||||
|
D_ADC_PDWN_OFF(); |
||||
|
switch(ch) |
||||
|
{ |
||||
|
case D_ADCCH_T: |
||||
|
L0_ADS1213_T(1); |
||||
|
break; |
||||
|
case D_ADCCH_1: |
||||
|
D_ADC_CS_A0_OFF(); |
||||
|
break; |
||||
|
case D_ADCCH_2: |
||||
|
D_ADC_CS_A0_ON(); |
||||
|
break; |
||||
|
case D_ADCCH_3: |
||||
|
//D_ADC_CS2_A0_OFF();
|
||||
|
break; |
||||
|
case D_ADCCH_4: |
||||
|
//D_ADC_CS2_A0_ON();
|
||||
|
break; |
||||
|
default:///
|
||||
|
L0_ADS1213_T(0); |
||||
|
break; |
||||
|
}; |
||||
|
Lc_delay_us(50); |
||||
|
D_ADC_PDWN_ON(); |
||||
|
} |
||||
|
|
||||
|
//channel-温度
|
||||
|
void L0_ADS1213_T(u8 onff) |
||||
|
{ |
||||
|
if(onff) |
||||
|
{ |
||||
|
D_ADC_PDWN_OFF(); |
||||
|
D_ADC_TEMP_ON(); |
||||
|
Lc_delay_us(50); |
||||
|
D_ADC_PDWN_ON(); |
||||
|
} |
||||
|
else |
||||
|
{ |
||||
|
D_ADC_PDWN_OFF(); |
||||
|
D_ADC_TEMP_OFF(); |
||||
|
Lc_delay_us(50); |
||||
|
D_ADC_PDWN_ON(); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
#endif |
||||
|
|
||||
|
|
||||
|
|
||||
|
/*********************************************/ |
||||
|
|
||||
|
|
||||
|
|
||||
@ -0,0 +1,212 @@ |
|||||
|
////////////////////////////////////////////////////////////////////////////
|
||||
|
///@copyright Copyright (c) 2020, 传控科技 All rights reserved.
|
||||
|
///-------------------------------------------------------------------------
|
||||
|
/// @file cs1232.h
|
||||
|
/// @brief hard cs1232 include
|
||||
|
/// @info FILE FOR HARDWARE cs1232
|
||||
|
///-------------------------------------------------------------------------
|
||||
|
|
||||
|
|
||||
|
//////////////////////////////////////////////////////////////////////////////
|
||||
|
/// @version 1.0
|
||||
|
/// @author CC
|
||||
|
/// @date 20200530
|
||||
|
/// @note
|
||||
|
//////////////////////////////////////////////////////////////////////////////
|
||||
|
|
||||
|
|
||||
|
//////////////////////////////////////////////////////////////////////////
|
||||
|
#ifndef _BSP_cs1232_H |
||||
|
#define _BSP_cs1232_H |
||||
|
|
||||
|
#include "../bsp/bsp_config.h" |
||||
|
#include "msp_uart0.h" |
||||
|
#include "TTSS_task.h" |
||||
|
|
||||
|
|
||||
|
|
||||
|
#define D_ADCCH_1 0 |
||||
|
#define D_ADCCH_2 1 |
||||
|
#define D_ADCCH_3 2 |
||||
|
#define D_ADCCH_4 3 |
||||
|
|
||||
|
#define D_ADCCH_T 8 |
||||
|
#define D_ADCCH_Toff 9 |
||||
|
|
||||
|
///数字部分需要有四个数据转换周期满足模拟输入信号的建立和滤波器的建立时间要求。芯
|
||||
|
///片从外部差分输入信号切换到温度传感器、从温度传感器切换到外部差分输入信号,或通
|
||||
|
///道间切换,到新的正确的数据到来都需要四个数据转换周期。整个建立过程如下图所示:
|
||||
|
///A0/TEMP _______________/````````
|
||||
|
///'DRDY/DOUT----------------/``\'
|
||||
|
///改变 A0 或 TEMP 后的建立时间 40--50 us
|
||||
|
//// 建立时间 ( 保持高电 平)
|
||||
|
/// SPEED = 1 57--57 ms
|
||||
|
/// SPEED = 0 407--407 ms
|
||||
|
|
||||
|
////值是在 fclk=4.9152MHz 时对应的值,不同的 fclk 频率,数值等比例变化
|
||||
|
|
||||
|
/// CS1232 在连续转换过程中,若外部差分输入信号发生突然变化,同样需要建立时间。突变
|
||||
|
///的信号需要 4 个转换周期进行建立,第 5 个转换周期得到最终的 AD 值。图 7 描述突变信
|
||||
|
///号建立的过程。若在建立的过程中,信号再发生突变,则忽略之前的建立,需要新的 4 个
|
||||
|
///转换周期进行建立,之后紧接着的第 5 个转换周期得到最终的 AD 值。
|
||||
|
|
||||
|
/// 内部振荡器频率 4.6 5 5.4 MHz
|
||||
|
/// 内置时钟温漂 250 ppm/℃----40``85 125*250= 31250 /1000000 = 0.03125 变化为3.125%
|
||||
|
|
||||
|
/// 电阻的2113温度系数值(TCR)的单位为PPM或者PPM/摄氏度5261。
|
||||
|
|
||||
|
/// 其含义为当温度上升或者下降1摄氏度时,电阻的41021653阻值的变化为百万分之几。
|
||||
|
|
||||
|
/// 例如15PPM 1kΩ的 0.1%精度的电阻,如下图。
|
||||
|
|
||||
|
/// 温漂的含义在这回里为,当温度上升或下降1摄氏度时,阻值上升或者降低,百万分之答15.
|
||||
|
|
||||
|
//// 温度系数:±ppm/℃,bai即单位温度引起的电阻值的变化。ppm(Part Per Million)表示百万分之几,
|
||||
|
////比如:标称阻值为1k的电du阻,温度系数为±100ppm/℃,意为温度变化一摄zhi氏度,
|
||||
|
///电阻值的变化为1k±0.1Ω,变化100℃,阻值变化为1k±10Ω,精度非常高了。
|
||||
|
////电阻的温度系数精密级的在几十ppm,普通dao的是200~250ppm,最差的也不过500ppm。
|
||||
|
#define D_adc_delay() Lc_delay_nop(2) |
||||
|
#define D_adc_delay2() Lc_delay_nop(1) |
||||
|
|
||||
|
/**************
|
||||
|
|
||||
|
IO DEFINE PIN |
||||
|
P1.0 DOUT2 1 |
||||
|
P1.6 SCLK2 2 |
||||
|
P1.7 LED1 3 |
||||
|
P5.4 LED2 7 |
||||
|
P5.5 485_RE 9 |
||||
|
P1.1 PDWN 20 |
||||
|
P1.2 GAIN0 19 |
||||
|
P3.7 DOUT3 18 |
||||
|
P3.6 DOUT1 17 |
||||
|
P3.5 SCLK1 16 |
||||
|
P3.4 SCLK3 15 |
||||
|
P3.3 DOUT4 14 |
||||
|
P3.2 SCLK4 13 |
||||
|
P3.1 TXD0 12 |
||||
|
P3.0 RXD0 11 |
||||
|
*****************/ |
||||
|
|
||||
|
|
||||
|
#define D_ADC_SCLK1_INIT() D_stdIO_P3(BITN5);D_ADC_SCLK1_OFF(); |
||||
|
#define D_ADC_SCLK1_CLOSE() D_HighR_P3(BITN5); |
||||
|
#define D_ADC_SCLK1_ON() D_P35_ON();D_adc_delay2(); |
||||
|
#define D_ADC_SCLK1_OFF() D_P35_OFF();D_adc_delay(); |
||||
|
|
||||
|
//#define D_ADC_DOUT1_INIT() D_stdIO_P3(BITN6);
|
||||
|
#define D_ADC_DOUT1_INIT() D_HighR_P3(BITN6); |
||||
|
#define D_ADC_DOUT1_CLOSE() D_HighR_P3(BITN6); |
||||
|
//#define D_ADC_DOUT1_ON() D_P36_ON()
|
||||
|
//#define D_ADC_DOUT1_OFF() D_P36_OFF()
|
||||
|
#define D_ADC_DOUT1_AT() D_P36_AT() |
||||
|
|
||||
|
|
||||
|
|
||||
|
#define D_ADC_SCLK2_INIT() D_stdIO_P1(BITN6);D_ADC_SCLK2_OFF(); |
||||
|
#define D_ADC_SCLK2_CLOSE() D_HighR_P1(BITN6); |
||||
|
#define D_ADC_SCLK2_ON() D_P16_ON();D_adc_delay2(); |
||||
|
#define D_ADC_SCLK2_OFF() D_P16_OFF();D_adc_delay(); |
||||
|
|
||||
|
#define D_ADC_DOUT2_INIT() D_HighR_P1(BITN0); |
||||
|
#define D_ADC_DOUT2_CLOSE() D_HighR_P1(BITN0); |
||||
|
#define D_ADC_DOUT2_ON() D_P10_ON() |
||||
|
#define D_ADC_DOUT2_OFF() D_P10_OFF() |
||||
|
#define D_ADC_DOUT2_AT() D_P10_AT() |
||||
|
|
||||
|
|
||||
|
#define D_ADC_SCLK3_INIT() D_stdIO_P3(BITN4);D_ADC_SCLK3_OFF(); |
||||
|
#define D_ADC_SCLK3_CLOSE() D_HighR_P3(BITN4); |
||||
|
#define D_ADC_SCLK3_ON() D_P34_ON();D_adc_delay2(); |
||||
|
#define D_ADC_SCLK3_OFF() D_P34_OFF();D_adc_delay(); |
||||
|
|
||||
|
#define D_ADC_DOUT3_INIT() D_HighR_P3(BITN7); |
||||
|
#define D_ADC_DOUT3_CLOSE() D_HighR_P3(BITN7); |
||||
|
#define D_ADC_DOUT3_ON() D_P37_ON() |
||||
|
#define D_ADC_DOUT3_OFF() D_P37_OFF() |
||||
|
#define D_ADC_DOUT3_AT() D_P37_AT() |
||||
|
|
||||
|
#define D_ADC_SCLK4_INIT() D_stdIO_P3(BITN2);D_ADC_SCLK4_OFF(); |
||||
|
#define D_ADC_SCLK4_CLOSE() D_HighR_P3(BITN2); |
||||
|
#define D_ADC_SCLK4_ON() D_P32_ON();D_adc_delay2(); |
||||
|
#define D_ADC_SCLK4_OFF() D_P32_OFF();D_adc_delay(); |
||||
|
|
||||
|
#define D_ADC_DOUT4_INIT() D_HighR_P3(BITN3); |
||||
|
#define D_ADC_DOUT4_CLOSE() D_HighR_P3(BITN3); |
||||
|
#define D_ADC_DOUT4_ON() D_P33_ON() |
||||
|
#define D_ADC_DOUT4_OFF() D_P33_OFF() |
||||
|
#define D_ADC_DOUT4_AT() D_P33_AT() |
||||
|
|
||||
|
#define D_ADC_GAIN0_INIT() D_stdIO_P1(BITN2) |
||||
|
#define D_ADC_GAIN0_CLOSE() D_HighR_P1(BITN2) |
||||
|
#define D_ADC_GAIN0_128() D_P12_ON() |
||||
|
#define D_ADC_GAIN0_64() D_P12_OFF() |
||||
|
|
||||
|
|
||||
|
#define D_ADC_PDWN_INIT() D_stdIO_P1(BITN1) |
||||
|
#define D_ADC_PDWN_CLOSE() D_HighR_P1(BITN1) |
||||
|
#define D_ADC_PD_WACKUP() D_P11_ON() //唤醒时间至少5.6ms
|
||||
|
#define D_ADC_POWERDOWN() D_P11_OFF() ///持续26us以上
|
||||
|
|
||||
|
|
||||
|
#define D_ADS1213_GAIN_64 64 |
||||
|
#define D_ADS1213_GAIN_128 1 |
||||
|
#define D_ADS1213_POWERDOWN 0 |
||||
|
|
||||
|
#define D_ADS1213_GAIN_VAL 128///FIXME
|
||||
|
|
||||
|
///xxxxxxxxxxxxxxxxxxxxxextern void L0_ADS1213_INIT(void);
|
||||
|
extern void L0_ADS1213_INIT(vtype mode); |
||||
|
|
||||
|
|
||||
|
///void L0_ADS1231_readCH2(vtype ch,vU32 *rdata);
|
||||
|
///void L0_ADS1231_readCH2(vtype ch,vU16 *d);
|
||||
|
void L0_ADS1231_readCH2(vtype ch,vU32 *d); |
||||
|
|
||||
|
extern vtype L0_adc_DOUT_AT(vtype ch); |
||||
|
|
||||
|
|
||||
|
#endif//_BSP_cs1232_H
|
||||
|
|
||||
|
|
||||
|
/*********************************end file*********************************************/ |
||||
|
/*******
|
||||
|
extern void L1_ADS1213_main(void); |
||||
|
|
||||
|
extern void L0_ADS1213_T(u8 onff); |
||||
|
extern void L0_ADS1213_CH(u8 ch); |
||||
|
//extern vS32 L0_ADS1213_read1(U8 *error);
|
||||
|
//extern vS32 L0_ADS1213_read2(U8 *error);
|
||||
|
//extern vS32 L0_ADS1213_read(U8 ch,U8 *error);
|
||||
|
//extern U8 L0_ADS1213_is_low(U8 ch);
|
||||
|
//extern U8 L0_ADS1213_is_high(U8 ch);
|
||||
|
extern void L0_adc_SCLK(vtype ch,vtype onf); |
||||
|
extern vS32 L0_ADS1231_readCH(vtype ch); |
||||
|
extern vS32 L0_ADS1231_read(U8 ch); |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
typedef struct |
||||
|
{ |
||||
|
// TS_task task;
|
||||
|
vU8 t_stamp; |
||||
|
vU16 t_stamp2; |
||||
|
vU16 wakeup_timer; |
||||
|
|
||||
|
vU32 u32_adc;//
|
||||
|
|
||||
|
|
||||
|
|
||||
|
/// vU8 long_hit;
|
||||
|
// vU8 first_run;
|
||||
|
vU32 u32_i;//
|
||||
|
vU32 u32_m;//
|
||||
|
vU16 u16_v;//
|
||||
|
// unsigned char status;//
|
||||
|
// unsigned char key;//
|
||||
|
}TS_cs1232_; |
||||
|
extern TS_cs1232_ ts_adc; |
||||
|
|
||||
|
*******/ |
||||
|
|
||||
@ -0,0 +1,53 @@ |
|||||
|
////////////////////////////////////////////////////////////////////////////
|
||||
|
///@copyright Copyright (c) 2018, 传控科技 All rights reserved.
|
||||
|
///-------------------------------------------------------------------------
|
||||
|
/// @file bsp_func.c
|
||||
|
/// @brief bsp @ fuctiong ; io复用选择等,和cpu型号息息相关
|
||||
|
///-------------------------------------------------------------------------
|
||||
|
/// @version 1.0
|
||||
|
/// @author CC
|
||||
|
/// @date 20180308
|
||||
|
/// @note cc_AS_stc02
|
||||
|
|
||||
|
|
||||
|
|
||||
|
//////////////////////////////////////////////////////////////////////////////
|
||||
|
|
||||
|
#include "bsp_func.h" |
||||
|
#include "../msp/uart0.h" |
||||
|
//#include "../tpc/tpc_modbus.h"
|
||||
|
|
||||
|
///struct _s_sysclk s_sysclk;
|
||||
|
|
||||
|
|
||||
|
////MCLK0 配置 不需要的时候关闭以节约电
|
||||
|
void L0_MCLKO_init(U8 onf) |
||||
|
{ |
||||
|
BITN_1(P_SW2,EAXFR); |
||||
|
CKSEL &= B0000_0011; |
||||
|
if (D_ON == onf) |
||||
|
{ |
||||
|
///-----------------------------------------------------
|
||||
|
// p107@stc8.pdf
|
||||
|
///step 1 :设置system out clock
|
||||
|
//BITS_CLR(CKSEL,BITC_4,BIT4); /// 对REG的 从BITx开始 清除 N位
|
||||
|
///多位配置,一定要配对使用,先清除再设置。
|
||||
|
BITS_SET(CKSEL,D_CLKODIV_DIV8);/// sytem out clock 300k
|
||||
|
///step 2 :设置IO
|
||||
|
BITN_0(CKSEL,MCLKO_S);/// P5.4 SELECTED
|
||||
|
BITN_0(P5M1,BITN4);BITN_1(P5M0,BITN4);/// 01 推挽
|
||||
|
} |
||||
|
else |
||||
|
{ |
||||
|
BITS_CLR(CKSEL,BITC_4,BIT4); |
||||
|
BITN_1(P5M1,BITN4);BITN_0(P5M0,BITN4);/// 00 准双向口01 推挽输出10 高阻11 开漏
|
||||
|
//// 32k 下L1_task_Tdelay(D_Tdelay_ms); 变成了大约8s
|
||||
|
///fixme
|
||||
|
/// BITN_1(P5M1,BITN4);BITN_0(P5M0,BITN4);/// 00 准双向口01 推挽输出10 高阻11 开漏
|
||||
|
///? 使用10 功耗增加11.130 使用01 功耗为10.65
|
||||
|
//P54 = 1; 推挽 居然比高阻省电 另外推挽下面 =1比=0省电 10uA
|
||||
|
} |
||||
|
BITN_0(P_SW2,EAXFR); |
||||
|
} |
||||
|
|
||||
|
|
||||
@ -0,0 +1,52 @@ |
|||||
|
////////////////////////////////////////////////////////////////////////////
|
||||
|
///@copyright Copyright (c) 2018, ´«¿Ø¿Æ¼¼ All rights reserved.
|
||||
|
///-------------------------------------------------------------------------
|
||||
|
/// @file bsp_func.c
|
||||
|
/// @brief bsp_func
|
||||
|
///-------------------------------------------------------------------------
|
||||
|
/// @version 1.0
|
||||
|
/// @author CC
|
||||
|
/// @date 20170122
|
||||
|
/// @note cc_AS_stc01
|
||||
|
//////////////////////////////////////////////////////////////////////////////
|
||||
|
|
||||
|
#ifndef _bsp_func_H |
||||
|
#define _bsp_func_H |
||||
|
|
||||
|
#include "../bsp/bsp_config.h" |
||||
|
#include "../clib/bit.h" |
||||
|
struct _s_sysclk |
||||
|
{ |
||||
|
U32 m; |
||||
|
U32 clk; |
||||
|
U32 out; |
||||
|
}; |
||||
|
|
||||
|
extern struct _s_sysclk s_sysclk; |
||||
|
|
||||
|
#define P3130 0 |
||||
|
//#define P1617 0
|
||||
|
#define P3736 1 |
||||
|
|
||||
|
extern void L0_MCLKO_init(U8 onf); |
||||
|
|
||||
|
|
||||
|
#define D_CLKODIV_NONE 0 |
||||
|
|
||||
|
#define D_CLKODIV_DIV1 B0001_0000 |
||||
|
#define D_CLKODIV_DIV2 B0010_0000 |
||||
|
#define D_CLKODIV_DIV4 B0100_0000 |
||||
|
#define D_CLKODIV_DIV8 B0110_0000 |
||||
|
#define D_CLKODIV_DIV16 B1000_0000 |
||||
|
#define D_CLKODIV_DIV32 B1010_0000 |
||||
|
#define D_CLKODIV_DIV64 B1100_0000 |
||||
|
#define D_CLKODIV_DIV128 B1110_0000 |
||||
|
|
||||
|
#define D_CLKODIV_MCLKO_S BITN3 |
||||
|
|
||||
|
#define D_CLKODIV_MCKSEL_IN24M B0000_0000 |
||||
|
#define D_CLKODIV_MCKSEL_EXTERN B0000_0001 |
||||
|
#define D_CLKODIV_MCKSEL_IN32K B0000_0011 |
||||
|
|
||||
|
#endif // #ifndef _bsp_func_H
|
||||
|
|
||||
@ -0,0 +1,773 @@ |
|||||
|
#include "bsp_gc032a.h" |
||||
|
#if 0 |
||||
|
const U8 GC6133_init_reg_sys[][2]= { |
||||
|
|
||||
|
/*System*/ |
||||
|
{0xf3,0xff}, |
||||
|
{0xf5,0x06}, |
||||
|
{0xf7,0x01}, |
||||
|
{0xf9,0xce}, |
||||
|
{0xfa,0x00}, |
||||
|
//1002 {0xf8,0x03},//////分频 {0xf8,0x03},
|
||||
|
{0xf8,0x0f},//////分频 {0xf8,0x03},
|
||||
|
// {0xfa,D_0xfa}, // cc add
|
||||
|
/// {0xfd,D_0xfa}, // cc add
|
||||
|
/// {0xfa,D_0xfa}, // cc add
|
||||
|
/// {0xfd,D_0xfa}, // cc add
|
||||
|
///20181002启动时使用较高频率 当启动后恢复低频率
|
||||
|
{0xfc,0x02}, |
||||
|
{0x00,0x00} |
||||
|
/// ///20181003
|
||||
|
//
|
||||
|
}; |
||||
|
|
||||
|
|
||||
|
const U8 GC6133_init_reg_tbl[][2]= { |
||||
|
{0xfe,0x02},//page 2
|
||||
|
{0x81,0x03}, |
||||
|
|
||||
|
{0xfe,0x00}, |
||||
|
{0x77,0x64}, |
||||
|
{0x78,0x40}, |
||||
|
{0x79,0x60}, |
||||
|
/*ANALOG & CISCTL*/ |
||||
|
{0xfe,0x00},//page 0
|
||||
|
{0x03,0x01}, |
||||
|
{0x04,0xce}, |
||||
|
{0x05,0x01}, |
||||
|
{0x06,0xad}, |
||||
|
{0x07,0x00}, |
||||
|
{0x08,0x10}, |
||||
|
{0x0a,0x00}, |
||||
|
{0x0c,0x00}, |
||||
|
{0x0d,0x01}, |
||||
|
{0x0e,0xe8}, |
||||
|
{0x0f,0x02}, |
||||
|
{0x10,0x88}, |
||||
|
{0x17,0x54}, |
||||
|
{0x19,0x08}, |
||||
|
{0x1a,0x0a}, |
||||
|
{0x1f,0x40}, |
||||
|
{0x20,0x30}, |
||||
|
{0x2e,0x80}, |
||||
|
{0x2f,0x2b}, |
||||
|
{0x30,0x1a}, |
||||
|
{0xfe,0x02}, |
||||
|
{0x03,0x02}, |
||||
|
{0x05,0xd7}, |
||||
|
{0x06,0x60}, |
||||
|
{0x08,0x80}, |
||||
|
{0x12,0x89}, |
||||
|
|
||||
|
/* BLK*/ |
||||
|
{0xfe,0x00},//page 1
|
||||
|
{0x18,0x02}, |
||||
|
{0xfe,0x02},//page 2
|
||||
|
{0x40,0x22}, |
||||
|
{0x45,0x00}, |
||||
|
{0x46,0x00}, |
||||
|
{0x49,0x20}, |
||||
|
{0x4b,0x3c}, |
||||
|
{0x50,0x20}, |
||||
|
{0x42,0x10}, |
||||
|
|
||||
|
/*ISP*/ |
||||
|
{0xfe,0x01},//page 1
|
||||
|
{0x0a,0xc5}, |
||||
|
{0x45,0x00}, |
||||
|
{0xfe,0x00},//page 0
|
||||
|
{0x40,0xff}, |
||||
|
{0x41,0x25}, |
||||
|
{0x42,0xcd},///cc201805 close AWB{0x42,0xcf},
|
||||
|
/// {0x44,0x83},///P0:0x44 Output_format [7] YUV420_row_switch 5’h03: Y Cr Y Cb
|
||||
|
{0x44,B1001_0000},///P0:0x44 Output_format [7] YUV420_row_switch 5’h10: only Y
|
||||
|
|
||||
|
{0x43,0x12},////{0x43,D_P00x43},// ///EABLE CrCb fixed en 02
|
||||
|
/** P0:0x43 special_effect 7 0x00 RW [7] NA
|
||||
|
[6] subsample2 |
||||
|
[5] subsample4 |
||||
|
[4] GAMMA_en |
||||
|
[3:2] only_edge_map |
||||
|
[1] CrCb_ fixed_en |
||||
|
[0] inverse color*/ |
||||
|
{0xda,0x00}, |
||||
|
{0xdb,0x00}, |
||||
|
/////{0x46,0x22},
|
||||
|
////-------------------------------------
|
||||
|
{0x46,B0010_1000},// hs high pclk polarity {0x46,0x22},
|
||||
|
/* P0:0x46 sync_mode 8 0x0f RW
|
||||
|
[7] data delay half |
||||
|
[6] hsync delay half |
||||
|
[5] odd_even_col_switch |
||||
|
[4] odd_even_row_switch |
||||
|
|
||||
|
[3] opclk gated in HB |
||||
|
[2] opclk polarity |
||||
|
[1] hsync polarity |
||||
|
[0] vsync polarity*/ |
||||
|
// {0x4c,D_P00x4c},//lsc test image
|
||||
|
// {0x4D,0xfc},//lsc test image
|
||||
|
|
||||
|
// {0x4a,0x86},//////div_gate+clk_en 82
|
||||
|
/**P0:0x4a Clock_gating_e
|
||||
|
n |
||||
|
8 0x82 RW [7] ISP quiet mode |
||||
|
[6] close AAA pclk |
||||
|
[5]vb change |
||||
|
[4]vb chang flop |
||||
|
--------------------- |
||||
|
[3]hb change |
||||
|
[2] DIV_gatedclk_en |
||||
|
[1] exception |
||||
|
[0] AEC_delay_mode*/ |
||||
|
|
||||
|
////-------------------------------------
|
||||
|
{0x49,0x03}, |
||||
|
{0x52,0x02}, |
||||
|
{0x54,0x00}, |
||||
|
{0xfe,0x02}, |
||||
|
{0x22,0xf6}, |
||||
|
|
||||
|
/*Shading*/ |
||||
|
{0xfe,0x01},//page 1
|
||||
|
{0xc1,0x38}, |
||||
|
{0xc2,0x4c}, |
||||
|
{0xc3,0x00}, |
||||
|
{0xc4,0x32}, |
||||
|
{0xc5,0x24}, |
||||
|
{0xc6,0x16}, |
||||
|
{0xc7,0x08}, |
||||
|
{0xc8,0x08}, |
||||
|
{0xc9,0x00}, |
||||
|
{0xca,0x20}, |
||||
|
{0xdc,0x8a}, |
||||
|
{0xdd,0xa0}, |
||||
|
{0xde,0xa6}, |
||||
|
{0xdf,0x75}, |
||||
|
|
||||
|
/*AWB*//*20170110*/ |
||||
|
{0xfe, 0x01},//page 1
|
||||
|
{0x7c, 0x09}, |
||||
|
{0x65, 0x06}, |
||||
|
{0x7c, 0x08}, |
||||
|
{0x56, 0xf4}, |
||||
|
{0x66, 0x0f}, |
||||
|
{0x67, 0x84}, |
||||
|
{0x6b, 0x80}, |
||||
|
{0x6d, 0x12}, |
||||
|
{0x6e, 0xb0}, |
||||
|
{0xfe, 0x01}, |
||||
|
{0x90, 0x00}, |
||||
|
{0x91, 0x00}, |
||||
|
{0x92, 0xf4}, |
||||
|
{0x93, 0xd5}, |
||||
|
{0x95, 0x0f}, |
||||
|
{0x96, 0xf4}, |
||||
|
{0x97, 0x2d}, |
||||
|
{0x98, 0x0f}, |
||||
|
{0x9a, 0x2d}, |
||||
|
{0x9b, 0x0f}, |
||||
|
{0x9c, 0x59}, |
||||
|
{0x9d, 0x2d}, |
||||
|
{0x9f, 0x67}, |
||||
|
{0xa0, 0x59}, |
||||
|
{0xa1, 0x00}, |
||||
|
{0xa2, 0x00}, |
||||
|
{0x86, 0x00}, |
||||
|
{0x87, 0x00}, |
||||
|
{0x88, 0x00}, |
||||
|
{0x89, 0x00}, |
||||
|
{0xa4, 0x00}, |
||||
|
{0xa5, 0x00}, |
||||
|
{0xa6, 0xd4}, |
||||
|
{0xa7, 0x9f}, |
||||
|
{0xa9, 0xd4}, |
||||
|
{0xaa, 0x9f}, |
||||
|
{0xab, 0xac}, |
||||
|
{0xac, 0x9f}, |
||||
|
{0xae, 0xd4}, |
||||
|
{0xaf, 0xac}, |
||||
|
{0xb0, 0xd4}, |
||||
|
{0xb1, 0xa3}, |
||||
|
{0xb3, 0xd4}, |
||||
|
{0xb4, 0xac}, |
||||
|
{0xb5, 0x00}, |
||||
|
{0xb6, 0x00}, |
||||
|
{0x8b, 0x00}, |
||||
|
{0x8c, 0x00}, |
||||
|
{0x8d, 0x00}, |
||||
|
{0x8e, 0x00}, |
||||
|
{0x94, 0x50}, |
||||
|
{0x99, 0xa6}, |
||||
|
{0x9e, 0xaa}, |
||||
|
{0xa3, 0x0a}, |
||||
|
{0x8a, 0x00}, |
||||
|
{0xa8, 0x50}, |
||||
|
{0xad, 0x55}, |
||||
|
{0xb2, 0x55}, |
||||
|
{0xb7, 0x05}, |
||||
|
{0x8f, 0x00}, |
||||
|
{0xb8, 0xb3}, |
||||
|
{0xb9, 0xb6}, |
||||
|
|
||||
|
|
||||
|
/*CC*/ |
||||
|
{0xfe,0x01},//page 0
|
||||
|
{0xd0,0x40}, |
||||
|
{0xd1,0xf8}, |
||||
|
{0xd2,0x00}, |
||||
|
{0xd3,0xfa}, |
||||
|
{0xd4,0x45}, |
||||
|
{0xd5,0x02}, |
||||
|
|
||||
|
{0xd6,0x30}, |
||||
|
{0xd7,0xfa}, |
||||
|
{0xd8,0x08}, |
||||
|
{0xd9,0x08}, |
||||
|
{0xda,0x58}, |
||||
|
{0xdb,0x02}, |
||||
|
{0xfe,0x00}, |
||||
|
|
||||
|
/*Gamma*/ |
||||
|
{0xfe,0x00},//page 0
|
||||
|
{0xba,0x00}, |
||||
|
{0xbb,0x04}, |
||||
|
{0xbc,0x0a}, |
||||
|
{0xbd,0x0e}, |
||||
|
{0xbe,0x22}, |
||||
|
{0xbf,0x30}, |
||||
|
{0xc0,0x3d}, |
||||
|
{0xc1,0x4a}, |
||||
|
{0xc2,0x5d}, |
||||
|
{0xc3,0x6b}, |
||||
|
{0xc4,0x7a}, |
||||
|
{0xc5,0x85}, |
||||
|
{0xc6,0x90}, |
||||
|
{0xc7,0xa5}, |
||||
|
{0xc8,0xb5}, |
||||
|
{0xc9,0xc2}, |
||||
|
{0xca,0xcc}, |
||||
|
{0xcb,0xd5}, |
||||
|
{0xcc,0xde}, |
||||
|
{0xcd,0xea}, |
||||
|
{0xce,0xf5}, |
||||
|
{0xcf,0xff}, |
||||
|
|
||||
|
/*Auto Gamma*/ |
||||
|
{0xfe,0x00}, |
||||
|
{0x5a,0x08}, |
||||
|
{0x5b,0x0f}, |
||||
|
{0x5c,0x15}, |
||||
|
{0x5d,0x1c}, |
||||
|
{0x5e,0x28}, |
||||
|
{0x5f,0x36}, |
||||
|
{0x60,0x45}, |
||||
|
{0x61,0x51}, |
||||
|
{0x62,0x6a}, |
||||
|
{0x63,0x7d}, |
||||
|
{0x64,0x8d}, |
||||
|
{0x65,0x98}, |
||||
|
{0x66,0xa2}, |
||||
|
{0x67,0xb5}, |
||||
|
{0x68,0xc3}, |
||||
|
{0x69,0xcd}, |
||||
|
{0x6a,0xd4}, |
||||
|
{0x6b,0xdc}, |
||||
|
{0x6c,0xe3}, |
||||
|
{0x6d,0xf0}, |
||||
|
{0x6e,0xf9}, |
||||
|
{0x6f,0xff}, |
||||
|
|
||||
|
/*Gain*/ |
||||
|
{0xfe,0x00}, |
||||
|
{0x70,0x50}, |
||||
|
|
||||
|
/*AEC*/ |
||||
|
{0xfe,0x00},//page 0
|
||||
|
{0x4f,0x00},///cc201805 close ACE /// {0x4f,0x01},
|
||||
|
{0xfe,0x01},//page 1
|
||||
|
{0x0d,0x00},//08 add 20170110
|
||||
|
{0x12,0xa0}, |
||||
|
{0x13,0x3a}, |
||||
|
{0x44,0x04}, |
||||
|
{0x1f,0x30}, |
||||
|
{0x20,0x40}, |
||||
|
{0x26,0x9a}, |
||||
|
{0x3e,0x20}, |
||||
|
{0x3f,0x2d}, |
||||
|
{0x40,0x40}, |
||||
|
{0x41,0x5b}, |
||||
|
{0x42,0x82}, |
||||
|
{0x43,0xb7}, |
||||
|
{0x04,0x0a}, |
||||
|
{0x02,0x79}, |
||||
|
{0x03,0xc0}, |
||||
|
|
||||
|
/*measure window*/ |
||||
|
{0xfe,0x01},//page 1
|
||||
|
{0xcc,0x08}, |
||||
|
{0xcd,0x08}, |
||||
|
{0xce,0xa4}, |
||||
|
{0xcf,0xec}, |
||||
|
|
||||
|
/*DNDD*/ |
||||
|
{0xfe,0x00}, |
||||
|
{0x81,0xb8}, |
||||
|
{0x82,0x12}, |
||||
|
{0x83,0x0a}, |
||||
|
{0x84,0x01}, |
||||
|
{0x86,0x50}, |
||||
|
{0x87,0x18}, |
||||
|
{0x88,0x10}, |
||||
|
{0x89,0x70}, |
||||
|
{0x8a,0x20}, |
||||
|
{0x8b,0x10}, |
||||
|
{0x8c,0x08}, |
||||
|
{0x8d,0x0a}, |
||||
|
|
||||
|
/*Intpee*/ |
||||
|
{0xfe,0x00}, |
||||
|
{0x8f,0xaa}, |
||||
|
{0x90,0x9c}, |
||||
|
{0x91,0x52}, |
||||
|
{0x92,0x03}, |
||||
|
{0x93,0x03}, |
||||
|
{0x94,0x08}, |
||||
|
{0x95,0x44}, |
||||
|
{0x97,0x00}, |
||||
|
{0x98,0x00}, |
||||
|
|
||||
|
/*ASDE*/ |
||||
|
{0xfe,0x00}, |
||||
|
{0xa1,0x30}, |
||||
|
{0xa2,0x41}, |
||||
|
{0xa4,0x30}, |
||||
|
{0xa5,0x20}, |
||||
|
{0xaa,0x30}, |
||||
|
{0xac,0x32}, |
||||
|
|
||||
|
/*YCP*/ |
||||
|
{0xfe,0x00}, |
||||
|
{0xd1,0x3c}, |
||||
|
{0xd2,0x3c}, |
||||
|
{0xd3,0x38}, |
||||
|
{0xd6,0xf4}, |
||||
|
{0xd7,0x1d}, |
||||
|
{0xdd,0x73}, |
||||
|
{0xde,0x84}, |
||||
|
|
||||
|
/*Banding*/ |
||||
|
{0xfe,0x00}, |
||||
|
{0x05,0x01}, |
||||
|
{0x06,0xad}, |
||||
|
{0x07,0x00}, |
||||
|
{0x08,0x10}, |
||||
|
|
||||
|
{0xfe,0x01}, |
||||
|
{0x25,0x00}, |
||||
|
{0x26,0x9a}, |
||||
|
|
||||
|
{0x27,0x01}, |
||||
|
{0x28,0xce}, |
||||
|
{0x29,0x03}, |
||||
|
{0x2a,0x02}, |
||||
|
{0x2b,0x04}, |
||||
|
{0x2c,0x36}, |
||||
|
{0x2d,0x07}, |
||||
|
{0x2e,0xd2}, |
||||
|
{0x2f,0x0b}, |
||||
|
{0x30,0x6e}, |
||||
|
{0x31,0x0e}, |
||||
|
{0x32,0x70}, |
||||
|
{0x33,0x12}, |
||||
|
{0x34,0x0c}, |
||||
|
{0x3c,0x30}, |
||||
|
{0xfe,0x00}, |
||||
|
{0x00,0x00} |
||||
|
|
||||
|
}; |
||||
|
#else |
||||
|
|
||||
|
const U8 code GC6133_init_reg_tbl[][2]= { |
||||
|
|
||||
|
/*System*/ |
||||
|
{0xf3,0xff}, |
||||
|
{0xf5,0x06}, |
||||
|
{0xf7,0x01}, |
||||
|
{0xf9,0xce}, |
||||
|
{0xfa,0x00}, |
||||
|
//1002 {0xf8,0x03},//////分频 {0xf8,0x03},
|
||||
|
{0xf8,0x0f},//////分频 {0xf8,0x03},
|
||||
|
// {0xfa,D_0xfa}, // cc add
|
||||
|
/// {0xfd,D_0xfa}, // cc add
|
||||
|
/// {0xfa,D_0xfa}, // cc add
|
||||
|
/// {0xfd,D_0xfa}, // cc add
|
||||
|
///20181002启动时使用较高频率 当启动后恢复低频率
|
||||
|
{0xfc,0x02}, |
||||
|
|
||||
|
{0xfe,0x02},//page 2
|
||||
|
{0x81,0x03}, |
||||
|
|
||||
|
{0xfe,0x00}, |
||||
|
{0x77,0x64}, |
||||
|
{0x78,0x40}, |
||||
|
{0x79,0x60}, |
||||
|
/*ANALOG & CISCTL*/ |
||||
|
{0xfe,0x00},//page 0
|
||||
|
{0x03,0x01}, |
||||
|
{0x04,0xce}, |
||||
|
{0x05,0x01}, |
||||
|
{0x06,0xad}, |
||||
|
{0x07,0x00}, |
||||
|
{0x08,0x10}, |
||||
|
{0x0a,0x00}, |
||||
|
{0x0c,0x00}, |
||||
|
{0x0d,0x01}, |
||||
|
{0x0e,0xe8}, |
||||
|
{0x0f,0x02}, |
||||
|
{0x10,0x88}, |
||||
|
{0x17,0x54}, |
||||
|
{0x19,0x08}, |
||||
|
{0x1a,0x0a}, |
||||
|
{0x1f,0x40}, |
||||
|
{0x20,0x30}, |
||||
|
{0x2e,0x80}, |
||||
|
{0x2f,0x2b}, |
||||
|
{0x30,0x1a}, |
||||
|
{0xfe,0x02}, |
||||
|
{0x03,0x02}, |
||||
|
{0x05,0xd7}, |
||||
|
{0x06,0x60}, |
||||
|
{0x08,0x80}, |
||||
|
{0x12,0x89}, |
||||
|
|
||||
|
/* BLK*/ |
||||
|
{0xfe,0x00},//page 1
|
||||
|
{0x18,0x02}, |
||||
|
{0xfe,0x02},//page 2
|
||||
|
{0x40,0x22}, |
||||
|
{0x45,0x00}, |
||||
|
{0x46,0x00}, |
||||
|
{0x49,0x20}, |
||||
|
{0x4b,0x3c}, |
||||
|
{0x50,0x20}, |
||||
|
{0x42,0x10}, |
||||
|
|
||||
|
/*ISP*/ |
||||
|
{0xfe,0x01},//page 1
|
||||
|
{0x0a,0xc5}, |
||||
|
{0x45,0x00}, |
||||
|
{0xfe,0x00},//page 0
|
||||
|
{0x40,0xff}, |
||||
|
{0x41,0x25}, |
||||
|
{0x42,0xcd},///cc201805 close AWB{0x42,0xcf},
|
||||
|
/// {0x44,0x83},///P0:0x44 Output_format [7] YUV420_row_switch 5’h03: Y Cr Y Cb
|
||||
|
{0x44,B1001_0000},///P0:0x44 Output_format [7] YUV420_row_switch 5’h10: only Y
|
||||
|
|
||||
|
{0x43,0x12},////{0x43,D_P00x43},// ///EABLE CrCb fixed en 02
|
||||
|
/** P0:0x43 special_effect 7 0x00 RW [7] NA
|
||||
|
[6] subsample2 |
||||
|
[5] subsample4 |
||||
|
[4] GAMMA_en |
||||
|
[3:2] only_edge_map |
||||
|
[1] CrCb_ fixed_en |
||||
|
[0] inverse color*/ |
||||
|
{0xda,0x00}, |
||||
|
{0xdb,0x00}, |
||||
|
/////{0x46,0x22},
|
||||
|
////-------------------------------------
|
||||
|
{0x46,B0010_1000},// hs high pclk polarity {0x46,0x22},
|
||||
|
/* P0:0x46 sync_mode 8 0x0f RW
|
||||
|
[7] data delay half |
||||
|
[6] hsync delay half |
||||
|
[5] odd_even_col_switch |
||||
|
[4] odd_even_row_switch |
||||
|
|
||||
|
[3] opclk gated in HB |
||||
|
[2] opclk polarity |
||||
|
[1] hsync polarity |
||||
|
[0] vsync polarity*/ |
||||
|
// {0x4c,D_P00x4c},//lsc test image
|
||||
|
// {0x4D,0xfc},//lsc test image
|
||||
|
|
||||
|
// {0x4a,0x86},//////div_gate+clk_en 82
|
||||
|
/**P0:0x4a Clock_gating_e
|
||||
|
n |
||||
|
8 0x82 RW [7] ISP quiet mode |
||||
|
[6] close AAA pclk |
||||
|
[5]vb change |
||||
|
[4]vb chang flop |
||||
|
--------------------- |
||||
|
[3]hb change |
||||
|
[2] DIV_gatedclk_en |
||||
|
[1] exception |
||||
|
[0] AEC_delay_mode*/ |
||||
|
|
||||
|
////-------------------------------------
|
||||
|
{0x49,0x03}, |
||||
|
{0x52,0x02}, |
||||
|
{0x54,0x00}, |
||||
|
{0xfe,0x02}, |
||||
|
{0x22,0xf6}, |
||||
|
|
||||
|
/*Shading*/ |
||||
|
{0xfe,0x01},//page 1
|
||||
|
{0xc1,0x38}, |
||||
|
{0xc2,0x4c}, |
||||
|
{0xc3,0x00}, |
||||
|
{0xc4,0x32}, |
||||
|
{0xc5,0x24}, |
||||
|
{0xc6,0x16}, |
||||
|
{0xc7,0x08}, |
||||
|
{0xc8,0x08}, |
||||
|
{0xc9,0x00}, |
||||
|
{0xca,0x20}, |
||||
|
{0xdc,0x8a}, |
||||
|
{0xdd,0xa0}, |
||||
|
{0xde,0xa6}, |
||||
|
{0xdf,0x75}, |
||||
|
|
||||
|
/*AWB*//*20170110*/ |
||||
|
{0xfe, 0x01},//page 1
|
||||
|
{0x7c, 0x09}, |
||||
|
{0x65, 0x06}, |
||||
|
{0x7c, 0x08}, |
||||
|
{0x56, 0xf4}, |
||||
|
{0x66, 0x0f}, |
||||
|
{0x67, 0x84}, |
||||
|
{0x6b, 0x80}, |
||||
|
{0x6d, 0x12}, |
||||
|
{0x6e, 0xb0}, |
||||
|
{0xfe, 0x01}, |
||||
|
{0x90, 0x00}, |
||||
|
{0x91, 0x00}, |
||||
|
{0x92, 0xf4}, |
||||
|
{0x93, 0xd5}, |
||||
|
{0x95, 0x0f}, |
||||
|
{0x96, 0xf4}, |
||||
|
{0x97, 0x2d}, |
||||
|
{0x98, 0x0f}, |
||||
|
{0x9a, 0x2d}, |
||||
|
{0x9b, 0x0f}, |
||||
|
{0x9c, 0x59}, |
||||
|
{0x9d, 0x2d}, |
||||
|
{0x9f, 0x67}, |
||||
|
{0xa0, 0x59}, |
||||
|
{0xa1, 0x00}, |
||||
|
{0xa2, 0x00}, |
||||
|
{0x86, 0x00}, |
||||
|
{0x87, 0x00}, |
||||
|
{0x88, 0x00}, |
||||
|
{0x89, 0x00}, |
||||
|
{0xa4, 0x00}, |
||||
|
{0xa5, 0x00}, |
||||
|
{0xa6, 0xd4}, |
||||
|
{0xa7, 0x9f}, |
||||
|
{0xa9, 0xd4}, |
||||
|
{0xaa, 0x9f}, |
||||
|
{0xab, 0xac}, |
||||
|
{0xac, 0x9f}, |
||||
|
{0xae, 0xd4}, |
||||
|
{0xaf, 0xac}, |
||||
|
{0xb0, 0xd4}, |
||||
|
{0xb1, 0xa3}, |
||||
|
{0xb3, 0xd4}, |
||||
|
{0xb4, 0xac}, |
||||
|
{0xb5, 0x00}, |
||||
|
{0xb6, 0x00}, |
||||
|
{0x8b, 0x00}, |
||||
|
{0x8c, 0x00}, |
||||
|
{0x8d, 0x00}, |
||||
|
{0x8e, 0x00}, |
||||
|
{0x94, 0x50}, |
||||
|
{0x99, 0xa6}, |
||||
|
{0x9e, 0xaa}, |
||||
|
{0xa3, 0x0a}, |
||||
|
{0x8a, 0x00}, |
||||
|
{0xa8, 0x50}, |
||||
|
{0xad, 0x55}, |
||||
|
{0xb2, 0x55}, |
||||
|
{0xb7, 0x05}, |
||||
|
{0x8f, 0x00}, |
||||
|
{0xb8, 0xb3}, |
||||
|
{0xb9, 0xb6}, |
||||
|
|
||||
|
|
||||
|
/*CC*/ |
||||
|
{0xfe,0x01},//page 0
|
||||
|
{0xd0,0x40}, |
||||
|
{0xd1,0xf8}, |
||||
|
{0xd2,0x00}, |
||||
|
{0xd3,0xfa}, |
||||
|
{0xd4,0x45}, |
||||
|
{0xd5,0x02}, |
||||
|
|
||||
|
{0xd6,0x30}, |
||||
|
{0xd7,0xfa}, |
||||
|
{0xd8,0x08}, |
||||
|
{0xd9,0x08}, |
||||
|
{0xda,0x58}, |
||||
|
{0xdb,0x02}, |
||||
|
{0xfe,0x00}, |
||||
|
|
||||
|
/*Gamma*/ |
||||
|
{0xfe,0x00},//page 0
|
||||
|
{0xba,0x00}, |
||||
|
{0xbb,0x04}, |
||||
|
{0xbc,0x0a}, |
||||
|
{0xbd,0x0e}, |
||||
|
{0xbe,0x22}, |
||||
|
{0xbf,0x30}, |
||||
|
{0xc0,0x3d}, |
||||
|
{0xc1,0x4a}, |
||||
|
{0xc2,0x5d}, |
||||
|
{0xc3,0x6b}, |
||||
|
{0xc4,0x7a}, |
||||
|
{0xc5,0x85}, |
||||
|
{0xc6,0x90}, |
||||
|
{0xc7,0xa5}, |
||||
|
{0xc8,0xb5}, |
||||
|
{0xc9,0xc2}, |
||||
|
{0xca,0xcc}, |
||||
|
{0xcb,0xd5}, |
||||
|
{0xcc,0xde}, |
||||
|
{0xcd,0xea}, |
||||
|
{0xce,0xf5}, |
||||
|
{0xcf,0xff}, |
||||
|
|
||||
|
/*Auto Gamma*/ |
||||
|
{0xfe,0x00}, |
||||
|
{0x5a,0x08}, |
||||
|
{0x5b,0x0f}, |
||||
|
{0x5c,0x15}, |
||||
|
{0x5d,0x1c}, |
||||
|
{0x5e,0x28}, |
||||
|
{0x5f,0x36}, |
||||
|
{0x60,0x45}, |
||||
|
{0x61,0x51}, |
||||
|
{0x62,0x6a}, |
||||
|
{0x63,0x7d}, |
||||
|
{0x64,0x8d}, |
||||
|
{0x65,0x98}, |
||||
|
{0x66,0xa2}, |
||||
|
{0x67,0xb5}, |
||||
|
{0x68,0xc3}, |
||||
|
{0x69,0xcd}, |
||||
|
{0x6a,0xd4}, |
||||
|
{0x6b,0xdc}, |
||||
|
{0x6c,0xe3}, |
||||
|
{0x6d,0xf0}, |
||||
|
{0x6e,0xf9}, |
||||
|
{0x6f,0xff}, |
||||
|
|
||||
|
/*Gain*/ |
||||
|
{0xfe,0x00}, |
||||
|
{0x70,0x50}, |
||||
|
|
||||
|
/*AEC*/ |
||||
|
{0xfe,0x00},//page 0
|
||||
|
{0x4f,0x00},///cc201805 close ACE /// {0x4f,0x01},
|
||||
|
{0xfe,0x01},//page 1
|
||||
|
{0x0d,0x00},//08 add 20170110
|
||||
|
{0x12,0xa0}, |
||||
|
{0x13,0x3a}, |
||||
|
{0x44,0x04}, |
||||
|
{0x1f,0x30}, |
||||
|
{0x20,0x40}, |
||||
|
{0x26,0x9a}, |
||||
|
{0x3e,0x20}, |
||||
|
{0x3f,0x2d}, |
||||
|
{0x40,0x40}, |
||||
|
{0x41,0x5b}, |
||||
|
{0x42,0x82}, |
||||
|
{0x43,0xb7}, |
||||
|
{0x04,0x0a}, |
||||
|
{0x02,0x79}, |
||||
|
{0x03,0xc0}, |
||||
|
|
||||
|
/*measure window*/ |
||||
|
{0xfe,0x01},//page 1
|
||||
|
{0xcc,0x08}, |
||||
|
{0xcd,0x08}, |
||||
|
{0xce,0xa4}, |
||||
|
{0xcf,0xec}, |
||||
|
|
||||
|
/*DNDD*/ |
||||
|
{0xfe,0x00}, |
||||
|
{0x81,0xb8}, |
||||
|
{0x82,0x12}, |
||||
|
{0x83,0x0a}, |
||||
|
{0x84,0x01}, |
||||
|
{0x86,0x50}, |
||||
|
{0x87,0x18}, |
||||
|
{0x88,0x10}, |
||||
|
{0x89,0x70}, |
||||
|
{0x8a,0x20}, |
||||
|
{0x8b,0x10}, |
||||
|
{0x8c,0x08}, |
||||
|
{0x8d,0x0a}, |
||||
|
|
||||
|
/*Intpee*/ |
||||
|
{0xfe,0x00}, |
||||
|
{0x8f,0xaa}, |
||||
|
{0x90,0x9c}, |
||||
|
{0x91,0x52}, |
||||
|
{0x92,0x03}, |
||||
|
{0x93,0x03}, |
||||
|
{0x94,0x08}, |
||||
|
{0x95,0x44}, |
||||
|
{0x97,0x00}, |
||||
|
{0x98,0x00}, |
||||
|
|
||||
|
/*ASDE*/ |
||||
|
{0xfe,0x00}, |
||||
|
{0xa1,0x30}, |
||||
|
{0xa2,0x41}, |
||||
|
{0xa4,0x30}, |
||||
|
{0xa5,0x20}, |
||||
|
{0xaa,0x30}, |
||||
|
{0xac,0x32}, |
||||
|
|
||||
|
/*YCP*/ |
||||
|
{0xfe,0x00}, |
||||
|
{0xd1,0x3c}, |
||||
|
{0xd2,0x3c}, |
||||
|
{0xd3,0x38}, |
||||
|
{0xd6,0xf4}, |
||||
|
{0xd7,0x1d}, |
||||
|
{0xdd,0x73}, |
||||
|
{0xde,0x84}, |
||||
|
|
||||
|
/*Banding*/ |
||||
|
{0xfe,0x00}, |
||||
|
{0x05,0x01}, |
||||
|
{0x06,0xad}, |
||||
|
{0x07,0x00}, |
||||
|
{0x08,0x10}, |
||||
|
|
||||
|
{0xfe,0x01}, |
||||
|
{0x25,0x00}, |
||||
|
{0x26,0x9a}, |
||||
|
|
||||
|
{0x27,0x01}, |
||||
|
{0x28,0xce}, |
||||
|
{0x29,0x03}, |
||||
|
{0x2a,0x02}, |
||||
|
{0x2b,0x04}, |
||||
|
{0x2c,0x36}, |
||||
|
{0x2d,0x07}, |
||||
|
{0x2e,0xd2}, |
||||
|
{0x2f,0x0b}, |
||||
|
{0x30,0x6e}, |
||||
|
{0x31,0x0e}, |
||||
|
{0x32,0x70}, |
||||
|
{0x33,0x12}, |
||||
|
{0x34,0x0c}, |
||||
|
{0x3c,0x30}, |
||||
|
{0xfe,0x00}, |
||||
|
{0x00,0x00} |
||||
|
|
||||
|
}; |
||||
|
|
||||
|
|
||||
|
#endif |
||||
@ -0,0 +1,19 @@ |
|||||
|
|
||||
|
#ifndef _gc_032a_H_ |
||||
|
#define _gc_032a_H_ |
||||
|
|
||||
|
#include "../bsp/bsp_config.h" |
||||
|
|
||||
|
#include "../clib/type.h" |
||||
|
#include "../clib/clib.h" |
||||
|
#include "../ctask/tick.h" |
||||
|
|
||||
|
//#define GC6133_reg_tbl_len 291 GC6133_reg_tbl_len+1
|
||||
|
|
||||
|
#define GC6133_reg_tbl_len (292) |
||||
|
|
||||
|
|
||||
|
extern U8 code GC6133_init_reg_tbl[][2]; |
||||
|
|
||||
|
|
||||
|
#endif///_gc_032a_H_
|
||||
@ -0,0 +1,164 @@ |
|||||
|
#include "bsp_iic3.h" |
||||
|
///#include "gplib.h"
|
||||
|
|
||||
|
#define SC7A20_SLAVE_ID 0x32//0x4E ,erichan 20150529
|
||||
|
|
||||
|
#define G_SlaveAddr SC7A20_SLAVE_ID |
||||
|
static INT8U g_level; |
||||
|
|
||||
|
static OS_EVENT *sw_i2c_sem = NULL; |
||||
|
|
||||
|
static INT8U G_sensor_status=0; |
||||
|
|
||||
|
//====================================================================================================
|
||||
|
void I2C_delay ( |
||||
|
INT16U i |
||||
|
) { |
||||
|
INT16U j; |
||||
|
|
||||
|
for (j=0;j<(i<<8);j++) |
||||
|
i=i; |
||||
|
} |
||||
|
|
||||
|
void g_delay(INT16U i) |
||||
|
{ |
||||
|
INT16U k; |
||||
|
|
||||
|
for(k=0;k<i;k++) |
||||
|
I2C_delay(100); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
//============================================
|
||||
|
void I2C_start (void) |
||||
|
{ |
||||
|
gpio_write_io(I2C_SCL, DATA_HIGH); //SCL1
|
||||
|
I2C_delay (1); |
||||
|
gpio_write_io(I2C_SDA, DATA_HIGH); //SDA1
|
||||
|
I2C_delay (1); |
||||
|
gpio_write_io(I2C_SDA, DATA_LOW); //SDA0
|
||||
|
I2C_delay (1); |
||||
|
} |
||||
|
//===================================================================
|
||||
|
void I2C_stop (void) |
||||
|
{ |
||||
|
I2C_delay (1); |
||||
|
gpio_write_io(I2C_SDA, DATA_LOW); //SDA0
|
||||
|
I2C_delay (1); |
||||
|
gpio_write_io(I2C_SCL, DATA_HIGH); //SCL1
|
||||
|
I2C_delay (1); |
||||
|
gpio_write_io(I2C_SDA, DATA_HIGH); //SDA1
|
||||
|
I2C_delay (1); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
//===================================================================
|
||||
|
void I2C_w_phase (INT16U value) |
||||
|
{ |
||||
|
INT16U i; |
||||
|
|
||||
|
for (i=0;i<8;i++) |
||||
|
{ |
||||
|
gpio_write_io(I2C_SCL, DATA_LOW); //SCL0
|
||||
|
I2C_delay (1); |
||||
|
if (value & 0x80) |
||||
|
gpio_write_io(I2C_SDA, DATA_HIGH); //SDA1
|
||||
|
else |
||||
|
gpio_write_io(I2C_SDA, DATA_LOW); //SDA0
|
||||
|
// sccb_delay (1);
|
||||
|
gpio_write_io(I2C_SCL, DATA_HIGH); //SCL1
|
||||
|
I2C_delay(1); |
||||
|
value <<= 1; |
||||
|
} |
||||
|
// The 9th bit transmission
|
||||
|
gpio_write_io(I2C_SCL, DATA_LOW); //SCL0
|
||||
|
gpio_init_io(I2C_SDA, GPIO_INPUT); //SDA is Hi-Z mode
|
||||
|
I2C_delay(1); |
||||
|
gpio_write_io(I2C_SCL, DATA_HIGH); //SCL1
|
||||
|
I2C_delay(1); |
||||
|
gpio_write_io(I2C_SCL, DATA_LOW); //SCL0
|
||||
|
gpio_init_io(I2C_SDA, GPIO_OUTPUT); //SDA is Hi-Z mode
|
||||
|
} |
||||
|
|
||||
|
//===================================================================
|
||||
|
INT16U I2C_r_phase (void) |
||||
|
{ |
||||
|
INT16U i; |
||||
|
INT16U data; |
||||
|
|
||||
|
gpio_init_io(I2C_SDA, GPIO_INPUT); //SDA is Hi-Z mode
|
||||
|
data = 0x00; |
||||
|
for (i=0;i<8;i++) |
||||
|
{ |
||||
|
gpio_write_io(I2C_SCL, DATA_LOW); //SCL0
|
||||
|
I2C_delay(1); |
||||
|
gpio_write_io(I2C_SCL, DATA_HIGH); //SCL1
|
||||
|
data <<= 1; |
||||
|
data |=( gpio_read_io(I2C_SDA)); |
||||
|
I2C_delay(1); |
||||
|
} |
||||
|
// The 9th bit transmission
|
||||
|
gpio_write_io(I2C_SCL, DATA_LOW); //SCL0
|
||||
|
gpio_init_io(I2C_SDA, GPIO_OUTPUT); //SDA is output mode
|
||||
|
gpio_write_io(I2C_SDA, DATA_HIGH); //SDA0, the nighth bit is NA must be 1
|
||||
|
I2C_delay(1); |
||||
|
gpio_write_io(I2C_SCL, DATA_HIGH); //SCL1
|
||||
|
I2C_delay(1); |
||||
|
gpio_write_io(I2C_SCL, DATA_LOW); //SCL0
|
||||
|
return data; |
||||
|
} |
||||
|
|
||||
|
//====================================================================================================
|
||||
|
void I2C_gpio_init ( |
||||
|
INT32U nSCL, // Clock Port No
|
||||
|
INT32U nSDA // Data Port No
|
||||
|
){ |
||||
|
//init IO
|
||||
|
gpio_set_port_attribute(nSCL, ATTRIBUTE_HIGH); |
||||
|
gpio_set_port_attribute(nSDA, ATTRIBUTE_HIGH); |
||||
|
gpio_init_io(nSCL, GPIO_OUTPUT); //set dir
|
||||
|
gpio_init_io(nSDA, GPIO_OUTPUT); //set dir
|
||||
|
gpio_write_io(nSCL, DATA_HIGH); //SCL1
|
||||
|
gpio_write_io(nSDA, DATA_HIGH); //SDA0
|
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
void g_sensor_write(INT8U id, INT8U addr, INT8U data) |
||||
|
{ |
||||
|
// 3-Phase write transmission cycle is starting now ...
|
||||
|
I2C_start(); // Transmission start
|
||||
|
I2C_w_phase(id); // Phase 1: Device ID
|
||||
|
I2C_w_phase(addr); // Phase 2: Register address. High pass filter enable
|
||||
|
I2C_w_phase(data); // Phase 3: Data value
|
||||
|
I2C_stop(); // Transmission stop
|
||||
|
} |
||||
|
|
||||
|
INT16U g_sensor_read(INT8U id, INT8U addr) |
||||
|
{ |
||||
|
INT16U redata; |
||||
|
|
||||
|
I2C_start(); // Transmission start
|
||||
|
I2C_w_phase(id); // Phase 1: Device ID
|
||||
|
I2C_w_phase(addr); // Phase 2: Register address. Transient source
|
||||
|
I2C_start(); // Transmission start
|
||||
|
I2C_w_phase(id | 0x01); // Phase 1 (read)
|
||||
|
redata = (INT8U) I2C_r_phase(); // Phase 2
|
||||
|
I2C_stop(); // Transmission stop
|
||||
|
|
||||
|
return redata; |
||||
|
} |
||||
|
|
||||
|
void sw_i2c_lock(void) |
||||
|
{ |
||||
|
INT8U err; |
||||
|
|
||||
|
OSSemPend(sw_i2c_sem, 0, &err); |
||||
|
} |
||||
|
|
||||
|
void sw_i2c_unlock(void) |
||||
|
{ |
||||
|
OSSemPost(sw_i2c_sem); |
||||
|
} |
||||
|
|
||||
|
|
||||
@ -0,0 +1,15 @@ |
|||||
|
#ifndef __DRV_L1_GSENSOR_H__ |
||||
|
#define __DRV_L1_GSENSOR_H__ |
||||
|
|
||||
|
extern void sw_i2c_lock(void); |
||||
|
extern void sw_i2c_unlock(void); |
||||
|
|
||||
|
extern void I2C_delay (INT16U i) ; |
||||
|
extern void I2C_start (void); |
||||
|
extern void I2C_stop (void); |
||||
|
extern void I2C_w_phase (INT16U value); |
||||
|
extern INT16U I2C_r_phase (void); |
||||
|
extern void I2C_gpio_init (INT32U nSCL,INT32U nSDA); |
||||
|
|
||||
|
|
||||
|
#endif |
||||
@ -0,0 +1,110 @@ |
|||||
|
#include "bsp_lora.h" |
||||
|
//#include "tpc_debug.h"
|
||||
|
#include "tpc_lora.h" |
||||
|
////#include "tpc_x.h"
|
||||
|
#include "c_lib.h" |
||||
|
#include "msp_uart1.h" |
||||
|
#include "msp_uart2.h" |
||||
|
|
||||
|
#include "debug_drv.h" |
||||
|
|
||||
|
u8 test[]={ |
||||
|
0x68 ,0x00 ,0x0D ,0x90 ,0x01 ,0x61 ,0x61 ,0x62 ,0x62 ,0x63 ,0x63 ,0xEA ,0x16 |
||||
|
//1 2 3 4 5 6 7 8 9 10 11 12 13
|
||||
|
|
||||
|
//0 1 2 3 4 5 6 7 8 9 10 11 12
|
||||
|
|
||||
|
}; |
||||
|
u8 test2[]={ |
||||
|
0x68 ,0x00 ,0x07 ,0x91 ,0x03 ,0x9B ,0x16 |
||||
|
//1 2 3 4 5 6 7 8 9 10 11 12 13
|
||||
|
|
||||
|
//0 1 2 3 4 5 6 7 8 9 10 11 12
|
||||
|
|
||||
|
}; |
||||
|
#define D_lora_reset_ON() D_P47_ON() |
||||
|
|
||||
|
#define D_lora_reset_OFF() D_P47_OFF() |
||||
|
#define D_lora_reset(); D_stdIO_P4(BITN7); D_lora_reset_OFF();Lc_delay_ms(1);D_lora_reset_ON();Lc_delay_ms(1); |
||||
|
|
||||
|
#define D_lora_wakeup_ON() D_P24_ON() |
||||
|
#define D_lora_wakeup_OFF() D_P24_OFF() |
||||
|
|
||||
|
#define D_lora_wakeup(); D_stdIO_P2(BITN4); D_lora_wakeup_ON();Lc_delay_ms(1);D_lora_wakeup_OFF();Lc_delay_ms(1); |
||||
|
|
||||
|
|
||||
|
void L2_lora_init(void) |
||||
|
{ |
||||
|
D_lora_wakeup_ON(); |
||||
|
D_lora_reset(); |
||||
|
|
||||
|
} |
||||
|
|
||||
|
|
||||
|
void L3_lora_debug(u8 filter) |
||||
|
{ |
||||
|
if(filter == ts_debug_rec.filter) |
||||
|
{///filter num d1 d2 d3 ....dn
|
||||
|
//// FD 08 11 22 33 44 55 66 77 88 Lc_delay_ms(1);
|
||||
|
|
||||
|
/// L1_uartD_uchexArray(TS_s2b_debug.sp,TS_debug_rec.R1);
|
||||
|
|
||||
|
printf("\r\n FD ok"); |
||||
|
|
||||
|
switch (ts_debug_rec.ocr) |
||||
|
{ |
||||
|
case 0x11: |
||||
|
|
||||
|
printf("11"); |
||||
|
D_lora_wakeup(); L0_uart2_sendArray(test, 13); |
||||
|
printf(" lora send "); |
||||
|
L1_uartD_uchexArray(test, 13); |
||||
|
//1 2 3 4 5 6 7 8 9 10 11 12 13
|
||||
|
break; |
||||
|
case 0x12: |
||||
|
printf("12"); |
||||
|
D_lora_wakeup(); L0_uart2_sendArray(test2, 7); |
||||
|
printf(" lora send2 "); |
||||
|
L1_uartD_uchexArray(test2, 7); |
||||
|
//1 2 3 4 5 6 7 8 9 10 11 12 13
|
||||
|
break; |
||||
|
|
||||
|
|
||||
|
default: |
||||
|
printf(" pp error\r\n "); |
||||
|
|
||||
|
break; |
||||
|
}; |
||||
|
|
||||
|
printf("333"); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
|
||||
|
void LORA_send(void) |
||||
|
|
||||
|
{ |
||||
|
vU8 add; |
||||
|
ts_lrdlora_send.filter = 0x68; |
||||
|
//// ts_lrdlora_send.len = DATA_LORA_LEN;
|
||||
|
ts_lrdlora_send.DIR = 1; |
||||
|
ts_lrdlora_send.CMD = 0x37; /// 取值范围:0x7F~0x00;
|
||||
|
/// ts_lrdlora_send.req = 0x01;
|
||||
|
ts_lrdlora_send.filtert = 0x16; |
||||
|
L0_uart1_0d0a(); |
||||
|
///L1_uartD_sendArray(&TS_lrdlora_send.filter,1);
|
||||
|
///L1_uartD_sendArray(&TS_lrdlora_send.len,2);
|
||||
|
///L1_uartD_sendArray(&TS_lrdlora_send.order,1);
|
||||
|
///L1_uartD_sendArray(&TS_lrdlora_send.REQ,1);
|
||||
|
///L1_uartD_sendArray(&TS_lrdlora_send.buf,6);
|
||||
|
/// add = Fun_SC_Check(&ts_lrdlora_send.buf,4);
|
||||
|
L1_uartD_sendArray(&add,1); |
||||
|
ts_lrdlora_send.ocr = add; |
||||
|
//buf 确定长度 for(i = 0;i<len;i++)(len是buf长度)
|
||||
|
//打包函数 把数据整合 重新定义一个结构体(输入参数)
|
||||
|
L1_uartD_sendArray(&ts_lrdlora_send.buf,14); |
||||
|
L0_uart1_0d0a(); |
||||
|
|
||||
|
} |
||||
|
|
||||
|
|
||||
@ -0,0 +1,14 @@ |
|||||
|
#ifndef BSP_lora_H |
||||
|
#define BSP_lora_H |
||||
|
|
||||
|
#include "../bsp/bsp_config.h" |
||||
|
#include "msp_uart1.h" |
||||
|
|
||||
|
//485_RE P33
|
||||
|
//485_DE P32
|
||||
|
///#define D_485_TX() P55 = 1;// >750us
|
||||
|
///#define D_485_RX() P55 = 0;
|
||||
|
#define D_cmd_filter_lora 0xfE |
||||
|
extern void L2_lora_init(void); |
||||
|
extern void L3_lora_debug(u8 filter); |
||||
|
#endif |
||||
@ -0,0 +1,261 @@ |
|||||
|
////////////////////////////////////////////////////////////////////////////
|
||||
|
///@copyright Copyright (c) 2017, 传控科技 All rights reserved.
|
||||
|
///-------------------------------------------------------------------------
|
||||
|
/// @file msa300.c
|
||||
|
/// @brief msa300 driver app
|
||||
|
///-------------------------------------------------------------------------
|
||||
|
/// @version 1.0
|
||||
|
/// @author CC
|
||||
|
/// @date 20170122
|
||||
|
/// @note cc_AS_stc01
|
||||
|
//////////////////////////////////////////////////////////////////////////////
|
||||
|
|
||||
|
/******************************************************************************/ |
||||
|
/***************************** Include Files **********************************/ |
||||
|
/******************************************************************************/ |
||||
|
#include "bsp_msa300.h" |
||||
|
#include "../msp/uart0.h" |
||||
|
struct _s_gsens_ s_as;//[D_as_ch_mun];
|
||||
|
|
||||
|
|
||||
|
// data*3.91mg/LSB 1g = 90 1/2g = 45 1/3g = 30 333mg/3.91mg = 85d=0x55
|
||||
|
/// 倾斜30度就启动
|
||||
|
//#define D_actionTH_init 0x02
|
||||
|
#define D_actionTH_init 0x0f |
||||
|
//#define D_actionTH_init 0x25 /// z轴调到25算是临界值
|
||||
|
////#define D_actionTH_init 0x0c
|
||||
|
////#define D_actionTH_init 0x04
|
||||
|
/// 中断持续的时间为4s 4s后中断结束 产生下降沿
|
||||
|
// #define D_latch_time_init D_latch_4s
|
||||
|
#define D_latch_time_init D_latch_50ms |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
#if 0 |
||||
|
void L1_as_power_mode(unsigned char dev,unsigned char ps) |
||||
|
{ |
||||
|
// s_as[0].reg_power
|
||||
|
s_as[0].reg_power &= 0x3f; |
||||
|
s_as[0].reg_power |= ps; |
||||
|
L2_I2C_WriteCmd(dev,MSA_REG_POWERMODE_BW,s_as[0].reg_power); // 进入normal 模式
|
||||
|
} |
||||
|
|
||||
|
|
||||
|
/// D_sensor_active_close();DL_ms300_int_close();
|
||||
|
|
||||
|
/// L1_as_WorkStatus(D_wakeup);
|
||||
|
|
||||
|
///extern void L1_as_WorkStatus(unsigned char d);
|
||||
|
void L1_as_WorkStatus(unsigned char d) |
||||
|
{ |
||||
|
if(D_wakeup == d) |
||||
|
{ |
||||
|
/// L1_ms300_reg_set(MSA_REG_INTERRUPT_MAPPING3,D_INT2_S_TAP|D_INT2_ACTIVE);
|
||||
|
D_sensor_active_open();BITN_0(DR_who_wakeup, DRB_who_wakeup_action); |
||||
|
}else |
||||
|
{ |
||||
|
/// L1_ms300_reg_set(MSA_REG_INTERRUPT_MAPPING3,0);
|
||||
|
D_sensor_active_close(); |
||||
|
} |
||||
|
} |
||||
|
void L1_as_action(void) |
||||
|
{ |
||||
|
L2_I2C_ReadReg(D_i2c_addr_Gsensor,MSA_REG_Tape_Active_Status,&s_as[0].reg_temp,1); /// read only
|
||||
|
///L0_uart0_uc('.');
|
||||
|
s_as[0].reg_temp &= B0111_0111;/// 去掉符号位
|
||||
|
if(s_as[0].reg_action == s_as[0].reg_temp) |
||||
|
{ |
||||
|
}else |
||||
|
{ |
||||
|
|
||||
|
s_as[0].action_ok = 1; |
||||
|
s_as[0].reg_action = s_as[0].reg_temp; |
||||
|
} |
||||
|
/// L0_uart0_uchex(s_as[0].reg_temp)
|
||||
|
} |
||||
|
#endif |
||||
|
|
||||
|
/// msa300 初始化 调用前必须使用iic的初始化
|
||||
|
/// 如需使用中断 还必须EA 启动
|
||||
|
void L1_msa300_init(void) |
||||
|
{ |
||||
|
///
|
||||
|
///step 1: 读取power reg
|
||||
|
LD_gsensor_power(D_PowerMode_normal ); |
||||
|
/// 上电后是standby 模式 需要设置 00:normal mode, 01:low power mode, 10/11 suspend mode
|
||||
|
|
||||
|
///step 2: 设置分辨率和加速度范围
|
||||
|
/// L1_ms300_reg_set(MSA_REG_G_RANGE,((D_MSA_14BIT)|(D_MSA_2G))); // 8b8t 2g
|
||||
|
L1_ms300_reg_set(MSA_REG_G_RANGE,((D_MSA_8BIT)|(D_MSA_2G))); // 8b8t 2g
|
||||
|
// L1_ms300_reg_set(NSA_REG_ODR_AXIS_DISABLE,
|
||||
|
// D_ODR_31Hz25);
|
||||
|
|
||||
|
///step 3: 设置 输出频率和带宽bandwidth 带宽总是输出频率的一半
|
||||
|
/// ODR BW
|
||||
|
/// 15.63Hz (0100) 7.81Hz
|
||||
|
/// CLOSE Y关闭 y轴 因为模块是竖着的
|
||||
|
L1_ms300_reg_set(MSA_REG_ODR_AXIS_DISABLE,D_AXIS_DIS_Y|D_ODR_15P63Hz); |
||||
|
// L1_ms300_reg_set(MSA_REG_ODR_AXIS_DISABLE,D_ODR_31Hz25);
|
||||
|
////--------------------------------------------------------------------------
|
||||
|
//CC-MD-VH06
|
||||
|
/// for pcb (INT1 PIN5 ) --- SENSINT2---(P3.0 INT1)
|
||||
|
/// (INT2 PIN6 ) --- SENSINT3---(P3.1/INT0)
|
||||
|
|
||||
|
///step 4: active 中断 使能XZ轴
|
||||
|
L1_ms300_reg_set(MSA_REG_INTERRUPT_SETTINGS1, |
||||
|
ACTIVE_INT_EN_Y|ACTIVE_INT_EN_X); /// fixme:需要调试ACTIVE_INT_EN_Y
|
||||
|
L1_ms300_reg_set(D_Active_TH,D_actionTH_init); |
||||
|
|
||||
|
///step 5:
|
||||
|
/// ACTIVE 中断和 single tap中断映射到 int2上,也就是int2电平变化,通知mcu处理
|
||||
|
/// ps3.sch msa300.int1==sensint2 msa300.int2==sensint3 ---rxd
|
||||
|
/// L1_ms300_reg_set(MSA_REG_INTERRUPT_MAPPING1,INT1_ACTIVE|INT1_S_TAP_INT);
|
||||
|
// L1_ms300_reg_set(MSA_REG_INTERRUPT_MAPPING3,D_INT2_ACTIVE);
|
||||
|
L1_ms300_reg_set(MSA_REG_INTERRUPT_MAPPING3,D_INT2_S_TAP|D_INT2_ACTIVE); |
||||
|
|
||||
|
/// INT2_OD 0: push-pull
|
||||
|
/// INT2_LVL 0: low, 1:high
|
||||
|
/// L1_ms300_reg_set(MSA_REG_INT_PIN_CONFIG,D_INT2_OD|D_INT2_LVL_low);
|
||||
|
L1_ms300_reg_set(MSA_REG_INT_PIN_CONFIG,D_INT2_pull|D_INT2_LVL_low); |
||||
|
///L1_ms300_reg_set(MSA_REG_INT_PIN_CONFIG,0|D_INT2_LVL_high);
|
||||
|
|
||||
|
////--------------------------------------------------------------------------
|
||||
|
///step 6 : 锁定1s的时间 ···\_____1s______/````
|
||||
|
L1_ms300_reg_set(MSA_REG_INT_LATCH,D_latch_time_init); |
||||
|
///L1_i2c_Configure(0);DL_ms300_int_open
|
||||
|
///();D_sensor_active_open();
|
||||
|
/// L1_as_WorkStatus(D_wakeup);
|
||||
|
|
||||
|
// LD_gsensor_power(D_PowerMode_normal );
|
||||
|
LD_gsensor_power(D_PowerMode_low ); |
||||
|
} |
||||
|
#if 0///nouse
|
||||
|
|
||||
|
///0x02 ACC_X[5:0] 0x00
|
||||
|
//0x03 ACC_X[13:6] 0x00
|
||||
|
//0x04 ACC_Y[5:0] 0x00
|
||||
|
//0x05 ACC_Y[13:6] 0x00
|
||||
|
//0x06 ACC_Z[5:0] 0x00
|
||||
|
//0x07 ACC_Z[13:6] 0x00
|
||||
|
/// 0 1 2 3 4 5
|
||||
|
// x5:0 x13:6 y5:0 y13:6 z5:0 z13:6
|
||||
|
void L1_as_readXYZ(unsigned char CH) |
||||
|
{ |
||||
|
|
||||
|
/**********************************************
|
||||
|
///read data
|
||||
|
//S ADD W A REG A
|
||||
|
//S ADD R A D1 A D2 A.....DX N P
|
||||
|
L2_I2C_ReadReg(D_i2c_addr_AS1,0x02,(unsigned char *)s_as[CH].d,6); |
||||
|
|
||||
|
////d 0 1 2 3 4 5
|
||||
|
//// 02 03 04 05 06 07
|
||||
|
//// XL XH YL YH ZL ZH
|
||||
|
///
|
||||
|
L0_uart0_uc(0x09); |
||||
|
// L0_uart0_uchex(s_as[0].d[0]); L0_uart0_uc(0x09);
|
||||
|
L0_uart0_uchex(s_as[0].d[1]); L0_uart0_uc(0x09); |
||||
|
// L0_uart0_uchex(s_as[0].d[2]); L0_uart0_uc(0x09);
|
||||
|
L0_uart0_uchex(s_as[0].d[3]); L0_uart0_uc(0x09); |
||||
|
// L0_uart0_uchex(s_as[0].d[4]); L0_uart0_uc(0x09);
|
||||
|
L0_uart0_uchex(s_as[0].d[5]); |
||||
|
/// L0_uart0_sendArray((unsigned char *)&s_as[CH],6);
|
||||
|
L0_uart0_uc(0x0d); |
||||
|
L0_uart0_uc(0x0a); |
||||
|
|
||||
|
|
||||
|
|
||||
|
Lc_delay_ms(10); |
||||
|
*****************************************/ |
||||
|
|
||||
|
} |
||||
|
|
||||
|
#endif //////nouse
|
||||
|
/*****************
|
||||
|
|
||||
|
L2_I2C_ReadReg(D_i2c_addr_HP303B,0x0d,d,1); |
||||
|
L0_MUART_uc(d[0]); |
||||
|
L2_I2C_ReadReg(D_i2c_addr_AS1,0x05,d,1);// 11 =0f
|
||||
|
L0_MUART_uc(d[0]); |
||||
|
L2_I2C_ReadReg(D_i2c_addr_AS2,0x05,d,1);//10 =0f
|
||||
|
L0_MUART_uc(d[0]); |
||||
|
|
||||
|
L1_as1_readXYZ(); |
||||
|
s_p_rf.ucR1 = (U8)(s_as1.x>>8); |
||||
|
s_p_rf.ucR2 = (U8)(s_as1.y>>8); |
||||
|
s_p_rf.ucR3 = (U8)(s_as1.z>>8); |
||||
|
p = (U8*)&s_p_rf; |
||||
|
|
||||
|
L0_MUART_uc(s_p_rf.ucR1); |
||||
|
L0_MUART_uc(s_p_rf.ucR2); |
||||
|
L0_MUART_uc(s_p_rf.ucR3); |
||||
|
L0_MUART_uc(0xc7); |
||||
|
*********************/ |
||||
|
#if 0 |
||||
|
|
||||
|
void L3_msa300_fun(U8 *pPara) |
||||
|
{ |
||||
|
U8 val = 0; |
||||
|
TS_P_debug *p = pPara; |
||||
|
/// Ac 01 02 03 ocr ---bsp_debug.c
|
||||
|
/// p.cmd p.R2 p.R3 p.ocr
|
||||
|
///Ac 00 03 01 00/// ACC_X[13:6]
|
||||
|
switch(p->cmd) |
||||
|
{ |
||||
|
case 0: |
||||
|
/// fc 00 02 01 xx 读取reg02 中的一个数据
|
||||
|
///0x02 ACC_X[5:0] 0x00
|
||||
|
//0x03 ACC_X[13:6] 0x00
|
||||
|
//0x04 ACC_Y[5:0] 0x00
|
||||
|
//0x05 ACC_Y[13:6] 0x00
|
||||
|
//0x06 ACC_Z[5:0] 0x00
|
||||
|
//0x07 ACC_Z[13:6] 0x00
|
||||
|
//// Ac 00 03 01 00/// ACC_X[13:6]
|
||||
|
//// Ac 00 05 01 00/// ACC_Y[13:6]
|
||||
|
//// Ac 00 07 01 00/// ACC_Z[13:6]
|
||||
|
L2_I2C_ReadReg(D_i2c_addr_AS1,p->R2 ,&val,p->R3); |
||||
|
///L0_uart0_uc(p->R2);
|
||||
|
///L0_uart0_uc(p->R3);
|
||||
|
L0_uart0_uc(val); |
||||
|
break; |
||||
|
case 2: |
||||
|
///Ac 02 22 01 00/// (05)=01
|
||||
|
L0_uart0_uc('W'); |
||||
|
///L2_I2C_WriteCmd(D_i2c_addr_AS1,p->R2,p->R3);
|
||||
|
//L0_uart0_uc(pPara[2]);
|
||||
|
// L0_uart0_uc(p->R2);
|
||||
|
// L0_uart0_uc(p->R3);
|
||||
|
break; |
||||
|
case 3: |
||||
|
///Ac 03 22 01 00/// (05)=01
|
||||
|
L1_as_action(); |
||||
|
if(1 == s_as[0].action_ok) |
||||
|
{ |
||||
|
s_as[0].action_ok = 0; |
||||
|
L0_uart0_uc(s_as[0].reg_action); |
||||
|
} |
||||
|
/*********************
|
||||
|
L2_I2C_ReadReg(D_i2c_addr_Gsensor,MSA_REG_Tape_Active_Status,&s_as[0].reg_temp,1); /// read only
|
||||
|
///L0_uart0_uc('.');
|
||||
|
s_as[0].reg_temp &= B0111_0111; |
||||
|
if(s_as[0].reg_power == s_as[0].reg_temp) |
||||
|
{ |
||||
|
|
||||
|
}else |
||||
|
{ |
||||
|
L0_uart0_uc(s_as[0].reg_temp); |
||||
|
s_as[0].reg_power = s_as[0].reg_temp; |
||||
|
}*************************/ |
||||
|
break; |
||||
|
default: |
||||
|
break; |
||||
|
}; |
||||
|
} |
||||
|
///#else
|
||||
|
void L3_msa300_fun(U8 *pPara) |
||||
|
{ |
||||
|
} |
||||
|
#endif |
||||
|
|
||||
|
|
||||
@ -0,0 +1,473 @@ |
|||||
|
////////////////////////////////////////////////////////////////////////////
|
||||
|
///@copyright Copyright (c) 2017, 传控科技 All rights reserved.
|
||||
|
///-------------------------------------------------------------------------
|
||||
|
/// @file msa300.c
|
||||
|
/// @brief msa300 driver app
|
||||
|
///-------------------------------------------------------------------------
|
||||
|
/// @version 1.0
|
||||
|
/// @author CC
|
||||
|
/// @date 20170122
|
||||
|
/// @note cc_AS_stc01
|
||||
|
//////////////////////////////////////////////////////////////////////////////
|
||||
|
|
||||
|
|
||||
|
|
||||
|
#ifndef _MSA300_H |
||||
|
#define _MSA300_H |
||||
|
|
||||
|
|
||||
|
#include "../clib/bit.h" |
||||
|
|
||||
|
#include "../msp/iic_sim.h" |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
/***********************************************************************
|
||||
|
|
||||
|
U51(SDO=1) int2 P33 ----------------U10(SDO=0) int2 P32----------------MCU----USB |
||||
|
0x4c 0x4e |
||||
|
AS1 AS2 |
||||
|
|
||||
|
**************************************************************************/ |
||||
|
|
||||
|
|
||||
|
#define D_i2c_addr_AS1 0x4c // u51
|
||||
|
//#define D_i2c_addr_AS2 0x4e
|
||||
|
/* Register define for NSA asic */ |
||||
|
#define MSA_REG_SPI_I2C 0x00 |
||||
|
#define MSA_REG_WHO_AM_I 0x01 |
||||
|
#define MSA_REG_ACC_X_LSB 0x02 |
||||
|
#define MSA_REG_ACC_X_MSB 0x03 |
||||
|
#define MSA_REG_ACC_Y_LSB 0x04 |
||||
|
#define MSA_REG_ACC_Y_MSB 0x05 |
||||
|
#define MSA_REG_ACC_Z_LSB 0x06 |
||||
|
#define MSA_REG_ACC_Z_MSB 0x07 |
||||
|
|
||||
|
|
||||
|
#define MSA_REG_Tape_Active_Status 0x0B |
||||
|
|
||||
|
#define MSA_REG_G_RANGE 0x0f |
||||
|
#define MSA_REG_ODR_AXIS_DISABLE 0x10 |
||||
|
#define MSA_REG_POWERMODE_BW 0x11 |
||||
|
#define MSA_REG_SWAP_POLARITY 0x12 |
||||
|
#define MSA_REG_FIFO_CTRL 0x14 |
||||
|
#define MSA_REG_INTERRUPT_SETTINGS1 0x16 |
||||
|
#define MSA_REG_INTERRUPT_SETTINGS2 0x17 |
||||
|
#define MSA_REG_INTERRUPT_MAPPING1 0x19 |
||||
|
#define MSA_REG_INTERRUPT_MAPPING2 0x1a |
||||
|
#define MSA_REG_INTERRUPT_MAPPING3 0x1b |
||||
|
#define MSA_REG_INT_PIN_CONFIG 0x20 |
||||
|
#define MSA_REG_INT_LATCH 0x21 |
||||
|
#define MSA_REG_ACTIVE_DURATION 0x27 |
||||
|
#define MSA_REG_ACTIVE_THRESHOLD 0x28 |
||||
|
#define MSA_REG_TAP_DURATION 0x2A |
||||
|
#define MSA_REG_TAP_THRESHOLD 0x2B |
||||
|
#define MSA_REG_CUSTOM_OFFSET_X 0x38 |
||||
|
#define MSA_REG_CUSTOM_OFFSET_Y 0x39 |
||||
|
#define MSA_REG_CUSTOM_OFFSET_Z 0x3a |
||||
|
#define MSA_REG_ENGINEERING_MODE 0x7f |
||||
|
#define MSA_REG_SENSITIVITY_TRIM_X 0x80 |
||||
|
#define MSA_REG_SENSITIVITY_TRIM_Y 0x81 |
||||
|
#define MSA_REG_SENSITIVITY_TRIM_Z 0x82 |
||||
|
#define MSA_REG_COARSE_OFFSET_TRIM_X 0x83 |
||||
|
#define MSA_REG_COARSE_OFFSET_TRIM_Y 0x84 |
||||
|
#define MSA_REG_COARSE_OFFSET_TRIM_Z 0x85 |
||||
|
#define MSA_REG_FINE_OFFSET_TRIM_X 0x86 |
||||
|
#define MSA_REG_FINE_OFFSET_TRIM_Y 0x87 |
||||
|
#define MSA_REG_FINE_OFFSET_TRIM_Z 0x88 |
||||
|
#define MSA_REG_SENS_COMP 0x8c |
||||
|
#define MSA_REG_MEMS_OPTION 0x8f |
||||
|
#define MSA_REG_CHIP_INFO 0xc0 |
||||
|
#define MSA_REG_CHIP_INFO_SECOND 0xc1 |
||||
|
#define MSA_REG_SENS_COARSE_TRIM 0xd1 |
||||
|
|
||||
|
/*************
|
||||
|
|
||||
|
------------------------------------------------------------------- |
||||
|
Reg 0x0F(Resolution/Range):Read/Write |
||||
|
Bit7 Bit6 Bit5 Bit4 |Bit3 Bit2 |Bit1 Bit0 | Default |
||||
|
|RESOLUTION[1:0] | FS[1:0] | 0X00 |
||||
|
|
||||
|
|
||||
|
RESOLUTION[1:0]: resolution of x/y/z axes, |
||||
|
00:14bit, 01:12bit, 10:10bit, 11:8bit |
||||
|
|
||||
|
|
||||
|
FS[1:0]: acceleration range of x/y/z axes, |
||||
|
00:+/-2g, 01:+/-4g, 10:+/-8g, 11:+/-16g |
||||
|
|
||||
|
|
||||
|
*********/ |
||||
|
#define D_MSA_8BIT B0000_1100 |
||||
|
#define D_MSA_12BIT B0000_0100 |
||||
|
#define D_MSA_10BIT B0000_1000 |
||||
|
#define D_MSA_14BIT B0000_0000 |
||||
|
|
||||
|
#define D_MSA_16G B0000_0011 |
||||
|
#define D_MSA_8G B0000_0001 |
||||
|
#define D_MSA_4G B0000_0010 |
||||
|
#define D_MSA_2G B0000_0000 |
||||
|
/**********
|
||||
|
ODR Output data rate 1 1000 Hz |
||||
|
|
||||
|
Reg0x10(ODR) :Read/Write Default 0X0F |
||||
|
Bit7 Bit6 Bit5 |
||||
|
X_AXIS_DIS Y_AXIS_DIS Z_AXIS_DIS |
||||
|
Bit4 |
||||
|
Bit3 Bit2 Bit1 Bit0 |
||||
|
ODR[3:0] |
||||
|
|
||||
|
X_AXIS_DIS: 0:enable, 1:disable Y_AXIS_DIS: 0:enable, 1:disable Z_AXIS_DIS: 0:enable, 1:disable |
||||
|
ODR[3:0]: |
||||
|
0000:1Hz (not available in normal mode) |
||||
|
0001:1.95Hz (not available in normal mode) |
||||
|
0010:3.9Hz 0011:7.81Hz |
||||
|
0100:15.63Hz 0101: 31.25Hz 0110: 62.5Hz 0111: 125Hz 1000: 250Hz |
||||
|
1001: 500Hz (not available in low power mode) |
||||
|
1010-1111: (not available in low power mode) |
||||
|
|
||||
|
|
||||
|
Table 5: bandwidth under different ODR and BW settings in normal mode |
||||
|
ODR BW |
||||
|
1000Hz (1010-1111) 500Hz |
||||
|
500Hz (1001) 250Hz |
||||
|
250Hz (1000) 125Hz |
||||
|
125Hz (0111) 62.5Hz |
||||
|
62.5Hz (0110) 31.25Hz |
||||
|
31.25Hz (0101) 15.63Hz |
||||
|
15.63Hz (0100) 7.81Hz |
||||
|
7.81Hz (0011) 3.9Hz |
||||
|
3.9Hz (0010) 1.95Hz |
||||
|
MSA300 supports four different acceleration measurement ranges, it is selected |
||||
|
ODR BW |
||||
|
15.63Hz (0100) 7.81Hz |
||||
|
|
||||
|
*********/ |
||||
|
/// fixme: 实测和规格书不一致
|
||||
|
#define D_AXIS_DIS_Y B1000_0000 |
||||
|
#define D_AXIS_DIS_X B0100_0000 |
||||
|
#define D_AXIS_DIS_Z B0010_0000 |
||||
|
|
||||
|
#define D_ODR_31Hz25 0x05 |
||||
|
#define D_ODR_250Hz 0x08 |
||||
|
#define D_ODR_125Hz 0x0f |
||||
|
#define D_ODR_15P63Hz B0000_0100 |
||||
|
|
||||
|
|
||||
|
|
||||
|
/**********
|
||||
|
Reg0x11(Power Mode/Bandwidth) : Read/Write |
||||
|
------------------------------------------------------------------ |
||||
|
Bit7 Bit6 |Bit5 Bit4 Bit3 Bit2 Bit1 |Bit0 Default 0X9E |
||||
|
---------------------------------------------------------------------- |
||||
|
PWR_MODE | LOW_POWER_BW[3:0] | |
||||
|
-------------------------------------------------------------------- |
||||
|
PWR_MODE: 00:normal mode, 01:low power mode, 10/11 suspend mode |
||||
|
LOW_POWER_BW[3:0]: |
||||
|
0000-0010:1.95Hz |
||||
|
0011:3.9Hz, |
||||
|
0100:7.81Hz |
||||
|
0101:15.63Hz, |
||||
|
0110: 31.25Hz, |
||||
|
0111: 62.5Hz, |
||||
|
1000: 125Hz, |
||||
|
1001: 250Hz, |
||||
|
1010-1111:500Hz |
||||
|
***********/ |
||||
|
//#define D_PowerMode_normal 0x00
|
||||
|
//#define D_PowerMode_low 0x40
|
||||
|
//#define D_PowerMode_suspend 0x80
|
||||
|
#define D_lowPower_BW (0x0F<<1) |
||||
|
|
||||
|
#define D_PowerMode_normal 0x1e |
||||
|
#define D_PowerMode_suspend 0x9e |
||||
|
|
||||
|
#define D_gs_LPBW1H9 (0<<1) |
||||
|
#define D_gs_LPBW3H9 (3<<1) |
||||
|
#define D_gs_LPBW7H8 (4<<1) |
||||
|
#define D_gs_LPBW15H (5<<1) |
||||
|
#define D_gs_LPBW31H (6<<1) |
||||
|
#define D_gs_LPBW62H (7<<1) |
||||
|
#define D_gs_LPBW125H (8<<1) |
||||
|
#define D_gs_LPBW250H (9<<1) |
||||
|
#define D_gs_LPBW500H (10<<1) |
||||
|
|
||||
|
|
||||
|
///#define D_PowerMode_low 0x5e
|
||||
|
|
||||
|
#define D_PowerMode_low (0x50|D_gs_LPBW1H9) |
||||
|
//#define D_PowerMode_low 0x5e///(0x40|D_gs_LPBW62H)
|
||||
|
|
||||
|
#define LD_gsensor_power(Pmode) L2_I2C_WriteCmd(D_i2c_addr_Gsensor,MSA_REG_POWERMODE_BW,Pmode);s_as.power=Pmode |
||||
|
|
||||
|
|
||||
|
/**********
|
||||
|
|
||||
|
|
||||
|
/**************************************
|
||||
|
Reg 0x1B (Int_Map_2) :Read/Write |
||||
|
Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 Default |
||||
|
|
||||
|
Bit6 INT2_ORIENT |
||||
|
Bit5 INT2_S_TAP |
||||
|
Bit4 INT2_D_TAP |
||||
|
Bit2 INT2_ACTIVE |
||||
|
Bit1 RESERVED |
||||
|
Bit0 INT2_FREEFALL |
||||
|
0X00 |
||||
|
INT2_ORIENT: map orientation interrupt to INT2, 0:disable, 1:enable INT2_S_TAP: map single tap interrupt to INT2, 0:disable, 1:enable INT2_D_TAP: map double tap interrupt to INT2, 0:disable, 1:enable INT2_ACTIVE: map active interrupt to INT2, 0:disable, 1:enable INT2_FREEFALL: map freefall interrupt to INT2, 0:disable, 1:enable |
||||
|
***************************************/ |
||||
|
#define D_INT2_ORIENT BITN6 |
||||
|
#define D_INT2_S_TAP BITN5 |
||||
|
#define D_INT2_D_TAP BITN4 |
||||
|
#define D_INT2_ACTIVE BITN2 |
||||
|
#define D_INT2_FREEFALL BITN1 |
||||
|
/**********************************************
|
||||
|
|
||||
|
Reg 0x20 (Int_Map_2) :Read/Write |
||||
|
Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 Default 0X00 |
||||
|
Bit3 INT2_OD |
||||
|
Bit2 NT2_LVL |
||||
|
Bit1 IINT1_OD |
||||
|
Bit0 INT1_LVL |
||||
|
INT2_OD: select output for INT2, 0: push-pull, 1:OD |
||||
|
INT2_LVL: select active level for INT2, 0: low, 1:high |
||||
|
INT1_OD: select output for INT1, 0: push-pull, 1:OD |
||||
|
INT1_LVL: select active level for INT1, 0: low, 1:high |
||||
|
***************************************/ |
||||
|
#define D_INT2_pull 0 |
||||
|
#define D_INT2_OD BITN3 |
||||
|
#define D_INT2_LVL_high BITN2 |
||||
|
#define D_INT2_LVL_low 0 |
||||
|
|
||||
|
|
||||
|
#define D_INT1_pull 0 |
||||
|
#define D_INT1_OD BITN1 |
||||
|
#define D_INT1_LVL_high BITN0 |
||||
|
#define D_INT1_LVL_low 0 |
||||
|
|
||||
|
|
||||
|
|
||||
|
/*************************************************************
|
||||
|
|
||||
|
U51(SDO=1) int2 P33 ----------------U10(SDO=0) int2 P32----------------MCU----USB |
||||
|
0x4c 0x4e |
||||
|
AS1 AS2 |
||||
|
|
||||
|
-------------------------------------------------------------------- |
||||
|
Reg 0x16(Int_Set_0) : Read/Write |
||||
|
Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 Default 0X00 |
||||
|
------------------------------------------------------------------- |
||||
|
象限应该 是 方位识别 |
||||
|
Tap 功能 |
||||
|
双击和单击 |
||||
|
使能单击 s_tap_en 使能双击d_tap_en |
||||
|
中断状态保存: )s_tap_int , d_tap_int |
||||
|
通过检查加速度斜率是否超过设定的阈值来判断是否有单击事件 |
||||
|
|
||||
|
Bit6 ORIENT_INT_EN |
||||
|
Bit5 S_TAP_INT_EN |
||||
|
Bit4 D_TAP_INT_EN |
||||
|
Bit2 ACTIVE_INT_EN_Z |
||||
|
Bit1 ACTIVE_INT_EN_Y |
||||
|
Bit0 ACTIVE_INT_EN_X |
||||
|
|
||||
|
------------------------------------------------------------------- |
||||
|
ORIENT_INT_EN: orient interrupt, 0:disable, 1:enable |
||||
|
S_TAP_INT_EN: single tap interrupt, 0:disable, 1:enable |
||||
|
D_TAP_INT_EN: double tap interrupt, 0:disable, 1:enable |
||||
|
ACTIVE_INT_EN_Z: active interrupt for the z axis, 0:disable, 1:enable |
||||
|
ACTIVE_INT_EN_Y: active interrupt for the y axis, 0:disable, 1:enable |
||||
|
ACTIVE_INT_EN_X: active interrupt for the x axis, 0:disable, 1:enable |
||||
|
|
||||
|
|
||||
|
reg 0x16对应的Reg 0x19 |
||||
|
------------------------------------------------------------------- |
||||
|
Reg 0x19(Int_Map_0) : Read/Write |
||||
|
Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 Default |
||||
|
------------------------------------------------------------------- |
||||
|
INT1_ORIENT |
||||
|
INT1_S_TAP |
||||
|
INT1_D_TAP |
||||
|
INT1_ACTIVE |
||||
|
INT1_FREEFALL |
||||
|
0X00 |
||||
|
------------------------------------------------------------------- |
||||
|
INT1_ORIENT: map orientation interrupt to INT1, 0:disable, 1:enable |
||||
|
INT1_S_TAP: map single tap interrupt to INT1, 0:disable, 1:enable |
||||
|
INT1_D_TAP: map double tap interrupt to INT1, 0:disable, 1:enable |
||||
|
INT1_ACTIVE: map active interrupt to INT1, 0:disable, 1:enable |
||||
|
INT1_FREEFALL: map freefall interrupt to INT1, 0:disable, 1:enable |
||||
|
|
||||
|
|
||||
|
------------------------------------------------------------------- |
||||
|
Reg 0x27 (Active_Dur) : Read/Write |
||||
|
Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 Default |
||||
|
ACTIVE_DUR[1:0] 0X00 |
||||
|
ACTIVE_DUR[1:0]: active duration time is (ACTIVE_DUR[1:0]+1)ms |
||||
|
------------------------------------------------------------------- |
||||
|
Reg 0x28(Active_Th) : Read/Write |
||||
|
|
||||
|
Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 Default |
||||
|
ACTIVE_TH[7:0] 0X14 |
||||
|
ACTIVE_TH[7:0]: threshold of active interrupt |
||||
|
3.91mg/LSB(2g range) |
||||
|
7.81mg/LSB(4g range) |
||||
|
15.625mg/LSB(8g range) |
||||
|
31.25mg/LSB(16g range) |
||||
|
|
||||
|
|
||||
|
|
||||
|
**************************************************************************/ |
||||
|
|
||||
|
#define ACTIVE_INT_EN_Z BITN2 |
||||
|
#define ACTIVE_INT_EN_Y BITN1 |
||||
|
#define ACTIVE_INT_EN_X BITN0 |
||||
|
|
||||
|
|
||||
|
/***************************************
|
||||
|
0x21 RESET_INT LATCH_INT[3:0] 0x00 |
||||
|
latch_int Interrupt mode |
||||
|
0000 non-latched |
||||
|
0001 temporary latched 250ms |
||||
|
0010 temporary latched 500ms |
||||
|
0011 temporary latched 1s |
||||
|
0100 temporary latched 2s |
||||
|
0101 temporary latched 4s |
||||
|
0110 temporary latched 8s |
||||
|
0111 Latched |
||||
|
1000 non-latched |
||||
|
1001 temporary latched 1ms |
||||
|
1010 temporary latched 1ms |
||||
|
1011 temporary latched 2ms |
||||
|
1100 temporary latched 25ms |
||||
|
1101 temporary latched 50ms |
||||
|
1110 temporary latched 100ms |
||||
|
1111 Latched |
||||
|
|
||||
|
_______/``latch period````\_______ |
||||
|
****************************************/ |
||||
|
#define D_no_latched 0x01 |
||||
|
#define D_latch_250ms 0x01 |
||||
|
#define D_latch_500ms 0x02 |
||||
|
#define D_latch_1s 0x03 |
||||
|
#define D_latch_2s 0x04 |
||||
|
#define D_latch_4s 0x05 |
||||
|
#define D_latch_8s 0x06 |
||||
|
#define D_latched 0x07 |
||||
|
#define D_no_latched2 0x08 |
||||
|
#define D_latch_1ms 0x09 |
||||
|
#define D_latch_1ms2 0x0a |
||||
|
#define D_latch_2ms 0x0B |
||||
|
#define D_latch_25ms 0x0C |
||||
|
#define D_latch_50ms 0x0D |
||||
|
#define D_latch_100ms 0x0E |
||||
|
#define D_latched2 0x0f |
||||
|
|
||||
|
/****************************************************
|
||||
|
Reg 0x09(Motion_Interrupt) :Read only |
||||
|
Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 Default 0X00 |
||||
|
Bit6 ORIENT_INT |
||||
|
Bit5 S_TAP_INT |
||||
|
Bit4 D_TAP_INT |
||||
|
Bit2 ACTIVE_INT |
||||
|
Bit0 FREEFALL_INT |
||||
|
运输的时候不停的动怎么办 需要方位判定?? |
||||
|
如果图像不是黑暗中 则 |
||||
|
运输的动静大 需要关闭 |
||||
|
也就是有大的动静时需要5s以上之后再工作 如果动静大 再休息5秒 这样把耗电 |
||||
|
降到最小 |
||||
|
|
||||
|
ORIENT_INT: orientation interrupt status,0:inactive,1:active |
||||
|
S_TAP_INT: single tap interrupt status,0:inactive,1:active |
||||
|
D_TAP_INT: double tap interrupt status,0:inactive,1:active |
||||
|
ACTIVE_INT: active interrupt status,0:inactive,1:active |
||||
|
FREEFALL_INT: freefall interrupt status,0:inactive,1:active |
||||
|
------------------------------------------------------------------- |
||||
|
Reg 0x0B(Tape_Active_Status) :Read only |
||||
|
Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 Default |
||||
|
TAP_SIGN |
||||
|
TAP_FIRST_X |
||||
|
TAP_FIRST_Y |
||||
|
TAP_FIRST_Z |
||||
|
ACTIVE_SIGN |
||||
|
ACTIVE_FIRST_X |
||||
|
ACTIVE_FIRST_Y |
||||
|
ACTIVE_FIRST_Z |
||||
|
0X00 |
||||
|
------------------------------------------------------------------- |
||||
|
TAP_SIGN: sign of tap triggering signal, 0:positive,1:negative |
||||
|
TAP_FIRST_X: tap interrupt triggered by x axis, 1:positive,0:negative |
||||
|
TAP_FIRST_Y: tap interrupt triggered by y axis, 1:positive,0:negative |
||||
|
TAP_FIRST_Z: tap interrupt triggered by z axis, 1:positive,0:negative |
||||
|
ACTIVE_SIGN: sign of active interrupt, 0:positive,1:negative |
||||
|
ACTIVE_FIRST_X: active interrupt triggered by x axis, 1:positive,0:negative |
||||
|
ACTIVE_FIRST_Y: active interrupt triggered by y axis, 1:positive,0:negative |
||||
|
ACTIVE_FIRST_Z: active interrupt triggered by z axis, 1:positive,0:negative |
||||
|
|
||||
|
|
||||
|
***************************************************/ |
||||
|
|
||||
|
#define INT1_S_TAP_INT BITN5 ///单击中断
|
||||
|
#define INT1_D_TAP_INT BITN4 ///双击中断
|
||||
|
#define INT1_ACTIVE BITN2 /// 振动中断
|
||||
|
|
||||
|
#define D_Active_TH 0x28 |
||||
|
#define D_Active_Dur 0x27 |
||||
|
|
||||
|
|
||||
|
#define D_i2c_addr_AS1 0x4c // u51
|
||||
|
#define D_i2c_addr_AS2 0x4e |
||||
|
|
||||
|
|
||||
|
#define D_i2c_addr_Gsensor 0x4c // u51
|
||||
|
|
||||
|
|
||||
|
#define D_i2c_addr_AS1 0x4c // u51
|
||||
|
#define D_i2c_addr_AS2 0x4e |
||||
|
|
||||
|
/******************************************************************************/ |
||||
|
/***************************** Include Files **********************************/ |
||||
|
/******************************************************************************/ |
||||
|
|
||||
|
// 最高400Khz 1/400 ms 2.5us
|
||||
|
|
||||
|
//Symbol Parameter Condition Min Max Unit
|
||||
|
//fscl Clock frequency 400 kHz
|
||||
|
#define D_as_ch_mun 1 |
||||
|
struct _s_gsens_ |
||||
|
{//8byte
|
||||
|
U8 d[6]; |
||||
|
// U8 reg_action;
|
||||
|
U8 power; |
||||
|
// U8 reg_temp;
|
||||
|
// U8 action_ok;
|
||||
|
|
||||
|
// U16 x;
|
||||
|
// U16 y;
|
||||
|
// U16 z;
|
||||
|
|
||||
|
}; |
||||
|
extern struct _s_gsens_ s_as; |
||||
|
extern void L1_as_readXYZ(unsigned char CH); |
||||
|
extern void L1_msa300_init(void); |
||||
|
extern void L3_msa300_fun(U8 *pPara); |
||||
|
extern void L1_as_action(void); |
||||
|
|
||||
|
extern void L1_as_WorkStatus(unsigned char d); |
||||
|
///L1_msa300_power(D_sleep);
|
||||
|
extern void L1_msa300_power(U8 mode); |
||||
|
|
||||
|
#define L1_ms300_reg_set(x,y) L2_I2C_WriteCmd(D_i2c_addr_Gsensor, (x),(y) ) |
||||
|
#define L1_ms300_reg_get(x,y) L2_I2C_ReadReg(D_i2c_addr_Gsensor,(x),1) |
||||
|
#define DL_ms300_int_open(); L1_ms300_reg_set(MSA_REG_INTERRUPT_MAPPING3,D_INT2_S_TAP|D_INT2_ACTIVE); |
||||
|
#define DL_ms300_int_close(); L1_ms300_reg_set(MSA_REG_INTERRUPT_MAPPING3,0); |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
#endif // #ifndef _MSA300_H
|
||||
|
|
||||
|
|
||||
|
|
||||
Some files were not shown because too many files changed in this diff
Loading…
Reference in new issue