add flashloader

This commit is contained in:
pvvx 2016-12-25 13:07:26 +03:00
parent 8332b226be
commit 82853f3eed
27 changed files with 4196 additions and 0 deletions

View file

@ -0,0 +1,41 @@
__load_dram_param(){
//DRAM_INFO
DeviceType = 8; //DRAM_SDR
Page = 0; //DRAM_COLADDR_8B
Bank=0; //DRAM_BANK_2
DqWidth=0; //DRAM_DQ_1
//DRAM_MODE_REG_INFO
BstLen=0; //BST_LEN_4
BstType=0; //SENQUENTIAL
Mode0Cas=3;
Mode0Wr=0;
Mode1DllEnN=0;
Mode1AllLat=0;
Mode2Cwl=0;
//DRAM_TIMING_INFO
DramTimingTref = 64000;
DramRowNum = 8192;
//SDR 100MHZ==>10000, 50MHZ==>20000, 25MHZ==>40000, 12.5MHZ==>80000
Tck = 80000; //SDR 12.5MHZ
TrfcPs=60000;
TrefiPs=((DramTimingTref*1000)/DramRowNum)*1000;
WrMaxTck=2;
TrcdPs=15000;
TrpPs=15000;
TrasPs=42000;
TrrdTck=2;
TwrPs=Tck*2;
TwtrTck=0;
TmrdTck=2;
TrtpTck=0;
TccdTck=1;
TrcPs=60000;
//DRAM_DEVICE_INFO
DdrPeriodPs=Tck;
DfiRate=0; //DFI_RATIO_1
}

View file

@ -0,0 +1,4 @@
__load_dram_common(){
__registerMacroFile("$PROJ_DIR$\\..\\..\\..\\component\\soc\\realtek\\8195a\\misc\\iar_utility\\common\\dram\\EM6A6165TS_7G.mac");
}

View file

@ -0,0 +1,4 @@
To Change DRAM setting
1. Create and Fill content like EM6A6165TS_7G.mac
2. Change load file in common.mac

View file

@ -0,0 +1,982 @@
<?xml version="1.0" encoding="iso-8859-1"?>
<project>
<fileVersion>2</fileVersion>
<configuration>
<name>Debug</name>
<toolchain>
<name>ARM</name>
</toolchain>
<debug>1</debug>
<settings>
<name>General</name>
<archiveVersion>3</archiveVersion>
<data>
<version>22</version>
<wantNonLocal>1</wantNonLocal>
<debug>1</debug>
<option>
<name>ExePath</name>
<state>$PROJ_DIR$\..</state>
</option>
<option>
<name>ObjPath</name>
<state>Debug\Obj</state>
</option>
<option>
<name>ListPath</name>
<state>Debug\List</state>
</option>
<option>
<name>Variant</name>
<version>21</version>
<state>38</state>
</option>
<option>
<name>GEndianMode</name>
<state>0</state>
</option>
<option>
<name>Input variant</name>
<version>3</version>
<state>6</state>
</option>
<option>
<name>Input description</name>
<state>No specifier n, no float nor long long, no scan set, no assignment suppressing.</state>
</option>
<option>
<name>Output variant</name>
<version>2</version>
<state>5</state>
</option>
<option>
<name>Output description</name>
<state>No specifier a, A, no specifier n, no float nor long long.</state>
</option>
<option>
<name>GOutputBinary</name>
<state>0</state>
</option>
<option>
<name>FPU</name>
<version>3</version>
<state>0</state>
</option>
<option>
<name>OGCoreOrChip</name>
<state>0</state>
</option>
<option>
<name>GRuntimeLibSelect</name>
<version>0</version>
<state>1</state>
</option>
<option>
<name>GRuntimeLibSelectSlave</name>
<version>0</version>
<state>1</state>
</option>
<option>
<name>RTDescription</name>
<state>Use the normal configuration of the C/C++ runtime library. No locale interface, C locale, no file descriptor support, no multibytes in printf and scanf, and no hex floats in strtod.</state>
</option>
<option>
<name>OGProductVersion</name>
<state>6.30.4.53294</state>
</option>
<option>
<name>OGLastSavedByProductVersion</name>
<state>7.30.3.8061</state>
</option>
<option>
<name>GeneralEnableMisra</name>
<state>0</state>
</option>
<option>
<name>GeneralMisraVerbose</name>
<state>0</state>
</option>
<option>
<name>OGChipSelectEditMenu</name>
<state>LPC1850 NXP LPC1850</state>
</option>
<option>
<name>GenLowLevelInterface</name>
<state>0</state>
</option>
<option>
<name>GEndianModeBE</name>
<state>1</state>
</option>
<option>
<name>OGBufferedTerminalOutput</name>
<state>0</state>
</option>
<option>
<name>GenStdoutInterface</name>
<state>0</state>
</option>
<option>
<name>GeneralMisraRules98</name>
<version>0</version>
<state>1000111110110101101110011100111111101110011011000101110111101101100111111111111100110011111001110111001111111111111111111111111</state>
</option>
<option>
<name>GeneralMisraVer</name>
<state>0</state>
</option>
<option>
<name>GeneralMisraRules04</name>
<version>0</version>
<state>111101110010111111111000110111111111111111111111111110010111101111010101111111111111111111111111101111111011111001111011111011111111111111111</state>
</option>
<option>
<name>RTConfigPath2</name>
<state>$TOOLKIT_DIR$\INC\c\DLib_Config_Normal.h</state>
</option>
<option>
<name>GFPUCoreSlave</name>
<version>21</version>
<state>38</state>
</option>
<option>
<name>GBECoreSlave</name>
<version>21</version>
<state>38</state>
</option>
<option>
<name>OGUseCmsis</name>
<state>0</state>
</option>
<option>
<name>OGUseCmsisDspLib</name>
<state>0</state>
</option>
<option>
<name>GRuntimeLibThreads</name>
<state>0</state>
</option>
</data>
</settings>
<settings>
<name>ICCARM</name>
<archiveVersion>2</archiveVersion>
<data>
<version>31</version>
<wantNonLocal>1</wantNonLocal>
<debug>1</debug>
<option>
<name>CCOptimizationNoSizeConstraints</name>
<state>0</state>
</option>
<option>
<name>CCDefines</name>
<state></state>
</option>
<option>
<name>CCPreprocFile</name>
<state>0</state>
</option>
<option>
<name>CCPreprocComments</name>
<state>0</state>
</option>
<option>
<name>CCPreprocLine</name>
<state>0</state>
</option>
<option>
<name>CCListCFile</name>
<state>0</state>
</option>
<option>
<name>CCListCMnemonics</name>
<state>0</state>
</option>
<option>
<name>CCListCMessages</name>
<state>0</state>
</option>
<option>
<name>CCListAssFile</name>
<state>0</state>
</option>
<option>
<name>CCListAssSource</name>
<state>0</state>
</option>
<option>
<name>CCEnableRemarks</name>
<state>0</state>
</option>
<option>
<name>CCDiagSuppress</name>
<state></state>
</option>
<option>
<name>CCDiagRemark</name>
<state></state>
</option>
<option>
<name>CCDiagWarning</name>
<state></state>
</option>
<option>
<name>CCDiagError</name>
<state></state>
</option>
<option>
<name>CCObjPrefix</name>
<state>1</state>
</option>
<option>
<name>CCAllowList</name>
<version>1</version>
<state>10010100</state>
</option>
<option>
<name>CCDebugInfo</name>
<state>1</state>
</option>
<option>
<name>IEndianMode</name>
<state>1</state>
</option>
<option>
<name>IProcessor</name>
<state>1</state>
</option>
<option>
<name>IExtraOptionsCheck</name>
<state>1</state>
</option>
<option>
<name>IExtraOptions</name>
<state></state>
</option>
<option>
<name>CCLangConformance</name>
<state>0</state>
</option>
<option>
<name>CCSignedPlainChar</name>
<state>1</state>
</option>
<option>
<name>CCRequirePrototypes</name>
<state>0</state>
</option>
<option>
<name>CCMultibyteSupport</name>
<state>0</state>
</option>
<option>
<name>CCDiagWarnAreErr</name>
<state>0</state>
</option>
<option>
<name>CCCompilerRuntimeInfo</name>
<state>0</state>
</option>
<option>
<name>IFpuProcessor</name>
<state>1</state>
</option>
<option>
<name>OutputFile</name>
<state>$FILE_BNAME$.o</state>
</option>
<option>
<name>CCLibConfigHeader</name>
<state>1</state>
</option>
<option>
<name>PreInclude</name>
<state></state>
</option>
<option>
<name>CompilerMisraOverride</name>
<state>0</state>
</option>
<option>
<name>CCIncludePath2</name>
<state>$PROJ_DIR$\.</state>
<state>$PROJ_DIR$\framework2</state>
<state>$PROJ_DIR$\..\..\..\..\..\..\..\..\..\component\soc\realtek\common\bsp</state>
<state>$PROJ_DIR$\..\..\..\..\..\..\..\..\..\component\soc\realtek\8195a\misc\driver</state>
<state>$PROJ_DIR$\..\..\..\..\..\..\..\..\..\component\common\api\network\include</state>
<state>$PROJ_DIR$\..\..\..\..\..\..\..\..\..\component\common\api</state>
<state>$PROJ_DIR$\..\..\..\..\..\..\..\..\..\component\common\api\platform</state>
<state>$PROJ_DIR$\..\..\..\..\..\..\..\..\..\component\soc\realtek\8195a\cmsis</state>
<state>$PROJ_DIR$\..\..\..\..\..\..\..\..\..\component\soc\realtek\8195a\cmsis\device</state>
<state>$PROJ_DIR$\..\..\..\..\..\..\..\..\..\component\soc\realtek\8195a\fwlib</state>
<state>$PROJ_DIR$\..\..\..\..\..\..\..\..\..\component\soc\realtek\8195a\fwlib\rtl8195a</state>
<state>$PROJ_DIR$\..\..\..\..\..\..\..\..\..\component\common\utilities</state>
<state>$PROJ_DIR$\..\..\..\..\..\..\..\..\..\component\soc\realtek\8195a\misc\rtl_std_lib\include</state>
</option>
<option>
<name>CCStdIncCheck</name>
<state>0</state>
</option>
<option>
<name>CCCodeSection</name>
<state>.text</state>
</option>
<option>
<name>IInterwork2</name>
<state>0</state>
</option>
<option>
<name>IProcessorMode2</name>
<state>1</state>
</option>
<option>
<name>CCOptLevel</name>
<state>2</state>
</option>
<option>
<name>CCOptStrategy</name>
<version>0</version>
<state>0</state>
</option>
<option>
<name>CCOptLevelSlave</name>
<state>2</state>
</option>
<option>
<name>CompilerMisraRules98</name>
<version>0</version>
<state>1000111110110101101110011100111111101110011011000101110111101101100111111111111100110011111001110111001111111111111111111111111</state>
</option>
<option>
<name>CompilerMisraRules04</name>
<version>0</version>
<state>111101110010111111111000110111111111111111111111111110010111101111010101111111111111111111111111101111111011111001111011111011111111111111111</state>
</option>
<option>
<name>CCPosIndRopi</name>
<state>0</state>
</option>
<option>
<name>CCPosIndRwpi</name>
<state>0</state>
</option>
<option>
<name>CCPosIndNoDynInit</name>
<state>0</state>
</option>
<option>
<name>IccLang</name>
<state>0</state>
</option>
<option>
<name>IccCDialect</name>
<state>1</state>
</option>
<option>
<name>IccAllowVLA</name>
<state>0</state>
</option>
<option>
<name>IccCppDialect</name>
<state>1</state>
</option>
<option>
<name>IccExceptions</name>
<state>1</state>
</option>
<option>
<name>IccRTTI</name>
<state>1</state>
</option>
<option>
<name>IccStaticDestr</name>
<state>1</state>
</option>
<option>
<name>IccCppInlineSemantics</name>
<state>0</state>
</option>
<option>
<name>IccCmsis</name>
<state>1</state>
</option>
<option>
<name>IccFloatSemantics</name>
<state>0</state>
</option>
<option>
<name>CCNoLiteralPool</name>
<state>0</state>
</option>
<option>
<name>CCOptStrategySlave</name>
<version>0</version>
<state>0</state>
</option>
<option>
<name>CCGuardCalls</name>
<state>1</state>
</option>
</data>
</settings>
<settings>
<name>AARM</name>
<archiveVersion>2</archiveVersion>
<data>
<version>9</version>
<wantNonLocal>1</wantNonLocal>
<debug>1</debug>
<option>
<name>AObjPrefix</name>
<state>1</state>
</option>
<option>
<name>AEndian</name>
<state>1</state>
</option>
<option>
<name>ACaseSensitivity</name>
<state>1</state>
</option>
<option>
<name>MacroChars</name>
<version>0</version>
<state>0</state>
</option>
<option>
<name>AWarnEnable</name>
<state>0</state>
</option>
<option>
<name>AWarnWhat</name>
<state>0</state>
</option>
<option>
<name>AWarnOne</name>
<state></state>
</option>
<option>
<name>AWarnRange1</name>
<state></state>
</option>
<option>
<name>AWarnRange2</name>
<state></state>
</option>
<option>
<name>ADebug</name>
<state>1</state>
</option>
<option>
<name>AltRegisterNames</name>
<state>0</state>
</option>
<option>
<name>ADefines</name>
<state></state>
</option>
<option>
<name>AList</name>
<state>0</state>
</option>
<option>
<name>AListHeader</name>
<state>1</state>
</option>
<option>
<name>AListing</name>
<state>1</state>
</option>
<option>
<name>Includes</name>
<state>0</state>
</option>
<option>
<name>MacDefs</name>
<state>0</state>
</option>
<option>
<name>MacExps</name>
<state>1</state>
</option>
<option>
<name>MacExec</name>
<state>0</state>
</option>
<option>
<name>OnlyAssed</name>
<state>0</state>
</option>
<option>
<name>MultiLine</name>
<state>0</state>
</option>
<option>
<name>PageLengthCheck</name>
<state>0</state>
</option>
<option>
<name>PageLength</name>
<state>80</state>
</option>
<option>
<name>TabSpacing</name>
<state>8</state>
</option>
<option>
<name>AXRef</name>
<state>0</state>
</option>
<option>
<name>AXRefDefines</name>
<state>0</state>
</option>
<option>
<name>AXRefInternal</name>
<state>0</state>
</option>
<option>
<name>AXRefDual</name>
<state>0</state>
</option>
<option>
<name>AProcessor</name>
<state>1</state>
</option>
<option>
<name>AFpuProcessor</name>
<state>1</state>
</option>
<option>
<name>AOutputFile</name>
<state>$FILE_BNAME$.o</state>
</option>
<option>
<name>AMultibyteSupport</name>
<state>0</state>
</option>
<option>
<name>ALimitErrorsCheck</name>
<state>0</state>
</option>
<option>
<name>ALimitErrorsEdit</name>
<state>100</state>
</option>
<option>
<name>AIgnoreStdInclude</name>
<state>0</state>
</option>
<option>
<name>AUserIncludes</name>
<state></state>
</option>
<option>
<name>AExtraOptionsCheckV2</name>
<state>0</state>
</option>
<option>
<name>AExtraOptionsV2</name>
<state></state>
</option>
<option>
<name>AsmNoLiteralPool</name>
<state>0</state>
</option>
</data>
</settings>
<settings>
<name>OBJCOPY</name>
<archiveVersion>0</archiveVersion>
<data>
<version>1</version>
<wantNonLocal>1</wantNonLocal>
<debug>1</debug>
<option>
<name>OOCOutputFormat</name>
<version>2</version>
<state>0</state>
</option>
<option>
<name>OCOutputOverride</name>
<state>0</state>
</option>
<option>
<name>OOCOutputFile</name>
<state>FlashLoader.srec</state>
</option>
<option>
<name>OOCCommandLineProducer</name>
<state>1</state>
</option>
<option>
<name>OOCObjCopyEnable</name>
<state>0</state>
</option>
</data>
</settings>
<settings>
<name>CUSTOM</name>
<archiveVersion>3</archiveVersion>
<data>
<extensions></extensions>
<cmdline></cmdline>
<hasPrio>0</hasPrio>
</data>
</settings>
<settings>
<name>BICOMP</name>
<archiveVersion>0</archiveVersion>
<data/>
</settings>
<settings>
<name>BUILDACTION</name>
<archiveVersion>1</archiveVersion>
<data>
<prebuild></prebuild>
<postbuild></postbuild>
</data>
</settings>
<settings>
<name>ILINK</name>
<archiveVersion>0</archiveVersion>
<data>
<version>16</version>
<wantNonLocal>1</wantNonLocal>
<debug>1</debug>
<option>
<name>IlinkLibIOConfig</name>
<state>1</state>
</option>
<option>
<name>XLinkMisraHandler</name>
<state>0</state>
</option>
<option>
<name>IlinkInputFileSlave</name>
<state>0</state>
</option>
<option>
<name>IlinkOutputFile</name>
<state>FlashRTL8195aMP.out</state>
</option>
<option>
<name>IlinkDebugInfoEnable</name>
<state>1</state>
</option>
<option>
<name>IlinkKeepSymbols</name>
<state></state>
</option>
<option>
<name>IlinkRawBinaryFile</name>
<state></state>
</option>
<option>
<name>IlinkRawBinarySymbol</name>
<state></state>
</option>
<option>
<name>IlinkRawBinarySegment</name>
<state></state>
</option>
<option>
<name>IlinkRawBinaryAlign</name>
<state></state>
</option>
<option>
<name>IlinkDefines</name>
<state></state>
</option>
<option>
<name>IlinkConfigDefines</name>
<state></state>
</option>
<option>
<name>IlinkMapFile</name>
<state>1</state>
</option>
<option>
<name>IlinkLogFile</name>
<state>0</state>
</option>
<option>
<name>IlinkLogInitialization</name>
<state>0</state>
</option>
<option>
<name>IlinkLogModule</name>
<state>0</state>
</option>
<option>
<name>IlinkLogSection</name>
<state>0</state>
</option>
<option>
<name>IlinkLogVeneer</name>
<state>0</state>
</option>
<option>
<name>IlinkIcfOverride</name>
<state>1</state>
</option>
<option>
<name>IlinkIcfFile</name>
<state>$PROJ_DIR$\mx25l8008_flashloader_mp.icf</state>
</option>
<option>
<name>IlinkIcfFileSlave</name>
<state></state>
</option>
<option>
<name>IlinkEnableRemarks</name>
<state>0</state>
</option>
<option>
<name>IlinkSuppressDiags</name>
<state></state>
</option>
<option>
<name>IlinkTreatAsRem</name>
<state></state>
</option>
<option>
<name>IlinkTreatAsWarn</name>
<state></state>
</option>
<option>
<name>IlinkTreatAsErr</name>
<state></state>
</option>
<option>
<name>IlinkWarningsAreErrors</name>
<state>0</state>
</option>
<option>
<name>IlinkUseExtraOptions</name>
<state>0</state>
</option>
<option>
<name>IlinkExtraOptions</name>
<state></state>
</option>
<option>
<name>IlinkLowLevelInterfaceSlave</name>
<state>1</state>
</option>
<option>
<name>IlinkAutoLibEnable</name>
<state>1</state>
</option>
<option>
<name>IlinkAdditionalLibs</name>
<state></state>
</option>
<option>
<name>IlinkOverrideProgramEntryLabel</name>
<state>1</state>
</option>
<option>
<name>IlinkProgramEntryLabelSelect</name>
<state>0</state>
</option>
<option>
<name>IlinkProgramEntryLabel</name>
<state>FlashInitEntry</state>
</option>
<option>
<name>DoFill</name>
<state>0</state>
</option>
<option>
<name>FillerByte</name>
<state>0xFF</state>
</option>
<option>
<name>FillerStart</name>
<state>0x0</state>
</option>
<option>
<name>FillerEnd</name>
<state>0x0</state>
</option>
<option>
<name>CrcSize</name>
<version>0</version>
<state>1</state>
</option>
<option>
<name>CrcAlign</name>
<state>1</state>
</option>
<option>
<name>CrcPoly</name>
<state>0x11021</state>
</option>
<option>
<name>CrcCompl</name>
<version>0</version>
<state>0</state>
</option>
<option>
<name>CrcBitOrder</name>
<version>0</version>
<state>0</state>
</option>
<option>
<name>CrcInitialValue</name>
<state>0x0</state>
</option>
<option>
<name>DoCrc</name>
<state>0</state>
</option>
<option>
<name>IlinkBE8Slave</name>
<state>1</state>
</option>
<option>
<name>IlinkBufferedTerminalOutput</name>
<state>1</state>
</option>
<option>
<name>IlinkStdoutInterfaceSlave</name>
<state>1</state>
</option>
<option>
<name>CrcFullSize</name>
<state>0</state>
</option>
<option>
<name>IlinkIElfToolPostProcess</name>
<state>0</state>
</option>
<option>
<name>IlinkLogAutoLibSelect</name>
<state>0</state>
</option>
<option>
<name>IlinkLogRedirSymbols</name>
<state>0</state>
</option>
<option>
<name>IlinkLogUnusedFragments</name>
<state>0</state>
</option>
<option>
<name>IlinkCrcReverseByteOrder</name>
<state>0</state>
</option>
<option>
<name>IlinkCrcUseAsInput</name>
<state>1</state>
</option>
<option>
<name>IlinkOptInline</name>
<state>0</state>
</option>
<option>
<name>IlinkOptExceptionsAllow</name>
<state>0</state>
</option>
<option>
<name>IlinkOptExceptionsForce</name>
<state>0</state>
</option>
<option>
<name>IlinkCmsis</name>
<state>1</state>
</option>
<option>
<name>IlinkOptMergeDuplSections</name>
<state>0</state>
</option>
<option>
<name>IlinkOptUseVfe</name>
<state>0</state>
</option>
<option>
<name>IlinkOptForceVfe</name>
<state>0</state>
</option>
<option>
<name>IlinkStackAnalysisEnable</name>
<state>0</state>
</option>
<option>
<name>IlinkStackControlFile</name>
<state></state>
</option>
<option>
<name>IlinkStackCallGraphFile</name>
<state></state>
</option>
<option>
<name>CrcAlgorithm</name>
<version>0</version>
<state>1</state>
</option>
<option>
<name>CrcUnitSize</name>
<version>0</version>
<state>0</state>
</option>
<option>
<name>IlinkThreadsSlave</name>
<state>1</state>
</option>
</data>
</settings>
<settings>
<name>IARCHIVE</name>
<archiveVersion>0</archiveVersion>
<data>
<version>0</version>
<wantNonLocal>1</wantNonLocal>
<debug>1</debug>
<option>
<name>IarchiveInputs</name>
<state></state>
</option>
<option>
<name>IarchiveOverride</name>
<state>0</state>
</option>
<option>
<name>IarchiveOutput</name>
<state>###Unitialized###</state>
</option>
</data>
</settings>
<settings>
<name>BILINK</name>
<archiveVersion>0</archiveVersion>
<data/>
</settings>
</configuration>
<group>
<name>Framework</name>
<file>
<name>$PROJ_DIR$\framework2\flash_loader.c</name>
</file>
<file>
<name>$PROJ_DIR$\framework2\flash_loader_asm.s</name>
</file>
</group>
<group>
<name>rtl8195a</name>
<file>
<name>$PROJ_DIR$\rtl8195a\hal_misc.c</name>
</file>
<file>
<name>$PROJ_DIR$\..\..\..\..\..\fwlib\ram_lib\hal_spi_flash_ram.c</name>
</file>
</group>
<file>
<name>$PROJ_DIR$\flash_MX25L8008.c</name>
</file>
</project>

View file

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="iso-8859-1"?>
<workspace>
<project>
<path>$WS_DIR$\FlashLoader.ewp</path>
</project>
<batchBuild/>
</workspace>

View file

@ -0,0 +1,376 @@
/*******************************************************************************
*
* Project: Realtek Ameba flash loader project
*
* Description: Memory-specific routines for Flash Loader.
*
* Copyright by Diolan Ltd. All rights reserved.
*
*******************************************************************************/
#include <string.h>
#include <stdlib.h>
#include "flash_loader.h"
#include "flash_loader_extra.h"
#include "rtl8195a.h"
//#include "rtl8195a/hal_misc.h"
//#include "rtl8195a/hal_spi_flash.h"
//#include "rtl8195a/core_cm3.h"
extern VOID
HalReInitPlatformLogUart(
VOID
);
extern VOID
SpicLoadInitParaFromClockRtl8195A
(
IN u8 CpuClkMode,
IN u8 BaudRate,
IN PSPIC_INIT_PARA pSpicInitPara
);
extern VOID
SpicWaitBusyDoneRtl8195A();
extern VOID
SpicWaitWipDoneRtl8195A
(
IN SPIC_INIT_PARA SpicInitPara
);
extern VOID
SpicTxCmdRtl8195A
(
IN u8 cmd,
IN SPIC_INIT_PARA SpicInitPara
);
extern u8
SpicGetFlashStatusRtl8195A
(
IN SPIC_INIT_PARA SpicInitPara
);
__no_init unsigned int flash_loc;
__no_init unsigned int erase_loc;
__no_init unsigned int is_cascade;
__no_init unsigned int is_head;
__no_init unsigned int is_dbgmsg;
__no_init unsigned int is_erasecal;
__no_init unsigned int img2_addr;
int rest_count;
int first_write;
SPIC_INIT_PARA SpicInitPara;
#define PATTERN_1 0x96969999
#define PATTERN_2 0xFC66CC3F
#define PATTERN_3 0x03CC33C0
#define PATTERN_4 0x6231DCE5
#define DBGPRINT(fmt, arg...) do{ if( is_dbgmsg ) DiagPrintf(fmt, ##arg);}while(0)
//unsigned int fw_head[4] = {PATTERN_1, PATTERN_2, PATTERN_3, PATTERN_4};
unsigned int seg_head[4] = {0,0,0,0};
extern SPIC_INIT_PARA SpicInitCPUCLK[4];
void dump_flash_header(void)
{
uint32_t data;
data = HAL_READ32(SPI_FLASH_BASE, 0);
DBGPRINT("\n\r 0: %x", data);
data = HAL_READ32(SPI_FLASH_BASE, 4);
DBGPRINT("\n\r 4: %x", data);
data = HAL_READ32(SPI_FLASH_BASE, 8);
DBGPRINT("\n\r 8: %x", data);
data = HAL_READ32(SPI_FLASH_BASE, 12);
DBGPRINT("\n\r 12: %x", data);
}
const char* find_option(char* option, int withValue, int argc, char const* argv[])
{
int i;
for (i = 0; i < argc; i++) {
if (strcmp(option, argv[i]) == 0){
if (withValue) {
if (i + 1 < argc) {
// The next argument is the value.
return argv[i + 1];
}
else {
// The option was found but there is no value to return.
return 0;
}
}
else
{
// Return the flag argument itself just to get a non-zero pointer.
return argv[i];
}
}
}
return 0;
}
static VOID
FlashDownloadHalInitialROMCodeGlobalVar(VOID)
{
// to initial ROM code using global variable
ConfigDebugErr = _DBG_MISC_;
ConfigDebugInfo= 0x0;
ConfigDebugWarn= 0x0;
}
static VOID
FlashDownloadHalCleanROMCodeGlobalVar(VOID)
{
ConfigDebugErr = 0x0;
ConfigDebugInfo= 0x0;
ConfigDebugWarn= 0x0;
}
// Please clean this Array
extern SPIC_INIT_PARA SpicInitParaAllClk[3][CPU_CLK_TYPE_NO];
u8 FlashType;
uint32_t FlashInit(void *base_of_flash, uint32_t image_size, uint32_t link_address, uint32_t flags, int argc, char const *argv[])
{
u8 CpuClk;
u8 Value8, InitBaudRate;
char *addr;
SPIC_INIT_PARA InitCPUCLK[4] = {
{0x1,0x1,0x5E,0}, //default cpu 41, baud 1
{0x1,0x1,0x0,0}, //cpu 20.8 , baud 1
{0x1,0x2,0x23,0}, //cpu 83.3, baud 1
{0x1,0x5,0x5,0},
};
memcpy(SpicInitCPUCLK, InitCPUCLK, sizeof(InitCPUCLK));
memset(SpicInitParaAllClk, 0, sizeof(SPIC_INIT_PARA)*3*CPU_CLK_TYPE_NO);
SpicInitPara.BaudRate = 0;
SpicInitPara.DelayLine = 0;
SpicInitPara.RdDummyCyle = 0;
SpicInitPara.Rsvd = 0;
if(find_option( "--erase_cal", 0, argc, argv ))
is_erasecal = 1;
else
is_erasecal = 0;
if(find_option( "--cascade", 0, argc, argv ))
is_cascade = 1;
else
is_cascade = 0;
if(find_option( "--head", 0, argc, argv ))
is_head = 1;
else
is_head = 0;
if(find_option( "--dbgmsg", 0, argc, argv ))
is_dbgmsg = 1;
else
is_dbgmsg = 0;
if( (addr = (char*)find_option( "--img2_addr", 1, argc, argv))){
img2_addr = strtod(addr, NULL)/1024;
DBG_8195A(" image2 start address = %s, offset = %x\n\r", addr, img2_addr);
}else
img2_addr = 0;
memset((void *) 0x10000300, 0, 0xbc0-0x300);
// Load Efuse Setting
Value8 = ((HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_EFUSE_SYSCFG6) & 0xFF000000)
>> 24);
InitBaudRate = ((Value8 & 0xC)>>2);
// Make sure InitBaudRate != 0
if (!InitBaudRate) {
InitBaudRate +=1;
}
CpuClk = ((HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_CLK_CTRL1) & (0x70)) >> 4);
SpicLoadInitParaFromClockRtl8195A(CpuClk, InitBaudRate, &SpicInitPara);
// Reset to low speed
HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_CLK_CTRL1, 0x21);
FlashDownloadHalInitialROMCodeGlobalVar();
//2 Need Modify
VectorTableInitRtl8195A(0x1FFFFFFC);
//3 Initial Log Uart
PatchHalInitPlatformLogUart();
//3 Initial hardware timer
PatchHalInitPlatformTimer();
DBG_8195A("\r\n===> Flash Init \n\r");
//4 Initialize the flash first
if (HAL_READ32(REG_SOC_FUNC_EN,BIT_SOC_FLASH_EN) & BIT_SOC_FLASH_EN) {
FLASH_FCTRL(OFF);
}
FLASH_FCTRL(ON);
ACTCK_FLASH_CCTRL(ON);
SLPCK_FLASH_CCTRL(ON);
PinCtrl(SPI_FLASH,S0,ON);
PatchSpicInitRtl8195A(SpicInitPara.BaudRate, SpicOneBitMode);
SpicFlashInitRtl8195A(SpicOneBitMode);
FlashType = SpicInitParaAllClk[SpicOneBitMode][0].flashtype;
char* vendor[] = {"Others", "MXIC", "Winbond", "Micron"};
DBG_8195A("\r\n===> Flash Init Done, vendor: \x1b[32m%s\x1b[m \n\r", vendor[FlashType]);
first_write = 1;
rest_count = theFlashParams.block_size;
seg_head[0] = theFlashParams.block_size;
seg_head[1] = theFlashParams.offset_into_block;
if(is_head){
seg_head[2] = 0xFFFF0000|img2_addr;
seg_head[3] = 0xFFFFFFFF;
}else{
if(is_cascade==0){
// Image2 signature
seg_head[2] = 0x35393138; //8195
seg_head[3] = 0x31313738; //8711
}else{
seg_head[2] = 0xFFFFFFFF;
seg_head[3] = 0xFFFFFFFF;
}
}
//DBG_8195A("link_address = %08x, flags = %08x ...\n\r", link_address, flags);
if(is_cascade==0 && is_head==0){
// mark partition 2 to old if existing
unsigned int ota_addr = HAL_READ32(SPI_FLASH_BASE, 0x9000);
//check OTA address valid
if( ota_addr == 0xFFFFFFFF || ota_addr > 64*1024*1024 ){
DBG_8195A("\r\n\x1b[31mOTA addr %8x is invalid\x1b[m\n\r", ota_addr );
DBG_8195A("\x1b[31mOTA addr %8x is invalid\x1b[m\n\r", ota_addr );
DBG_8195A("\x1b[31mOTA addr %8x is invalid\x1b[m\n\r", ota_addr );
DBG_8195A("continue downloading...\n\r" );
return RESULT_OK;
}else{
DBG_8195A("\x1b[36mOTA addr is %x \x1b[m\n\r", ota_addr );
}
int sig0 = HAL_READ32(SPI_FLASH_BASE, ota_addr+8);
int sig1 = HAL_READ32(SPI_FLASH_BASE, ota_addr+12);
if(sig0==0x35393138 && sig1==0x31313738){
DBG_8195A("\r\n>>>> mark parition 2 as older \n\r" );
HAL_WRITE32(SPI_FLASH_BASE, ota_addr+8, 0x35393130); // mark to older version
// wait spic busy done
SpicWaitBusyDoneRtl8195A();
// wait flash busy done (wip=0)
if(FlashType == FLASH_MICRON)
SpicWaitOperationDoneRtl8195A(SpicInitPara);
else
SpicWaitWipDoneRefinedRtl8195A(SpicInitPara);
}
}
dump_flash_header();
//SpicEraseFlashRtl8195A();
return RESULT_OK;
}
void write_spi_flash(uint32_t data)
{
HAL_WRITE32(SPI_FLASH_BASE, flash_loc, data);
// wait spic busy done
SpicWaitBusyDoneRtl8195A();
// wait flash busy done (wip=0)
if(FlashType == FLASH_MICRON)
SpicWaitOperationDoneRtl8195A(SpicInitPara);
else
SpicWaitWipDoneRefinedRtl8195A(SpicInitPara);
flash_loc+=4;
}
uint32_t FlashWrite(void *block_start, uint32_t offset_into_block, uint32_t count, char const *buffer)
{
int write_cnt=0;
uint32_t* buffer32 = (uint32_t*)buffer;
DBG_8195A("\r\n===> Flash Write, start %x, addr %x, offset %d, count %d, buf %x\n\r", block_start, flash_loc, offset_into_block, count, buffer);
if(first_write){
if(!is_cascade){
flash_loc = (unsigned int)block_start;
}
if(is_head){
unsigned int fw_head[4] = {PATTERN_1, PATTERN_2, PATTERN_3, PATTERN_4};
DBGPRINT("Write FW header....");
flash_loc=0;
write_spi_flash(fw_head[0]);
write_spi_flash(fw_head[1]);
write_spi_flash(fw_head[2]);
write_spi_flash(fw_head[3]);
DBGPRINT("Write FW header.... %x %x %x %x --> Done\n\r", fw_head[0], fw_head[1], fw_head[2], fw_head[3]);
}
DBGPRINT("Write SEG header....");
first_write = 0;
write_spi_flash(seg_head[0]);
write_spi_flash(seg_head[1]);
write_spi_flash(seg_head[2]);
write_spi_flash(seg_head[3]);
DBGPRINT("Write SEG header.... %x %x %x %x --> Done\n\r", seg_head[0], seg_head[1], seg_head[2], seg_head[3]);
}
if(rest_count < count)
count = rest_count;
// DO Write Here
DBG_8195A("Write Binary....");
while (write_cnt < count)
{
write_spi_flash(*buffer32);
write_cnt += 4;
buffer32++;
}
DBG_8195A("Write Binary....Done\n\r");
rest_count-=count;
DBG_8195A("\r\n<=== Flash Write Done %x\n\r", flash_loc);
DBGPRINT("first 4 bytes %2x %2x %2x %2x\n\r", buffer[0],buffer[1],buffer[2],buffer[3]);
DBGPRINT("last 4 bytes %2x %2x %2x %2x\n\r", buffer[count-4],buffer[count-3],buffer[count-2],buffer[count-1]);
return RESULT_OK;
}
uint32_t FlashErase(void *block_start, uint32_t block_size)
{
if(is_head == 1)
erase_loc = 0;
if(!is_cascade)
erase_loc = (unsigned int)block_start;
if(erase_loc != 0xa000){
SpicSectorEraseFlashRtl8195A(erase_loc);
DBGPRINT("@erase %x, size %d, fw offset %x\n\r", erase_loc, block_size, block_start);
}else{
if(is_erasecal){
SpicSectorEraseFlashRtl8195A(erase_loc);
DBGPRINT("@erase %x, size %d, fw offset %x\n\r", erase_loc, block_size, block_start);
}
}
erase_loc += 4096;
return 0;
}

View file

@ -0,0 +1,22 @@
// You should create a copy of this file in your flash loader project
// and configure it as described below
// when this macro is non-zero, your FlashInit function should accept
// extra 'argc' and 'argv' arguments as specified by the function
// prototype in 'flash_loader.h'
#define USE_ARGC_ARGV 1
// You can customize the memory reserved for passing arguments to FlashInit
// through argc and argv.
#if USE_ARGC_ARGV
// This specifies the maximum allowed number of arguments in argv
#define MAX_ARGS 5
// This specifies the maximum combined size of the arguments, including
// a trailing null for each argument
#define MAX_ARG_SIZE 64
#endif
// If this is true (non-zero), the parameter designating the code destination
// in flash operations will be a 'void *', otherwise it will be a uint32_t.
// Targets where void * is smaller than a code pointer should set this to 0.
#define CODE_ADDR_AS_VOID_PTR 1

View file

@ -0,0 +1,145 @@
// Wrapper for target-specific flash loader code
#include "flash_loader.h"
#include "flash_loader_extra.h"
#ifndef MAX_ARGS
#define MAX_ARGS 7
#endif
// Maximum combined size of arguments, including a trailing null for each argument.
#ifndef MAX_ARG_SIZE
#define MAX_ARG_SIZE 64
#endif
// Functions in this file, called from the assembly wrapper
void Fl2FlashInitEntry(void);
void Fl2FlashWriteEntry(void);
void Fl2FlashEraseWriteEntry(void);
void Fl2FlashChecksumEntry(void);
void Fl2FlashSignoffEntry(void);
void FlashBreak(void);
#if CODE_ADDR_AS_VOID_PTR
extern uint32_t FlashChecksum(void const *begin, uint32_t count);
#else
extern uint32_t FlashChecksum(uint32_t begin, uint32_t count);
#endif
extern uint32_t FlashSignoff();
uint16_t Crc16_helper(uint8_t const *p, uint32_t len, uint16_t sum);
__root __no_init FlashParamsHolder theFlashParams;
__no_init int __argc;
__no_init char __argvbuf[MAX_ARG_SIZE];
#pragma required=__argvbuf
__no_init const char* __argv[MAX_ARGS];
#if CODE_ADDR_AS_VOID_PTR
#define CODE_REF void *
#else
#define CODE_REF uint32_t
#endif
void Fl2FlashInitEntry()
{
#if USE_ARGC_ARGV
theFlashParams.count = FlashInit((CODE_REF)theFlashParams.base_ptr,
theFlashParams.block_size, // Image size
theFlashParams.offset_into_block,// link adr
theFlashParams.count, // flags
__argc,
__argv);
#else
theFlashParams.count = FlashInit((CODE_REF)theFlashParams.base_ptr,
theFlashParams.block_size, // Image size
theFlashParams.offset_into_block,// link adr
theFlashParams.count); // flags
#endif
}
// The normal flash write function ----------------------------------------------
void Fl2FlashWriteEntry()
{
theFlashParams.count = FlashWrite((CODE_REF)theFlashParams.base_ptr,
theFlashParams.offset_into_block,
theFlashParams.count,
theFlashParams.buffer);
}
// The erase-first flash write function -----------------------------------------
void Fl2FlashEraseWriteEntry()
{
uint32_t tmp = theFlashParams.block_size;
if (tmp == 0)
{
FlashEraseData *p = (FlashEraseData*)theFlashParams.buffer;
for (uint32_t i = 0; i < theFlashParams.count; ++i)
{
tmp = FlashErase((CODE_REF)p->start, p->length);
if (tmp != 0) break;
++p;
}
}
else
{
tmp = FlashErase((CODE_REF)theFlashParams.base_ptr,
theFlashParams.block_size);
if (tmp == 0)
{
tmp = FlashWrite((CODE_REF)theFlashParams.base_ptr,
theFlashParams.offset_into_block,
theFlashParams.count,
theFlashParams.buffer);
}
}
theFlashParams.count = tmp;
}
void Fl2FlashChecksumEntry()
{
theFlashParams.count = FlashChecksum((CODE_REF)theFlashParams.base_ptr,
theFlashParams.count);
}
void Fl2FlashSignoffEntry()
{
theFlashParams.count = FlashSignoff();
}
uint16_t Crc16(uint8_t const *p, uint32_t len)
{
uint8_t zero[2] = { 0, 0 };
uint16_t sum = Crc16_helper(p, len, 0);
return Crc16_helper(zero, 2, sum);
}
uint16_t Crc16_helper(uint8_t const *p, uint32_t len, uint16_t sum)
{
while (len--)
{
int i;
uint8_t byte = *p++;
for (i = 0; i < 8; ++i)
{
uint32_t osum = sum;
sum <<= 1;
if (byte & 0x80)
sum |= 1 ;
if (osum & 0x8000)
sum ^= 0x1021;
byte <<= 1;
}
}
return sum;
}
#pragma optimize=no_inline
__root void FlashBreak()
{
while(1);
}

View file

@ -0,0 +1,78 @@
#include "flash_config.h"
#include <stdint.h>
#define RESULT_OK 0
#define RESULT_ERROR 1
#define RESULT_OVERRIDE_DEVICE 2
#define RESULT_ERASE_DONE 3
#define RESULT_CUSTOM_FIRST 100
#define RESULT_CUSTOM_LAST 200
#define FLAG_ERASE_ONLY 0x1
#ifndef CODE_ADDR_AS_VOID_PTR
#define CODE_ADDR_AS_VOID_PTR 1
#endif
// These are functions you MUST implement -------------------------------
#if CODE_ADDR_AS_VOID_PTR
#if USE_ARGC_ARGV
uint32_t FlashInit(void *base_of_flash, uint32_t image_size,
uint32_t link_address, uint32_t flags,
int argc, char const *argv[]);
#else
uint32_t FlashInit(void *base_of_flash, uint32_t image_size,
uint32_t link_address, uint32_t flags);
#endif
uint32_t FlashWrite(void *block_start,
uint32_t offset_into_block,
uint32_t count,
char const *buffer);
uint32_t FlashErase(void *block_start,
uint32_t block_size);
#else // !CODE_ADDR_AS_VOID_PTR
#if USE_ARGC_ARGV
uint32_t FlashInit(uint32_t base_of_flash, uint32_t image_size,
uint32_t link_address, uint32_t flags,
int argc, char const *argv[]);
#else
uint32_t FlashInit(uint32_t base_of_flash, uint32_t image_size,
uint32_t link_address, uint32_t flags);
#endif
uint32_t FlashWrite(uint32_t block_start,
uint32_t offset_into_block,
uint32_t count,
char const *buffer);
uint32_t FlashErase(uint32_t block_start,
uint32_t block_size);
#endif // CODE_ADDR_AS_VOID_PTR
// These are functions you MAY implement --------------------------------
#if CODE_ADDR_AS_VOID_PTR
uint32_t FlashChecksum(void const *begin, uint32_t count);
#else
uint32_t FlashChecksum(uint32_t begin, uint32_t count);
#endif
uint32_t FlashSignoff(void);
#define OPTIONAL_CHECKSUM _Pragma("required=FlashChecksumEntry") __root
#define OPTIONAL_SIGNOFF _Pragma("required=FlashSignoffEntry") __root
void FlashChecksumEntry();
void FlashSignoffEntry();
// These are functions you may call -------------------------------------
// If your code cannot be accessed using data pointers, you will have to
// write your own Crc16 function.
uint16_t Crc16(uint8_t const *p, uint32_t len);

View file

@ -0,0 +1,197 @@
;---------------------------------
;
; Functions accessed by the debugger to perform a flash download.
; All public symbols and the function FlashBreak() are looked up and called by the debugger.
;
; Copyright (c) 2008 IAR Systems
;
; $Revision: 38034 $
;
;---------------------------------
#define _CORTEX_ ((__CORE__ == __ARM6M__) || (__CORE__ == __ARM6SM__) || (__CORE__ == __ARM7M__) || (__CORE__ == __ARM7EM__))
PUBLIC FlashInitEntry
PUBLIC FlashWriteEntry
PUBLIC FlashEraseWriteEntry
PUBLIC FlashChecksumEntry
PUBLIC FlashSignoffEntry
PUBLIC FlashBufferStart
PUBLIC FlashBufferEnd
EXTERN FlashBreak
EXTERN Fl2FlashInitEntry
EXTERN Fl2FlashWriteEntry
EXTERN Fl2FlashEraseWriteEntry
EXTERN Fl2FlashChecksumEntry
EXTERN Fl2FlashSignoffEntry
SECTION CSTACK:DATA:NOROOT(3)
;---------------------------------
;
; FlashInitEntry()
; Debugger interface function
;
;---------------------------------
SECTION .text:CODE:ROOT(2)
#if !_CORTEX_
ARM
#else
THUMB
#endif
FlashInitEntry:
#if !_CORTEX_
;; Set up the normal stack pointer.
LDR sp, =SFE(CSTACK) ; End of CSTACK
#endif
BL Fl2FlashInitEntry
B FlashBreak
;---------------------------------
;
; FlashWriteEntry()
; Debugger interface function
;
;---------------------------------
SECTION .text:CODE:ROOT(2)
#if !_CORTEX_
ARM
#else
THUMB
#endif
FlashWriteEntry:
BL Fl2FlashWriteEntry
B FlashBreak
;---------------------------------
;
; FlashEraseWriteEntry
; Debugger interface function
;
;---------------------------------
SECTION .text:CODE:ROOT(2)
#if !_CORTEX_
ARM
#else
THUMB
#endif
FlashEraseWriteEntry:
BL Fl2FlashEraseWriteEntry
B FlashBreak
;---------------------------------
;
; FlashChecksumEntry
; Debugger interface function
;
;---------------------------------
SECTION .text:CODE:NOROOT(2)
#if !_CORTEX_
ARM
#else
THUMB
#endif
FlashChecksumEntry:
BL Fl2FlashChecksumEntry
B FlashBreak
;---------------------------------
;
; FlashSignoffEntry
; Debugger interface function
;
;---------------------------------
SECTION .text:CODE:NOROOT(2)
#if !_CORTEX_
ARM
#else
THUMB
#endif
FlashSignoffEntry:
BL Fl2FlashSignoffEntry
B FlashBreak
;---------------------------------
;
; Flash buffer and Cortex stack
;
;---------------------------------
SECTION LOWEND:DATA(8)
DATA
FlashBufferStart:
SECTION HIGHSTART:DATA
DATA
FlashBufferEnd:
#if _CORTEX_
PUBLIC __vector_table
SECTION .intvec:CODE:ROOT(2)
DATA
__vector_table:
#if 0
DC32 SFE(CSTACK)
DC32 FlashInitEntry
#endif
#endif
;---------------------------------
; Entry: 0x200006b4
; ram start up, normal boot
; : 0x200006c4
; ram wake up, use debugger,
; 0x40000218 BIT(31) must 1
; Section: .start.ram.data,
; put to 0x200006b4
; : .patch.start.ram.data,
; put to 0x200006bc
;---------------------------------
#if _CORTEX_
PUBLIC __ram_start_table
SECTION .start:CODE:ROOT(2)
DATA
__ram_start_table:
DC32 FlashInitEntry
DC32 FlashInitEntry
DC32 FlashInitEntry
DC32 FlashInitEntry
#endif
#if _CORTEX_
PUBLIC __patch_ram_start_table
SECTION .patch:CODE:ROOT(2)
DATA
__patch_ram_start_table:
DC32 FlashInitEntry
DC32 FlashInitEntry
DC32 FlashInitEntry
DC32 FlashInitEntry
#endif
END

View file

@ -0,0 +1,27 @@
#define OVERRIDE_LAYOUT 0x010000
#define OVERRIDE_BUFSIZE 0x020000
#define OVERRIDE_PAGESIZE 0x040000
#define LAYOUT_OVERRIDE_BUFFER ((char*)theFlashParams.buffer)
#define SET_BUFSIZE_OVERRIDE(new_size) theFlashParams.block_size = (new_size)
#define SET_PAGESIZE_OVERRIDE(new_size) theFlashParams.offset_into_block = (new_size)
// parameter passing structure
typedef struct {
uint32_t base_ptr;
uint32_t count;
uint32_t offset_into_block;
void *buffer;
uint32_t block_size;
} FlashParamsHolder;
typedef struct {
uint32_t start;
uint32_t length;
} FlashEraseData;
extern FlashParamsHolder theFlashParams;
extern char FlashBufferStart;
extern char FlashBufferEnd;

View file

@ -0,0 +1,59 @@
/*###ICF### Section handled by ICF editor, don't touch! ****/
/*-Editor annotation file-*/
/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */
/*-Specials-*/
define symbol __ICFEDIT_intvec_start__ = 0x10000000;
/*-Memory Regions-*/
define symbol __ICFEDIT_region_ROM_start__ = 0x00000000;
define symbol __ICFEDIT_region_ROM_end__ = 0x00010000;
define symbol __ICFEDIT_region_RAM_start__ = 0x10000bc0;
define symbol __ICFEDIT_region_RAM_end__ = 0x1006FFFF;
/*-Sizes-*/
define symbol __ICFEDIT_size_cstack__ = 0x200;
define symbol __ICFEDIT_size_heap__ = 0x000;
/**** End of ICF editor section. ###ICF###*/
define memory mem with size = 4G;
define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__];
define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { };
define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { };
initialize by copy { readwrite };
do not initialize { section .noinit };
place at address mem:__ICFEDIT_intvec_start__ { section .intvec };
place at start of RAM_region { section .start, section .patch, block RamTop with fixed order {readonly, section LOWEND }};
place at end of RAM_region { block RamBottom with fixed order {section HIGHSTART, readwrite, section .init,
block CSTACK, block HEAP}};
define exported symbol __ram_start_table_start__ = 0x10000bc0;
define exported symbol __rom_bss_start__ = 0x10000300;
define exported symbol __rom_bss_end__ = 0x10000bc0;
// rom symbols
define exported symbol DiagPrintf = 0x0000f39d;
define exported symbol SpicWaitBusyDoneRtl8195A = 0x00002ea5;
define exported symbol SpicWaitWipDoneRtl8195A = 0x00002f55;
define exported symbol SpicLoadInitParaFromClockRtl8195A = 0x00003081;
define exported symbol VectorTableInitForOSRtl8195A = 0x00004019;
define exported symbol HalPinCtrlRtl8195A =0x00002b39;
define exported symbol SpicInitCPUCLK = 0x00030c98 ;
define exported symbol VectorTableInitRtl8195A = 0x00003de5;
define exported symbol SpicCmpDataForCalibrationRtl8195A = 0x00003049;
define exported symbol HalTimerInitRtl8195a = 0x0000ef3d;
define exported symbol VectorIrqDisRtl8195A = 0x0000418d;
define exported symbol VectorIrqRegisterRtl8195A = 0x00004029;
define exported symbol SpicInitRtl8195A = 0x000030e5;
define exported symbol HalCpuClkConfig = 0x00000341;
define exported symbol HalDelayUs = 0x00000899;
define exported symbol HalGetCpuClk = 0x00000355;
define exported symbol _memcpy = 0x0000f465;
define exported symbol ConfigDebugErr = 0x10000314;
define exported symbol ConfigDebugInfo = 0x10000310;
define exported symbol ConfigDebugWarn = 0x1000030c;

View file

@ -0,0 +1,210 @@
/*
* Automatically generated by make menuconfig: don't edit
*/
#define AUTOCONF_INCLUDED
/*
* Target Platform Selection
*/
#define CONFIG_WITHOUT_MONITOR 1
#define CONFIG_RTL8195A 1
#undef CONFIG_FPGA
#undef CONFIG_RTL_SIM
#undef CONFIG_POST_SIM
/*
* < Mass Production Option
*/
#undef CONFIG_MP
#undef CONFIG_CP
#undef CONFIG_FT
#define RTL8195A 1
#define CONFIG_CPU_CLK 1
#define CONFIG_CPU_166_6MHZ 1
#undef CONFIG_CPU_83_3MHZ
#undef CONFIG_CPU_41_6MHZ
#undef CONFIG_CPU_20_8MHZ
#undef CONFIG_CPU_10_4MHZ
#undef CONFIG_CPU_4MHZ
#undef CONFIG_FPGA_CLK
#define PLATFORM_CLOCK (166666666)
#define CPU_CLOCK_SEL_VALUE (0)
#define CONFIG_SDR_CLK 1
#define CONFIG_SDR_100MHZ 1
#undef CONFIG_SDR_50MHZ
#undef CONFIG_SDR_25MHZ
#undef CONFIG_SDR_12_5MHZ
#define SDR_CLOCK_SEL_VALUE (0)
#define CONFIG_BOOT_PROCEDURE 1
#define CONFIG_IMAGE_PAGE_LOAD 1
#undef CONFIG_IMAGE_AUTO_LOAD
#define CONFIG_BOOT_TO_UPGRADE_IMG2 1
#undef CONFIG_PERI_UPDATE_IMG
#define CONFIG_BOOT_FROM_JTAG 1
#undef CONFIG_ALIGNMENT_EXCEPTION_ENABLE
#define CONFIG_KERNEL 1
#define PLATFORM_FREERTOS 1
#undef PLATFORM_UCOSII
#undef PLATFORM_ECOS
#undef CONFIG_TASK_SCHEDUL_DIS
#define TASK_SCHEDULER_DISABLED (0)
#define CONFIG_NORMALL_MODE 1
#undef CONFIG_MEMORY_VERIFY_MODE
#define CONFIG_TIMER_EN 1
#define CONFIG_TIMER_NORMAL 1
#undef CONFIG_TIMER_TEST
#define CONFIG_TIMER_MODULE 1
#define CONFIG_WDG 1
#undef CONFIG_WDG_NON
#define CONFIG_WDG_NORMAL 1
#define CONFIG_GDMA_EN 1
#define CONFIG_GDMA_NORMAL 1
#undef CONFIG_GDMA_TEST
#define CONFIG_GDMA_MODULE 1
#define CONFIG_WIFI_EN 1
#define CONFIG_WIFI_NORMAL 1
#undef CONFIG_WIFI_TEST
#define CONFIG_WIFI_MODULE 1
#define CONFIG_GPIO_EN 1
#define CONFIG_GPIO_NORMAL 1
#undef CONFIG_GPIO_TEST
#define CONFIG_GPIO_MODULE 1
#if defined(CONFIG_INIC) || (CONFIG_SDIOD)
#define CONFIG_SDIO_DEVICE_EN 1
#define CONFIG_SDIO_DEVICE_NORMAL 1
#undef CONFIG_SDIO_DEVICE_TEST
#define CONFIG_SDIO_DEVICE_MODULE 1
#else
#undef CONFIG_SDIO_DEVICE_EN
#endif
#define CONFIG_SDIO_HOST_EN 1
#define CONFIG_USB_EN 1
#undef CONFIG_USB_NORMAL
#define CONFIG_USB_TEST 1
#define CONFIG_USB_MODULE 1
#define CONFIG_USB_VERIFY 1
#undef CONFIG_USB_ROM_LIB
//#define CONFIG_USB_DBGINFO_EN 1
#ifdef CONFIG_INIC//defined(CONFIG_INIC)
#define DWC_DEVICE_ONLY 1
#else
#define DWC_HOST_ONLY 1
#define CONFIG_USB_HOST_ONLY 1
#endif
#define CONFIG_SPI_COM_EN 1
#define CONFIG_SPI_COM_NORMAL 1
#undef CONFIG_SPI_COM_TEST
#define CONFIG_SPI_COM_MODULE 1
#define CONFIG_UART_EN 1
#define CONFIG_UART_NORMAL 1
#undef CONFIG_UART_TEST
#define CONFIG_UART_MODULE 1
#define CONFIG_I2C_EN 1
#define CONFIG_I2C_NORMAL 1
#undef CONFIG_I2C_TEST
#define CONFIG_I2C_MODULE 1
#undef CONFIG_DEBUG_LOG_I2C_HAL
#undef CONFIG_PCM_EN
#define CONFIG_I2S_EN 1
#define CONFIG_I2S_NORMAL 1
#undef CONFIG_I2S_TEST
#define CONFIG_I2S_MODULE 1
#undef CONFIG_DEBUG_LOG_I2S_HAL
#define CONFIG_NFC_EN 1
#define CONFIG_NFC_NORMAL 1
#undef CONFIG_NFC_TEST
#define CONFIG_NFC_MODULE 1
#define CONFIG_SOC_PS_EN 1
#define CONFIG_SOC_PS_NORMAL 1
#undef CONFIG_SOC_PS_TEST
#define CONFIG_SOC_PS_MODULE 1
#define CONFIG_CRYPTO_EN 1
#define CONFIG_CRYPTO_NORMAL 1
#undef CONFIG_CRYPTO_TEST
#define CONFIG_CRYPTO_MODULE 1
#define CONFIG_MII_EN 1
#define CONFIG_PWM_EN 1
#define CONFIG_PWM_NORMAL 1
#undef CONFIG_PWM_TEST
#define CONFIG_PWM_MODULE 1
#define CONFIG_EFUSE_EN 1
#define CONFIG_EFUSE_NORMAL 1
#undef CONFIG_EFUSE_TEST
#define CONFIG_EFUSE_MODULE 1
#define CONFIG_SDR_EN 1
#define CONFIG_SDR_NORMAL 1
#undef CONFIG_SDR_TEST
#define CONFIG_SDR_MODULE 1
#define CONFIG_SPIC_EN 1
#define CONFIG_SPIC_NORMAL 1
#undef CONFIG_SPIC_TEST
#define CONFIG_SPIC_MODULE 1
#define CONFIG_ADC_EN 1
#define CONFIG_DAC_EN 1
#define CONFIG_NOR_FLASH 1
#undef CONFIG_SPI_FLASH
#undef CONFIG_NAND_FLASH
#undef CONFIG_NONE_FLASH
#undef CONFIG_BTBX_EN
/*
* < Engineer Mode Config
*/
#undef CONFIG_JTAG
#undef CONFIG_COMPILE_FLASH_DOWNLOAD_CODE
#undef CONIFG_COMPILE_EXTERNAL_SRAM_CALIBRATE
#undef CONFIG_CMSIS_MATH_LIB_EN
/*
* < Application Config
*/
#define CONFIG_NETWORK 1
#define CONFIG_RTLIB_EN 1
#define CONFIG_RTLIB_NORMAL 1
#undef CONFIG_RTLIB_TEST
#define CONFIG_RTLIB_MODULE 1
/*
* < System Debug Message Config
*/
#define CONFIG_UART_LOG_HISTORY 1
#undef CONFIG_CONSOLE_NORMALL_MODE
#define CONFIG_CONSOLE_VERIFY_MODE 1
#define CONFIG_DEBUG_LOG 1
#define CONFIG_DEBUG_ERR_MSG 1
#undef CONFIG_DEBUG_WARN_MSG
#undef CONFIG_DEBUG_INFO_MSG
/*
* < SDK Option Config
*/
#undef CONFIG_MBED_ENABLED
#undef CONFIG_APP_DEMO
/*
* < Select Chip Version
*/
#undef CONFIG_CHIP_A_CUT
#define CONFIG_CHIP_B_CUT 1
#undef CONFIG_CHIP_C_CUT
#undef CONFIG_CHIP_E_CUT
/*
* < Select toolchain
*/
#undef CONFIG_TOOLCHAIN_ASDK
#undef CONFIG_TOOLCHAIN_ARM_GCC
/*
* < Build Option
*/
#define CONFIG_LINK_ROM_LIB 1
#undef CONFIG_LINK_ROM_SYMB
#undef CONFIG_NORMAL_BUILD
#undef CONFIG_RELEASE_BUILD
#undef CONFIG_RELEASE_BUILD_LIBRARIES
#undef CONFIG_LIB_BUILD_RAM
#define CONFIG_RELEASE_BUILD_RAM_ALL 1
#undef CONFIG_IMAGE_ALL
#define CONFIG_IMAGE_SEPARATE 1

View file

@ -0,0 +1,64 @@
setup()
{
__var tmp;
__hwResetWithStrategy(0, 1);
__hwReset(1);
__writeMemory32(0x21, 0x40000014, "Memory"); __delay(10);
__writeMemory32(0x1FC00002, 0x40000304, "Memory"); __delay(10);
__writeMemory32(0x400, 0x40000250, "Memory"); __delay(10);
__writeMemory32(0x0, 0x40000340, "Memory"); __delay(10);
__writeMemory32(0xc04, 0x40000230, "Memory"); __delay(10);
__writeMemory32(0x1157, 0x40000210, "Memory"); __delay(10);
__writeMemory32(0x110011, 0x400002c0, "Memory"); __delay(10);
__writeMemory32(0xffffffff, 0x40000320, "Memory"); __delay(10);
__writeMemory32(0x1, 0x40005224, "Memory"); __delay(10);
__writeMemory32(0x2c8, 0x40005004, "Memory"); __delay(10);
__writeMemory32(0xffffd000, 0x40005008, "Memory"); __delay(10);
__delay(3);
__writeMemory32(0x22, 0x40005020, "Memory"); __delay(10);
__delay(3);
__writeMemory32(0x09032001, 0x40005010, "Memory"); __delay(10);
__delay(3);
__writeMemory32(0x2611, 0x40005014, "Memory"); __delay(10);
__delay(3);
__writeMemory32(0x68413, 0x40005018, "Memory"); __delay(10);
__delay(3);
__writeMemory32(0x42, 0x4000501c, "Memory"); __delay(10);
__delay(3);
// Enable
__writeMemory32(0x700, 0x4000500c, "Memory"); __delay(10);
__delay(20);
__writeMemory32(0x1, 0x40005000, "Memory"); __delay(10);
__delay(100);
tmp = __readMemory32(0x40005000,"Memory"); __delay(10);
__writeMemory32(0x600, 0x4000500c, "Memory"); __delay(10);
__delay(30);
}
execUserPreload()
{
__var tmp;
//setup();
tmp = __readMemory32(0x40000210, "Memory")|(1<<27);
__writeMemory32(tmp, 0x40000210, "Memory");
}
execUserSetup()
{
//execUserPreload();
//__loadImage("$TARGET_PATH$ ", 0, 0);
//__writeMemory32(0x80000000, 0x40000218, "Memory");
}
execUserFlashInit() // Called by debugger before loading flash loader in RAM.
{
__var tmp;
__message "----- Prepare hardware for Flashloader -----\n";
//setup();
tmp = __readMemory32(0x40000210, "Memory")|(1<<27);
__writeMemory32(tmp, 0x40000210, "Memory");
}

View file

@ -0,0 +1,359 @@
#include "rtl8195a.h"
typedef struct _UART_LOG_BUF_ {
u8 BufCount; //record the input cmd char number.
u8 UARTLogBuf[127]; //record the input command.
} UART_LOG_BUF, *PUART_LOG_BUF;
typedef struct _UART_LOG_CTL_ {
u8 NewIdx;
u8 SeeIdx;
u8 RevdNo;
u8 EscSTS;
u8 ExecuteCmd;
u8 ExecuteEsc;
u8 BootRdy;
u8 Resvd;
PUART_LOG_BUF pTmpLogBuf;
VOID *pfINPUT;
PCOMMAND_TABLE pCmdTbl;
u32 CmdTblSz;
u32 CRSTS;
u8 (*pHistoryBuf)[127];
u32 TaskRdy;
u32 Sema;
} UART_LOG_CTL, *PUART_LOG_CTL;
volatile UART_LOG_CTL UartLogCtl;
volatile UART_LOG_CTL *pUartLogCtl;
u8 *ArgvArray[10];
UART_LOG_BUF UartLogBuf;
u8 UartLogHistoryBuf[5][127];
extern VOID
SpicLoadInitParaFromClockRtl8195A
(
IN u8 CpuClkMode,
IN u8 BaudRate,
IN PSPIC_INIT_PARA pSpicInitPara
);
VOID
PatchSpicInitRtl8195A
(
IN u8 InitBaudRate,
IN u8 SpicBitMode
)
{
u32 Value32;
SPIC_INIT_PARA SpicInitPara;
#ifdef CONFIG_FPGA
SpicInitPara.BaudRate = 1;//FPGASpicInitPara.BaudRate;
SpicInitPara.RdDummyCyle = 1;//FPGASpicInitPara.RdDummyCyle;
SpicInitPara.DelayLine = 0;//FPGASpicInitPara.DelayLine;
#else
u8 CpuClk;
CpuClk = (((u8)(HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_CLK_CTRL1) & (0x70))) >> 4);
SpicLoadInitParaFromClockRtl8195A(CpuClk, InitBaudRate, &SpicInitPara);
#endif
// Disable SPI_FLASH User Mode
HAL_SPI_WRITE32(REG_SPIC_SSIENR, 0);
HAL_SPI_WRITE32(REG_SPIC_BAUDR, BIT_SCKDV(InitBaudRate));
HAL_SPI_WRITE32(REG_SPIC_SER, BIT_SER);
Value32 = HAL_SPI_READ32(REG_SPIC_AUTO_LENGTH);
HAL_SPI_WRITE32(REG_SPIC_AUTO_LENGTH,
((Value32 & 0xFFFF0000) | BIT_RD_DUMMY_LENGTH(SpicInitPara.RdDummyCyle)));
HAL_WRITE32(PERI_ON_BASE, REG_PESOC_MEM_CTRL,
((HAL_READ32(PERI_ON_BASE, REG_PESOC_MEM_CTRL)&0xFFFFFF00)|
SpicInitPara.DelayLine));
HAL_SPI_WRITE32(REG_SPIC_CTRLR1, BIT_NDF(4));
switch (SpicBitMode) {
case SpicOneBitMode:
HAL_SPI_WRITE32(REG_SPIC_CTRLR0,
(HAL_SPI_READ32(REG_SPIC_CTRLR0) & (~(BIT_ADDR_CH(3)|BIT_DATA_CH(3)))));
break;
case SpicDualBitMode:
HAL_SPI_WRITE32(REG_SPIC_CTRLR0,
((HAL_SPI_READ32(REG_SPIC_CTRLR0) & (~(BIT_ADDR_CH(3)|BIT_DATA_CH(3)))) |
(BIT_ADDR_CH(1)|BIT_DATA_CH(1))));
break;
case SpicQuadBitMode:
HAL_SPI_WRITE32(REG_SPIC_CTRLR0,
((HAL_SPI_READ32(REG_SPIC_CTRLR0) & (~(BIT_ADDR_CH(3)|BIT_DATA_CH(3)))) |
(BIT_ADDR_CH(2)|BIT_DATA_CH(2))));
break;
}
// Enable SPI_FLASH User Mode
// HAL_SPI_WRITE32(REG_SPIC_SSIENR, BIT_SPIC_EN);
}
#include "hal_timer.h"
extern BOOL
HalTimerInitRtl8195a(
IN VOID *Data
);
VOID
PatchHalInitPlatformTimer(
VOID
)
{
TIMER_ADAPTER TimerAdapter;
OSC32K_CKGEN_CTRL(ON);
GTIMER_FCTRL(ON);
ACTCK_TIMER_CCTRL(ON);
SLPCK_TIMER_CCTRL(ON);
TimerAdapter.IrqDis = ON;
// TimerAdapter.IrqHandle = (IRQ_FUN)NULL;
TimerAdapter.TimerId = 1;
TimerAdapter.TimerIrqPriority = 0;
TimerAdapter.TimerLoadValueUs = 0;
TimerAdapter.TimerMode = FREE_RUN_MODE;
HalTimerInitRtl8195a((VOID*) &TimerAdapter);
}
#define UART_BAUD_RATE_2400 2400
#define UART_BAUD_RATE_4800 4800
#define UART_BAUD_RATE_9600 9600
#define UART_BAUD_RATE_19200 19200
#define UART_BAUD_RATE_38400 38400
#define UART_BAUD_RATE_57600 57600
#define UART_BAUD_RATE_115200 115200
#define UART_BAUD_RATE_921600 921600
#define UART_BAUD_RATE_1152000 1152000
#define UART_PARITY_ENABLE 0x08
#define UART_PARITY_DISABLE 0
#define UART_DATA_LEN_5BIT 0x0
#define UART_DATA_LEN_6BIT 0x1
#define UART_DATA_LEN_7BIT 0x2
#define UART_DATA_LEN_8BIT 0x3
#define UART_STOP_1BIT 0x0
#define UART_STOP_2BIT 0x4
extern u32
HalLogUartInit(
IN LOG_UART_ADAPTER UartAdapter
);
extern u32
HalGetCpuClk(
VOID
);
const u32 StartupCpkClkTbl[]= {
200000000,
100000000,
50000000,
25000000,
12500000,
4000000
};
u32
StartupHalGetCpuClk(
VOID
)
{
u32 CpuType = 0, CpuClk = 0, FreqDown = 0;
CpuType = ((HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_CLK_CTRL1) & (0x70)) >> 4);
FreqDown = HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_SYSPLL_CTRL1) & BIT17;
CpuClk = StartupCpkClkTbl[CpuType];
if ( !FreqDown ) {
if ( CpuClk > 4000000 ){
CpuClk = (CpuClk*5/6);
}
}
return CpuClk;
}
u32
PatchHalLogUartInit(
IN LOG_UART_ADAPTER UartAdapter
)
{
u32 SetData;
u32 Divisor;
u32 Dlh;
u32 Dll;
u32 SysClock;
/*
Interrupt enable Register
7: THRE Interrupt Mode Enable
2: Enable Receiver Line Status Interrupt
1: Enable Transmit Holding Register Empty Interrupt
0: Enable Received Data Available Interrupt
*/
// disable all interrupts
HAL_UART_WRITE32(UART_INTERRUPT_EN_REG_OFF, 0);
/*
Line Control Register
7: DLAB, enable reading and writing DLL and DLH register, and must be cleared after
initial baud rate setup
3: PEN, parity enable/disable
2: STOP, stop bit
1:0 DLS, data length
*/
// set DLAB bit to 1
HAL_UART_WRITE32(UART_LINE_CTL_REG_OFF, 0x80);
// set up buad rate division
#ifdef CONFIG_FPGA
SysClock = SYSTEM_CLK;
Divisor = (SysClock / (16 * (UartAdapter.BaudRate)));
#else
{
u32 SampleRate,Remaind;
//SysClock = (HalGetCpuClk()>>2);
SysClock = (StartupHalGetCpuClk()>>2);
SampleRate = (16 * (UartAdapter.BaudRate));
Divisor= SysClock/SampleRate;
Remaind = ((SysClock*10)/SampleRate) - (Divisor*10);
if (Remaind>4) {
Divisor++;
}
}
#endif
Dll = Divisor & 0xff;
Dlh = (Divisor & 0xff00)>>8;
HAL_UART_WRITE32(UART_DLL_OFF, Dll);
HAL_UART_WRITE32(UART_DLH_OFF, Dlh);
// clear DLAB bit
HAL_UART_WRITE32(UART_LINE_CTL_REG_OFF, 0);
// set data format
SetData = UartAdapter.Parity | UartAdapter.Stop | UartAdapter.DataLength;
HAL_UART_WRITE32(UART_LINE_CTL_REG_OFF, SetData);
/* FIFO Control Register
7:6 level of receive data available interrupt
5:4 level of TX empty trigger
2 XMIT FIFO reset
1 RCVR FIFO reset
0 FIFO enable/disable
*/
// FIFO setting, enable FIFO and set trigger level (2 less than full when receive
// and empty when transfer
HAL_UART_WRITE32(UART_FIFO_CTL_REG_OFF, UartAdapter.FIFOControl);
/*
Interrupt Enable Register
7: THRE Interrupt Mode enable
2: Enable Receiver Line status Interrupt
1: Enable Transmit Holding register empty INT32
0: Enable received data available interrupt
*/
HAL_UART_WRITE32(UART_INTERRUPT_EN_REG_OFF, UartAdapter.IntEnReg);
if (UartAdapter.IntEnReg) {
// Enable Peripheral_IRQ Setting for Log_Uart
HAL_WRITE32(VENDOR_REG_BASE, PERIPHERAL_IRQ_EN, 0x1000000);
// Enable ARM Cortex-M3 IRQ
NVIC_SetPriorityGrouping(0x3);
NVIC_SetPriority(PERIPHERAL_IRQ, 14);
NVIC_EnableIRQ(PERIPHERAL_IRQ);
}
return 0;
}
u32 log_uart_irq(VOID *Data)
{
return 0;
}
VOID
PatchHalInitPlatformLogUart(
VOID
)
{
IRQ_HANDLE UartIrqHandle;
LOG_UART_ADAPTER UartAdapter;
//4 Release log uart reset and clock
LOC_UART_FCTRL(OFF);
LOC_UART_FCTRL(ON);
ACTCK_LOG_UART_CCTRL(ON);
PinCtrl(LOG_UART,S0,ON);
//4 Register Log Uart Callback function
UartIrqHandle.Data = (u32)NULL;//(u32)&UartAdapter;
UartIrqHandle.IrqNum = UART_LOG_IRQ;
UartIrqHandle.IrqFun = (IRQ_FUN) log_uart_irq;//UartLogIrqHandleRam;
UartIrqHandle.Priority = 0;
//4 Inital Log uart
UartAdapter.BaudRate = UART_BAUD_RATE_38400;
UartAdapter.DataLength = UART_DATA_LEN_8BIT;
UartAdapter.FIFOControl = 0xC1;
UartAdapter.IntEnReg = 0x00;
UartAdapter.Parity = UART_PARITY_DISABLE;
UartAdapter.Stop = UART_STOP_1BIT;
//4 Initial Log Uart
PatchHalLogUartInit(UartAdapter);
//4 Register Isr handle
InterruptRegister(&UartIrqHandle);
UartAdapter.IntEnReg = 0x05;
//4 Initial Log Uart for Interrupt
PatchHalLogUartInit(UartAdapter);
//4 initial uart log parameters before any uartlog operation
//RtlConsolInit(ROM_STAGE,GetRomCmdNum(),(VOID*)&UartLogRomCmdTable);// executing boot seq.,
}

View file

@ -0,0 +1,24 @@
<?xml version="1.0" encoding="iso-8859-1"?>
<flash_board>
<pass>
<range>CODE 0x10000bc0 0x10003FFF</range>
<loader>$PROJ_DIR$\..\..\..\component\soc\realtek\8195a\misc\iar_utility\common\flashloader\FlashRTL8195aMP.flash</loader>
<abs_offset>0x00000000</abs_offset>
<args>--head</args>
</pass>
<pass>
<range>CODE 0x10004000 0x1006FFFF</range>
<loader>$PROJ_DIR$\..\..\..\component\soc\realtek\8195a\misc\iar_utility\common\flashloader\FlashRTL8195aMP.flash</loader>
<abs_offset>0x00000000</abs_offset>
<args>--cascade</args>
</pass>
<pass>
<range>CODE 0x30000000 0x301FFFFF</range>
<loader>$PROJ_DIR$\..\..\..\component\soc\realtek\8195a\misc\iar_utility\common\flashloader\FlashRTL8195aMP.flash</loader>
<abs_offset>0x00000000</abs_offset>
<args>--cascade</args>
</pass>
<ignore>CODE 0x00000000 0x000FFFFF</ignore>
<ignore>CODE 0x10000000 0x10000bbf</ignore>
</flash_board>

View file

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="iso-8859-1"?>
<flash_device>
<exe>$PROJ_DIR$\..\..\..\component\soc\realtek\8195a\misc\iar_utility\common\flashloader\FlashRTL8195aMP.out</exe>
<flash_base>0x00000000</flash_base>
<page>8</page>
<block>512 0x1000</block>
<macro>$PROJ_DIR$\..\..\..\component\soc\realtek\8195a\misc\iar_utility\common\flashloader\FlashRTL8195aMP.mac</macro>
<aggregate>1</aggregate>
</flash_device>

View file

@ -0,0 +1,72 @@
setup()
{
__var tmp;
__hwResetWithStrategy(0, 2);
__hwReset(1);
tmp = __readMemory32(0x40000014,"Memory"); __delay(10);
__message "0x40000014=",tmp:%x;
__writeMemory32(0x21, 0x40000014, "Memory"); __delay(10);
__writeMemory32(0x1FC00002, 0x40000304, "Memory"); __delay(10);
__writeMemory32(0x400, 0x40000250, "Memory"); __delay(10);
__writeMemory32(0x0, 0x40000340, "Memory"); __delay(10);
__writeMemory32(0xc04, 0x40000230, "Memory"); __delay(10);
__writeMemory32(0x1157, 0x40000210, "Memory"); __delay(10);
__writeMemory32(0x110011, 0x400002c0, "Memory"); __delay(10);
__writeMemory32(0xffffffff, 0x40000320, "Memory"); __delay(10);
/*
__writeMemory32(0x1, 0x40005224, "Memory"); __delay(10);
__writeMemory32(0x2c8, 0x40005004, "Memory"); __delay(10);
__writeMemory32(0xffffd000, 0x40005008, "Memory"); __delay(10);
__delay(3);
__writeMemory32(0x22, 0x40005020, "Memory"); __delay(10);
__delay(3);
__writeMemory32(0x09032001, 0x40005010, "Memory"); __delay(10);
__delay(3);
__writeMemory32(0x2611, 0x40005014, "Memory"); __delay(10);
__delay(3);
__writeMemory32(0x68413, 0x40005018, "Memory"); __delay(10);
__delay(3);
__writeMemory32(0x42, 0x4000501c, "Memory"); __delay(10);
__delay(3);
// Enable
__writeMemory32(0x700, 0x4000500c, "Memory"); __delay(10);
__delay(20);
__writeMemory32(0x1, 0x40005000, "Memory"); __delay(10);
__delay(100);
tmp = __readMemory32(0x40005000,"Memory"); __delay(10);
__writeMemory32(0x600, 0x4000500c, "Memory"); __delay(10);
__delay(30);
*/
}
execUserPreload()
{
__var tmp;
setup();
tmp = __readMemory32(0x40000210, "Memory")|(1<<27);
__writeMemory32(tmp, 0x40000210, "Memory");
}
execUserSetup()
{
//execUserPreload();
//__loadImage("$TARGET_PATH$ ", 0, 0);
//__writeMemory32(0x80000000, 0x40000218, "Memory");
}
execUserFlashInit() // Called by debugger before loading flash loader in RAM.
{
__var tmp;
__message "----- Prepare hardware for Flashloader -----\n";
__writeMemory32(0x1FFFFFF8, 0x10000000, "Memory");
__writeMemory32(0x101, 0x10000004, "Memory");
setup();
tmp = __readMemory32(0x40000210, "Memory")|(1<<27);
__writeMemory32(tmp, 0x40000210, "Memory");
}

View file

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="iso-8859-1"?>
<flash_board>
<pass>
<range>CODE 0x10000bc8 0x10005FFF</range>
<loader>$PROJ_DIR$\..\..\..\component\soc\realtek\8195a\misc\iar_utility\common\flashloader\FlashRTL8195aMP.flash</loader>
<abs_offset>0x00000000</abs_offset>
<args>--head
--img2_addr
0xB000</args>
</pass>
<ignore>CODE 0x00000000 0x000FFFFF</ignore>
<ignore>CODE 0x10000000 0x10000bc7</ignore>
<ignore>CODE 0x10006000 0x1006FFFF</ignore>
<ignore>CODE 0x30000000 0x301FFFFF</ignore>
</flash_board>

View file

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="iso-8859-1"?>
<flash_board>
<pass>
<range>CODE 0x10000bc0 0x10005FFF</range>
<loader>$PROJ_DIR$\..\..\..\component\soc\realtek\8195a\misc\iar_utility\common\flashloader\FlashRTL8195aMP.flash</loader>
<abs_offset>0x00000000</abs_offset>
<args>--head
--img2_addr
0xB000</args>
</pass>
<ignore>CODE 0x00000000 0x000FFFFF</ignore>
<ignore>CODE 0x10000000 0x10000bbf</ignore>
<ignore>CODE 0x10006000 0x1006FFFF</ignore>
<ignore>CODE 0x30000000 0x301FFFFF</ignore>
</flash_board>

View file

@ -0,0 +1,26 @@
<?xml version="1.0" encoding="iso-8859-1"?>
<flash_board>
<pass>
<range>CODE 0x10000bc8 0x10005FFF</range>
<loader>$PROJ_DIR$\..\..\..\component\soc\realtek\8195a\misc\iar_utility\common\flashloader\FlashRTL8195aMP.flash</loader>
<abs_offset>0x00000000</abs_offset>
<args>--head
--img2_addr
0xB000</args>
</pass>
<pass>
<range>CODE 0x10006000 0x1006FFFF</range>
<loader>$PROJ_DIR$\..\..\..\component\soc\realtek\8195a\misc\iar_utility\common\flashloader\FlashRTL8195aMP.flash</loader>
<abs_offset>0xB000</abs_offset>
</pass>
<pass>
<range>CODE 0x30000000 0x301FFFFF</range>
<loader>$PROJ_DIR$\..\..\..\component\soc\realtek\8195a\misc\iar_utility\common\flashloader\FlashRTL8195aMP.flash</loader>
<abs_offset>0x0000</abs_offset>
<args>--cascade</args>
</pass>
<ignore>CODE 0x00000000 0x000FFFFF</ignore>
<ignore>CODE 0x10000000 0x10000bc7</ignore>
<ignore>CODE 0x1FFF0000 0x1FFFFFFF</ignore>
</flash_board>

View file

@ -0,0 +1,30 @@
<?xml version="1.0" encoding="iso-8859-1"?>
<flash_board>
<pass>
<range>CODE 0x200006b4 0x2002FFFF</range>
<loader>$PROJ_DIR$\flashloader\FlashRTL8195aQA.flash</loader>
<abs_offset>0x00000000</abs_offset>
</pass>
<pass>
<range>CODE 0x30000000 0x301FFFFF</range>
<loader>$PROJ_DIR$\flashloader\FlashRTL8195aQA.flash</loader>
<abs_offset>0x00010000</abs_offset>
<ignore>DATA_Z 0x30000000 0x301FFFFF</ignore>
</pass>
<pass>
<range>CODE 0x20080000 0x200BFFFF</range>
<loader>$PROJ_DIR$\flashloader\FlashRTL8195aQA.flash</loader>
<abs_offset>0x00020000</abs_offset>
<ignore>DATA_Z 0x20080000 0x200BFFFF</ignore>
</pass>
<pass>
<range>CODE 0x00000000 0x00000000</range>
<loader>$PROJ_DIR$\flashloader\FlashRTL8195aQA.flash</loader>
<abs_offset>0x00030000</abs_offset>
</pass>
<ignore>CODE 0x00000001 0x000BFFFF</ignore>
<ignore>CODE 0x20000000 0x200006b3</ignore>
</flash_board>

View file

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="iso-8859-1"?>
<flash_device>
<exe>$PROJ_DIR$\flashloader\FlashRTL8195aQA.out</exe>
<flash_base>0x00000000</flash_base>
<page>8</page>
<block>256 0x1000</block>
<macro>$PROJ_DIR$\flashloader\FlashRTL8195aQA.mac</macro>
<aggregate>1</aggregate>
</flash_device>

View file

@ -0,0 +1,60 @@
setup()
{
__var tmp;
__hwReset(1);
__writeMemory32(0x21, 0x40000014, "Memory"); __delay(10);
__writeMemory32(0x1FC00002, 0x40000304, "Memory"); __delay(10);
__writeMemory32(0x400, 0x40000250, "Memory"); __delay(10);
__writeMemory32(0x0, 0x40000340, "Memory"); __delay(10);
__writeMemory32(0xc04, 0x40000230, "Memory"); __delay(10);
__writeMemory32(0x1157, 0x40000210, "Memory"); __delay(10);
__writeMemory32(0x110011, 0x400002c0, "Memory"); __delay(10);
__writeMemory32(0xffffffff, 0x40000320, "Memory"); __delay(10);
__writeMemory32(0x1, 0x40005224, "Memory"); __delay(10);
__writeMemory32(0x2c8, 0x40005004, "Memory"); __delay(10);
__writeMemory32(0xffffd000, 0x40005008, "Memory"); __delay(10);
__delay(3);
__writeMemory32(0x22, 0x40005020, "Memory"); __delay(10);
__delay(3);
__writeMemory32(0x09032001, 0x40005010, "Memory"); __delay(10);
__delay(3);
__writeMemory32(0x2611, 0x40005014, "Memory"); __delay(10);
__delay(3);
__writeMemory32(0x68413, 0x40005018, "Memory"); __delay(10);
__delay(3);
__writeMemory32(0x42, 0x4000501c, "Memory"); __delay(10);
__delay(3);
// Enable
__writeMemory32(0x700, 0x4000500c, "Memory"); __delay(10);
__delay(20);
__writeMemory32(0x1, 0x40005000, "Memory"); __delay(10);
__delay(100);
tmp = __readMemory32(0x40005000,"Memory"); __delay(10);
__writeMemory32(0x600, 0x4000500c, "Memory"); __delay(10);
__delay(30);
}
execUserPreload()
{
__message "----- Prepare hardware for Flashloader -----\n";
setup();
__writeMemory32(0x80000000, 0x40000218, "Memory");
}
execUserSetup()
{
//execUserPreload();
//__loadImage("$TARGET_PATH$ ", 0, 0);
//__writeMemory32(0x80000000, 0x40000218, "Memory");
}
execUserFlashInit() // Called by debugger before loading flash loader in RAM.
{
__message "----- Prepare hardware for Flashloader -----\n";
setup();
__writeMemory32(0x80000000, 0x40000218, "Memory");
}