- added support for booting from SD-card for the DK-TM4C123G demo.

git-svn-id: https://svn.code.sf.net/p/openblt/code/trunk@74 5dc33758-31d5-4daf-9ae8-b24bf3d40d73
This commit is contained in:
Frank Voorburg 2014-02-19 09:26:30 +00:00
parent 603dbb19e2
commit 754d8ecb5c
17 changed files with 2441 additions and 1476 deletions

View File

@ -108,15 +108,15 @@
* firmware update is completed by the bootloader.
*/
/** \brief Enable/disable support for firmware updates from a locally attached storage.*/
#define BOOT_FILE_SYS_ENABLE (0)
#define BOOT_FILE_SYS_ENABLE (1)
/** \brief Enable/disable logging messages during firmware updates. */
#define BOOT_FILE_LOGGING_ENABLE (0)
#define BOOT_FILE_LOGGING_ENABLE (1)
/** \brief Enable/disable a hook function that is called upon detection of an error. */
#define BOOT_FILE_ERROR_HOOK_ENABLE (0)
#define BOOT_FILE_ERROR_HOOK_ENABLE (1)
/** \brief Enable/disable a hook function that is called at the start of the update. */
#define BOOT_FILE_STARTED_HOOK_ENABLE (0)
#define BOOT_FILE_STARTED_HOOK_ENABLE (1)
/** \brief Enable/disable a hook function that is called at the end of the update. */
#define BOOT_FILE_COMPLETED_HOOK_ENABLE (0)
#define BOOT_FILE_COMPLETED_HOOK_ENABLE (1)
/****************************************************************************************

View File

@ -230,7 +230,7 @@ void CopServiceHook(void)
* Constant data declarations
****************************************************************************************/
/** \brief Firmware filename. */
static const blt_char firmwareFilename[] = "/demoprog_ek_lm3s6965.srec";
static const blt_char firmwareFilename[] = "/demoprog_dk_tm4c123g.srec";
/****************************************************************************************

View File

@ -25,7 +25,7 @@
<Factory>Workspace</Factory>
<Session>
<NodeDict><ExpandedNode>tm4c123g</ExpandedNode><ExpandedNode>tm4c123g/Boot</ExpandedNode><ExpandedNode>tm4c123g/Libraries</ExpandedNode><ExpandedNode>tm4c123g/Output</ExpandedNode><ExpandedNode>tm4c123g/Source</ExpandedNode><ExpandedNode>tm4c123g/Source/ARMCM4_TM4C</ExpandedNode><ExpandedNode>tm4c123g/Source/ARMCM4_TM4C/IAR</ExpandedNode></NodeDict></Session>
<NodeDict><ExpandedNode>tm4c123g</ExpandedNode><ExpandedNode>tm4c123g/Boot</ExpandedNode><ExpandedNode>tm4c123g/Boot/lib</ExpandedNode><ExpandedNode>tm4c123g/Boot/lib/fatfs</ExpandedNode><ExpandedNode>tm4c123g/Libraries</ExpandedNode><ExpandedNode>tm4c123g/Output</ExpandedNode><ExpandedNode>tm4c123g/Source</ExpandedNode></NodeDict></Session>
</Tab>
</Tabs>
@ -35,14 +35,14 @@
<Pane><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\main.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>52</YPos2><SelStart2>3081</SelStart2><SelEnd2>3081</SelEnd2></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\..\..\..\Source\ARMCM4_TM4C\flash.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>18</YPos2><SelStart2>1435</SelStart2><SelEnd2>1435</SelEnd2></Tab><ActiveTab>1</ActiveTab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\blt_conf.h</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>48</YPos2><SelStart2>4103</SelStart2><SelEnd2>4103</SelEnd2></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\..\..\..\Source\ARMCM4_TM4C\IAR\vectors.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>42</YPos2><SelStart2>2414</SelStart2><SelEnd2>2414</SelEnd2></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\..\..\..\Source\xcp.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>1219</YPos2><SelStart2>43432</SelStart2><SelEnd2>43439</SelEnd2></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\..\..\..\Source\ARMCM4_TM4C\uart.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>111</YPos2><SelStart2>6242</SelStart2><SelEnd2>6242</SelEnd2></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\..\..\..\Source\assert.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>17</YPos2><SelStart2>3091</SelStart2><SelEnd2>3091</SelEnd2></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\..\..\..\Source\backdoor.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>116</YPos2><SelStart2>6882</SelStart2><SelEnd2>6882</SelEnd2></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\..\..\..\Source\com.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>143</YPos2><SelStart2>7570</SelStart2><SelEnd2>7570</SelEnd2></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\..\..\..\Source\ARMCM4_TM4C\nvm.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>174</YPos2><SelStart2>8038</SelStart2><SelEnd2>8038</SelEnd2></Tab></Pane><ActivePane>0</ActivePane><Sizes><Pane><X>1000000</X><Y>1000000</Y></Pane></Sizes><SplitMode>1</SplitMode></Editor>
<Pane><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\main.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>52</YPos2><SelStart2>3130</SelStart2><SelEnd2>3130</SelEnd2></Tab><ActiveTab>0</ActiveTab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\..\..\..\Source\ARMCM4_TM4C\flash.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>87</YPos2><SelStart2>2281</SelStart2><SelEnd2>2281</SelEnd2></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\blt_conf.h</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>96</YPos2><SelStart2>7138</SelStart2><SelEnd2>7138</SelEnd2></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\..\..\..\Source\ARMCM4_TM4C\IAR\vectors.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>42</YPos2><SelStart2>2414</SelStart2><SelEnd2>2414</SelEnd2></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\..\..\..\Source\xcp.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>1219</YPos2><SelStart2>43432</SelStart2><SelEnd2>43439</SelEnd2></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\..\..\..\Source\ARMCM4_TM4C\uart.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>111</YPos2><SelStart2>6242</SelStart2><SelEnd2>6242</SelEnd2></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\..\..\..\Source\assert.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>17</YPos2><SelStart2>3091</SelStart2><SelEnd2>3091</SelEnd2></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\..\..\..\Source\backdoor.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>116</YPos2><SelStart2>6882</SelStart2><SelEnd2>6882</SelEnd2></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\..\..\..\Source\com.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>143</YPos2><SelStart2>7570</SelStart2><SelEnd2>7570</SelEnd2></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\..\..\..\Source\ARMCM4_TM4C\nvm.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>160</YPos2><SelStart2>8038</SelStart2><SelEnd2>8038</SelEnd2></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\lib\fatfs\mmc.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>164</YPos2><SelStart2>6505</SelStart2><SelEnd2>6505</SelEnd2></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\hooks.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>231</YPos2><SelStart2>10763</SelStart2><SelEnd2>10763</SelEnd2></Tab></Pane><ActivePane>0</ActivePane><Sizes><Pane><X>1000000</X><Y>1000000</Y></Pane></Sizes><SplitMode>1</SplitMode></Editor>
<Positions>
<Top><Row0><Sizes><Toolbar-02a5fc58><key>iaridepm.enu1</key></Toolbar-02a5fc58></Sizes></Row0><Row1><Sizes/></Row1><Row2><Sizes/></Row2></Top><Left><Row0><Sizes><Wnd2><Rect><Top>-2</Top><Left>-2</Left><Bottom>579</Bottom><Right>418</Right><x>-2</x><y>-2</y><xscreen>200</xscreen><yscreen>200</yscreen><sizeHorzCX>104167</sizeHorzCX><sizeHorzCY>198413</sizeHorzCY><sizeVertCX>218750</sizeVertCX><sizeVertCY>576389</sizeVertCY></Rect></Wnd2><Wnd3><Rect><Top>0</Top><Left>0</Left><Bottom>0</Bottom><Right>7</Right><x>-2</x><y>577</y><xscreen>1924</xscreen><yscreen>200</yscreen><sizeHorzCX>1002083</sizeHorzCX><sizeHorzCY>198413</sizeHorzCY><sizeVertCX>218750</sizeVertCX><sizeVertCY>382937</sizeVertCY></Rect></Wnd3></Sizes></Row0></Left><Right><Row0><Sizes/></Row0></Right><Bottom><Row0><Sizes/></Row0></Bottom><Float><Sizes/></Float></Positions>
<Top><Row0><Sizes><Toolbar-029cfc58><key>iaridepm.enu1</key></Toolbar-029cfc58></Sizes></Row0></Top><Left><Row0><Sizes><Wnd2><Rect><Top>-2</Top><Left>-2</Left><Bottom>579</Bottom><Right>418</Right><x>-2</x><y>-2</y><xscreen>200</xscreen><yscreen>200</yscreen><sizeHorzCX>104167</sizeHorzCX><sizeHorzCY>198413</sizeHorzCY><sizeVertCX>218750</sizeVertCX><sizeVertCY>576389</sizeVertCY></Rect></Wnd2><Wnd3><Rect><Top>0</Top><Left>0</Left><Bottom>6881384</Bottom><Right>7536751</Right><x>-2</x><y>577</y><xscreen>1924</xscreen><yscreen>200</yscreen><sizeHorzCX>1002083</sizeHorzCX><sizeHorzCY>198413</sizeHorzCY><sizeVertCX>218750</sizeVertCX><sizeVertCY>382937</sizeVertCY></Rect></Wnd3></Sizes></Row0></Left><Right><Row0><Sizes/></Row0></Right><Bottom><Row0><Sizes/></Row0></Bottom><Float><Sizes/></Float></Positions>
</Desktop>
</Workspace>

File diff suppressed because it is too large Load Diff

View File

@ -323,7 +323,7 @@
</option>
<option>
<name>CCOptLevel</name>
<state>0</state>
<state>1</state>
</option>
<option>
<name>CCOptStrategy</name>
@ -332,7 +332,7 @@
</option>
<option>
<name>CCOptLevelSlave</name>
<state>0</state>
<state>1</state>
</option>
<option>
<name>CompilerMisraRules98</name>
@ -1096,6 +1096,15 @@
<name>$PROJ_DIR$\..\lib\driverlib\watchdog.h</name>
</file>
</group>
<group>
<name>fatfs</name>
<file>
<name>$PROJ_DIR$\..\lib\fatfs\ffconf.h</name>
</file>
<file>
<name>$PROJ_DIR$\..\lib\fatfs\mmc.c</name>
</file>
</group>
<group>
<name>inc</name>
<file>
@ -1238,6 +1247,27 @@
<name>$PROJ_DIR$\..\..\..\..\Source\ARMCM4_TM4C\uart.h</name>
</file>
</group>
<group>
<name>third_party</name>
<group>
<name>fatfs</name>
<file>
<name>$PROJ_DIR$\..\..\..\..\Source\third_party\fatfs\src\diskio.h</name>
</file>
<file>
<name>$PROJ_DIR$\..\..\..\..\Source\third_party\fatfs\src\ff.c</name>
</file>
<file>
<name>$PROJ_DIR$\..\..\..\..\Source\third_party\fatfs\src\ff.h</name>
</file>
<file>
<name>$PROJ_DIR$\..\..\..\..\Source\third_party\fatfs\src\integer.h</name>
</file>
<file>
<name>$PROJ_DIR$\..\..\..\..\Source\third_party\fatfs\src\option\unicode.c</name>
</file>
</group>
</group>
<file>
<name>$PROJ_DIR$\..\..\..\..\Source\assert.c</name>
</file>

View File

@ -0,0 +1,192 @@
/*---------------------------------------------------------------------------/
/ FatFs - FAT file system module configuration file R0.09b (C)ChaN, 2013
/----------------------------------------------------------------------------/
/
/ CAUTION! Do not forget to make clean the project after any changes to
/ the configuration options.
/
/----------------------------------------------------------------------------*/
#ifndef _FFCONF
#define _FFCONF 82786 /* Revision ID */
/*---------------------------------------------------------------------------/
/ Functions and Buffer Configurations
/----------------------------------------------------------------------------*/
#define _FS_TINY 0 /* 0:Normal or 1:Tiny */
/* When _FS_TINY is set to 1, FatFs uses the sector buffer in the file system
/ object instead of the sector buffer in the individual file object for file
/ data transfer. This reduces memory consumption 512 bytes each file object. */
#define _FS_READONLY 0 /* 0:Read/Write or 1:Read only */
/* Setting _FS_READONLY to 1 defines read only configuration. This removes
/ writing functions, f_write, f_sync, f_unlink, f_mkdir, f_chmod, f_rename,
/ f_truncate and useless f_getfree. */
#define _FS_MINIMIZE 0 /* 0 to 3 */
/* The _FS_MINIMIZE option defines minimization level to remove some functions.
/
/ 0: Full function.
/ 1: f_stat, f_getfree, f_unlink, f_mkdir, f_chmod, f_truncate and f_rename
/ are removed.
/ 2: f_opendir and f_readdir are removed in addition to 1.
/ 3: f_lseek is removed in addition to 2. */
#define _USE_STRFUNC 2 /* 0:Disable or 1-2:Enable */
/* To enable string functions, set _USE_STRFUNC to 1 or 2. */
#define _USE_MKFS 0 /* 0:Disable or 1:Enable */
/* To enable f_mkfs function, set _USE_MKFS to 1 and set _FS_READONLY to 0 */
#define _USE_FASTSEEK 0 /* 0:Disable or 1:Enable */
/* To enable fast seek feature, set _USE_FASTSEEK to 1. */
#define _USE_LABEL 0 /* 0:Disable or 1:Enable */
/* To enable volume label functions, set _USE_LAVEL to 1 */
#define _USE_FORWARD 0 /* 0:Disable or 1:Enable */
/* To enable f_forward function, set _USE_FORWARD to 1 and set _FS_TINY to 1. */
/*---------------------------------------------------------------------------/
/ Locale and Namespace Configurations
/----------------------------------------------------------------------------*/
#define _CODE_PAGE 437
/* The _CODE_PAGE specifies the OEM code page to be used on the target system.
/ Incorrect setting of the code page can cause a file open failure.
/
/ 932 - Japanese Shift-JIS (DBCS, OEM, Windows)
/ 936 - Simplified Chinese GBK (DBCS, OEM, Windows)
/ 949 - Korean (DBCS, OEM, Windows)
/ 950 - Traditional Chinese Big5 (DBCS, OEM, Windows)
/ 1250 - Central Europe (Windows)
/ 1251 - Cyrillic (Windows)
/ 1252 - Latin 1 (Windows)
/ 1253 - Greek (Windows)
/ 1254 - Turkish (Windows)
/ 1255 - Hebrew (Windows)
/ 1256 - Arabic (Windows)
/ 1257 - Baltic (Windows)
/ 1258 - Vietnam (OEM, Windows)
/ 437 - U.S. (OEM)
/ 720 - Arabic (OEM)
/ 737 - Greek (OEM)
/ 775 - Baltic (OEM)
/ 850 - Multilingual Latin 1 (OEM)
/ 858 - Multilingual Latin 1 + Euro (OEM)
/ 852 - Latin 2 (OEM)
/ 855 - Cyrillic (OEM)
/ 866 - Russian (OEM)
/ 857 - Turkish (OEM)
/ 862 - Hebrew (OEM)
/ 874 - Thai (OEM, Windows)
/ 1 - ASCII only (Valid for non LFN cfg.)
*/
#define _USE_LFN 1 /* 0 to 3 */
#define _MAX_LFN 255 /* Maximum LFN length to handle (12 to 255) */
/* The _USE_LFN option switches the LFN support.
/
/ 0: Disable LFN feature. _MAX_LFN and _LFN_UNICODE have no effect.
/ 1: Enable LFN with static working buffer on the BSS. Always NOT reentrant.
/ 2: Enable LFN with dynamic working buffer on the STACK.
/ 3: Enable LFN with dynamic working buffer on the HEAP.
/
/ The LFN working buffer occupies (_MAX_LFN + 1) * 2 bytes. To enable LFN,
/ Unicode handling functions ff_convert() and ff_wtoupper() must be added
/ to the project. When enable to use heap, memory control functions
/ ff_memalloc() and ff_memfree() must be added to the project. */
#define _LFN_UNICODE 0 /* 0:ANSI/OEM or 1:Unicode */
/* To switch the character code set on FatFs API to Unicode,
/ enable LFN feature and set _LFN_UNICODE to 1. */
#define _FS_RPATH 0 /* 0 to 2 */
/* The _FS_RPATH option configures relative path feature.
/
/ 0: Disable relative path feature and remove related functions.
/ 1: Enable relative path. f_chdrive() and f_chdir() are available.
/ 2: f_getcwd() is available in addition to 1.
/
/ Note that output of the f_readdir fnction is affected by this option. */
/*---------------------------------------------------------------------------/
/ Physical Drive Configurations
/----------------------------------------------------------------------------*/
#define _VOLUMES 1
/* Number of volumes (logical drives) to be used. */
#define _MAX_SS 512 /* 512, 1024, 2048 or 4096 */
/* Maximum sector size to be handled.
/ Always set 512 for memory card and hard disk but a larger value may be
/ required for on-board flash memory, floppy disk and optical disk.
/ When _MAX_SS is larger than 512, it configures FatFs to variable sector size
/ and GET_SECTOR_SIZE command must be implememted to the disk_ioctl function. */
#define _MULTI_PARTITION 0 /* 0:Single partition, 1:Enable multiple partition */
/* When set to 0, each volume is bound to the same physical drive number and
/ it can mount only first primaly partition. When it is set to 1, each volume
/ is tied to the partitions listed in VolToPart[]. */
#define _USE_ERASE 0 /* 0:Disable or 1:Enable */
/* To enable sector erase feature, set _USE_ERASE to 1. CTRL_ERASE_SECTOR command
/ should be added to the disk_ioctl functio. */
/*---------------------------------------------------------------------------/
/ System Configurations
/----------------------------------------------------------------------------*/
#define _WORD_ACCESS 0 /* 0 or 1 */
/* Set 0 first and it is always compatible with all platforms. The _WORD_ACCESS
/ option defines which access method is used to the word data on the FAT volume.
/
/ 0: Byte-by-byte access.
/ 1: Word access. Do not choose this unless following condition is met.
/
/ When the byte order on the memory is big-endian or address miss-aligned word
/ access results incorrect behavior, the _WORD_ACCESS must be set to 0.
/ If it is not the case, the value can also be set to 1 to improve the
/ performance and code size.
*/
/* A header file that defines sync object types on the O/S, such as
/ windows.h, ucos_ii.h and semphr.h, must be included prior to ff.h. */
#define _FS_REENTRANT 0 /* 0:Disable or 1:Enable */
#define _FS_TIMEOUT 1000 /* Timeout period in unit of time ticks */
#define _SYNC_t HANDLE /* O/S dependent type of sync object. e.g. HANDLE, OS_EVENT*, ID and etc.. */
/* The _FS_REENTRANT option switches the reentrancy (thread safe) of the FatFs module.
/
/ 0: Disable reentrancy. _SYNC_t and _FS_TIMEOUT have no effect.
/ 1: Enable reentrancy. Also user provided synchronization handlers,
/ ff_req_grant, ff_rel_grant, ff_del_syncobj and ff_cre_syncobj
/ function must be added to the project. */
#define _FS_LOCK 0 /* 0:Disable or >=1:Enable */
/* To enable file lock control feature, set _FS_LOCK to 1 or greater.
The value defines how many files can be opened simultaneously. */
#endif /* _FFCONFIG */

View File

@ -0,0 +1,665 @@
/*------------------------------------------------------------------------/
/ MMCv3/SDv1/SDv2 (in SPI mode) control module
/-------------------------------------------------------------------------/
/
/ Copyright (C) 2013, ChaN, all right reserved.
/
/ * This software is a free software and there is NO WARRANTY.
/ * No restriction on use. You can use, modify and redistribute it for
/ personal, non-profit or commercial products UNDER YOUR RESPONSIBILITY.
/ * Redistributions of source code must retain the above copyright notice.
/
/-------------------------------------------------------------------------*/
/*
* This file was modified from a sample available from the FatFs
* web site. It was modified to work with a Stellaris EK-LM3S6965
* evaluation board.
*
* Note that the SSI port is shared with the osram display. The code
* in this file does not attempt to share the SSI port with the osram,
* it assumes the osram is not being used.
*/
#include <stdbool.h>
#include <stdint.h>
#include "inc/hw_memmap.h"
#include "inc/hw_types.h"
#include "driverlib/gpio.h"
#include "driverlib/ssi.h"
#include "driverlib/sysctl.h"
#include "diskio.h"
#include "boot.h"
/*--------------------------------------------------------------------------
Module Private Functions
---------------------------------------------------------------------------*/
/* Definitions for MMC/SDC command */
#define CMD0 (0) /* GO_IDLE_STATE */
#define CMD1 (1) /* SEND_OP_COND */
#define ACMD41 (41|0x80) /* SEND_OP_COND (SDC) */
#define CMD8 (8) /* SEND_IF_COND */
#define CMD9 (9) /* SEND_CSD */
#define CMD10 (10) /* SEND_CID */
#define CMD12 (12) /* STOP_TRANSMISSION */
#define ACMD13 (13|0x80) /* SD_STATUS (SDC) */
#define CMD16 (16) /* SET_BLOCKLEN */
#define CMD17 (17) /* READ_SINGLE_BLOCK */
#define CMD18 (18) /* READ_MULTIPLE_BLOCK */
#define CMD23 (23) /* SET_BLOCK_COUNT */
#define ACMD23 (23|0x80) /* SET_WR_BLK_ERASE_COUNT (SDC) */
#define CMD24 (24) /* WRITE_BLOCK */
#define CMD25 (25) /* WRITE_MULTIPLE_BLOCK */
#define CMD41 (41) /* SEND_OP_COND (ACMD) */
#define CMD55 (55) /* APP_CMD */
#define CMD58 (58) /* READ_OCR */
/* Peripheral definitions for DK-TM4C123G board */
// SSI port
#define SDC_SSI_BASE SSI0_BASE
#define SDC_SSI_SYSCTL_PERIPH SYSCTL_PERIPH_SSI0
// GPIO for SSI pins
#define SDC_GPIO_PORT_BASE GPIO_PORTA_BASE
#define SDC_GPIO_SYSCTL_PERIPH SYSCTL_PERIPH_GPIOA
#define SDC_SSI_CLK GPIO_PIN_2
#define SDC_SSI_TX GPIO_PIN_5
#define SDC_SSI_RX GPIO_PIN_4
#define SDC_SSI_FSS GPIO_PIN_3
#define SDC_SSI_PINS (SDC_SSI_TX | SDC_SSI_RX | SDC_SSI_CLK)
/* Control signals (Platform dependent) */
#define CS_LOW() GPIOPinWrite(SDC_GPIO_PORT_BASE, SDC_SSI_FSS, 0) /* MMC CS = L */
#define CS_HIGH() GPIOPinWrite(SDC_GPIO_PORT_BASE, SDC_SSI_FSS, SDC_SSI_FSS) /* MMC CS = H */
#define FCLK_SLOW() /* Set slow clock (100k-400k) */
#define FCLK_FAST() set_max_speed() /* Set fast clock (depends on the CSD) */
static volatile
DSTATUS Stat = STA_NOINIT; /* Disk status */
static
UINT CardType;
/*-----------------------------------------------------------------------*/
/* Send 80 or so clock transitions with CS and DI held high. This is */
/* required after card power up to get it into SPI mode */
/*-----------------------------------------------------------------------*/
static
void send_initial_clock_train(void)
{
unsigned int i;
DWORD dat;
/* Ensure CS is held high. */
CS_HIGH();
/* Switch the SSI TX line to a GPIO and drive it high too. */
GPIOPinTypeGPIOOutput(SDC_GPIO_PORT_BASE, SDC_SSI_TX);
GPIOPinWrite(SDC_GPIO_PORT_BASE, SDC_SSI_TX, SDC_SSI_TX);
/* Send 10 bytes over the SSI. This causes the clock to wiggle the */
/* required number of times. */
for(i = 0 ; i < 10 ; i++)
{
/* Write DUMMY data. SSIDataPut() waits until there is room in the */
/* FIFO. */
SSIDataPut(SDC_SSI_BASE, 0xFF);
/* Flush data read during data write. */
SSIDataGet(SDC_SSI_BASE, (uint32_t*)&dat);
}
/* Revert to hardware control of the SSI TX line. */
GPIOPinTypeSSI(SDC_GPIO_PORT_BASE, SDC_SSI_TX);
}
/*-----------------------------------------------------------------------*/
/* Power Control (Platform dependent) */
/*-----------------------------------------------------------------------*/
/* When the target system does not support socket power control, there */
/* is nothing to do in these functions. */
static
void power_on (void)
{
/*
* This doesn't really turn the power on, but initializes the
* SSI port and pins needed to talk to the card.
*/
/* Enable the peripherals used to drive the SDC on SSI, and the CS */
SysCtlPeripheralEnable(SDC_SSI_SYSCTL_PERIPH);
SysCtlPeripheralEnable(SDC_GPIO_SYSCTL_PERIPH);
/* Configure the appropriate pins to be SSI instead of GPIO */
GPIOPinTypeSSI(SDC_GPIO_PORT_BASE, SDC_SSI_TX | SDC_SSI_RX | SDC_SSI_CLK);
GPIOPinTypeGPIOOutput(SDC_GPIO_PORT_BASE, SDC_SSI_FSS);
GPIOPadConfigSet(SDC_GPIO_PORT_BASE, SDC_SSI_RX, GPIO_STRENGTH_4MA,
GPIO_PIN_TYPE_STD_WPU);
GPIOPadConfigSet(SDC_GPIO_PORT_BASE, SDC_SSI_CLK | SDC_SSI_TX | SDC_SSI_FSS,
GPIO_STRENGTH_4MA, GPIO_PIN_TYPE_STD);
/* Configure the SSI0 port */
SSIConfigSetExpClk(SDC_SSI_BASE, SysCtlClockGet(), SSI_FRF_MOTO_MODE_0,
SSI_MODE_MASTER, 400000, 8);
SSIEnable(SDC_SSI_BASE);
/* Set DI and CS high and apply more than 74 pulses to SCLK for the card */
/* to be able to accept a native command. */
send_initial_clock_train();
}
// set the SSI speed to the max setting
static
void set_max_speed(void)
{
unsigned long i;
/* Disable the SSI */
SSIDisable(SDC_SSI_BASE);
/* Set the maximum speed as half the system clock, with a max of 12.5 MHz. */
i = SysCtlClockGet() / 2;
if(i > 12500000)
{
i = 12500000;
}
/* Configure the SSI0 port */
SSIConfigSetExpClk(SDC_SSI_BASE, SysCtlClockGet(), SSI_FRF_MOTO_MODE_0,
SSI_MODE_MASTER, i, 8);
/* Enable the SSI */
SSIEnable(SDC_SSI_BASE);
}
static
void power_off (void)
{
Stat |= STA_NOINIT; /* Force uninitialized */
}
/*-----------------------------------------------------------------------*/
/* Transmit/Receive data to/from MMC via SPI (Platform dependent) */
/*-----------------------------------------------------------------------*/
static
BYTE xchg_spi (BYTE dat)
{
DWORD rcvdat;
SSIDataPut(SDC_SSI_BASE, dat); /* write data */
SSIDataGet(SDC_SSI_BASE, (uint32_t*)&rcvdat); /* read data frm rx fifo */
return (BYTE)rcvdat;
}
static
void rcvr_spi_m (BYTE *dst)
{
*dst = xchg_spi(0xFF);
}
/*-----------------------------------------------------------------------*/
/* Wait for card ready */
/*-----------------------------------------------------------------------*/
static
int wait_ready (void)
{
BYTE d;
ULONG timeOutTime;
/* set timeout for 500 ms from now */
timeOutTime = TimerGet() + 500;
do {
d = xchg_spi(0xFF);
} while ((d != 0xFF) && (TimerGet() < timeOutTime));
return (d == 0xFF) ? 1 : 0;
}
/*-----------------------------------------------------------------------*/
/* Deselect the card and release SPI bus */
/*-----------------------------------------------------------------------*/
static
void deselect (void)
{
CS_HIGH();
xchg_spi(0xFF); /* Dummy clock (force DO hi-z for multiple slave SPI) */
}
/*-----------------------------------------------------------------------*/
/* Select the card and wait ready */
/*-----------------------------------------------------------------------*/
static
int select (void) /* 1:Successful, 0:Timeout */
{
CS_LOW();
xchg_spi(0xFF); /* Dummy clock (force DO enabled) */
if (wait_ready()) return 1; /* OK */
deselect();
return 0; /* Timeout */
}
/*-----------------------------------------------------------------------*/
/* Receive a data packet from MMC */
/*-----------------------------------------------------------------------*/
static
int rcvr_datablock ( /* 1:OK, 0:Failed */
BYTE *buff, /* Data buffer to store received data */
UINT btr /* Byte count (must be multiple of 4) */
)
{
BYTE token;
ULONG timeOutTime;
/* set timeout for 100 ms from now */
timeOutTime = TimerGet() + 100;
do { /* Wait for data packet in timeout of 100ms */
token = xchg_spi(0xFF);
} while ((token == 0xFF) && (TimerGet() < timeOutTime));
if(token != 0xFE) return 0; /* If not valid data token, retutn with error */
do { /* Receive the data block into buffer */
rcvr_spi_m(buff++);
rcvr_spi_m(buff++);
} while (btr -= 2);
xchg_spi(0xFF); /* Discard CRC */
xchg_spi(0xFF);
return 1; /* Return with success */
}
/*-----------------------------------------------------------------------*/
/* Send a data packet to MMC */
/*-----------------------------------------------------------------------*/
#if _USE_WRITE
static
int xmit_datablock ( /* 1:OK, 0:Failed */
const BYTE *buff, /* 512 byte data block to be transmitted */
BYTE token /* Data token */
)
{
BYTE resp;
UINT wc;
if (!wait_ready()) return 0;
xchg_spi(token); /* Xmit a token */
if (token != 0xFD) { /* Not StopTran token */
wc = 512;
do { /* Xmit the 512 byte data block to MMC */
xchg_spi(*buff++);
xchg_spi(*buff++);
} while (wc -= 2);
xchg_spi(0xFF); /* CRC (Dummy) */
xchg_spi(0xFF);
resp = xchg_spi(0xFF); /* Receive a data response */
if ((resp & 0x1F) != 0x05) /* If not accepted, return with error */
return 0;
}
return 1;
}
#endif
/*-----------------------------------------------------------------------*/
/* Send a command packet to MMC */
/*-----------------------------------------------------------------------*/
static
BYTE send_cmd (
BYTE cmd, /* Command byte */
DWORD arg /* Argument */
)
{
BYTE n, res;
if (cmd & 0x80) { /* ACMD<n> is the command sequense of CMD55-CMD<n> */
cmd &= 0x7F;
res = send_cmd(CMD55, 0);
if (res > 1) return res;
}
/* Select the card and wait for ready */
deselect();
if (!select()) return 0xFF;
/* Send command packet */
xchg_spi(0x40 | cmd); /* Start + Command index */
xchg_spi((BYTE)(arg >> 24)); /* Argument[31..24] */
xchg_spi((BYTE)(arg >> 16)); /* Argument[23..16] */
xchg_spi((BYTE)(arg >> 8)); /* Argument[15..8] */
xchg_spi((BYTE)arg); /* Argument[7..0] */
n = 0x01; /* Dummy CRC + Stop */
if (cmd == CMD0) n = 0x95; /* Valid CRC for CMD0(0) + Stop */
if (cmd == CMD8) n = 0x87; /* Valid CRC for CMD8(0x1AA) + Stop */
xchg_spi(n);
/* Receive command response */
if (cmd == CMD12) xchg_spi(0xFF); /* Skip a stuff byte on stop to read */
n = 10; /* Wait for a valid response in timeout of 10 attempts */
do
res = xchg_spi(0xFF);
while ((res & 0x80) && --n);
return res; /* Return with the response value */
}
/*--------------------------------------------------------------------------
Public Functions
---------------------------------------------------------------------------*/
/*-----------------------------------------------------------------------*/
/* Initialize Disk Drive */
/*-----------------------------------------------------------------------*/
DSTATUS disk_initialize (
BYTE pdrv /* Physical drive nmuber (0) */
)
{
BYTE n, cmd, ty, ocr[4];
ULONG timeOutTime;
if (pdrv) return STA_NOINIT; /* Supports only single drive */
if (Stat & STA_NODISK) return Stat; /* No card in the socket */
power_on(); /* Force socket power on */
CS_LOW(); /* CS = L */
ty = 0;
if (send_cmd(CMD0, 0) == 1) { /* Enter Idle state */
timeOutTime = TimerGet() + 1000; /* Initialization timeout of 1000 msec */
if (send_cmd(CMD8, 0x1AA) == 1) { /* SDv2? */
for (n = 0; n < 4; n++) ocr[n] = xchg_spi(0xFF); /* Get trailing return value of R7 resp */
if (ocr[2] == 0x01 && ocr[3] == 0xAA) { /* The card can work at vdd range of 2.7-3.6V */
while ((TimerGet() < timeOutTime) && send_cmd(ACMD41, 0x40000000)); /* Wait for leaving idle state (ACMD41 with HCS bit) */
if ((TimerGet() < timeOutTime) && send_cmd(CMD58, 0) == 0) { /* Check CCS bit in the OCR */
for (n = 0; n < 4; n++) ocr[n] = xchg_spi(0xFF);
ty = (ocr[0] & 0x40) ? CT_SD2|CT_BLOCK : CT_SD2; /* SDv2 */
}
}
} else { /* SDv1 or MMCv3 */
if (send_cmd(ACMD41, 0) <= 1) {
ty = CT_SD1; cmd = ACMD41; /* SDv1 */
} else {
ty = CT_MMC; cmd = CMD1; /* MMCv3 */
}
while ((TimerGet() < timeOutTime) && send_cmd(cmd, 0)); /* Wait for leaving idle state */
if (!(TimerGet() < timeOutTime) || send_cmd(CMD16, 512) != 0) /* Set read/write block length to 512 */
ty = 0;
}
}
CardType = ty;
deselect();
if (ty) { /* Initialization succeded */
Stat &= ~STA_NOINIT; /* Clear STA_NOINIT */
FCLK_FAST();
} else { /* Initialization failed */
power_off();
}
return Stat;
}
/*-----------------------------------------------------------------------*/
/* Get Disk Status */
/*-----------------------------------------------------------------------*/
DSTATUS disk_status (
BYTE pdrv /* Physical drive nmuber (0) */
)
{
if (pdrv) return STA_NOINIT; /* Supports only single drive */
return Stat;
}
/*-----------------------------------------------------------------------*/
/* Read Sector(s) */
/*-----------------------------------------------------------------------*/
DRESULT disk_read (
BYTE pdrv, /* Physical drive nmuber (0) */
BYTE *buff, /* Pointer to the data buffer to store read data */
DWORD sector, /* Start sector number (LBA) */
BYTE count /* Sector count (1..255) */
)
{
if (pdrv || !count) return RES_PARERR;
if (Stat & STA_NOINIT) return RES_NOTRDY;
if (!(CardType & CT_BLOCK)) sector *= 512; /* Convert to byte address if needed */
if (count == 1) { /* Single block read */
if ((send_cmd(CMD17, sector) == 0) /* READ_SINGLE_BLOCK */
&& rcvr_datablock(buff, 512))
count = 0;
}
else { /* Multiple block read */
if (send_cmd(CMD18, sector) == 0) { /* READ_MULTIPLE_BLOCK */
do {
if (!rcvr_datablock(buff, 512)) break;
buff += 512;
} while (--count);
send_cmd(CMD12, 0); /* STOP_TRANSMISSION */
}
}
deselect();
return count ? RES_ERROR : RES_OK;
}
/*-----------------------------------------------------------------------*/
/* Write Sector(s) */
/*-----------------------------------------------------------------------*/
#if _USE_WRITE
DRESULT disk_write (
BYTE pdrv, /* Physical drive nmuber (0) */
const BYTE *buff, /* Pointer to the data to be written */
DWORD sector, /* Start sector number (LBA) */
BYTE count /* Sector count (1..255) */
)
{
if (pdrv || !count) return RES_PARERR;
if (Stat & STA_NOINIT) return RES_NOTRDY;
if (Stat & STA_PROTECT) return RES_WRPRT;
if (!(CardType & CT_BLOCK)) sector *= 512; /* Convert to byte address if needed */
if (count == 1) { /* Single block write */
if ((send_cmd(CMD24, sector) == 0) /* WRITE_BLOCK */
&& xmit_datablock(buff, 0xFE))
count = 0;
}
else { /* Multiple block write */
if (CardType & CT_SDC) send_cmd(ACMD23, count);
if (send_cmd(CMD25, sector) == 0) { /* WRITE_MULTIPLE_BLOCK */
do {
if (!xmit_datablock(buff, 0xFC)) break;
buff += 512;
} while (--count);
if (!xmit_datablock(0, 0xFD)) /* STOP_TRAN token */
count = 1;
}
}
deselect();
return count ? RES_ERROR : RES_OK;
}
#endif
/*-----------------------------------------------------------------------*/
/* Miscellaneous Functions */
/*-----------------------------------------------------------------------*/
#if _USE_IOCTL
DRESULT disk_ioctl (
BYTE pdrv, /* Physical drive nmuber (0) */
BYTE cmd, /* Control code */
void *buff /* Buffer to send/receive data block */
)
{
DRESULT res;
BYTE n, csd[16], *ptr = buff;
DWORD csz;
if (pdrv) return RES_PARERR;
if (Stat & STA_NOINIT) return RES_NOTRDY;
res = RES_ERROR;
switch (cmd) {
case CTRL_SYNC : /* Flush write-back cache, Wait for end of internal process */
if (select()) res = RES_OK;
break;
case GET_SECTOR_COUNT : /* Get number of sectors on the disk (WORD) */
if ((send_cmd(CMD9, 0) == 0) && rcvr_datablock(csd, 16)) {
if ((csd[0] >> 6) == 1) { /* SDv2? */
csz = csd[9] + ((WORD)csd[8] << 8) + ((DWORD)(csd[7] & 63) << 16) + 1;
*(DWORD*)buff = csz << 10;
} else { /* SDv1 or MMCv3 */
n = (csd[5] & 15) + ((csd[10] & 128) >> 7) + ((csd[9] & 3) << 1) + 2;
csz = (csd[8] >> 6) + ((WORD)csd[7] << 2) + ((WORD)(csd[6] & 3) << 10) + 1;
*(DWORD*)buff = csz << (n - 9);
}
res = RES_OK;
}
break;
case GET_BLOCK_SIZE : /* Get erase block size in unit of sectors (DWORD) */
if (CardType & CT_SD2) { /* SDv2? */
if (send_cmd(ACMD13, 0) == 0) { /* Read SD status */
xchg_spi(0xFF);
if (rcvr_datablock(csd, 16)) { /* Read partial block */
for (n = 64 - 16; n; n--) xchg_spi(0xFF); /* Purge trailing data */
*(DWORD*)buff = 16UL << (csd[10] >> 4);
res = RES_OK;
}
}
} else { /* SDv1 or MMCv3 */
if ((send_cmd(CMD9, 0) == 0) && rcvr_datablock(csd, 16)) { /* Read CSD */
if (CardType & CT_SD1) { /* SDv1 */
*(DWORD*)buff = (((csd[10] & 63) << 1) + ((WORD)(csd[11] & 128) >> 7) + 1) << ((csd[13] >> 6) - 1);
} else { /* MMCv3 */
*(DWORD*)buff = ((WORD)((csd[10] & 124) >> 2) + 1) * (((csd[11] & 3) << 3) + ((csd[11] & 224) >> 5) + 1);
}
res = RES_OK;
}
}
break;
case MMC_GET_TYPE : /* Get card type flags (1 byte) */
*ptr = CardType;
res = RES_OK;
break;
case MMC_GET_CSD : /* Receive CSD as a data block (16 bytes) */
if ((send_cmd(CMD9, 0) == 0) /* READ_CSD */
&& rcvr_datablock(buff, 16))
res = RES_OK;
break;
case MMC_GET_CID : /* Receive CID as a data block (16 bytes) */
if ((send_cmd(CMD10, 0) == 0) /* READ_CID */
&& rcvr_datablock(buff, 16))
res = RES_OK;
break;
case MMC_GET_OCR : /* Receive OCR as an R3 resp (4 bytes) */
if (send_cmd(CMD58, 0) == 0) { /* READ_OCR */
for (n = 0; n < 4; n++)
*((BYTE*)buff+n) = xchg_spi(0xFF);
res = RES_OK;
}
break;
case MMC_GET_SDSTAT : /* Receive SD statsu as a data block (64 bytes) */
if ((CardType & CT_SD2) && send_cmd(ACMD13, 0) == 0) { /* SD_STATUS */
xchg_spi(0xFF);
if (rcvr_datablock(buff, 64))
res = RES_OK;
}
break;
default:
res = RES_PARERR;
}
deselect();
return res;
}
#endif
/*---------------------------------------------------------*/
/* User Provided Timer Function for FatFs module */
/*---------------------------------------------------------*/
/* This is a real time clock service to be called from */
/* FatFs module. Any valid time must be returned even if */
/* the system does not support a real time clock. */
/* This is not required in read-only configuration. */
DWORD get_fattime (void)
{
/* No RTC supprt. Return a fixed value 2013/5/10 0:00:00 */
return ((DWORD)(2013 - 1980) << 25) /* Y */
| ((DWORD)5 << 21) /* M */
| ((DWORD)10 << 16) /* D */
| ((DWORD)0 << 11) /* H */
| ((DWORD)0 << 5) /* M */
| ((DWORD)0 >> 1); /* S */
}

View File

@ -1,308 +1,308 @@
S01C000064656D6F70726F675F646B5F746D3463313233672E73726563A9
S11320005804002089320000A1320000A1320000EF
S1132010A1320000A1320000A1320000A132000070
S1132020A1320000A1320000A1320000A132000060
S1132030A1320000A1320000A1320000AB2A00004E
S1132040A1320000A1320000A1320000A132000040
S1132050A1320000A1320000A1320000A132000030
S1132060A1320000A1320000A1320000A132000020
S1132070A1320000A1320000A1320000A132000010
S1132080A1320000A1320000A1320000A132000000
S1132090A1320000A1320000A1320000A1320000F0
S11320A0A1320000A1320000A1320000A1320000E0
S11320B0A1320000A1320000A1320000A1320000D0
S11320C0A1320000A1320000A1320000A1320000C0
S11320D0A1320000A1320000A1320000A1320000B0
S11320E0A1320000A1320000A1320000A1320000A0
S11320F0A1320000A1320000A1320000A132000090
S1132100A1320000A1320000A1320000A13200007F
S1132110A1320000A1320000A1320000A13200006F
S1132120A1320000A1320000A1320000A13200005F
S1132130A1320000A1320000A1320000A13200004F
S1132140A1320000A1320000A1320000A13200003F
S1132150A1320000A1320000A1320000A13200002F
S1132160A1320000A1320000A1320000A13200001F
S1132170A1320000A1320000A1320000A13200000F
S1132180A1320000A1320000A1320000A1320000FF
S1132190A1320000A1320000A1320000A1320000EF
S11321A0A1320000A1320000A1320000A1320000DF
S11321B0A1320000A1320000A1320000A1320000CF
S11321C0A1320000A1320000A1320000A1320000BF
S11321D0A1320000A1320000A1320000A1320000AF
S11321E0A1320000A1320000A1320000A13200009F
S11321F0A1320000A1320000A1320000A13200008F
S1132200A1320000A1320000A1320000A13200007E
S1132210A1320000A1320000A1320000A13200006E
S1132220A1320000A1320000A1320000A13200005E
S1132230A1320000A1320000A1320000A13200004E
S1132240A1320000A1320000A1320000A13200003E
S1132250A1320000A1320000A1320000A13200002E
S1132260A1320000A1320000A1320000EE11AA55F3
S1132270DFF81015884200F02E81DFF80C15884233
S113228000F02981DFF80415884200F02481DFF88A
S11322900015884200F01F81DFF8F814884200F02E
S11322A01A81DFF8F414884200F01581DFF8EC1489
S11322B0884200F01081DFF8E814884200F00B81B6
S11322C0DFF8E014884200F00681DFF8DC1488426D
S11322D000F00181DFF8D414884200F0FC80DFF8BC
S11322E0D014884200F0F780DFF8C814884200F068
S11322F0F280DFF8C414884200F0ED80DFF8BC14EB
S1132300884200F0E880DFF8B814884200F0E380E7
S1132310DFF8B014884200F0DE80DFF8AC148842A5
S113232000F0D980DFF8A414884200F0D480DFF8EC
S1132330A014884200F0CF80DFF89814884200F09F
S1132340CA80DFF89414884200F0C580DFF88C144A
S1132350884200F0C080DFF88814884200F0BB8017
S1132360DFF88014884200F0B680DFF87C148842DD
S113237000F0B180DFF87414884200F0AC80DFF81C
S11323807014884200F0A780DFF86814884200F0D7
S1132390A280DFF86414884200F09D80DFF85C14AA
S11323A0884200F09880DFF85814884200F0938047
S11323B0DFF85014884200F08E80DFF84C14884215
S11323C000F08980DFF84414884200F08480DFF84C
S11323D04014884200F07F80DFF8381488427AD0B5
S11323E0DFF83414884276D0DFF83014884272D093
S11323F0DFF82C1488426ED0DFF8281488426AD0A3
S1132400DFF82414884266D0DFF82014884262D0B2
S1132410DFF81C1488425ED0DFF8181488425AD0C2
S1132420DFF81414884256D0DFF81014884252D0D2
S1132430DFF80C1488424ED0DFF8081488424AD0E2
S1132440DFF80414884246D0DFF80014884242D0F2
S1132450DFF8FC1388423ED0DFF8F81388423AD004
S1132460DFF8F413884236D0DFF8F013884232D014
S1132470DFF8EC1388422ED0DFF8E81388422AD024
S1132480DFF8E413884226D0DFF8E013884222D034
S1132490DFF8DC1388421ED010F1805F1BD0DFF818
S11324A0D413884217D0DFF8D013884213D0DFF852
S11324B0CC1388420FD0DFF8C81388420BD0DFF862
S11324C0C413884207D0DFF8C013884203D0DFF872
S11324D0BC13884201D1012000E00020C0B2704743
S11324E010B504002000FFF7C3FE002805D140F218
S11324F04321DFF89C0300F00EFAC4F30720DFF851
S113250094130818E1B2890051EA401050F0844055
S11325100121016010BDDFF88C03DFF88C1301602A
S1132520FEE700000138FDD17047704770B5040024
S1132530DFF864030568DFF87403066855F4006582
S113254035F4800556F40066DFF84C030560DFF8C7
S11325505C03066015F0010014F0010191F0010123
S1132560C0B208421ED074F001000540DFF8280311
S11325700560002E07D516F07000302809D016F03B
S11325807000702805D0002E08D415F030003028D3
S113259004D14FF48050FFF7C5FF03E05FF400203F
S11325A0FFF7C0FF35F4FE6514F4FE600543DFF861
S11325B000030640DFF8FC022040064314F0080044
S11325C056EAC006DFF8D0020560DFF8E0020660D4
S11325D01020FFF7A7FF35F4005514F4005005430D
S11325E036F4005614F400500643DFF8B0024021DC
S11325F00160002E06D5DFF8B4020660DFF8980209
S1132600056005E0DFF890020560DFF8A0020660CF
S1132610DFF8A4020540DFF8A4022040054336F0A9
S1132620FC5614F0FC500643600008D555F48005B0
S113263036F48006DFF888022040064301E036F0D5
S1132640804620050ED44FF4004000E0401E0028D0
S113265004D0DFF84C1209684906F7D535F4006553
S113266036F40066DFF830020560DFF840020660E9
S11326701020FFF757FF70BD38B5DFF84802006837
S1132680DFF844120840DFF84412884205D040F2D3
S11326909761DFF8FC0100F03EF9DFF8FC01016806
S11326A0DFF808020268002A02D512F0700001E087
S11326B011F03000002808D0102849D020284AD032
S11326C030284BD070284CD04EE0C1F38410DFF892
S11326D0003253F82000DFF8FC31134013F1004FAF
S11326E003D0002A1DD40B051BD4DFF8EC311B6882
S11326F0DFF8E8412468C4F304256D1C14F01F04BA
S1132700641C04FB05F46400B0FBF4F09C05A40D08
S1132710C3F3892303FB00F39B0A04FB003051F449
S113272080014B022DD5002A26D553001ED5DFF893
S1132730A431134013F1004F03D0002A16D4090525
S113274014D44000C2F38651491CB0FBF1F018E0E8
S1132750DFF88C01BFE7DFF88C01BCE747F23050AB
S1132760B9E74FF40040B6E700200AE0C2F3C551D0
S1132770491CB0FBF1F004E0C1F3C351491CB0FBA8
S1132780F1F032BD003800F0013800F0003400F000
S1132790013400F0023400F0003C00F0013C00F091
S11327A0023C00F0005800F0005400F0000800F073
S11327B0010800F0020800F0030800F0040800F02B
S11327C0050800F0060800F0070800F0080800F00B
S11327D0090800F00A0800F00B0800F00C0800F0EB
S11327E00D0800F00E0800F00F0800F0100800F0CB
S11327F0001400F0002000F0012000F0022000F09E
S1132800032000F0042000F0052000F0004800F050
S1132810005000F0004000F0014000F0004400F0DF
S1132820014400F0001C00F0011C00F0021C00F048
S1132830031C00F0000400F0010400F0020400F0A6
S1132840030400F0040400F0050400F0001800F094
S1132850011800F0021800F0031800F0041800F04A
S1132860051800F0061800F0071800F0000C00F03E
S1132870002800F0010000F0005C00F0015C00F0B2
S1132880025C00F0035C00F0045C00F0055C00F006
S1132890B430000000E60F4060E00F4058E00F4005
S11328A050E00F400CED00E00400FA0570E00F402A
S11328B08FFFFF7F30000080FEFF3FF80100C0075C
S11328C00000404000E00F400000FF7000000510D1
S11328D0483000000008008060E10F4064E10F40D0
S11328E00024F40000093D0080B500F007F800F072
S11328F021F800F08FF800F033F8FAE780B500F023
S1132900B3F80748FFF712FE00F076F800F0B6F8C7
S113291000F0D4F801BD034A106003480160FEE7EB
S11329204005C001480000204C00002080B5FFF79E
S1132930F2FD01BD80B52A48FFF7D2FD2948FFF713
S1132940CFFD03215FF0402000F03DFAFFF794FE35
S113295060234FF461420100234800F0A4FA01BD52
S113296080B52248007800280BD1214800F02BF8CC
S1132970012827D11D48012101701E480021017042
S113298020E01C4800781A494018401C00F01BF84D
S1132990012817D117480078401C164908701548BB
S11329A000781349097888420CD11048002101703D
S11329B00F484078FF2805D10D488078002801D1C0
S11329C0FFF7B4FF01BD10B50400074800F0E1FAB9
S11329D010F1010F02D02070012000E0002010BD92
S11329E0001800F0000800F000C00040550000206E
S11329F0000000205400002080B51748FFF770FD48
S1132A000421164800F0C3F900220421134800F001
S1132A10AAF901BD10B500F045F80400104800689B
S1132A20201AB0F5FA7F16D30E480078002808D192
S1132A300C480121017004220421084800F093F994
S1132A4007E008480021017000220421034800F037
S1132A508AF90348046010BD060800F000600240D3
S1132A6044000020560000200348006850F0404015
S1132A70014908607047000034EF00E080B5FFF7BB
S1132A80FBFD4FF47A71B0FBF1F000F0B9FA00F0FD
S1132A90A9FA00F0AEFA002000F001F801BD0649E1
S1132AA00860704704480068704703480068401C89
S1132AB001490860704700005000002080B500F014
S1132AC0B5FA01BDB0F1402F5BD0DFF83013884276
S1132AD057D0DFF82C13884253D0DFF828138842EC
S1132AE04FD0DFF8241388424BD0DFF820138842FC
S1132AF047D0DFF81C13884243D0DFF8181388420C
S1132B003FD0DFF8141388423BD0DFF8101388421B
S1132B1037D0DFF80C13884233D0DFF8081388422B
S1132B202FD0DFF8041388422BD0DFF8001388423B
S1132B3027D0DFF8FC12884223D0DFF8F81288424D
S1132B401FD0DFF8F41288421BD0DFF8F01288425D
S1132B5017D0DFF8EC12884213D0DFF8E81288426D
S1132B600FD0DFF8E41288420BD0DFF8E01288427D
S1132B7007D0DFF8DC12884203D0DFF8D81288428D
S1132B8001D1012000E00020C0B2704770B50400FC
S1132B900D0016002000FFF795FF002804D1FB214B
S1132BA0DFF8B402FFF7B7FE002E08D0012E06D0DE
S1132BB0022E04D0FE21DFF8A002FFF7ACFEF007DE
S1132BC005D514F580600068EDB2284304E014F5DF
S1132BD080600068EDB2A84314F580610860B00716
S1132BE005D514F584600068EDB2284304E014F5BB
S1132BF084600068EDB2A84314F58461086070BD78
S1132C00F8B504000D0017001E002000FFF75AFF5E
S1132C10002805D140F2E111DFF83C02FFF77BFE0A
S1132C20012F0BD0022F09D0042F07D00C2F05D071
S1132C3040F2E511DFF82002FFF76DFE082E0DD0FB
S1132C400A2E0BD00C2E09D0092E07D0002E05D049
S1132C504FF4F571DFF80002FFF75DFEF80705D5C4
S1132C6014F5A0600068EDB2284304E014F5A060F8
S1132C700068EDB2A84314F5A0610860B80704D554
S1132C80D4F80405EDB2284303E0D4F80405EDB20A
S1132C90A843C4F80405780705D514F5A1600068B5
S1132CA0EDB2284304E014F5A1600068EDB2A84336
S1132CB014F5A1610860380705D514F5A360006810
S1132CC0EDB2284304E014F5A3600068EDB2A84314
S1132CD014F5A3610860F00704D5D4F80C05EDB22F
S1132CE0284303E0D4F80C05EDB2A843C4F80C055E
S1132CF0B00705D514F5A2600068EDB2284304E0DE
S1132D0014F5A2600068EDB2A84314F5A26108604E
S1132D10700704D5D4F81405EDB2284303E0D4F8C1
S1132D201405EDB2A843C4F81405300704D5D4F84B
S1132D301C05EDB2284303E0D4F81C05EDB2A8430A
S1132D40C4F81C05002E05D114F5A5600068EDB289
S1132D50284304E014F5A5600068EDB2A84314F517
S1132D60A5610860F1BD70B504000D0016002000D7
S1132D70FFF7A8FE002805D140F28531DFF8D8001E
S1132D80FFF7C9FDEDB2F6B244F8256070BD38B561
S1132D9004000D002000FFF795FE002805D14FF434
S1132DA09E61DFF8B400FFF7B6FD08230122290075
S1132DB0C9B22000FFF724FF01222900C9B2200074
S1132DC0FFF7E4FE31BD38B504000D002000FFF725
S1132DD079FE002804D14FF4D7611F48FFF79BFD0B
S1132DE002222900C9B22000FFF7D0FE08230122E5
S1132DF02900C9B22000FFF703FF31BD0080054060
S1132E0000500040009005400060004000A00540D4
S1132E100070004000B005400040024000C0054082
S1132E200050024000D005400060024000E0054030
S1132E300070024000F0054000D00340000006404E
S1132E4000100640002006400030064000400640C6
S1132E50005006400060064074310000DFF85C1149
S1132E6088421BD0DFF85811884217D0DFF854117C
S1132E70884213D0DFF8501188420FD0DFF84C118C
S1132E8088420BD0DFF84811884207D0DFF844119C
S1132E90884203D0DFF84011884201D1012000E0CC
S1132EA00020C0B27047F8B504000F0016001D00E2
S1132EB02000FFF7D3FF002805D14FF4B271DFF8EB
S1132EC01C01FFF728FD002E05D140F26511DFF843
S1132ED00C01FFF720FDB7EBC60F05D24FF4B37119
S1132EE0DFF8F800FFF717FD200000F038F8B7EB23
S1132EF0061F05D2206B50F020002063760803E003
S1132F00206B30F020002063F800B0FBF6F0401C8A
S1132F104008810961624021B0FBF1F202FB110219
S1132F20A262E5620020A061200000F001F8F1BD7A
S1132F3010B504002000FFF791FF002805D140F2EE
S1132F40F511DFF89800FFF7E6FCE06A50F0100096
S1132F50E062206B40F201310843206310BD10B5DC
S1132F6004002000FFF77AFF002805D140F2152164
S1132F70DFF86800FFF7CFFCA0690007FCD4E06A23
S1132F8030F01000E062206BDFF85410084020633A
S1132F9010BD10B504002000FFF760FF002805D124
S1132FA04FF48D61DFF83400FFF7B5FCA069C0066B
S1132FB001D4206801E05FF0FF3010BD00C0004084
S1132FC000D0004000E0004000F00040000001405C
S1132FD0001001400020014000300140D0310000C9
S1132FE0FEFCFFFF0E48006850F005000C49086025
S1132FF070470B48006850F00200094908607047A8
S113300010B50400002C02D0B4F1807F03D9E22172
S11330100448FFF780FC601E0349086010BD0000EF
S113302010E000E01431000014E000E080B500F08E
S113303007F8002801D0012000E00020C0B202BD42
S1133040EFF3108062B6704740420F0000201C006E
S113305080841E0000802500999E360000403800C0
S113306000093D0000803E0000004B00404B4C0036
S113307000204E00808D5B0000C05D000080700069
S113308000127A0000007D0080969800001BB700B3
S11330900080BB00C0E8CE00647ADA000024F400AB
S11330A00000FA0080A81201002D310100366E01E3
S11330B040787D01433A5C576F726B5C736F667442
S11330C0776172655C4F70656E424C545C546172FA
S11330D06765745C44656D6F5C41524D434D345F6C
S11330E0544D34435F444B5F544D34433132334782
S11330F05F4941525C50726F675C6C69625C6472D8
S1133100697665726C69625C73797363746C2E633F
S113311000000000433A5C576F726B5C736F667417
S1133120776172655C4F70656E424C545C54617299
S11331306765745C44656D6F5C41524D434D345F0B
S1133140544D34435F444B5F544D34433132334721
S11331505F4941525C50726F675C6C69625C647277
S1133160697665726C69625C7379737469636B2EDA
S113317063000000433A5C576F726B5C736F667454
S1133180776172655C4F70656E424C545C54617239
S11331906765745C44656D6F5C41524D434D345FAB
S11331A0544D34435F444B5F544D344331323347C1
S11331B05F4941525C50726F675C6C69625C647217
S11331C0697665726C69625C6770696F2E63000072
S11331D0433A5C576F726B5C736F667477617265A8
S11331E05C4F70656E424C545C5461726765745CEC
S11331F044656D6F5C41524D434D345F544D3443CF
S11332005F444B5F544D3443313233475F4941523D
S11332105C50726F675C6C69625C6472697665723B
S11332206C69625C756172742E63000010B50749A5
S113323079441831064C7C44163404E00A68081DAD
S1133240511888470146A142F8D110BD2C00000056
S11332503800000050F8041B61B150F8042BD30768
S113326044BFA9F101039A18002342F8043B091F43
S1133270FAD1EFE770470000DDFFFFFF58000000C0
S1133280000000200000000080B50448006850F4ED
S113329070000249086000F005F801BD88ED00E007
S11332A0FEE70000034B9D46C046C04600F004F80C
S11332B000F010F8580400204EF68851CEF20001B8
S11332C0086840F4700008604FF00070E1EE100AE6
S11332D07047000000F009F8002801D0FFF7A6FFAE
S11332E00020FFF701FB00F002F80120704700F016
S11332F001B800000746384600F002F8FBE700007A
S113330080B5C046C046024A11001820ABBEFBE798
S1073310260002008D
S90332A525
S11360005804002089720000A1720000A1720000EF
S1136010A1720000A1720000A1720000A172000030
S1136020A1720000A1720000A1720000A172000020
S1136030A1720000A1720000A1720000AB6A00000E
S1136040A1720000A1720000A1720000A172000000
S1136050A1720000A1720000A1720000A1720000F0
S1136060A1720000A1720000A1720000A1720000E0
S1136070A1720000A1720000A1720000A1720000D0
S1136080A1720000A1720000A1720000A1720000C0
S1136090A1720000A1720000A1720000A1720000B0
S11360A0A1720000A1720000A1720000A1720000A0
S11360B0A1720000A1720000A1720000A172000090
S11360C0A1720000A1720000A1720000A172000080
S11360D0A1720000A1720000A1720000A172000070
S11360E0A1720000A1720000A1720000A172000060
S11360F0A1720000A1720000A1720000A172000050
S1136100A1720000A1720000A1720000A17200003F
S1136110A1720000A1720000A1720000A17200002F
S1136120A1720000A1720000A1720000A17200001F
S1136130A1720000A1720000A1720000A17200000F
S1136140A1720000A1720000A1720000A1720000FF
S1136150A1720000A1720000A1720000A1720000EF
S1136160A1720000A1720000A1720000A1720000DF
S1136170A1720000A1720000A1720000A1720000CF
S1136180A1720000A1720000A1720000A1720000BF
S1136190A1720000A1720000A1720000A1720000AF
S11361A0A1720000A1720000A1720000A17200009F
S11361B0A1720000A1720000A1720000A17200008F
S11361C0A1720000A1720000A1720000A17200007F
S11361D0A1720000A1720000A1720000A17200006F
S11361E0A1720000A1720000A1720000A17200005F
S11361F0A1720000A1720000A1720000A17200004F
S1136200A1720000A1720000A1720000A17200003E
S1136210A1720000A1720000A1720000A17200002E
S1136220A1720000A1720000A1720000A17200001E
S1136230A1720000A1720000A1720000A17200000E
S1136240A1720000A1720000A1720000A1720000FE
S1136250A1720000A1720000A1720000A1720000EE
S1136260A1720000A1720000A1720000EE11AA55F3
S1136270DFF81015884200F02E81DFF80C158842F3
S113628000F02981DFF80415884200F02481DFF84A
S11362900015884200F01F81DFF8F814884200F0EE
S11362A01A81DFF8F414884200F01581DFF8EC1449
S11362B0884200F01081DFF8E814884200F00B8176
S11362C0DFF8E014884200F00681DFF8DC1488422D
S11362D000F00181DFF8D414884200F0FC80DFF87C
S11362E0D014884200F0F780DFF8C814884200F028
S11362F0F280DFF8C414884200F0ED80DFF8BC14AB
S1136300884200F0E880DFF8B814884200F0E380A7
S1136310DFF8B014884200F0DE80DFF8AC14884265
S113632000F0D980DFF8A414884200F0D480DFF8AC
S1136330A014884200F0CF80DFF89814884200F05F
S1136340CA80DFF89414884200F0C580DFF88C140A
S1136350884200F0C080DFF88814884200F0BB80D7
S1136360DFF88014884200F0B680DFF87C1488429D
S113637000F0B180DFF87414884200F0AC80DFF8DC
S11363807014884200F0A780DFF86814884200F097
S1136390A280DFF86414884200F09D80DFF85C146A
S11363A0884200F09880DFF85814884200F0938007
S11363B0DFF85014884200F08E80DFF84C148842D5
S11363C000F08980DFF84414884200F08480DFF80C
S11363D04014884200F07F80DFF8381488427AD075
S11363E0DFF83414884276D0DFF83014884272D053
S11363F0DFF82C1488426ED0DFF8281488426AD063
S1136400DFF82414884266D0DFF82014884262D072
S1136410DFF81C1488425ED0DFF8181488425AD082
S1136420DFF81414884256D0DFF81014884252D092
S1136430DFF80C1488424ED0DFF8081488424AD0A2
S1136440DFF80414884246D0DFF80014884242D0B2
S1136450DFF8FC1388423ED0DFF8F81388423AD0C4
S1136460DFF8F413884236D0DFF8F013884232D0D4
S1136470DFF8EC1388422ED0DFF8E81388422AD0E4
S1136480DFF8E413884226D0DFF8E013884222D0F4
S1136490DFF8DC1388421ED010F1805F1BD0DFF8D8
S11364A0D413884217D0DFF8D013884213D0DFF812
S11364B0CC1388420FD0DFF8C81388420BD0DFF822
S11364C0C413884207D0DFF8C013884203D0DFF832
S11364D0BC13884201D1012000E00020C0B2704703
S11364E010B504002000FFF7C3FE002805D140F2D8
S11364F04321DFF89C0300F00EFAC4F30720DFF811
S113650094130818E1B2890051EA401050F0844015
S11365100121016010BDDFF88C03DFF88C130160EA
S1136520FEE700000138FDD17047704770B50400E4
S1136530DFF864030568DFF87403066855F4006542
S113654035F4800556F40066DFF84C030560DFF887
S11365505C03066015F0010014F0010191F00101E3
S1136560C0B208421ED074F001000540DFF82803D1
S11365700560002E07D516F07000302809D016F0FB
S11365807000702805D0002E08D415F03000302893
S113659004D14FF48050FFF7C5FF03E05FF40020FF
S11365A0FFF7C0FF35F4FE6514F4FE600543DFF821
S11365B000030640DFF8FC022040064314F0080004
S11365C056EAC006DFF8D0020560DFF8E002066094
S11365D01020FFF7A7FF35F4005514F400500543CD
S11365E036F4005614F400500643DFF8B00240219C
S11365F00160002E06D5DFF8B4020660DFF89802C9
S1136600056005E0DFF890020560DFF8A00206608F
S1136610DFF8A4020540DFF8A4022040054336F069
S1136620FC5614F0FC500643600008D555F4800570
S113663036F48006DFF888022040064301E036F095
S1136640804620050ED44FF4004000E0401E002890
S113665004D0DFF84C1209684906F7D535F4006513
S113666036F40066DFF830020560DFF840020660A9
S11366701020FFF757FF70BD38B5DFF848020068F7
S1136680DFF844120840DFF84412884205D040F293
S11366909761DFF8FC0100F03EF9DFF8FC010168C6
S11366A0DFF808020268002A02D512F0700001E047
S11366B011F03000002808D0102849D020284AD0F2
S11366C030284BD070284CD04EE0C1F38410DFF852
S11366D0003253F82000DFF8FC31134013F1004F6F
S11366E003D0002A1DD40B051BD4DFF8EC311B6842
S11366F0DFF8E8412468C4F304256D1C14F01F047A
S1136700641C04FB05F46400B0FBF4F09C05A40DC8
S1136710C3F3892303FB00F39B0A04FB003051F409
S113672080014B022DD5002A26D553001ED5DFF853
S1136730A431134013F1004F03D0002A16D40905E5
S113674014D44000C2F38651491CB0FBF1F018E0A8
S1136750DFF88C01BFE7DFF88C01BCE747F230506B
S1136760B9E74FF40040B6E700200AE0C2F3C55190
S1136770491CB0FBF1F004E0C1F3C351491CB0FB68
S1136780F1F032BD003800F0013800F0003400F0C0
S1136790013400F0023400F0003C00F0013C00F051
S11367A0023C00F0005800F0005400F0000800F033
S11367B0010800F0020800F0030800F0040800F0EB
S11367C0050800F0060800F0070800F0080800F0CB
S11367D0090800F00A0800F00B0800F00C0800F0AB
S11367E00D0800F00E0800F00F0800F0100800F08B
S11367F0001400F0002000F0012000F0022000F05E
S1136800032000F0042000F0052000F0004800F010
S1136810005000F0004000F0014000F0004400F09F
S1136820014400F0001C00F0011C00F0021C00F008
S1136830031C00F0000400F0010400F0020400F066
S1136840030400F0040400F0050400F0001800F054
S1136850011800F0021800F0031800F0041800F00A
S1136860051800F0061800F0071800F0000C00F0FE
S1136870002800F0010000F0005C00F0015C00F072
S1136880025C00F0035C00F0045C00F0055C00F0C6
S1136890B470000000E60F4060E00F4058E00F4085
S11368A050E00F400CED00E00400FA0570E00F40EA
S11368B08FFFFF7F30000080FEFF3FF80100C0071C
S11368C00000404000E00F400000FF700000051091
S11368D0487000000008008060E10F4064E10F4050
S11368E00024F40000093D0080B500F007F800F032
S11368F021F800F08FF800F033F8FAE780B500F0E3
S1136900B3F80748FFF712FE00F076F800F0B6F887
S113691000F0D4F801BD034A106003480160FEE7AB
S11369204005C001480000204C00002080B5FFF75E
S1136930F2FD01BD80B52A48FFF7D2FD2948FFF7D3
S1136940CFFD03215FF0402000F03DFAFFF794FEF5
S113695060234FF461420100234800F0A4FA01BD12
S113696080B52248007800280BD1214800F02BF88C
S1136970012827D11D48012101701E480021017002
S113698020E01C4800781A494018401C00F01BF80D
S1136990012817D117480078401C1649087015487B
S11369A000781349097888420CD1104800210170FD
S11369B00F484078FF2805D10D488078002801D180
S11369C0FFF7B4FF01BD10B50400074800F0E1FA79
S11369D010F1010F02D02070012000E0002010BD52
S11369E0001800F0000800F000C00040550000202E
S11369F0000000205400002080B51748FFF770FD08
S1136A000421164800F0C3F900220421134800F0C1
S1136A10AAF901BD10B500F045F80400104800685B
S1136A20201AB0F5FA7F16D30E480078002808D152
S1136A300C480121017004220421084800F093F954
S1136A4007E008480021017000220421034800F0F7
S1136A508AF90348046010BD060800F00060024093
S1136A6044000020560000200348006850F04040D5
S1136A70014908607047000034EF00E080B5FFF77B
S1136A80FBFD4FF47A71B0FBF1F000F0B9FA00F0BD
S1136A90A9FA00F0AEFA002000F001F801BD0649A1
S1136AA00860704704480068704703480068401C49
S1136AB001490860704700005000002080B500F0D4
S1136AC0B5FA01BDB0F1402F5BD0DFF83013884236
S1136AD057D0DFF82C13884253D0DFF828138842AC
S1136AE04FD0DFF8241388424BD0DFF820138842BC
S1136AF047D0DFF81C13884243D0DFF818138842CC
S1136B003FD0DFF8141388423BD0DFF810138842DB
S1136B1037D0DFF80C13884233D0DFF808138842EB
S1136B202FD0DFF8041388422BD0DFF800138842FB
S1136B3027D0DFF8FC12884223D0DFF8F81288420D
S1136B401FD0DFF8F41288421BD0DFF8F01288421D
S1136B5017D0DFF8EC12884213D0DFF8E81288422D
S1136B600FD0DFF8E41288420BD0DFF8E01288423D
S1136B7007D0DFF8DC12884203D0DFF8D81288424D
S1136B8001D1012000E00020C0B2704770B50400BC
S1136B900D0016002000FFF795FF002804D1FB210B
S1136BA0DFF8B402FFF7B7FE002E08D0012E06D09E
S1136BB0022E04D0FE21DFF8A002FFF7ACFEF0079E
S1136BC005D514F580600068EDB2284304E014F59F
S1136BD080600068EDB2A84314F580610860B007D6
S1136BE005D514F584600068EDB2284304E014F57B
S1136BF084600068EDB2A84314F58461086070BD38
S1136C00F8B504000D0017001E002000FFF75AFF1E
S1136C10002805D140F2E111DFF83C02FFF77BFECA
S1136C20012F0BD0022F09D0042F07D00C2F05D031
S1136C3040F2E511DFF82002FFF76DFE082E0DD0BB
S1136C400A2E0BD00C2E09D0092E07D0002E05D009
S1136C504FF4F571DFF80002FFF75DFEF80705D584
S1136C6014F5A0600068EDB2284304E014F5A060B8
S1136C700068EDB2A84314F5A0610860B80704D514
S1136C80D4F80405EDB2284303E0D4F80405EDB2CA
S1136C90A843C4F80405780705D514F5A160006875
S1136CA0EDB2284304E014F5A1600068EDB2A843F6
S1136CB014F5A1610860380705D514F5A3600068D0
S1136CC0EDB2284304E014F5A3600068EDB2A843D4
S1136CD014F5A3610860F00704D5D4F80C05EDB2EF
S1136CE0284303E0D4F80C05EDB2A843C4F80C051E
S1136CF0B00705D514F5A2600068EDB2284304E09E
S1136D0014F5A2600068EDB2A84314F5A26108600E
S1136D10700704D5D4F81405EDB2284303E0D4F881
S1136D201405EDB2A843C4F81405300704D5D4F80B
S1136D301C05EDB2284303E0D4F81C05EDB2A843CA
S1136D40C4F81C05002E05D114F5A5600068EDB249
S1136D50284304E014F5A5600068EDB2A84314F5D7
S1136D60A5610860F1BD70B504000D001600200097
S1136D70FFF7A8FE002805D140F28531DFF8D800DE
S1136D80FFF7C9FDEDB2F6B244F8256070BD38B521
S1136D9004000D002000FFF795FE002805D14FF4F4
S1136DA09E61DFF8B400FFF7B6FD08230122290035
S1136DB0C9B22000FFF724FF01222900C9B2200034
S1136DC0FFF7E4FE31BD38B504000D002000FFF7E5
S1136DD079FE002804D14FF4D7611F48FFF79BFDCB
S1136DE002222900C9B22000FFF7D0FE08230122A5
S1136DF02900C9B22000FFF703FF31BD0080054020
S1136E0000500040009005400060004000A0054094
S1136E100070004000B005400040024000C0054042
S1136E200050024000D005400060024000E00540F0
S1136E300070024000F0054000D00340000006400E
S1136E400010064000200640003006400040064086
S1136E50005006400060064074710000DFF85C11C9
S1136E6088421BD0DFF85811884217D0DFF854113C
S1136E70884213D0DFF8501188420FD0DFF84C114C
S1136E8088420BD0DFF84811884207D0DFF844115C
S1136E90884203D0DFF84011884201D1012000E08C
S1136EA00020C0B27047F8B504000F0016001D00A2
S1136EB02000FFF7D3FF002805D14FF4B271DFF8AB
S1136EC01C01FFF728FD002E05D140F26511DFF803
S1136ED00C01FFF720FDB7EBC60F05D24FF4B371D9
S1136EE0DFF8F800FFF717FD200000F038F8B7EBE3
S1136EF0061F05D2206B50F020002063760803E0C3
S1136F00206B30F020002063F800B0FBF6F0401C4A
S1136F104008810961624021B0FBF1F202FB1102D9
S1136F20A262E5620020A061200000F001F8F1BD3A
S1136F3010B504002000FFF791FF002805D140F2AE
S1136F40F511DFF89800FFF7E6FCE06A50F0100056
S1136F50E062206B40F201310843206310BD10B59C
S1136F6004002000FFF77AFF002805D140F2152124
S1136F70DFF86800FFF7CFFCA0690007FCD4E06AE3
S1136F8030F01000E062206BDFF8541008402063FA
S1136F9010BD10B504002000FFF760FF002805D1E4
S1136FA04FF48D61DFF83400FFF7B5FCA069C0062B
S1136FB001D4206801E05FF0FF3010BD00C0004044
S1136FC000D0004000E0004000F00040000001401C
S1136FD0001001400020014000300140D071000049
S1136FE0FEFCFFFF0E48006850F005000C490860E5
S1136FF070470B48006850F0020009490860704768
S113700010B50400002C02D0B4F1807F03D9E22132
S11370100448FFF780FC601E0349086010BD0000AF
S113702010E000E01471000014E000E080B500F00E
S113703007F8002801D0012000E00020C0B202BD02
S1137040EFF3108062B6704740420F0000201C002E
S113705080841E0000802500999E36000040380080
S113706000093D0000803E0000004B00404B4C00F6
S113707000204E00808D5B0000C05D000080700029
S113708000127A0000007D0080969800001BB70073
S11370900080BB00C0E8CE00647ADA000024F4006B
S11370A00000FA0080A81201002D310100366E01A3
S11370B040787D01433A5C576F726B5C736F667402
S11370C0776172655C4F70656E424C545C546172BA
S11370D06765745C44656D6F5C41524D434D345F2C
S11370E0544D34435F444B5F544D34433132334742
S11370F05F4941525C50726F675C6C69625C647298
S1137100697665726C69625C73797363746C2E63FF
S113711000000000433A5C576F726B5C736F6674D7
S1137120776172655C4F70656E424C545C54617259
S11371306765745C44656D6F5C41524D434D345FCB
S1137140544D34435F444B5F544D344331323347E1
S11371505F4941525C50726F675C6C69625C647237
S1137160697665726C69625C7379737469636B2E9A
S113717063000000433A5C576F726B5C736F667414
S1137180776172655C4F70656E424C545C546172F9
S11371906765745C44656D6F5C41524D434D345F6B
S11371A0544D34435F444B5F544D34433132334781
S11371B05F4941525C50726F675C6C69625C6472D7
S11371C0697665726C69625C6770696F2E63000032
S11371D0433A5C576F726B5C736F66747761726568
S11371E05C4F70656E424C545C5461726765745CAC
S11371F044656D6F5C41524D434D345F544D34438F
S11372005F444B5F544D3443313233475F494152FD
S11372105C50726F675C6C69625C647269766572FB
S11372206C69625C756172742E63000010B5074965
S113723079441831064C7C44163404E00A68081D6D
S1137240511888470146A142F8D110BD2C00000016
S11372503800000050F8041B61B150F8042BD30728
S113726044BFA9F101039A18002342F8043B091F03
S1137270FAD1EFE770470000DDFFFFFF5800000080
S1137280000000200000000080B50448006850F4AD
S113729070000249086000F005F801BD88ED00E0C7
S11372A0FEE70000034B9D46C046C04600F004F8CC
S11372B000F010F8580400204EF68851CEF2000178
S11372C0086840F4700008604FF00070E1EE100AA6
S11372D07047000000F009F8002801D0FFF7A6FF6E
S11372E00020FFF701FB00F002F80120704700F0D6
S11372F001B800000746384600F002F8FBE700003A
S113730080B5C046C046024A11001820ABBEFBE758
S1077310260002004D
S90372A5E5

View File

@ -17,7 +17,7 @@
<Build><ColumnWidth0>20</ColumnWidth0><ColumnWidth1>1395</ColumnWidth1><ColumnWidth2>372</ColumnWidth2><ColumnWidth3>93</ColumnWidth3></Build><Find-All-Declarations><ColumnWidth0>142</ColumnWidth0><ColumnWidth1>20</ColumnWidth1><ColumnWidth2>243</ColumnWidth2></Find-All-Declarations><TerminalIO/><Debug-Log><ColumnWidth0>18</ColumnWidth0><ColumnWidth1>371</ColumnWidth1></Debug-Log></Static>
<Windows>
<Wnd2>
<Wnd0>
<Tabs>
<Tab>
<Identity>TabID-23736-13759</Identity>
@ -29,7 +29,7 @@
</Tab>
</Tabs>
<SelectedTab>0</SelectedTab></Wnd2><Wnd3><Tabs><Tab><Identity>TabID-11003-23003</Identity><TabName>Build</TabName><Factory>Build</Factory><Session/></Tab><Tab><Identity>TabID-13665-29690</Identity><TabName>Find All Declarations</TabName><Factory>Find-All-Declarations</Factory><Session/></Tab><Tab><Identity>TabID-2562-1429</Identity><TabName>Debug Log</TabName><Factory>Debug-Log</Factory><Session/></Tab></Tabs><SelectedTab>0</SelectedTab></Wnd3></Windows>
<SelectedTab>0</SelectedTab></Wnd0><Wnd1><Tabs><Tab><Identity>TabID-11003-23003</Identity><TabName>Build</TabName><Factory>Build</Factory><Session/></Tab><Tab><Identity>TabID-13665-29690</Identity><TabName>Find All Declarations</TabName><Factory>Find-All-Declarations</Factory><Session/></Tab><Tab><Identity>TabID-2562-1429</Identity><TabName>Debug Log</TabName><Factory>Debug-Log</Factory><Session/></Tab></Tabs><SelectedTab>0</SelectedTab></Wnd1></Windows>
<Editor>
@ -42,7 +42,7 @@
<Top><Row0><Sizes><Toolbar-02a5fc58><key>iaridepm.enu1</key></Toolbar-02a5fc58></Sizes></Row0></Top><Left><Row0><Sizes><Wnd2><Rect><Top>-2</Top><Left>-2</Left><Bottom>579</Bottom><Right>418</Right><x>-2</x><y>-2</y><xscreen>200</xscreen><yscreen>200</yscreen><sizeHorzCX>104167</sizeHorzCX><sizeHorzCY>198413</sizeHorzCY><sizeVertCX>218750</sizeVertCX><sizeVertCY>576389</sizeVertCY></Rect></Wnd2><Wnd3><Rect><Top>0</Top><Left>0</Left><Bottom>6881384</Bottom><Right>7536751</Right><x>-2</x><y>577</y><xscreen>1924</xscreen><yscreen>200</yscreen><sizeHorzCX>1002083</sizeHorzCX><sizeHorzCY>198413</sizeHorzCY><sizeVertCX>218750</sizeVertCX><sizeVertCY>382937</sizeVertCY></Rect></Wnd3></Sizes></Row0></Left><Right><Row0><Sizes/></Row0></Right><Bottom><Row0><Sizes/></Row0></Bottom><Float><Sizes/></Float></Positions>
<Top><Row0><Sizes><Toolbar-02bbfc58><key>iaridepm.enu1</key></Toolbar-02bbfc58></Sizes></Row0></Top><Left><Row0><Sizes><Wnd0><Rect><Top>-2</Top><Left>-2</Left><Bottom>579</Bottom><Right>418</Right><x>-2</x><y>-2</y><xscreen>200</xscreen><yscreen>200</yscreen><sizeHorzCX>104167</sizeHorzCX><sizeHorzCY>198413</sizeHorzCY><sizeVertCX>218750</sizeVertCX><sizeVertCY>576389</sizeVertCY></Rect></Wnd0><Wnd1><Rect><Top>0</Top><Left>0</Left><Bottom>6881384</Bottom><Right>7536751</Right><x>-2</x><y>577</y><xscreen>1924</xscreen><yscreen>200</yscreen><sizeHorzCX>1002083</sizeHorzCX><sizeHorzCY>198413</sizeHorzCY><sizeVertCX>218750</sizeVertCX><sizeVertCY>382937</sizeVertCY></Rect></Wnd1></Sizes></Row0></Left><Right><Row0><Sizes/></Row0></Right><Bottom><Row0><Sizes/></Row0></Bottom><Float><Sizes/></Float></Positions>
</Desktop>
</Workspace>

File diff suppressed because it is too large Load Diff

View File

@ -1,7 +1,7 @@
/*-Specials-*/
define symbol __ICFEDIT_intvec_start__ = 0x00002000;
define symbol __ICFEDIT_intvec_start__ = 0x00006000;
/*-Memory Regions-*/
define symbol __ICFEDIT_region_ROM_start__ = 0x00002000;
define symbol __ICFEDIT_region_ROM_start__ = 0x00006000;
define symbol __ICFEDIT_region_ROM_end__ = 0x0003FFFF;
define symbol __ICFEDIT_region_RAM_start__ = 0x20000000;
define symbol __ICFEDIT_region_RAM_end__ = 0x20007FFF;

View File

@ -273,7 +273,7 @@ blt_bool FlashWriteChecksum(void)
{
blt_int32u signature_checksum = 0;
/* for the STM32 target we defined the checksum as the Two's complement value of the
/* for the EFM32 target we defined the checksum as the Two's complement value of the
* sum of the first 7 exception addresses.
*
* Layout of the vector table:

View File

@ -284,17 +284,17 @@ blt_bool FlashWriteChecksum(void)
{
blt_int32u signature_checksum = 0;
/* for the STM32 target we defined the checksum as the Two's complement value of the
/* for the LM3S target we defined the checksum as the Two's complement value of the
* sum of the first 7 exception addresses.
*
* Layout of the vector table:
* 0x08000000 Initial stack pointer
* 0x08000004 Reset Handler
* 0x08000008 NMI Handler
* 0x0800000C Hard Fault Handler
* 0x08000010 MPU Fault Handler
* 0x08000014 Bus Fault Handler
* 0x08000018 Usage Fault Handler
* 0x00000000 Initial stack pointer
* 0x00000004 Reset Handler
* 0x00000008 NMI Handler
* 0x0000000C Hard Fault Handler
* 0x00000010 MPU Fault Handler
* 0x00000014 Bus Fault Handler
* 0x00000018 Usage Fault Handler
*
* signature_checksum = Two's complement of (SUM(exception address values))
*

View File

@ -40,14 +40,25 @@
/****************************************************************************************
* Macro definitions
****************************************************************************************/
/** \brief Pointer to the user program's reset vector. Note that this needs to be
* changed in case the reserved memory for the bootloader is more than 0x2000.
*/
#define CPU_USER_PROGRAM_STARTADDR_PTR ((blt_addr) 0x00002004)
/** \brief Pointer to the user program's vector table. Note that this needs to be
* changed in case the reserved memory for the bootloader is more than 0x2000.
*/
#define CPU_USER_PROGRAM_VECTABLE_OFFSET ((blt_int32u)0x00002000)
#if (BOOT_FILE_SYS_ENABLE > 0)
/** \brief Pointer to the user program's reset vector. Note that this needs to be
* changed in case the reserved memory for the bootloader is more than 0x6000.
*/
#define CPU_USER_PROGRAM_STARTADDR_PTR ((blt_addr) 0x00006004)
/** \brief Pointer to the user program's vector table. Note that this needs to be
* changed in case the reserved memory for the bootloader is more than 0x6000.
*/
#define CPU_USER_PROGRAM_VECTABLE_OFFSET ((blt_int32u)0x00006000)
#else
/** \brief Pointer to the user program's reset vector. Note that this needs to be
* changed in case the reserved memory for the bootloader is more than 0x2000.
*/
#define CPU_USER_PROGRAM_STARTADDR_PTR ((blt_addr) 0x00002004)
/** \brief Pointer to the user program's vector table. Note that this needs to be
* changed in case the reserved memory for the bootloader is more than 0x2000.
*/
#define CPU_USER_PROGRAM_VECTABLE_OFFSET ((blt_int32u)0x00002000)
#endif
/****************************************************************************************