mirror of https://github.com/rusefi/openblt.git
Refs #584. Reintegrated branch for DHCP support development back into the trunk.
git-svn-id: https://svn.code.sf.net/p/openblt/code/trunk@572 5dc33758-31d5-4daf-9ae8-b24bf3d40d73
This commit is contained in:
parent
14e2f87abd
commit
d407f9b365
Binary file not shown.
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -50,7 +50,7 @@
|
||||||
/** \brief Motorola or Intel style byte ordering. */
|
/** \brief Motorola or Intel style byte ordering. */
|
||||||
#define BOOT_CPU_BYTE_ORDER_MOTOROLA (0)
|
#define BOOT_CPU_BYTE_ORDER_MOTOROLA (0)
|
||||||
/** \brief Enable/disable hook function call right before user program start. */
|
/** \brief Enable/disable hook function call right before user program start. */
|
||||||
#define BOOT_CPU_USER_PROGRAM_START_HOOK (0)
|
#define BOOT_CPU_USER_PROGRAM_START_HOOK (1)
|
||||||
|
|
||||||
|
|
||||||
/****************************************************************************************
|
/****************************************************************************************
|
||||||
|
@ -80,72 +80,56 @@
|
||||||
* the BOOT_COM_NET_ENABLE configurable to 1. The maximum amount of data bytes in a
|
* the BOOT_COM_NET_ENABLE configurable to 1. The maximum amount of data bytes in a
|
||||||
* message for data transmission and reception is set through BOOT_COM_NET_TX_MAX_DATA
|
* message for data transmission and reception is set through BOOT_COM_NET_TX_MAX_DATA
|
||||||
* and BOOT_COM_NET_RX_MAX_DATA, respectively. The default IP address is configured
|
* and BOOT_COM_NET_RX_MAX_DATA, respectively. The default IP address is configured
|
||||||
* with the macros BOOT_COM_NET_IPADDRx. The default netmask is configued with the macros
|
* with the macros BOOT_COM_NET_IPADDRx. The default netmask is configured with the
|
||||||
* BOOT_COM_NET_NETMASKx. The default gateway is configured with the macros
|
* macro BOOT_COM_NET_NETMASKx. The default gateway is configured with the macros
|
||||||
* BOOT_COM_NET_GATEWAYx. The bootloader acts and a TCP/IP server. The port the server
|
* BOOT_COM_NET_GATEWAYx. The bootloader acts and a TCP/IP server. The port the server
|
||||||
* listen on for connections is configured with BOOT_COM_NET_PORT.
|
* listen on for connections is configured with BOOT_COM_NET_PORT.
|
||||||
|
* In case the network switch/router supports a DHCP server, you can set configuration
|
||||||
|
* macro BOOT_COM_NET_DHCP_ENABLE to 1 to enable the DHCP client. In this case the
|
||||||
|
* DHCP client handles the automatic IP address assignment. In this case the macros for
|
||||||
|
* configuring the IP address, network mask and gateway address are no longer needed.
|
||||||
*/
|
*/
|
||||||
/** \brief Enable/disable the NET transport layer. */
|
/** \brief Enable/disable the NET transport layer. */
|
||||||
#define BOOT_COM_NET_ENABLE (1)
|
#define BOOT_COM_NET_ENABLE (1)
|
||||||
/** \brief Configure number of bytes in the target->host data packet. */
|
/** \brief Configure number of bytes in the target->host data packet. */
|
||||||
#define BOOT_COM_NET_TX_MAX_DATA (64)
|
#define BOOT_COM_NET_TX_MAX_DATA (64)
|
||||||
/** \brief Configure number of bytes in the host->target data packet. */
|
/** \brief Configure number of bytes in the host->target data packet. */
|
||||||
#define BOOT_COM_NET_RX_MAX_DATA (64)
|
#define BOOT_COM_NET_RX_MAX_DATA (64)
|
||||||
/** \brief Configure the port that the TCP/IP server listens on */
|
/** \brief Configure the port that the TCP/IP server listens on */
|
||||||
#define BOOT_COM_NET_PORT (1000)
|
#define BOOT_COM_NET_PORT (1000)
|
||||||
|
/** \brief Enable/disable DHCP client for automatically obtaining an IP address. */
|
||||||
|
#define BOOT_COM_NET_DHCP_ENABLE (1)
|
||||||
/** \brief Configure the 1st byte of the IP address */
|
/** \brief Configure the 1st byte of the IP address */
|
||||||
#define BOOT_COM_NET_IPADDR0 (169)
|
#define BOOT_COM_NET_IPADDR0 (192)
|
||||||
/** \brief Configure the 2nd byte of the IP address */
|
/** \brief Configure the 2nd byte of the IP address */
|
||||||
#define BOOT_COM_NET_IPADDR1 (254)
|
#define BOOT_COM_NET_IPADDR1 (168)
|
||||||
/** \brief Configure the 3rd byte of the IP address */
|
/** \brief Configure the 3rd byte of the IP address */
|
||||||
#define BOOT_COM_NET_IPADDR2 (19)
|
#define BOOT_COM_NET_IPADDR2 (178)
|
||||||
/** \brief Configure the 4th byte of the IP address */
|
/** \brief Configure the 4th byte of the IP address */
|
||||||
#define BOOT_COM_NET_IPADDR3 (63)
|
#define BOOT_COM_NET_IPADDR3 (50)
|
||||||
/** \brief Configure the 1st byte of the network mask */
|
/** \brief Configure the 1st byte of the network mask */
|
||||||
#define BOOT_COM_NET_NETMASK0 (255)
|
#define BOOT_COM_NET_NETMASK0 (255)
|
||||||
/** \brief Configure the 2nd byte of the network mask */
|
/** \brief Configure the 2nd byte of the network mask */
|
||||||
#define BOOT_COM_NET_NETMASK1 (255)
|
#define BOOT_COM_NET_NETMASK1 (255)
|
||||||
/** \brief Configure the 3rd byte of the network mask */
|
/** \brief Configure the 3rd byte of the network mask */
|
||||||
#define BOOT_COM_NET_NETMASK2 (0)
|
#define BOOT_COM_NET_NETMASK2 (255)
|
||||||
/** \brief Configure the 4th byte of the network mask */
|
/** \brief Configure the 4th byte of the network mask */
|
||||||
#define BOOT_COM_NET_NETMASK3 (0)
|
#define BOOT_COM_NET_NETMASK3 (0)
|
||||||
/** \brief Configure the 1st byte of the gateway address */
|
/** \brief Configure the 1st byte of the gateway address */
|
||||||
#define BOOT_COM_NET_GATEWAY0 (169)
|
#define BOOT_COM_NET_GATEWAY0 (192)
|
||||||
/** \brief Configure the 2nd byte of the gateway address */
|
/** \brief Configure the 2nd byte of the gateway address */
|
||||||
#define BOOT_COM_NET_GATEWAY1 (254)
|
#define BOOT_COM_NET_GATEWAY1 (168)
|
||||||
/** \brief Configure the 3rd byte of the gateway address */
|
/** \brief Configure the 3rd byte of the gateway address */
|
||||||
#define BOOT_COM_NET_GATEWAY2 (19)
|
#define BOOT_COM_NET_GATEWAY2 (178)
|
||||||
/** \brief Configure the 4th byte of the gateway address */
|
/** \brief Configure the 4th byte of the gateway address */
|
||||||
#define BOOT_COM_NET_GATEWAY3 (1)
|
#define BOOT_COM_NET_GATEWAY3 (1)
|
||||||
/** \brief Enable/disable a hook function that is called when the IP address is about
|
/** \brief Enable/disable the deferred initialization mechanism. When enabled, the
|
||||||
* to be set. This allows a dynamic override of the BOOT_COM_NET_IPADDRx values.
|
* communication interface is only initialized when: (a) no valid user program
|
||||||
|
* is detected, or (b) when CpuUserProgramStartHook() returns BLT_FALSE. Your
|
||||||
|
* bootloader application can explicitly initialize the communication interface
|
||||||
|
* by calling ComDeferredInit().
|
||||||
*/
|
*/
|
||||||
#define BOOT_COM_NET_IPADDR_HOOK_ENABLE (0)
|
#define BOOT_COM_NET_DEFERRED_INIT_ENABLE (1)
|
||||||
/** \brief Enable/disable a hook function that is called when the netmask is about
|
|
||||||
* to be set. This allows a dynamic override of the BOOT_COM_NET_NETMASKx values.
|
|
||||||
*/
|
|
||||||
#define BOOT_COM_NET_NETMASK_HOOK_ENABLE (0)
|
|
||||||
/** \brief Enable/disable a hook function that is called when the gateway address is
|
|
||||||
* about to be set. This allows a dynamic override of the BOOT_COM_NET_GATEWAYx
|
|
||||||
* values.
|
|
||||||
*/
|
|
||||||
#define BOOT_COM_NET_GATEWAY_HOOK_ENABLE (0)
|
|
||||||
|
|
||||||
|
|
||||||
/****************************************************************************************
|
|
||||||
* B A C K D O O R C O N F I G U R A T I O N
|
|
||||||
****************************************************************************************/
|
|
||||||
#if (BOOT_COM_NET_ENABLE > 0)
|
|
||||||
/* Override the default time that the backdoor is open if firmware updates via TCP/IP
|
|
||||||
* are supported. in this case a reactivation of the bootloader results in a re-
|
|
||||||
* initialization of the ethernet MAC. when directly connected to the ethernet port of
|
|
||||||
* a PC this will go relatively fast (depending on what MS Windows is being used), but
|
|
||||||
* when connected to the network via a router this can take several seconds. feel free to
|
|
||||||
* shorten/lengthen this time for finetuning. the only downside of a long backdoor open
|
|
||||||
* time is that the starting of the user program will also be delayed for this time.
|
|
||||||
*/
|
|
||||||
#define BOOT_BACKDOOR_ENTRY_TIMEOUT_MS (10000)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
/****************************************************************************************
|
/****************************************************************************************
|
||||||
|
|
|
@ -30,6 +30,8 @@
|
||||||
* Include files
|
* Include files
|
||||||
****************************************************************************************/
|
****************************************************************************************/
|
||||||
#include "boot.h" /* bootloader generic header */
|
#include "boot.h" /* bootloader generic header */
|
||||||
|
#include "inc/hw_types.h"
|
||||||
|
#include "driverlib/gpio.h"
|
||||||
#if (BOOT_FILE_LOGGING_ENABLE > 0)
|
#if (BOOT_FILE_LOGGING_ENABLE > 0)
|
||||||
#include "inc/hw_memmap.h"
|
#include "inc/hw_memmap.h"
|
||||||
#include "inc/hw_types.h"
|
#include "inc/hw_types.h"
|
||||||
|
@ -81,6 +83,11 @@ blt_bool BackDoorEntryHook(void)
|
||||||
****************************************************************************************/
|
****************************************************************************************/
|
||||||
blt_bool CpuUserProgramStartHook(void)
|
blt_bool CpuUserProgramStartHook(void)
|
||||||
{
|
{
|
||||||
|
/* do not start the user program is the pushbutton is pressed */
|
||||||
|
if (GPIOPinRead(GPIO_PORTF_BASE, GPIO_PIN_1) == 0)
|
||||||
|
{
|
||||||
|
return BLT_FALSE;
|
||||||
|
}
|
||||||
/* okay to start the user program */
|
/* okay to start the user program */
|
||||||
return BLT_TRUE;
|
return BLT_TRUE;
|
||||||
} /*** end of CpuUserProgramStartHook ***/
|
} /*** end of CpuUserProgramStartHook ***/
|
||||||
|
@ -193,79 +200,6 @@ blt_bool NvmWriteChecksumHook(void)
|
||||||
#endif /* BOOT_NVM_CHECKSUM_HOOKS_ENABLE > 0 */
|
#endif /* BOOT_NVM_CHECKSUM_HOOKS_ENABLE > 0 */
|
||||||
|
|
||||||
|
|
||||||
/****************************************************************************************
|
|
||||||
* N E T W O R K I N T E R F A C E H O O K F U N C T I O N S
|
|
||||||
****************************************************************************************/
|
|
||||||
#if (BOOT_COM_NET_IPADDR_HOOK_ENABLE > 0)
|
|
||||||
/************************************************************************************//**
|
|
||||||
** \brief Callback that gets called when the IP address is about to be configured.
|
|
||||||
** \param ipAddrArray 4-byte array where the IP address should be stored.
|
|
||||||
** \return none.
|
|
||||||
**
|
|
||||||
****************************************************************************************/
|
|
||||||
void NetIpAddressHook(blt_int8u *ipAddrArray)
|
|
||||||
{
|
|
||||||
/* This hook function allows a dynamic configuration of the IP address. This could for
|
|
||||||
* example be used if the bootloader is activated from a running user program and
|
|
||||||
* should have the same IP address as the user program. This IP address could be stored
|
|
||||||
* at a fixed location in RAM which can be read here. For now the example implemen-
|
|
||||||
* tation simply configures the bootloader's default IP address.
|
|
||||||
*/
|
|
||||||
ipAddrArray[0] = BOOT_COM_NET_IPADDR0;
|
|
||||||
ipAddrArray[1] = BOOT_COM_NET_IPADDR1;
|
|
||||||
ipAddrArray[2] = BOOT_COM_NET_IPADDR2;
|
|
||||||
ipAddrArray[3] = BOOT_COM_NET_IPADDR3;
|
|
||||||
} /*** end of NetIpAddressHook ***/
|
|
||||||
#endif /* BOOT_COM_NET_IPADDR_HOOK_ENABLE > 0 */
|
|
||||||
|
|
||||||
|
|
||||||
#if (BOOT_COM_NET_NETMASK_HOOK_ENABLE > 0)
|
|
||||||
/************************************************************************************//**
|
|
||||||
** \brief Callback that gets called when the network mask is about to be configured.
|
|
||||||
** \param netMaskArray 4-byte array where the network mask should be stored.
|
|
||||||
** \return none.
|
|
||||||
**
|
|
||||||
****************************************************************************************/
|
|
||||||
void NetNetworkMaskHook(blt_int8u *netMaskArray)
|
|
||||||
{
|
|
||||||
/* This hook function allows a dynamic configuration of the network mask. This could
|
|
||||||
* for example be used if the bootloader is activated from a running user program and
|
|
||||||
* should have the same network mask as the user program. This network mask could be
|
|
||||||
* stored at a fixed location in RAM which can be read here. For now the example
|
|
||||||
* implementation simply configures the bootloader's default network mask.
|
|
||||||
*/
|
|
||||||
netMaskArray[0] = BOOT_COM_NET_NETMASK0;
|
|
||||||
netMaskArray[1] = BOOT_COM_NET_NETMASK1;
|
|
||||||
netMaskArray[2] = BOOT_COM_NET_NETMASK2;
|
|
||||||
netMaskArray[3] = BOOT_COM_NET_NETMASK3;
|
|
||||||
} /*** end of NetNetworkMaskHook ***/
|
|
||||||
#endif /* BOOT_COM_NET_NETMASK_HOOK_ENABLE > 0 */
|
|
||||||
|
|
||||||
|
|
||||||
#if (BOOT_COM_NET_GATEWAY_HOOK_ENABLE > 0)
|
|
||||||
/************************************************************************************//**
|
|
||||||
** \brief Callback that gets called when the gateway address is about to be
|
|
||||||
** configured.
|
|
||||||
** \param gatewayAddrArray 4-byte array where the gateway address should be stored.
|
|
||||||
** \return none.
|
|
||||||
**
|
|
||||||
****************************************************************************************/
|
|
||||||
void NetGatewayAddressHook(blt_int8u *gatewayAddrArray)
|
|
||||||
{
|
|
||||||
/* This hook function allows a dynamic configuration of the network mask. This could
|
|
||||||
* for example be used if the bootloader is activated from a running user program and
|
|
||||||
* should have the same network mask as the user program. This network mask could be
|
|
||||||
* stored at a fixed location in RAM which can be read here. For now the example
|
|
||||||
* implementation simply configures the bootloader's default network mask.
|
|
||||||
*/
|
|
||||||
gatewayAddrArray[0] = BOOT_COM_NET_GATEWAY0;
|
|
||||||
gatewayAddrArray[1] = BOOT_COM_NET_GATEWAY1;
|
|
||||||
gatewayAddrArray[2] = BOOT_COM_NET_GATEWAY2;
|
|
||||||
gatewayAddrArray[3] = BOOT_COM_NET_GATEWAY3;
|
|
||||||
} /*** end of NetGatewayAddressHook ***/
|
|
||||||
#endif /* BOOT_COM_NET_GATEWAY_HOOK_ENABLE > 0 */
|
|
||||||
|
|
||||||
|
|
||||||
/****************************************************************************************
|
/****************************************************************************************
|
||||||
* W A T C H D O G D R I V E R H O O K F U N C T I O N S
|
* W A T C H D O G D R I V E R H O O K F U N C T I O N S
|
||||||
****************************************************************************************/
|
****************************************************************************************/
|
||||||
|
|
|
@ -22,7 +22,7 @@
|
||||||
build_output_directory="$(ProjectDir)/../bin"
|
build_output_directory="$(ProjectDir)/../bin"
|
||||||
build_remove_unused_symbols="Yes"
|
build_remove_unused_symbols="Yes"
|
||||||
c_preprocessor_definitions="gcc"
|
c_preprocessor_definitions="gcc"
|
||||||
c_user_include_directories="$(ProjectDir)/..;$(ProjectDir)/../lib;$(ProjectDir)/../lib/inc;$(ProjectDir)/../lib/fatfs;$(ProjectDir)/../lib/uip;$(ProjectDir)/../lib/driverlib;$(ProjectDir)/../../../../Source;$(ProjectDir)/../../../../Source/third_party/fatfs/src;$(ProjectDir)/../../../../Source/third_party/uip/uip;$(ProjectDir)/../../../../Source/ARMCM3_LM3S;$(ProjectDir)/../../../../Source/ARMCM3_LM3S/Crossworks"
|
c_user_include_directories="$(ProjectDir)/..;$(ProjectDir)/../lib;$(ProjectDir)/../lib/inc;$(ProjectDir)/../lib/fatfs;$(ProjectDir)/../lib/uip;$(ProjectDir)/../lib/driverlib;$(ProjectDir)/../../../../Source;$(ProjectDir)/../../../../Source/third_party/fatfs/src;$(ProjectDir)/../../../../Source/third_party/uip/uip;$(ProjectDir)/../../../../Source/third_party/uip/apps/dhcpc;$(ProjectDir)/../../../../Source/ARMCM3_LM3S;$(ProjectDir)/../../../../Source/ARMCM3_LM3S/Crossworks"
|
||||||
gcc_entry_point="reset_handler"
|
gcc_entry_point="reset_handler"
|
||||||
gcc_optimization_level="Optimize For Size"
|
gcc_optimization_level="Optimize For Size"
|
||||||
link_include_standard_libraries="Yes"
|
link_include_standard_libraries="Yes"
|
||||||
|
@ -100,6 +100,8 @@
|
||||||
<file file_name="../blt_conf.h" />
|
<file file_name="../blt_conf.h" />
|
||||||
<file file_name="../cstart.s" />
|
<file file_name="../cstart.s" />
|
||||||
<file file_name="../vectors.c" />
|
<file file_name="../vectors.c" />
|
||||||
|
<file file_name="../shared_params.c" />
|
||||||
|
<file file_name="../shared_params.h" />
|
||||||
</folder>
|
</folder>
|
||||||
</folder>
|
</folder>
|
||||||
<folder Name="Source">
|
<folder Name="Source">
|
||||||
|
@ -157,6 +159,8 @@
|
||||||
<file file_name="../../../../Source/third_party/uip/uip/uip-neighbor.h" />
|
<file file_name="../../../../Source/third_party/uip/uip/uip-neighbor.h" />
|
||||||
<file file_name="../../../../Source/third_party/uip/uip/uipopt.h" />
|
<file file_name="../../../../Source/third_party/uip/uip/uipopt.h" />
|
||||||
<file file_name="../../../../Source/third_party/uip/uip/uip-split.h" />
|
<file file_name="../../../../Source/third_party/uip/uip/uip-split.h" />
|
||||||
|
<file file_name="../../../../Source/third_party/uip/apps/dhcpc/dhcpc.c" />
|
||||||
|
<file file_name="../../../../Source/third_party/uip/apps/dhcpc/dhcpc.h" />
|
||||||
</folder>
|
</folder>
|
||||||
</folder>
|
</folder>
|
||||||
<file file_name="../../../../Source/net.c" />
|
<file file_name="../../../../Source/net.c" />
|
||||||
|
|
|
@ -1,7 +1,9 @@
|
||||||
<!DOCTYPE CrossStudio_Session_File>
|
<!DOCTYPE CrossStudio_Session_File>
|
||||||
<session>
|
<session>
|
||||||
<Bookmarks/>
|
<Bookmarks/>
|
||||||
<Breakpoints/>
|
<Breakpoints>
|
||||||
|
<Exceptions set="MemManage;UsageFault_Coprocessor;UsageFault_CheckingError;UsageFault_StateError;BusFault;ExceptionEntryReturnFault;HardFault" />
|
||||||
|
</Breakpoints>
|
||||||
<ExecutionProfileWindow/>
|
<ExecutionProfileWindow/>
|
||||||
<FrameBufferWindow>
|
<FrameBufferWindow>
|
||||||
<FrameBufferWindow addressText="" bufferWidth="-1" bufferHeight="-1" addressSpace="" />
|
<FrameBufferWindow addressText="" bufferWidth="-1" bufferHeight="-1" addressSpace="" />
|
||||||
|
@ -31,6 +33,8 @@
|
||||||
<ProjectSessionItem path="lm3s6965_crossworks;openblt_ek_lm3s6965;Source Files;Source" name="unnamed" />
|
<ProjectSessionItem path="lm3s6965_crossworks;openblt_ek_lm3s6965;Source Files;Source" name="unnamed" />
|
||||||
<ProjectSessionItem path="lm3s6965_crossworks;openblt_ek_lm3s6965;Source Files;Source;ARMCM3_LM3S" name="unnamed" />
|
<ProjectSessionItem path="lm3s6965_crossworks;openblt_ek_lm3s6965;Source Files;Source;ARMCM3_LM3S" name="unnamed" />
|
||||||
<ProjectSessionItem path="lm3s6965_crossworks;openblt_ek_lm3s6965;Source Files;Source;ARMCM3_LM3S;GCC" name="unnamed" />
|
<ProjectSessionItem path="lm3s6965_crossworks;openblt_ek_lm3s6965;Source Files;Source;ARMCM3_LM3S;GCC" name="unnamed" />
|
||||||
|
<ProjectSessionItem path="lm3s6965_crossworks;openblt_ek_lm3s6965;Source Files;Source;third_party" name="unnamed" />
|
||||||
|
<ProjectSessionItem path="lm3s6965_crossworks;openblt_ek_lm3s6965;Source Files;Source;third_party;uip" name="unnamed" />
|
||||||
<ProjectSessionItem path="lm3s6965_crossworks;openblt_ek_lm3s6965;System Files" name="unnamed" />
|
<ProjectSessionItem path="lm3s6965_crossworks;openblt_ek_lm3s6965;System Files" name="unnamed" />
|
||||||
</Project>
|
</Project>
|
||||||
<Register1>
|
<Register1>
|
||||||
|
@ -66,7 +70,7 @@
|
||||||
<Watches active="0" update="Never" />
|
<Watches active="0" update="Never" />
|
||||||
</Watch4>
|
</Watch4>
|
||||||
<Files>
|
<Files>
|
||||||
<SessionOpenFile useTextEdit="1" useBinaryEdit="0" codecName="Latin1" x="0" debugPath="../main.c" y="56" path="../main.c" left="0" selected="1" name="unnamed" top="32" />
|
<SessionOpenFile useTextEdit="1" useBinaryEdit="0" codecName="Latin1" x="26" debugPath="../main.c" y="33" path="../main.c" left="0" selected="1" name="unnamed" top="24" />
|
||||||
</Files>
|
</Files>
|
||||||
<ARMCrossStudioWindow activeProject="openblt_ek_lm3s6965" autoConnectTarget="Luminary USB Debug" debugSearchFileMap="" fileDialogInitialDirectory="C:/Work/software/OpenBLT/Target/Source/ARMCM3_LM3S/GCC" fileDialogDefaultFilter="" autoConnectCapabilities="388991" debugSearchPath="" buildConfiguration="THUMB Debug" />
|
<ARMCrossStudioWindow activeProject="openblt_ek_lm3s6965" autoConnectTarget="Luminary USB Debug" debugSearchFileMap="" fileDialogInitialDirectory="C:/Work/software/OpenBLT_DHCP_Support/Target/Source/third_party/uip/apps/dhcpc" fileDialogDefaultFilter="" autoConnectCapabilities="388991" debugSearchPath="" buildConfiguration="THUMB Debug" />
|
||||||
</session>
|
</session>
|
||||||
|
|
|
@ -59,6 +59,10 @@
|
||||||
#define NETDEV_DEFAULT_MACADDR5 (0x45)
|
#define NETDEV_DEFAULT_MACADDR5 (0x45)
|
||||||
|
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
static struct uip_eth_addr macAddress;
|
||||||
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
void netdev_init(void)
|
void netdev_init(void)
|
||||||
{
|
{
|
||||||
|
@ -142,6 +146,18 @@ void netdev_init_mac(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
void netdev_get_mac(unsigned char * mac_addr)
|
||||||
|
{
|
||||||
|
mac_addr[0] = macAddress.addr[0];
|
||||||
|
mac_addr[1] = macAddress.addr[1];
|
||||||
|
mac_addr[2] = macAddress.addr[2];
|
||||||
|
mac_addr[3] = macAddress.addr[3];
|
||||||
|
mac_addr[4] = macAddress.addr[4];
|
||||||
|
mac_addr[5] = macAddress.addr[5];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
unsigned int netdev_read(void)
|
unsigned int netdev_read(void)
|
||||||
{
|
{
|
||||||
|
|
|
@ -40,6 +40,7 @@
|
||||||
|
|
||||||
void netdev_init(void);
|
void netdev_init(void);
|
||||||
void netdev_init_mac(void);
|
void netdev_init_mac(void);
|
||||||
|
void netdev_get_mac(unsigned char * mac_addr);
|
||||||
unsigned int netdev_read(void);
|
unsigned int netdev_read(void);
|
||||||
void netdev_send(void);
|
void netdev_send(void);
|
||||||
|
|
||||||
|
|
|
@ -98,6 +98,27 @@ typedef unsigned short uip_stats_t;
|
||||||
*/
|
*/
|
||||||
#define UIP_CONF_MAX_LISTENPORTS 1
|
#define UIP_CONF_MAX_LISTENPORTS 1
|
||||||
|
|
||||||
|
/**
|
||||||
|
* UDP support on or off
|
||||||
|
*
|
||||||
|
* \hideinitializer
|
||||||
|
*/
|
||||||
|
#define UIP_CONF_UDP 1
|
||||||
|
|
||||||
|
/**
|
||||||
|
* UDP Maximum Connections
|
||||||
|
*
|
||||||
|
* \hideinitializer
|
||||||
|
*/
|
||||||
|
#define UIP_CONF_UDP_CONNS 1
|
||||||
|
|
||||||
|
/**
|
||||||
|
* UDP checksums on or off
|
||||||
|
*
|
||||||
|
* \hideinitializer
|
||||||
|
*/
|
||||||
|
#define UIP_CONF_UDP_CHECKSUMS 0
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* uIP buffer size.
|
* uIP buffer size.
|
||||||
*
|
*
|
||||||
|
@ -119,20 +140,6 @@ typedef unsigned short uip_stats_t;
|
||||||
*/
|
*/
|
||||||
#define UIP_CONF_LOGGING 0
|
#define UIP_CONF_LOGGING 0
|
||||||
|
|
||||||
/**
|
|
||||||
* UDP support on or off
|
|
||||||
*
|
|
||||||
* \hideinitializer
|
|
||||||
*/
|
|
||||||
#define UIP_CONF_UDP 0
|
|
||||||
|
|
||||||
/**
|
|
||||||
* UDP checksums on or off
|
|
||||||
*
|
|
||||||
* \hideinitializer
|
|
||||||
*/
|
|
||||||
#define UIP_CONF_UDP_CHECKSUMS 1
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* uIP statistics on or off
|
* uIP statistics on or off
|
||||||
*
|
*
|
||||||
|
@ -140,10 +147,12 @@ typedef unsigned short uip_stats_t;
|
||||||
*/
|
*/
|
||||||
#define UIP_CONF_STATISTICS 0
|
#define UIP_CONF_STATISTICS 0
|
||||||
|
|
||||||
|
|
||||||
/* Here we include the header file for the application(s) we use in
|
/* Here we include the header file for the application(s) we use in
|
||||||
our project. */
|
our project. */
|
||||||
#include "boot.h"
|
#include "boot.h"
|
||||||
#include "net.h"
|
#include "net.h"
|
||||||
|
#include "dhcpc.h"
|
||||||
|
|
||||||
#endif /* __UIP_CONF_H__ */
|
#endif /* __UIP_CONF_H__ */
|
||||||
|
|
||||||
|
|
|
@ -40,6 +40,7 @@
|
||||||
#if (BOOT_FILE_LOGGING_ENABLE > 0)
|
#if (BOOT_FILE_LOGGING_ENABLE > 0)
|
||||||
#include "driverlib/uartlib.h"
|
#include "driverlib/uartlib.h"
|
||||||
#endif
|
#endif
|
||||||
|
#include "shared_params.h" /* Shared parameters header */
|
||||||
|
|
||||||
/****************************************************************************************
|
/****************************************************************************************
|
||||||
* Function prototypes
|
* Function prototypes
|
||||||
|
@ -55,11 +56,44 @@ static void Init(void);
|
||||||
****************************************************************************************/
|
****************************************************************************************/
|
||||||
int main(void)
|
int main(void)
|
||||||
{
|
{
|
||||||
|
blt_int8u deferredInitRequestFlag = 0;
|
||||||
|
|
||||||
/* initialize the microcontroller */
|
/* initialize the microcontroller */
|
||||||
Init();
|
Init();
|
||||||
|
/* initialize the shared parameters module */
|
||||||
|
SharedParamsInit();
|
||||||
/* initialize the bootloader */
|
/* initialize the bootloader */
|
||||||
BootInit();
|
BootInit();
|
||||||
|
#if (BOOT_COM_DEFERRED_INIT_ENABLE == 1)
|
||||||
|
/* the bootloader is configured to NOT initialize the TCP/IP network stack by default
|
||||||
|
* to bypass unnecessary delay times before starting the user program. the TCP/IP net-
|
||||||
|
* work tack is now only initialized when: (a) no valid user program is detected, or
|
||||||
|
* (b) a forced backdoor entry occurred (CpuUserProgramStartHook() returned BLT_FALSE).
|
||||||
|
*
|
||||||
|
* these demo bootloader and user programs have one extra feature implemented for
|
||||||
|
* demonstration purposes. the demo user program can detect firmware update requests
|
||||||
|
* from the TCP/IP network in which case it activates the bootloader. But...the
|
||||||
|
* TCP/IP network stack will not be initialized in this situation. for this reason
|
||||||
|
* the shared parameter module was integrated in both the bootloader and user program.
|
||||||
|
* more information about the shared parameter module can be found here:
|
||||||
|
* https://www.feaser.com/en/blog/?p=216
|
||||||
|
*
|
||||||
|
* the shared parameter at the first index (0) contains a flag. this flag is set to
|
||||||
|
* 1, right before the user program activates this bootloader, to explicitly request
|
||||||
|
* the bootloader to initialize the TCP/IP network stack. this makes it possible for
|
||||||
|
* a firmware update to proceed. the code here reads out this flag and performs the
|
||||||
|
* TCP/IP network stack initialization when requested.
|
||||||
|
*/
|
||||||
|
SharedParamsReadByIndex(0, &deferredInitRequestFlag);
|
||||||
|
if (deferredInitRequestFlag == 1)
|
||||||
|
{
|
||||||
|
/* explicitly initialize all communication interface for which the deferred
|
||||||
|
* initialization feature was enabled.
|
||||||
|
*/
|
||||||
|
ComDeferredInit();
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/* start the infinite program loop */
|
/* start the infinite program loop */
|
||||||
while (1)
|
while (1)
|
||||||
{
|
{
|
||||||
|
@ -81,6 +115,14 @@ static void Init(void)
|
||||||
{
|
{
|
||||||
/* set the clocking to run at 50MHz from the PLL */
|
/* set the clocking to run at 50MHz from the PLL */
|
||||||
SysCtlClockSet(SYSCTL_SYSDIV_4 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN | SYSCTL_XTAL_8MHZ);
|
SysCtlClockSet(SYSCTL_SYSDIV_4 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN | SYSCTL_XTAL_8MHZ);
|
||||||
|
|
||||||
|
/* initialize the status button as a digital input. it is used to override the
|
||||||
|
* starting of the user program.
|
||||||
|
*/
|
||||||
|
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
|
||||||
|
GPIODirModeSet(GPIO_PORTF_BASE, GPIO_PIN_1, GPIO_DIR_MODE_IN);
|
||||||
|
GPIOPadConfigSet(GPIO_PORTF_BASE, GPIO_PIN_1, GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD_WPU);
|
||||||
|
|
||||||
#if (BOOT_COM_UART_ENABLE > 0)
|
#if (BOOT_COM_UART_ENABLE > 0)
|
||||||
#if (BOOT_COM_UART_CHANNEL_INDEX == 0)
|
#if (BOOT_COM_UART_CHANNEL_INDEX == 0)
|
||||||
/* enable and configure UART0 related peripherals and pins */
|
/* enable and configure UART0 related peripherals and pins */
|
||||||
|
|
|
@ -1,14 +1,15 @@
|
||||||
MEMORY
|
MEMORY
|
||||||
{
|
{
|
||||||
UNPLACED_SECTIONS (wx) : ORIGIN = 0x100000000, LENGTH = 0
|
UNPLACED_SECTIONS (wx) : ORIGIN = 0x100000000, LENGTH = 0
|
||||||
SRAM (wx) : ORIGIN = 0x20000000, LENGTH = 0x00010000
|
SHARED (wx) : ORIGIN = 0x20000000, LENGTH = 64
|
||||||
FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x00008000
|
SRAM (wx) : ORIGIN = 0x20000040, LENGTH = 0x00010000 - 64
|
||||||
|
FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x00008000
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
SECTIONS
|
SECTIONS
|
||||||
{
|
{
|
||||||
__SRAM_segment_start__ = 0x20000000;
|
__SRAM_segment_start__ = 0x20000040;
|
||||||
__SRAM_segment_end__ = 0x20010000;
|
__SRAM_segment_end__ = 0x20010000;
|
||||||
__FLASH_segment_start__ = 0x00000000;
|
__FLASH_segment_start__ = 0x00000000;
|
||||||
__FLASH_segment_end__ = 0x00008000;
|
__FLASH_segment_end__ = 0x00008000;
|
||||||
|
@ -22,6 +23,17 @@ SECTIONS
|
||||||
__STACKSIZE_UND__ = 0;
|
__STACKSIZE_UND__ = 0;
|
||||||
__HEAPSIZE__ = 128;
|
__HEAPSIZE__ = 128;
|
||||||
|
|
||||||
|
.shared (NOLOAD):
|
||||||
|
{
|
||||||
|
. = ALIGN(4);
|
||||||
|
__shared_start__ = .;
|
||||||
|
*(.shared)
|
||||||
|
*(.shared.*)
|
||||||
|
KEEP(*(.shared))
|
||||||
|
. = ALIGN(4);
|
||||||
|
__shared_end__ = .;
|
||||||
|
} > SHARED
|
||||||
|
|
||||||
__vectors_ram_load_start__ = ALIGN(__SRAM_segment_start__ , 256);
|
__vectors_ram_load_start__ = ALIGN(__SRAM_segment_start__ , 256);
|
||||||
.vectors_ram ALIGN(__SRAM_segment_start__ , 256) (NOLOAD) : AT(ALIGN(__SRAM_segment_start__ , 256))
|
.vectors_ram ALIGN(__SRAM_segment_start__ , 256) (NOLOAD) : AT(ALIGN(__SRAM_segment_start__ , 256))
|
||||||
{
|
{
|
||||||
|
|
|
@ -0,0 +1,301 @@
|
||||||
|
/************************************************************************************//**
|
||||||
|
* \file Demo/ARMCM3_LM3S_EK_LM3S6965_Crossworks/Boot/shared_params.c
|
||||||
|
* \brief Shared RAM parameters source file.
|
||||||
|
* \ingroup Boot_ARMCM3_LM3S_EK_LM3S6965_Crossworks
|
||||||
|
* \internal
|
||||||
|
*----------------------------------------------------------------------------------------
|
||||||
|
* C O P Y R I G H T
|
||||||
|
*----------------------------------------------------------------------------------------
|
||||||
|
* Copyright (c) 2018 by Feaser http://www.feaser.com All rights reserved
|
||||||
|
*
|
||||||
|
*----------------------------------------------------------------------------------------
|
||||||
|
* L I C E N S E
|
||||||
|
*----------------------------------------------------------------------------------------
|
||||||
|
* This file is part of OpenBLT. OpenBLT is free software: you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU General Public License as published by the Free
|
||||||
|
* Software Foundation, either version 3 of the License, or (at your option) any later
|
||||||
|
* version.
|
||||||
|
*
|
||||||
|
* OpenBLT is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
|
||||||
|
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
||||||
|
* PURPOSE. See the GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You have received a copy of the GNU General Public License along with OpenBLT. It
|
||||||
|
* should be located in ".\Doc\license.html". If not, contact Feaser to obtain a copy.
|
||||||
|
*
|
||||||
|
* \endinternal
|
||||||
|
****************************************************************************************/
|
||||||
|
|
||||||
|
/****************************************************************************************
|
||||||
|
* Include files
|
||||||
|
****************************************************************************************/
|
||||||
|
#include <stddef.h> /* Standard definitions (NULL). */
|
||||||
|
#include "shared_params.h" /* Shared parameters header. */
|
||||||
|
|
||||||
|
|
||||||
|
/****************************************************************************************
|
||||||
|
* Macro definitions
|
||||||
|
****************************************************************************************/
|
||||||
|
/** \brief Constant parameter buffer identifier. This value is always located as the
|
||||||
|
* start of the buffer to validate the the RAM contains valid shared parameters.
|
||||||
|
*/
|
||||||
|
#define SHARED_PARAMS_BUFFER_ID (0xCE42E7A2u)
|
||||||
|
|
||||||
|
|
||||||
|
/****************************************************************************************
|
||||||
|
* Type definitions
|
||||||
|
****************************************************************************************/
|
||||||
|
/** \brief Layout of the shared parameters RAM buffer. */
|
||||||
|
typedef struct t_shared_params_buffer
|
||||||
|
{
|
||||||
|
/** \brief Fixed buffer identifier to validate that the RAM contains valid shared
|
||||||
|
* parameters.
|
||||||
|
*/
|
||||||
|
uint32_t identifier;
|
||||||
|
/** \brief Array for the actual parameter data. */
|
||||||
|
uint8_t data[SHARED_PARAMS_CFG_BUFFER_DATA_LEN];
|
||||||
|
/** \brief Checksum value of all the bytes in the buffer, excluding this checksum
|
||||||
|
* value of obvious reasons. The checksum is calculated as the Two's
|
||||||
|
* complement of the sum of the bytes.
|
||||||
|
*/
|
||||||
|
uint16_t checksum;
|
||||||
|
} tSharedParamsBuffer;
|
||||||
|
|
||||||
|
|
||||||
|
/****************************************************************************************
|
||||||
|
* Global data declarations
|
||||||
|
****************************************************************************************/
|
||||||
|
/** \brief Declaration of the actual parameter buffer that this module manages.
|
||||||
|
* \warning For the shared RAM parameters to work properly for sharing information
|
||||||
|
* between the bootloader and user program, it is important that this
|
||||||
|
* variable is linked to the exact same RAM address in both the bootloader
|
||||||
|
* and the user program. Additionally, it should be configured such that the
|
||||||
|
* C-startup code does NOT zero its contents during system initialization. This
|
||||||
|
* is the code that runs in the reset event handler, before function main() is
|
||||||
|
* called.
|
||||||
|
* For GCC based embedded toolchains, the solution is to assign this variable
|
||||||
|
* to a custom section, in this case called ".shared". Then in the linker
|
||||||
|
* script, add the following to the SECTIONS:
|
||||||
|
*
|
||||||
|
* .shared (NOLOAD) :
|
||||||
|
* {
|
||||||
|
* . = ALIGN(4);
|
||||||
|
* _sshared = .;
|
||||||
|
* __shared_start__ = _sshared;
|
||||||
|
* *(.shared)
|
||||||
|
* *(.shared.*)
|
||||||
|
* KEEP(*(.shared))
|
||||||
|
* . = ALIGN(4);
|
||||||
|
* _eshared = .;
|
||||||
|
* __shared_end__ = _eshared;
|
||||||
|
* } >SHARED
|
||||||
|
*
|
||||||
|
* Next, add a new MEMORY entry for SHARED at the start of RAM and reduce
|
||||||
|
* the length of the remaining RAM:
|
||||||
|
*
|
||||||
|
* SHARED (xrw) : ORIGIN = 0x200000C0, LENGTH = 64
|
||||||
|
* RAM (xrw) : ORIGIN = 0x20000100, LENGTH = 32K - 192 - 64
|
||||||
|
*
|
||||||
|
* Note that the previous example is for an STM32F0 microcontroller where
|
||||||
|
* the first 192 (0xC0) bytes in RAM are reserved for the user program
|
||||||
|
* vector table.
|
||||||
|
*
|
||||||
|
* \remark This same approach can be applied with other toolchains such as Keil MDK
|
||||||
|
* and IAR EWARM. Consult the compiler and linker user manuals of your
|
||||||
|
* toolchain to find out how to place a RAM variable at a fixed memory address
|
||||||
|
* and to prevent the C-startup code from zeroing its contents.
|
||||||
|
* Here are a few links to get you started:
|
||||||
|
* * IAR EWARM:
|
||||||
|
* https://www.iar.com/support/tech-notes/compiler/
|
||||||
|
* linker-error-for-absolute-located-variable/
|
||||||
|
* * Keil MDK:
|
||||||
|
* http://www.keil.com/support/docs/3480.htm
|
||||||
|
*/
|
||||||
|
static tSharedParamsBuffer sharedParamsBuffer __attribute__ ((section (".shared")));
|
||||||
|
|
||||||
|
|
||||||
|
/****************************************************************************************
|
||||||
|
* Function prototypes
|
||||||
|
****************************************************************************************/
|
||||||
|
static bool SharedParamsValidateBuffer(void);
|
||||||
|
static void SharedParamsWriteChecksum(void);
|
||||||
|
static bool SharedParamsVerifyChecksum(void);
|
||||||
|
static uint16_t SharedParamsCalculateChecksum(void);
|
||||||
|
|
||||||
|
|
||||||
|
/************************************************************************************//**
|
||||||
|
** \brief Initializes the shared RAM parameters module.
|
||||||
|
** \return none.
|
||||||
|
**
|
||||||
|
****************************************************************************************/
|
||||||
|
void SharedParamsInit(void)
|
||||||
|
{
|
||||||
|
uint32_t byteIdx;
|
||||||
|
|
||||||
|
/* The shared parameter buffer does not get initialized by the C-startup code. Another
|
||||||
|
* previously running program could have initialized it, in which case it is ready
|
||||||
|
* for use and nothing more needs to be done.
|
||||||
|
*/
|
||||||
|
if (!SharedParamsValidateBuffer())
|
||||||
|
{
|
||||||
|
/* The shared parameter buffer was not yet initialized by a running program. This
|
||||||
|
* typically happens after a cold reset where the RAM contents were lost. In this
|
||||||
|
* case we need to explicitly configure and initialize it, since the C-startup code
|
||||||
|
* was configured to not do this.
|
||||||
|
*
|
||||||
|
* The initialization consists of setting the buffer identifier, zeroing the
|
||||||
|
* actual parameter data and updating the checksum at the end.
|
||||||
|
*/
|
||||||
|
sharedParamsBuffer.identifier = SHARED_PARAMS_BUFFER_ID;
|
||||||
|
for (byteIdx=0; byteIdx < SHARED_PARAMS_CFG_BUFFER_DATA_LEN; byteIdx++)
|
||||||
|
{
|
||||||
|
sharedParamsBuffer.data[byteIdx] = 0;
|
||||||
|
}
|
||||||
|
SharedParamsWriteChecksum();
|
||||||
|
}
|
||||||
|
} /*** end of SharedParamsInit ***/
|
||||||
|
|
||||||
|
|
||||||
|
/************************************************************************************//**
|
||||||
|
** \brief Reads a data byte from the shared parameter buffer at the specified index.
|
||||||
|
** \param idx Index into the parameter data array. A valid value is between 0 and
|
||||||
|
** (SHARED_PARAMS_CFG_BUFFER_DATA_LEN - 1).
|
||||||
|
** \param value Pointer to where the read data value is stored.
|
||||||
|
** \return True if successful, false otherwise.
|
||||||
|
**
|
||||||
|
****************************************************************************************/
|
||||||
|
bool SharedParamsReadByIndex(uint32_t idx, uint8_t * value)
|
||||||
|
{
|
||||||
|
bool result = false;
|
||||||
|
|
||||||
|
/* Only continue if the buffer and the specified parameters are valid. */
|
||||||
|
if ( (SharedParamsValidateBuffer()) &&
|
||||||
|
(idx < SHARED_PARAMS_CFG_BUFFER_DATA_LEN) &&
|
||||||
|
(value != NULL) )
|
||||||
|
{
|
||||||
|
/* Read the value and update the result. */
|
||||||
|
*value = sharedParamsBuffer.data[idx];
|
||||||
|
result = true;
|
||||||
|
}
|
||||||
|
/* Give the result back to the caller. */
|
||||||
|
return result;
|
||||||
|
} /*** end of SharedParamsReadByIndex ***/
|
||||||
|
|
||||||
|
|
||||||
|
/************************************************************************************//**
|
||||||
|
** \brief Writes a data byte to the shared parameter buffer at the specified index.
|
||||||
|
** \param idx Index into the parameter data array. A valid value is between 0 and
|
||||||
|
** (SHARED_PARAMS_CFG_BUFFER_DATA_LEN - 1).
|
||||||
|
** \param value Value to write.
|
||||||
|
** \return True if successful, false otherwise.
|
||||||
|
**
|
||||||
|
****************************************************************************************/
|
||||||
|
bool SharedParamsWriteByIndex(uint32_t idx, uint8_t value)
|
||||||
|
{
|
||||||
|
bool result = false;
|
||||||
|
|
||||||
|
/* Only continue if the buffer and the specified parameters are valid. */
|
||||||
|
if ( (SharedParamsValidateBuffer()) &&
|
||||||
|
(idx < SHARED_PARAMS_CFG_BUFFER_DATA_LEN) )
|
||||||
|
{
|
||||||
|
/* Write the value. */
|
||||||
|
sharedParamsBuffer.data[idx] = value;
|
||||||
|
/* Update the checksum since the contents were just changed. */
|
||||||
|
SharedParamsWriteChecksum();
|
||||||
|
/* Update the result. */
|
||||||
|
result = true;
|
||||||
|
}
|
||||||
|
/* Give the result back to the caller. */
|
||||||
|
return result;
|
||||||
|
} /*** end of SharedParamsWriteByIndex ***/
|
||||||
|
|
||||||
|
|
||||||
|
/************************************************************************************//**
|
||||||
|
** \brief Validates the shared parameter buffer contents by looking at the table
|
||||||
|
** identifier and verifying its checksum.
|
||||||
|
** \return True if successful, false otherwise.
|
||||||
|
**
|
||||||
|
****************************************************************************************/
|
||||||
|
static bool SharedParamsValidateBuffer(void)
|
||||||
|
{
|
||||||
|
bool result = false;
|
||||||
|
|
||||||
|
/* Perform validation. */
|
||||||
|
if ( (sharedParamsBuffer.identifier == SHARED_PARAMS_BUFFER_ID) &&
|
||||||
|
(SharedParamsVerifyChecksum()) )
|
||||||
|
{
|
||||||
|
/* The shared parameter buffer is valid, so update the result value. */
|
||||||
|
result = true;
|
||||||
|
}
|
||||||
|
/* Give the result back to the caller. */
|
||||||
|
return result;
|
||||||
|
} /*** end of SharedParamsValitabeTable ***/
|
||||||
|
|
||||||
|
|
||||||
|
/************************************************************************************//**
|
||||||
|
** \brief Calculates and writes the checksum into the buffer.
|
||||||
|
** \return none.
|
||||||
|
**
|
||||||
|
****************************************************************************************/
|
||||||
|
static void SharedParamsWriteChecksum(void)
|
||||||
|
{
|
||||||
|
/* Calculate and write the checksum. */
|
||||||
|
sharedParamsBuffer.checksum = SharedParamsCalculateChecksum();
|
||||||
|
} /*** end of SharedParamsWriteChecksum ***/
|
||||||
|
|
||||||
|
|
||||||
|
/************************************************************************************//**
|
||||||
|
** \brief Calculates and verifies the checksum that is currently present in the
|
||||||
|
** buffer.
|
||||||
|
** \return True is the checksum is correct, false otherwise.
|
||||||
|
**
|
||||||
|
****************************************************************************************/
|
||||||
|
static bool SharedParamsVerifyChecksum(void)
|
||||||
|
{
|
||||||
|
bool result = false;
|
||||||
|
|
||||||
|
/* Calculate and verify the checksum. */
|
||||||
|
if (SharedParamsCalculateChecksum() == sharedParamsBuffer.checksum)
|
||||||
|
{
|
||||||
|
/* Checksum is correct, so update the result value. */
|
||||||
|
result = true;
|
||||||
|
}
|
||||||
|
/* Give the result back to the caller. */
|
||||||
|
return result;
|
||||||
|
} /*** end of SharedParamsVerifyChecksum ***/
|
||||||
|
|
||||||
|
|
||||||
|
/************************************************************************************//**
|
||||||
|
** \brief Calculates and returns the checksum value for the current contents in the
|
||||||
|
** buffer. The checksum is calculated by taking the sum of all bytes in the
|
||||||
|
** parameter buffer (excluding the checksum at the end) and them taking the
|
||||||
|
** two's complement value of it.
|
||||||
|
** \return The calculated checksum value.
|
||||||
|
**
|
||||||
|
****************************************************************************************/
|
||||||
|
static uint16_t SharedParamsCalculateChecksum(void)
|
||||||
|
{
|
||||||
|
uint16_t result = 0;
|
||||||
|
uint32_t byteIdx;
|
||||||
|
|
||||||
|
/* Add the identifier bytes to the checksum. */
|
||||||
|
result += (uint8_t)sharedParamsBuffer.identifier;
|
||||||
|
result += (uint8_t)(sharedParamsBuffer.identifier >> 8u);
|
||||||
|
result += (uint8_t)(sharedParamsBuffer.identifier >> 16u);
|
||||||
|
result += (uint8_t)(sharedParamsBuffer.identifier >> 24u);
|
||||||
|
/* Loop through the parameter data array. */
|
||||||
|
for (byteIdx=0; byteIdx<SHARED_PARAMS_CFG_BUFFER_DATA_LEN; byteIdx++)
|
||||||
|
{
|
||||||
|
/* Add parameter data byte to the checksum. */
|
||||||
|
result += (uint8_t)sharedParamsBuffer.data[byteIdx];
|
||||||
|
}
|
||||||
|
/* Determine one's complement. */
|
||||||
|
result = ~result;
|
||||||
|
/* Determine two's complement. */
|
||||||
|
result += 1;
|
||||||
|
/* Give the result back to the caller. */
|
||||||
|
return result;
|
||||||
|
} /*** end of SharedParamsCalculateChecksum ***/
|
||||||
|
|
||||||
|
|
||||||
|
/*********************************** end of shared_params.c ****************************/
|
|
@ -0,0 +1,57 @@
|
||||||
|
/************************************************************************************//**
|
||||||
|
* \file Demo/ARMCM3_LM3S_EK_LM3S6965_Crossworks/Boot/shared_params.h
|
||||||
|
* \brief Shared RAM parameters header file.
|
||||||
|
* \ingroup Boot_ARMCM3_LM3S_EK_LM3S6965_Crossworks
|
||||||
|
* \internal
|
||||||
|
*----------------------------------------------------------------------------------------
|
||||||
|
* C O P Y R I G H T
|
||||||
|
*----------------------------------------------------------------------------------------
|
||||||
|
* Copyright (c) 2018 by Feaser http://www.feaser.com All rights reserved
|
||||||
|
*
|
||||||
|
*----------------------------------------------------------------------------------------
|
||||||
|
* L I C E N S E
|
||||||
|
*----------------------------------------------------------------------------------------
|
||||||
|
* This file is part of OpenBLT. OpenBLT is free software: you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU General Public License as published by the Free
|
||||||
|
* Software Foundation, either version 3 of the License, or (at your option) any later
|
||||||
|
* version.
|
||||||
|
*
|
||||||
|
* OpenBLT is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
|
||||||
|
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
||||||
|
* PURPOSE. See the GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You have received a copy of the GNU General Public License along with OpenBLT. It
|
||||||
|
* should be located in ".\Doc\license.html". If not, contact Feaser to obtain a copy.
|
||||||
|
*
|
||||||
|
* \endinternal
|
||||||
|
****************************************************************************************/
|
||||||
|
#ifndef SHARED_PARAMS_H
|
||||||
|
#define SHARED_PARAMS_H
|
||||||
|
|
||||||
|
/****************************************************************************************
|
||||||
|
* Include files
|
||||||
|
****************************************************************************************/
|
||||||
|
#include <stdint.h> /* Standard integer types. */
|
||||||
|
#include <stdbool.h> /* Standard boolean types. */
|
||||||
|
|
||||||
|
|
||||||
|
/****************************************************************************************
|
||||||
|
* Configuration macros
|
||||||
|
****************************************************************************************/
|
||||||
|
/** \brief Configuration macro for specifying the size of the data inside the parameter
|
||||||
|
* buffer. This is the length in bytes of the actual parameter data, so
|
||||||
|
* excluding the bufferId and checksum.
|
||||||
|
*/
|
||||||
|
#define SHARED_PARAMS_CFG_BUFFER_DATA_LEN (56u)
|
||||||
|
|
||||||
|
|
||||||
|
/****************************************************************************************
|
||||||
|
* Function prototypes
|
||||||
|
****************************************************************************************/
|
||||||
|
void SharedParamsInit(void);
|
||||||
|
bool SharedParamsReadByIndex(uint32_t idx, uint8_t * value);
|
||||||
|
bool SharedParamsWriteByIndex(uint32_t idx, uint8_t value);
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* SHARED_PARAMS_H */
|
||||||
|
/*********************************** end of shared_params.h ****************************/
|
Binary file not shown.
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -36,6 +36,7 @@
|
||||||
#include "led.h" /* LED driver */
|
#include "led.h" /* LED driver */
|
||||||
#include "time.h" /* Timer driver */
|
#include "time.h" /* Timer driver */
|
||||||
#include "net.h" /* TCP/IP server application */
|
#include "net.h" /* TCP/IP server application */
|
||||||
|
#include "shared_params.h" /* Shared parameters header. */
|
||||||
#include "inc/hw_ints.h"
|
#include "inc/hw_ints.h"
|
||||||
#include "inc/hw_memmap.h"
|
#include "inc/hw_memmap.h"
|
||||||
#include "inc/hw_nvic.h"
|
#include "inc/hw_nvic.h"
|
||||||
|
|
|
@ -1,143 +1,196 @@
|
||||||
<!DOCTYPE CrossStudio_Project_File>
|
<!DOCTYPE CrossStudio_Project_File>
|
||||||
<solution Name="lm3s6965_crossworks" target="8" version="2">
|
<solution Name="lm3s6965_crossworks" target="8" version="2">
|
||||||
<project Name="demoprog_ek_lm3s6965">
|
<project Name="demoprog_ek_lm3s6965">
|
||||||
<configuration Name="Common" Placement="Flash" Target="LM3S6965" arm_architecture="v7M" arm_core_type="Cortex-M3" arm_gcc_target="arm-unknown-eabi" arm_linker_heap_size="128" arm_linker_process_stack_size="0" arm_linker_stack_size="128" arm_long_calls="Yes" arm_simulator_memory_simulation_filename="$(TargetsDir)/LM3S/LM3SSimulatorMemory.dll" arm_simulator_memory_simulation_parameter="0x40000;0x10000" arm_target_debug_interface_type="ADIv5" arm_target_loader_applicable_loaders="Flash" arm_target_loader_default_loader="Flash" arm_use_gcc_libraries="Yes" build_intermediate_directory="$(Configuration)/../../obj" build_output_directory="$(ProjectDir)/../bin" c_preprocessor_definitions="gcc" c_user_include_directories="$(ProjectDir)/..;$(ProjectDir)/../lib;$(ProjectDir)/../lib/inc;$(ProjectDir)/../lib/uip;$(ProjectDir)/../lib/driverlib;$(ProjectDir)/../../../../Source/third_party/uip/uip" gcc_entry_point="reset_handler" gcc_optimization_level="None" linker_additional_files="" linker_memory_map_file="$(TargetsDir)/LM3S/LM3S6965_MemoryMap.xml" linker_output_format="srec" linker_printf_width_precision_supported="No" linker_scanf_fmt_level="int" linker_section_placement_file="$(StudioDir)/targets/Cortex_M/flash_placement.xml" project_directory="" project_type="Executable" property_groups_file_path="$(TargetsDir)/LM3S/propertyGroups.xml" target_get_partname_script="GetPartName()" target_reset_script="Reset()"/>
|
<configuration
|
||||||
<configuration Name="Flash" arm_target_flash_loader_file_path="$(TargetsDir)/LM3S/Release/Loader.elf" arm_target_flash_loader_type="LIBMEM RPC Loader" target_reset_script="FLASHReset()"/>
|
Name="Common"
|
||||||
|
Placement="Flash"
|
||||||
|
Target="LM3S6965"
|
||||||
|
arm_architecture="v7M"
|
||||||
|
arm_core_type="Cortex-M3"
|
||||||
|
arm_gcc_target="arm-unknown-eabi"
|
||||||
|
arm_linker_heap_size="128"
|
||||||
|
arm_linker_process_stack_size="0"
|
||||||
|
arm_linker_stack_size="128"
|
||||||
|
arm_long_calls="Yes"
|
||||||
|
arm_simulator_memory_simulation_filename="$(TargetsDir)/LM3S/LM3SSimulatorMemory.dll"
|
||||||
|
arm_simulator_memory_simulation_parameter="0x40000;0x10000"
|
||||||
|
arm_target_debug_interface_type="ADIv5"
|
||||||
|
arm_target_loader_applicable_loaders="Flash"
|
||||||
|
arm_target_loader_default_loader="Flash"
|
||||||
|
arm_use_gcc_libraries="Yes"
|
||||||
|
build_intermediate_directory="$(Configuration)/../../obj"
|
||||||
|
build_output_directory="$(ProjectDir)/../bin"
|
||||||
|
c_preprocessor_definitions="gcc"
|
||||||
|
c_user_include_directories="$(ProjectDir)/..;$(ProjectDir)/../lib;$(ProjectDir)/../lib/inc;$(ProjectDir)/../lib/uip;$(ProjectDir)/../lib/driverlib;$(ProjectDir)/../../../../Source/third_party/uip/uip;$(ProjectDir)/../../../../Source/third_party/uip/apps/dhcpc"
|
||||||
|
gcc_entry_point="reset_handler"
|
||||||
|
gcc_optimization_level="None"
|
||||||
|
linker_additional_files=""
|
||||||
|
linker_memory_map_file="$(TargetsDir)/LM3S/LM3S6965_MemoryMap.xml"
|
||||||
|
linker_output_format="srec"
|
||||||
|
linker_printf_width_precision_supported="No"
|
||||||
|
linker_scanf_fmt_level="int"
|
||||||
|
linker_section_placement_file="$(StudioDir)/targets/Cortex_M/flash_placement.xml"
|
||||||
|
project_directory=""
|
||||||
|
project_type="Executable"
|
||||||
|
property_groups_file_path="$(TargetsDir)/LM3S/propertyGroups.xml"
|
||||||
|
target_get_partname_script="GetPartName()"
|
||||||
|
target_reset_script="Reset()" />
|
||||||
|
<configuration
|
||||||
|
Name="Flash"
|
||||||
|
arm_target_flash_loader_file_path="$(TargetsDir)/LM3S/Release/Loader.elf"
|
||||||
|
arm_target_flash_loader_type="LIBMEM RPC Loader"
|
||||||
|
target_reset_script="FLASHReset()" />
|
||||||
<folder Name="Source Files">
|
<folder Name="Source Files">
|
||||||
<configuration Name="Common" filter="c;cpp;cxx;cc;h;s;asm;inc"/>
|
<configuration Name="Common" filter="c;cpp;cxx;cc;h;s;asm;inc" />
|
||||||
<folder Name="Demo">
|
<folder Name="Demo">
|
||||||
<folder Name="Prog" file_name="">
|
<folder Name="Prog">
|
||||||
<file file_name="../boot.c"/>
|
<file file_name="../boot.c" />
|
||||||
<file file_name="../boot.h"/>
|
<file file_name="../boot.h" />
|
||||||
<file file_name="../cstart.s"/>
|
<file file_name="../cstart.s" />
|
||||||
<file file_name="../header.h"/>
|
<file file_name="../header.h" />
|
||||||
<file file_name="../led.c"/>
|
<file file_name="../led.c" />
|
||||||
<file file_name="../led.h"/>
|
<file file_name="../led.h" />
|
||||||
<file file_name="../main.c"/>
|
<file file_name="../main.c" />
|
||||||
<file file_name="../vectors.c"/>
|
<file file_name="../vectors.c" />
|
||||||
<file file_name="../time.c"/>
|
<file file_name="../time.c" />
|
||||||
<file file_name="../time.h"/>
|
<file file_name="../time.h" />
|
||||||
<file file_name="../net.c"/>
|
<file file_name="../net.c" />
|
||||||
<file file_name="../net.h"/>
|
<file file_name="../net.h" />
|
||||||
|
<file file_name="../shared_params.c" />
|
||||||
|
<file file_name="../shared_params.h" />
|
||||||
</folder>
|
</folder>
|
||||||
<folder Name="third_party" file_name="">
|
<folder Name="third_party">
|
||||||
<file file_name="../../../../Source/third_party/uip/uip/clock.h"/>
|
<file file_name="../../../../Source/third_party/uip/uip/clock.h" />
|
||||||
<file file_name="../../../../Source/third_party/uip/uip/lc.h"/>
|
<file file_name="../../../../Source/third_party/uip/uip/lc.h" />
|
||||||
<file file_name="../../../../Source/third_party/uip/uip/lc-addrlabels.h"/>
|
<file file_name="../../../../Source/third_party/uip/uip/lc-addrlabels.h" />
|
||||||
<file file_name="../../../../Source/third_party/uip/uip/lc-switch.h"/>
|
<file file_name="../../../../Source/third_party/uip/uip/lc-switch.h" />
|
||||||
<file file_name="../../../../Source/third_party/uip/uip/pt.h"/>
|
<file file_name="../../../../Source/third_party/uip/uip/pt.h" />
|
||||||
<file file_name="../../../../Source/third_party/uip/uip/uip.c"/>
|
<file file_name="../../../../Source/third_party/uip/uip/uip.c" />
|
||||||
<file file_name="../../../../Source/third_party/uip/uip/uip.h"/>
|
<file file_name="../../../../Source/third_party/uip/uip/uip.h" />
|
||||||
<file file_name="../../../../Source/third_party/uip/uip/uip_arch.h"/>
|
<file file_name="../../../../Source/third_party/uip/uip/uip_arch.h" />
|
||||||
<file file_name="../../../../Source/third_party/uip/uip/uip_arp.c"/>
|
<file file_name="../../../../Source/third_party/uip/uip/uip_arp.c" />
|
||||||
<file file_name="../../../../Source/third_party/uip/uip/uip_arp.h"/>
|
<file file_name="../../../../Source/third_party/uip/uip/uip_arp.h" />
|
||||||
<file file_name="../../../../Source/third_party/uip/uip/uip_timer.c"/>
|
<file file_name="../../../../Source/third_party/uip/uip/uip_timer.c" />
|
||||||
<file file_name="../../../../Source/third_party/uip/uip/uip_timer.h"/>
|
<file file_name="../../../../Source/third_party/uip/uip/uip_timer.h" />
|
||||||
<file file_name="../../../../Source/third_party/uip/uip/uip-fw.c"/>
|
<file file_name="../../../../Source/third_party/uip/uip/uip-fw.c" />
|
||||||
<file file_name="../../../../Source/third_party/uip/uip/uip-fw.h"/>
|
<file file_name="../../../../Source/third_party/uip/uip/uip-fw.h" />
|
||||||
<file file_name="../../../../Source/third_party/uip/uip/uiplib.c"/>
|
<file file_name="../../../../Source/third_party/uip/uip/uiplib.c" />
|
||||||
<file file_name="../../../../Source/third_party/uip/uip/uiplib.h"/>
|
<file file_name="../../../../Source/third_party/uip/uip/uiplib.h" />
|
||||||
<file file_name="../../../../Source/third_party/uip/uip/uip-neighbor.h"/>
|
<file file_name="../../../../Source/third_party/uip/uip/uip-neighbor.h" />
|
||||||
<file file_name="../../../../Source/third_party/uip/uip/uipopt.h"/>
|
<file file_name="../../../../Source/third_party/uip/uip/uipopt.h" />
|
||||||
<file file_name="../../../../Source/third_party/uip/uip/uip-split.h"/>
|
<file file_name="../../../../Source/third_party/uip/uip/uip-split.h" />
|
||||||
|
<file file_name="../../../../Source/third_party/uip/apps/dhcpc/dhcpc.c" />
|
||||||
|
<file file_name="../../../../Source/third_party/uip/apps/dhcpc/dhcpc.h" />
|
||||||
</folder>
|
</folder>
|
||||||
</folder>
|
</folder>
|
||||||
</folder>
|
</folder>
|
||||||
<folder Name="System Files">
|
<folder Name="System Files">
|
||||||
<file file_name="$(TargetsDir)/LM3S/LM3S_Target.js">
|
<file file_name="$(TargetsDir)/LM3S/LM3S_Target.js">
|
||||||
<configuration Name="Common" file_type="Reset Script"/>
|
<configuration Name="Common" file_type="Reset Script" />
|
||||||
</file>
|
</file>
|
||||||
<file file_name="../memory.x">
|
<file file_name="../memory.x">
|
||||||
<configuration Name="Common" file_type="Linker Script"/>
|
<configuration Name="Common" file_type="Linker Script" />
|
||||||
</file>
|
</file>
|
||||||
</folder>
|
</folder>
|
||||||
<folder Name="Library Files">
|
<folder Name="Library Files">
|
||||||
<folder Name="Inc">
|
<folder Name="Inc">
|
||||||
<file file_name="../lib/inc/asmdefs.h"/>
|
<file file_name="../lib/inc/asmdefs.h" />
|
||||||
<file file_name="../lib/inc/hw_adc.h"/>
|
<file file_name="../lib/inc/hw_adc.h" />
|
||||||
<file file_name="../lib/inc/hw_comp.h"/>
|
<file file_name="../lib/inc/hw_comp.h" />
|
||||||
<file file_name="../lib/inc/hw_epi.h"/>
|
<file file_name="../lib/inc/hw_epi.h" />
|
||||||
<file file_name="../lib/inc/hw_ethernet.h"/>
|
<file file_name="../lib/inc/hw_ethernet.h" />
|
||||||
<file file_name="../lib/inc/hw_flash.h"/>
|
<file file_name="../lib/inc/hw_flash.h" />
|
||||||
<file file_name="../lib/inc/hw_gpio.h"/>
|
<file file_name="../lib/inc/hw_gpio.h" />
|
||||||
<file file_name="../lib/inc/hw_hibernate.h"/>
|
<file file_name="../lib/inc/hw_hibernate.h" />
|
||||||
<file file_name="../lib/inc/hw_i2c.h"/>
|
<file file_name="../lib/inc/hw_i2c.h" />
|
||||||
<file file_name="../lib/inc/hw_i2s.h"/>
|
<file file_name="../lib/inc/hw_i2s.h" />
|
||||||
<file file_name="../lib/inc/hw_ints.h"/>
|
<file file_name="../lib/inc/hw_ints.h" />
|
||||||
<file file_name="../lib/inc/hw_memmap.h"/>
|
<file file_name="../lib/inc/hw_memmap.h" />
|
||||||
<file file_name="../lib/inc/hw_nvic.h"/>
|
<file file_name="../lib/inc/hw_nvic.h" />
|
||||||
<file file_name="../lib/inc/hw_pwm.h"/>
|
<file file_name="../lib/inc/hw_pwm.h" />
|
||||||
<file file_name="../lib/inc/hw_qei.h"/>
|
<file file_name="../lib/inc/hw_qei.h" />
|
||||||
<file file_name="../lib/inc/hw_ssi.h"/>
|
<file file_name="../lib/inc/hw_ssi.h" />
|
||||||
<file file_name="../lib/inc/hw_sysctl.h"/>
|
<file file_name="../lib/inc/hw_sysctl.h" />
|
||||||
<file file_name="../lib/inc/hw_timer.h"/>
|
<file file_name="../lib/inc/hw_timer.h" />
|
||||||
<file file_name="../lib/inc/hw_types.h"/>
|
<file file_name="../lib/inc/hw_types.h" />
|
||||||
<file file_name="../lib/inc/hw_uart.h"/>
|
<file file_name="../lib/inc/hw_uart.h" />
|
||||||
<file file_name="../lib/inc/hw_udma.h"/>
|
<file file_name="../lib/inc/hw_udma.h" />
|
||||||
<file file_name="../lib/inc/hw_usb.h"/>
|
<file file_name="../lib/inc/hw_usb.h" />
|
||||||
<file file_name="../lib/inc/hw_watchdog.h"/>
|
<file file_name="../lib/inc/hw_watchdog.h" />
|
||||||
<file file_name="../lib/inc/lm3s6965.h"/>
|
<file file_name="../lib/inc/lm3s6965.h" />
|
||||||
</folder>
|
</folder>
|
||||||
<folder Name="Driverlib">
|
<folder Name="Driverlib">
|
||||||
<file file_name="../lib/driverlib/adc.c"/>
|
<file file_name="../lib/driverlib/adc.c" />
|
||||||
<file file_name="../lib/driverlib/adc.h"/>
|
<file file_name="../lib/driverlib/adc.h" />
|
||||||
<file file_name="../lib/driverlib/comp.c"/>
|
<file file_name="../lib/driverlib/comp.c" />
|
||||||
<file file_name="../lib/driverlib/comp.h"/>
|
<file file_name="../lib/driverlib/comp.h" />
|
||||||
<file file_name="../lib/driverlib/cpu.c"/>
|
<file file_name="../lib/driverlib/cpu.c" />
|
||||||
<file file_name="../lib/driverlib/cpu.h"/>
|
<file file_name="../lib/driverlib/cpu.h" />
|
||||||
<file file_name="../lib/driverlib/debug.h"/>
|
<file file_name="../lib/driverlib/debug.h" />
|
||||||
<file file_name="../lib/driverlib/epi.c"/>
|
<file file_name="../lib/driverlib/epi.c" />
|
||||||
<file file_name="../lib/driverlib/epi.h"/>
|
<file file_name="../lib/driverlib/epi.h" />
|
||||||
<file file_name="../lib/driverlib/ethernet.c"/>
|
<file file_name="../lib/driverlib/ethernet.c" />
|
||||||
<file file_name="../lib/driverlib/ethernet.h"/>
|
<file file_name="../lib/driverlib/ethernet.h" />
|
||||||
<file file_name="../lib/driverlib/flash.c"/>
|
<file file_name="../lib/driverlib/flash.c" />
|
||||||
<file file_name="../lib/driverlib/flash.h"/>
|
<file file_name="../lib/driverlib/flash.h" />
|
||||||
<file file_name="../lib/driverlib/gpio.c"/>
|
<file file_name="../lib/driverlib/gpio.c" />
|
||||||
<file file_name="../lib/driverlib/gpio.h"/>
|
<file file_name="../lib/driverlib/gpio.h" />
|
||||||
<file file_name="../lib/driverlib/hibernate.c"/>
|
<file file_name="../lib/driverlib/hibernate.c" />
|
||||||
<file file_name="../lib/driverlib/hibernate.h"/>
|
<file file_name="../lib/driverlib/hibernate.h" />
|
||||||
<file file_name="../lib/driverlib/i2c.c"/>
|
<file file_name="../lib/driverlib/i2c.c" />
|
||||||
<file file_name="../lib/driverlib/i2c.h"/>
|
<file file_name="../lib/driverlib/i2c.h" />
|
||||||
<file file_name="../lib/driverlib/i2s.c"/>
|
<file file_name="../lib/driverlib/i2s.c" />
|
||||||
<file file_name="../lib/driverlib/i2s.h"/>
|
<file file_name="../lib/driverlib/i2s.h" />
|
||||||
<file file_name="../lib/driverlib/interrupt.c"/>
|
<file file_name="../lib/driverlib/interrupt.c" />
|
||||||
<file file_name="../lib/driverlib/interrupt.h"/>
|
<file file_name="../lib/driverlib/interrupt.h" />
|
||||||
<file file_name="../lib/driverlib/mpu.c"/>
|
<file file_name="../lib/driverlib/mpu.c" />
|
||||||
<file file_name="../lib/driverlib/mpu.h"/>
|
<file file_name="../lib/driverlib/mpu.h" />
|
||||||
<file file_name="../lib/driverlib/pin_map.h"/>
|
<file file_name="../lib/driverlib/pin_map.h" />
|
||||||
<file file_name="../lib/driverlib/pwm.c"/>
|
<file file_name="../lib/driverlib/pwm.c" />
|
||||||
<file file_name="../lib/driverlib/pwm.h"/>
|
<file file_name="../lib/driverlib/pwm.h" />
|
||||||
<file file_name="../lib/driverlib/qei.c"/>
|
<file file_name="../lib/driverlib/qei.c" />
|
||||||
<file file_name="../lib/driverlib/qei.h"/>
|
<file file_name="../lib/driverlib/qei.h" />
|
||||||
<file file_name="../lib/driverlib/rom.h"/>
|
<file file_name="../lib/driverlib/rom.h" />
|
||||||
<file file_name="../lib/driverlib/rom_map.h"/>
|
<file file_name="../lib/driverlib/rom_map.h" />
|
||||||
<file file_name="../lib/driverlib/ssi.c"/>
|
<file file_name="../lib/driverlib/ssi.c" />
|
||||||
<file file_name="../lib/driverlib/ssi.h"/>
|
<file file_name="../lib/driverlib/ssi.h" />
|
||||||
<file file_name="../lib/driverlib/sysctl.c"/>
|
<file file_name="../lib/driverlib/sysctl.c" />
|
||||||
<file file_name="../lib/driverlib/sysctl.h"/>
|
<file file_name="../lib/driverlib/sysctl.h" />
|
||||||
<file file_name="../lib/driverlib/systick.c"/>
|
<file file_name="../lib/driverlib/systick.c" />
|
||||||
<file file_name="../lib/driverlib/systick.h"/>
|
<file file_name="../lib/driverlib/systick.h" />
|
||||||
<file file_name="../lib/driverlib/timer.c"/>
|
<file file_name="../lib/driverlib/timer.c" />
|
||||||
<file file_name="../lib/driverlib/timer.h"/>
|
<file file_name="../lib/driverlib/timer.h" />
|
||||||
<file file_name="../lib/driverlib/uart.c"/>
|
<file file_name="../lib/driverlib/uart.c" />
|
||||||
<file file_name="../lib/driverlib/uart.h"/>
|
<file file_name="../lib/driverlib/uart.h" />
|
||||||
<file file_name="../lib/driverlib/udma.c"/>
|
<file file_name="../lib/driverlib/udma.c" />
|
||||||
<file file_name="../lib/driverlib/udma.h"/>
|
<file file_name="../lib/driverlib/udma.h" />
|
||||||
<file file_name="../lib/driverlib/usb.c"/>
|
<file file_name="../lib/driverlib/usb.c" />
|
||||||
<file file_name="../lib/driverlib/usb.h"/>
|
<file file_name="../lib/driverlib/usb.h" />
|
||||||
<file file_name="../lib/driverlib/watchdog.c"/>
|
<file file_name="../lib/driverlib/watchdog.c" />
|
||||||
<file file_name="../lib/driverlib/watchdog.h"/>
|
<file file_name="../lib/driverlib/watchdog.h" />
|
||||||
</folder>
|
</folder>
|
||||||
<folder Name="uip" file_name="">
|
<folder Name="uip">
|
||||||
<file file_name="../lib/uip/clock-arch.c"/>
|
<file file_name="../lib/uip/clock-arch.c" />
|
||||||
<file file_name="../lib/uip/clock-arch.h"/>
|
<file file_name="../lib/uip/clock-arch.h" />
|
||||||
<file file_name="../lib/uip/netdev.c"/>
|
<file file_name="../lib/uip/netdev.c" />
|
||||||
<file file_name="../lib/uip/netdev.h"/>
|
<file file_name="../lib/uip/netdev.h" />
|
||||||
<file file_name="../lib/uip/uip-conf.h"/>
|
<file file_name="../lib/uip/uip-conf.h" />
|
||||||
</folder>
|
</folder>
|
||||||
</folder>
|
</folder>
|
||||||
</project>
|
</project>
|
||||||
<configuration Name="THUMB Debug" inherited_configurations="THUMB;Debug"/>
|
<configuration Name="THUMB Debug" inherited_configurations="THUMB;Debug" />
|
||||||
<configuration Name="THUMB" Platform="ARM" arm_instruction_set="THUMB" arm_library_instruction_set="THUMB" c_preprocessor_definitions="__THUMB" hidden="Yes"/>
|
<configuration
|
||||||
<configuration Name="Debug" build_debug_information="Yes" c_preprocessor_definitions="DEBUG" gcc_optimization_level="None" hidden="Yes" link_include_startup_code="No"/>
|
Name="THUMB"
|
||||||
|
Platform="ARM"
|
||||||
|
arm_instruction_set="THUMB"
|
||||||
|
arm_library_instruction_set="THUMB"
|
||||||
|
c_preprocessor_definitions="__THUMB"
|
||||||
|
hidden="Yes" />
|
||||||
|
<configuration
|
||||||
|
Name="Debug"
|
||||||
|
build_debug_information="Yes"
|
||||||
|
c_preprocessor_definitions="DEBUG"
|
||||||
|
gcc_optimization_level="None"
|
||||||
|
hidden="Yes"
|
||||||
|
link_include_startup_code="No" />
|
||||||
</solution>
|
</solution>
|
||||||
|
|
|
@ -21,11 +21,10 @@
|
||||||
<Project>
|
<Project>
|
||||||
<ProjectSessionItem path="lm3s6965_crossworks" name="unnamed" />
|
<ProjectSessionItem path="lm3s6965_crossworks" name="unnamed" />
|
||||||
<ProjectSessionItem path="lm3s6965_crossworks;demoprog_ek_lm3s6965" name="unnamed" />
|
<ProjectSessionItem path="lm3s6965_crossworks;demoprog_ek_lm3s6965" name="unnamed" />
|
||||||
<ProjectSessionItem path="lm3s6965_crossworks;demoprog_ek_lm3s6965;Library Files" name="unnamed" />
|
|
||||||
<ProjectSessionItem path="lm3s6965_crossworks;demoprog_ek_lm3s6965;Library Files;uip" name="unnamed" />
|
|
||||||
<ProjectSessionItem path="lm3s6965_crossworks;demoprog_ek_lm3s6965;Source Files" name="unnamed" />
|
<ProjectSessionItem path="lm3s6965_crossworks;demoprog_ek_lm3s6965;Source Files" name="unnamed" />
|
||||||
<ProjectSessionItem path="lm3s6965_crossworks;demoprog_ek_lm3s6965;Source Files;Demo" name="unnamed" />
|
<ProjectSessionItem path="lm3s6965_crossworks;demoprog_ek_lm3s6965;Source Files;Demo" name="unnamed" />
|
||||||
<ProjectSessionItem path="lm3s6965_crossworks;demoprog_ek_lm3s6965;Source Files;Demo;Prog" name="unnamed" />
|
<ProjectSessionItem path="lm3s6965_crossworks;demoprog_ek_lm3s6965;Source Files;Demo;Prog" name="unnamed" />
|
||||||
|
<ProjectSessionItem path="lm3s6965_crossworks;demoprog_ek_lm3s6965;Source Files;Demo;third_party" name="unnamed" />
|
||||||
</Project>
|
</Project>
|
||||||
<Register1>
|
<Register1>
|
||||||
<RegisterWindow openNodes="" binaryNodes="" unsignedNodes="" decimalNodes="" octalNodes="" asciiNodes="" visibleNodes="" name="" />
|
<RegisterWindow openNodes="" binaryNodes="" unsignedNodes="" decimalNodes="" octalNodes="" asciiNodes="" visibleNodes="" name="" />
|
||||||
|
@ -56,11 +55,7 @@
|
||||||
<Watches active="0" update="Never" />
|
<Watches active="0" update="Never" />
|
||||||
</Watch4>
|
</Watch4>
|
||||||
<Files>
|
<Files>
|
||||||
<SessionOpenFile useTextEdit="1" useBinaryEdit="0" codecName="Latin1" x="0" debugPath="../main.c" y="0" path="../main.c" left="0" selected="0" name="unnamed" top="0" />
|
<SessionOpenFile useTextEdit="1" useBinaryEdit="0" codecName="Latin1" x="0" debugPath="../main.c" y="17" path="../main.c" left="0" selected="1" name="unnamed" top="13" />
|
||||||
<SessionOpenFile useTextEdit="1" useBinaryEdit="0" codecName="Latin1" x="0" debugPath="../led.c" y="28" path="../led.c" left="0" selected="0" name="unnamed" top="3" />
|
|
||||||
<SessionOpenFile useTextEdit="1" useBinaryEdit="0" codecName="Default" x="0" debugPath="../boot.c" y="176" path="../boot.c" left="0" selected="0" name="unnamed" top="150" />
|
|
||||||
<SessionOpenFile useTextEdit="1" useBinaryEdit="0" codecName="Default" x="0" debugPath="../net.c" y="164" path="../net.c" left="0" selected="0" name="unnamed" top="158" />
|
|
||||||
<SessionOpenFile useTextEdit="1" useBinaryEdit="0" codecName="Default" x="0" debugPath="../lib/uip/netdev.c" y="113" path="../lib/uip/netdev.c" left="0" selected="1" name="unnamed" top="85" />
|
|
||||||
</Files>
|
</Files>
|
||||||
<ARMCrossStudioWindow activeProject="demoprog_ek_lm3s6965" autoConnectTarget="Texas Instruments ICDI" debugSearchFileMap="" fileDialogInitialDirectory="C:/Work/software/OpenBLT/Target/Source/third_party/uip/uip" fileDialogDefaultFilter="*.c" autoConnectCapabilities="388991" debugSearchPath="" buildConfiguration="THUMB Debug" />
|
<ARMCrossStudioWindow activeProject="demoprog_ek_lm3s6965" autoConnectTarget="Texas Instruments ICDI" debugSearchFileMap="" fileDialogInitialDirectory="C:/Work/software/OpenBLT_DHCP_Support/Target/Source/third_party/uip/apps/dhcpc" fileDialogDefaultFilter="" autoConnectCapabilities="388991" debugSearchPath="" buildConfiguration="THUMB Debug" />
|
||||||
</session>
|
</session>
|
||||||
|
|
|
@ -59,6 +59,10 @@
|
||||||
#define NETDEV_DEFAULT_MACADDR5 (0x45)
|
#define NETDEV_DEFAULT_MACADDR5 (0x45)
|
||||||
|
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
static struct uip_eth_addr macAddress;
|
||||||
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
void netdev_init(void)
|
void netdev_init(void)
|
||||||
{
|
{
|
||||||
|
@ -142,6 +146,18 @@ void netdev_init_mac(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
void netdev_get_mac(unsigned char * mac_addr)
|
||||||
|
{
|
||||||
|
mac_addr[0] = macAddress.addr[0];
|
||||||
|
mac_addr[1] = macAddress.addr[1];
|
||||||
|
mac_addr[2] = macAddress.addr[2];
|
||||||
|
mac_addr[3] = macAddress.addr[3];
|
||||||
|
mac_addr[4] = macAddress.addr[4];
|
||||||
|
mac_addr[5] = macAddress.addr[5];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
unsigned int netdev_read(void)
|
unsigned int netdev_read(void)
|
||||||
{
|
{
|
||||||
|
|
|
@ -40,6 +40,7 @@
|
||||||
|
|
||||||
void netdev_init(void);
|
void netdev_init(void);
|
||||||
void netdev_init_mac(void);
|
void netdev_init_mac(void);
|
||||||
|
void netdev_get_mac(unsigned char * mac_addr);
|
||||||
unsigned int netdev_read(void);
|
unsigned int netdev_read(void);
|
||||||
void netdev_send(void);
|
void netdev_send(void);
|
||||||
|
|
||||||
|
|
|
@ -98,6 +98,27 @@ typedef unsigned short uip_stats_t;
|
||||||
*/
|
*/
|
||||||
#define UIP_CONF_MAX_LISTENPORTS 1
|
#define UIP_CONF_MAX_LISTENPORTS 1
|
||||||
|
|
||||||
|
/**
|
||||||
|
* UDP support on or off
|
||||||
|
*
|
||||||
|
* \hideinitializer
|
||||||
|
*/
|
||||||
|
#define UIP_CONF_UDP 1
|
||||||
|
|
||||||
|
/**
|
||||||
|
* UDP Maximum Connections
|
||||||
|
*
|
||||||
|
* \hideinitializer
|
||||||
|
*/
|
||||||
|
#define UIP_CONF_UDP_CONNS 1
|
||||||
|
|
||||||
|
/**
|
||||||
|
* UDP checksums on or off
|
||||||
|
*
|
||||||
|
* \hideinitializer
|
||||||
|
*/
|
||||||
|
#define UIP_CONF_UDP_CHECKSUMS 0
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* uIP buffer size.
|
* uIP buffer size.
|
||||||
*
|
*
|
||||||
|
@ -119,20 +140,6 @@ typedef unsigned short uip_stats_t;
|
||||||
*/
|
*/
|
||||||
#define UIP_CONF_LOGGING 0
|
#define UIP_CONF_LOGGING 0
|
||||||
|
|
||||||
/**
|
|
||||||
* UDP support on or off
|
|
||||||
*
|
|
||||||
* \hideinitializer
|
|
||||||
*/
|
|
||||||
#define UIP_CONF_UDP 0
|
|
||||||
|
|
||||||
/**
|
|
||||||
* UDP checksums on or off
|
|
||||||
*
|
|
||||||
* \hideinitializer
|
|
||||||
*/
|
|
||||||
#define UIP_CONF_UDP_CHECKSUMS 1
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* uIP statistics on or off
|
* uIP statistics on or off
|
||||||
*
|
*
|
||||||
|
@ -140,10 +147,12 @@ typedef unsigned short uip_stats_t;
|
||||||
*/
|
*/
|
||||||
#define UIP_CONF_STATISTICS 0
|
#define UIP_CONF_STATISTICS 0
|
||||||
|
|
||||||
|
|
||||||
/* Here we include the header file for the application(s) we use in
|
/* Here we include the header file for the application(s) we use in
|
||||||
our project. */
|
our project. */
|
||||||
#include "boot.h"
|
#include "header.h"
|
||||||
#include "net.h"
|
#include "net.h"
|
||||||
|
#include "dhcpc.h"
|
||||||
|
|
||||||
#endif /* __UIP_CONF_H__ */
|
#endif /* __UIP_CONF_H__ */
|
||||||
|
|
||||||
|
|
|
@ -48,10 +48,17 @@ int main(void)
|
||||||
{
|
{
|
||||||
/* initialize the microcontroller */
|
/* initialize the microcontroller */
|
||||||
Init();
|
Init();
|
||||||
|
/* initialize the shared parameters module */
|
||||||
|
SharedParamsInit();
|
||||||
/* initialize the network application */
|
/* initialize the network application */
|
||||||
NetInit();
|
NetInit();
|
||||||
/* initialize the bootloader interface */
|
/* initialize the bootloader interface */
|
||||||
BootComInit();
|
BootComInit();
|
||||||
|
/* the shared parameter at index 0 is used as a boolean flag to indicate if the
|
||||||
|
* bootloader should initialize the TCP/IP network stack. by default this flag
|
||||||
|
* should be reset.
|
||||||
|
*/
|
||||||
|
SharedParamsWriteByIndex(0, 0);
|
||||||
|
|
||||||
/* start the infinite program loop */
|
/* start the infinite program loop */
|
||||||
while (1)
|
while (1)
|
||||||
|
|
|
@ -4,7 +4,8 @@ MEMORY
|
||||||
CM3_System_Control_Space (wx) : ORIGIN = 0xe000e000, LENGTH = 0x00001000
|
CM3_System_Control_Space (wx) : ORIGIN = 0xe000e000, LENGTH = 0x00001000
|
||||||
Peripherals (wx) : ORIGIN = 0x40020000, LENGTH = 0x00100000
|
Peripherals (wx) : ORIGIN = 0x40020000, LENGTH = 0x00100000
|
||||||
FiRM_Peripherals (wx) : ORIGIN = 0x40000000, LENGTH = 0x00010000
|
FiRM_Peripherals (wx) : ORIGIN = 0x40000000, LENGTH = 0x00010000
|
||||||
SRAM (wx) : ORIGIN = 0x20000000, LENGTH = 0x00010000
|
SHARED (wx) : ORIGIN = 0x20000000, LENGTH = 64
|
||||||
|
SRAM (wx) : ORIGIN = 0x20000040, LENGTH = 0x00010000 - 64
|
||||||
FLASH (rx) : ORIGIN = 0x00008000, LENGTH = 0x00040000 - 0x8000
|
FLASH (rx) : ORIGIN = 0x00008000, LENGTH = 0x00040000 - 0x8000
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -17,7 +18,7 @@ SECTIONS
|
||||||
__Peripherals_segment_end__ = 0x40120000;
|
__Peripherals_segment_end__ = 0x40120000;
|
||||||
__FiRM_Peripherals_segment_start__ = 0x40000000;
|
__FiRM_Peripherals_segment_start__ = 0x40000000;
|
||||||
__FiRM_Peripherals_segment_end__ = 0x40010000;
|
__FiRM_Peripherals_segment_end__ = 0x40010000;
|
||||||
__SRAM_segment_start__ = 0x20000000;
|
__SRAM_segment_start__ = 0x20000040;
|
||||||
__SRAM_segment_end__ = 0x20010000;
|
__SRAM_segment_end__ = 0x20010000;
|
||||||
__FLASH_segment_start__ = 0x00008000;
|
__FLASH_segment_start__ = 0x00008000;
|
||||||
__FLASH_segment_end__ = 0x00040000;
|
__FLASH_segment_end__ = 0x00040000;
|
||||||
|
@ -31,6 +32,17 @@ SECTIONS
|
||||||
__STACKSIZE_UND__ = 0;
|
__STACKSIZE_UND__ = 0;
|
||||||
__HEAPSIZE__ = 128;
|
__HEAPSIZE__ = 128;
|
||||||
|
|
||||||
|
.shared (NOLOAD):
|
||||||
|
{
|
||||||
|
. = ALIGN(4);
|
||||||
|
__shared_start__ = .;
|
||||||
|
*(.shared)
|
||||||
|
*(.shared.*)
|
||||||
|
KEEP(*(.shared))
|
||||||
|
. = ALIGN(4);
|
||||||
|
__shared_end__ = .;
|
||||||
|
} > SHARED
|
||||||
|
|
||||||
__vectors_ram_load_start__ = ALIGN(__SRAM_segment_start__ , 256);
|
__vectors_ram_load_start__ = ALIGN(__SRAM_segment_start__ , 256);
|
||||||
.vectors_ram ALIGN(__SRAM_segment_start__ , 256) (NOLOAD) : AT(ALIGN(__SRAM_segment_start__ , 256))
|
.vectors_ram ALIGN(__SRAM_segment_start__ , 256) (NOLOAD) : AT(ALIGN(__SRAM_segment_start__ , 256))
|
||||||
{
|
{
|
||||||
|
|
|
@ -53,6 +53,10 @@
|
||||||
static unsigned long periodicTimerTimeOut;
|
static unsigned long periodicTimerTimeOut;
|
||||||
/** \brief Holds the time out value of the uIP ARP timer. */
|
/** \brief Holds the time out value of the uIP ARP timer. */
|
||||||
static unsigned long ARPTimerTimeOut;
|
static unsigned long ARPTimerTimeOut;
|
||||||
|
#if (BOOT_COM_NET_DHCP_ENABLE > 0)
|
||||||
|
/** \brief Holds the MAC address which is used by the DHCP client. */
|
||||||
|
static struct uip_eth_addr macAddress;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/************************************************************************************//**
|
/************************************************************************************//**
|
||||||
|
@ -71,6 +75,7 @@ void NetInit(void)
|
||||||
ARPTimerTimeOut = TimerGet() + NET_UIP_ARP_TIMER_MS;
|
ARPTimerTimeOut = TimerGet() + NET_UIP_ARP_TIMER_MS;
|
||||||
/* initialize the uIP TCP/IP stack. */
|
/* initialize the uIP TCP/IP stack. */
|
||||||
uip_init();
|
uip_init();
|
||||||
|
#if (BOOT_COM_NET_DHCP_ENABLE == 0)
|
||||||
/* set the IP address */
|
/* set the IP address */
|
||||||
uip_ipaddr(ipaddr, BOOT_COM_NET_IPADDR0, BOOT_COM_NET_IPADDR1, BOOT_COM_NET_IPADDR2,
|
uip_ipaddr(ipaddr, BOOT_COM_NET_IPADDR0, BOOT_COM_NET_IPADDR1, BOOT_COM_NET_IPADDR2,
|
||||||
BOOT_COM_NET_IPADDR3);
|
BOOT_COM_NET_IPADDR3);
|
||||||
|
@ -83,10 +88,28 @@ void NetInit(void)
|
||||||
uip_ipaddr(ipaddr, BOOT_COM_NET_GATEWAY0, BOOT_COM_NET_GATEWAY1, BOOT_COM_NET_GATEWAY2,
|
uip_ipaddr(ipaddr, BOOT_COM_NET_GATEWAY0, BOOT_COM_NET_GATEWAY1, BOOT_COM_NET_GATEWAY2,
|
||||||
BOOT_COM_NET_GATEWAY3);
|
BOOT_COM_NET_GATEWAY3);
|
||||||
uip_setdraddr(ipaddr);
|
uip_setdraddr(ipaddr);
|
||||||
|
#else
|
||||||
|
/* set the IP address */
|
||||||
|
uip_ipaddr(ipaddr, 0, 0, 0, 0);
|
||||||
|
uip_sethostaddr(ipaddr);
|
||||||
|
/* set the network mask */
|
||||||
|
uip_ipaddr(ipaddr, 0, 0, 0, 0);
|
||||||
|
uip_setnetmask(ipaddr);
|
||||||
|
/* set the gateway address */
|
||||||
|
uip_ipaddr(ipaddr, 0, 0, 0, 0);
|
||||||
|
uip_setdraddr(ipaddr);
|
||||||
|
#endif
|
||||||
/* start listening on the configured port for XCP transfers on TCP/IP */
|
/* start listening on the configured port for XCP transfers on TCP/IP */
|
||||||
uip_listen(HTONS(BOOT_COM_NET_PORT));
|
uip_listen(HTONS(BOOT_COM_NET_PORT));
|
||||||
/* initialize the MAC and set the MAC address */
|
/* initialize the MAC and set the MAC address */
|
||||||
netdev_init_mac();
|
netdev_init_mac();
|
||||||
|
|
||||||
|
#if (BOOT_COM_NET_DHCP_ENABLE > 0)
|
||||||
|
/* initialize the DHCP client application and send the initial request. */
|
||||||
|
netdev_get_mac(&macAddress.addr[0]);
|
||||||
|
dhcpc_init(&macAddress.addr[0], 6);
|
||||||
|
dhcpc_request();
|
||||||
|
#endif
|
||||||
} /*** end of NetInit ***/
|
} /*** end of NetInit ***/
|
||||||
|
|
||||||
|
|
||||||
|
@ -117,6 +140,13 @@ void NetApp(void)
|
||||||
/* check if this was an XCP CONNECT command */
|
/* check if this was an XCP CONNECT command */
|
||||||
if ((newDataPtr[0] == 0xff) && (newDataPtr[1] == 0x00))
|
if ((newDataPtr[0] == 0xff) && (newDataPtr[1] == 0x00))
|
||||||
{
|
{
|
||||||
|
/* the shared parameter at index 0 is used as a boolean flag to indicate if the
|
||||||
|
* bootloader should initialize the TCP/IP network stack. we just received a
|
||||||
|
* firmware update request from the TCP/IP network and we are about to active
|
||||||
|
* the bootloader for a firmware update via TCP/IP. At this point we should
|
||||||
|
* set the flag to make sure the bootloader initializes its TCP/IP network stack.
|
||||||
|
*/
|
||||||
|
SharedParamsWriteByIndex(0, 1);
|
||||||
/* connection request received so start the bootloader */
|
/* connection request received so start the bootloader */
|
||||||
BootActivate();
|
BootActivate();
|
||||||
}
|
}
|
||||||
|
@ -136,13 +166,13 @@ void NetTask(void)
|
||||||
|
|
||||||
/* check for an RX packet and read it. */
|
/* check for an RX packet and read it. */
|
||||||
packetLen = netdev_read();
|
packetLen = netdev_read();
|
||||||
if(packetLen > 0)
|
if (packetLen > 0)
|
||||||
{
|
{
|
||||||
/* set uip_len for uIP stack usage */
|
/* set uip_len for uIP stack usage */
|
||||||
uip_len = (unsigned short)packetLen;
|
uip_len = (unsigned short)packetLen;
|
||||||
|
|
||||||
/* process incoming IP packets here. */
|
/* process incoming IP packets here. */
|
||||||
if(NET_UIP_HEADER_BUF->type == htons(UIP_ETHTYPE_IP))
|
if (NET_UIP_HEADER_BUF->type == htons(UIP_ETHTYPE_IP))
|
||||||
{
|
{
|
||||||
uip_arp_ipin();
|
uip_arp_ipin();
|
||||||
uip_input();
|
uip_input();
|
||||||
|
@ -150,7 +180,7 @@ void NetTask(void)
|
||||||
* should be sent out on the network, the global variable
|
* should be sent out on the network, the global variable
|
||||||
* uip_len is set to a value > 0.
|
* uip_len is set to a value > 0.
|
||||||
*/
|
*/
|
||||||
if(uip_len > 0)
|
if (uip_len > 0)
|
||||||
{
|
{
|
||||||
uip_arp_out();
|
uip_arp_out();
|
||||||
netdev_send();
|
netdev_send();
|
||||||
|
@ -158,7 +188,7 @@ void NetTask(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* process incoming ARP packets here. */
|
/* process incoming ARP packets here. */
|
||||||
else if(NET_UIP_HEADER_BUF->type == htons(UIP_ETHTYPE_ARP))
|
else if (NET_UIP_HEADER_BUF->type == htons(UIP_ETHTYPE_ARP))
|
||||||
{
|
{
|
||||||
uip_arp_arpin();
|
uip_arp_arpin();
|
||||||
|
|
||||||
|
@ -166,14 +196,14 @@ void NetTask(void)
|
||||||
* should be sent out on the network, the global variable
|
* should be sent out on the network, the global variable
|
||||||
* uip_len is set to a value > 0.
|
* uip_len is set to a value > 0.
|
||||||
*/
|
*/
|
||||||
if(uip_len > 0)
|
if (uip_len > 0)
|
||||||
{
|
{
|
||||||
netdev_send();
|
netdev_send();
|
||||||
uip_len = 0;
|
uip_len = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* process TCP/IP Periodic Timer here. */
|
/* process TCP/IP Periodic Timer here. */
|
||||||
if (TimerGet() >= periodicTimerTimeOut)
|
if (TimerGet() >= periodicTimerTimeOut)
|
||||||
{
|
{
|
||||||
|
@ -181,6 +211,22 @@ void NetTask(void)
|
||||||
for (connection = 0; connection < UIP_CONNS; connection++)
|
for (connection = 0; connection < UIP_CONNS; connection++)
|
||||||
{
|
{
|
||||||
uip_periodic(connection);
|
uip_periodic(connection);
|
||||||
|
/* If the above function invocation resulted in data that
|
||||||
|
* should be sent out on the network, the global variable
|
||||||
|
* uip_len is set to a value > 0.
|
||||||
|
*/
|
||||||
|
if (uip_len > 0)
|
||||||
|
{
|
||||||
|
uip_arp_out();
|
||||||
|
netdev_send();
|
||||||
|
uip_len = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#if UIP_UDP
|
||||||
|
for (connection = 0; connection < UIP_UDP_CONNS; connection++)
|
||||||
|
{
|
||||||
|
uip_udp_periodic(connection);
|
||||||
/* If the above function invocation resulted in data that
|
/* If the above function invocation resulted in data that
|
||||||
* should be sent out on the network, the global variable
|
* should be sent out on the network, the global variable
|
||||||
* uip_len is set to a value > 0.
|
* uip_len is set to a value > 0.
|
||||||
|
@ -192,13 +238,14 @@ void NetTask(void)
|
||||||
uip_len = 0;
|
uip_len = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/* process ARP Timer here. */
|
/* process ARP Timer here. */
|
||||||
if (TimerGet() >= ARPTimerTimeOut)
|
if (TimerGet() >= ARPTimerTimeOut)
|
||||||
{
|
{
|
||||||
ARPTimerTimeOut += NET_UIP_ARP_TIMER_MS;
|
ARPTimerTimeOut += NET_UIP_ARP_TIMER_MS;
|
||||||
uip_arp_timer();
|
uip_arp_timer();
|
||||||
}
|
}
|
||||||
} /*** end of NetServerTask ***/
|
} /*** end of NetServerTask ***/
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,301 @@
|
||||||
|
/************************************************************************************//**
|
||||||
|
* \file Demo/ARMCM3_LM3S_EK_LM3S6965_Crossworks/Prog/shared_params.c
|
||||||
|
* \brief Shared RAM parameters source file.
|
||||||
|
* \ingroup Prog_ARMCM3_LM3S_EK_LM3S6965_Crossworks
|
||||||
|
* \internal
|
||||||
|
*----------------------------------------------------------------------------------------
|
||||||
|
* C O P Y R I G H T
|
||||||
|
*----------------------------------------------------------------------------------------
|
||||||
|
* Copyright (c) 2018 by Feaser http://www.feaser.com All rights reserved
|
||||||
|
*
|
||||||
|
*----------------------------------------------------------------------------------------
|
||||||
|
* L I C E N S E
|
||||||
|
*----------------------------------------------------------------------------------------
|
||||||
|
* This file is part of OpenBLT. OpenBLT is free software: you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU General Public License as published by the Free
|
||||||
|
* Software Foundation, either version 3 of the License, or (at your option) any later
|
||||||
|
* version.
|
||||||
|
*
|
||||||
|
* OpenBLT is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
|
||||||
|
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
||||||
|
* PURPOSE. See the GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You have received a copy of the GNU General Public License along with OpenBLT. It
|
||||||
|
* should be located in ".\Doc\license.html". If not, contact Feaser to obtain a copy.
|
||||||
|
*
|
||||||
|
* \endinternal
|
||||||
|
****************************************************************************************/
|
||||||
|
|
||||||
|
/****************************************************************************************
|
||||||
|
* Include files
|
||||||
|
****************************************************************************************/
|
||||||
|
#include <stddef.h> /* Standard definitions (NULL). */
|
||||||
|
#include "shared_params.h" /* Shared parameters header. */
|
||||||
|
|
||||||
|
|
||||||
|
/****************************************************************************************
|
||||||
|
* Macro definitions
|
||||||
|
****************************************************************************************/
|
||||||
|
/** \brief Constant parameter buffer identifier. This value is always located as the
|
||||||
|
* start of the buffer to validate the the RAM contains valid shared parameters.
|
||||||
|
*/
|
||||||
|
#define SHARED_PARAMS_BUFFER_ID (0xCE42E7A2u)
|
||||||
|
|
||||||
|
|
||||||
|
/****************************************************************************************
|
||||||
|
* Type definitions
|
||||||
|
****************************************************************************************/
|
||||||
|
/** \brief Layout of the shared parameters RAM buffer. */
|
||||||
|
typedef struct t_shared_params_buffer
|
||||||
|
{
|
||||||
|
/** \brief Fixed buffer identifier to validate that the RAM contains valid shared
|
||||||
|
* parameters.
|
||||||
|
*/
|
||||||
|
uint32_t identifier;
|
||||||
|
/** \brief Array for the actual parameter data. */
|
||||||
|
uint8_t data[SHARED_PARAMS_CFG_BUFFER_DATA_LEN];
|
||||||
|
/** \brief Checksum value of all the bytes in the buffer, excluding this checksum
|
||||||
|
* value of obvious reasons. The checksum is calculated as the Two's
|
||||||
|
* complement of the sum of the bytes.
|
||||||
|
*/
|
||||||
|
uint16_t checksum;
|
||||||
|
} tSharedParamsBuffer;
|
||||||
|
|
||||||
|
|
||||||
|
/****************************************************************************************
|
||||||
|
* Global data declarations
|
||||||
|
****************************************************************************************/
|
||||||
|
/** \brief Declaration of the actual parameter buffer that this module manages.
|
||||||
|
* \warning For the shared RAM parameters to work properly for sharing information
|
||||||
|
* between the bootloader and user program, it is important that this
|
||||||
|
* variable is linked to the exact same RAM address in both the bootloader
|
||||||
|
* and the user program. Additionally, it should be configured such that the
|
||||||
|
* C-startup code does NOT zero its contents during system initialization. This
|
||||||
|
* is the code that runs in the reset event handler, before function main() is
|
||||||
|
* called.
|
||||||
|
* For GCC based embedded toolchains, the solution is to assign this variable
|
||||||
|
* to a custom section, in this case called ".shared". Then in the linker
|
||||||
|
* script, add the following to the SECTIONS:
|
||||||
|
*
|
||||||
|
* .shared (NOLOAD) :
|
||||||
|
* {
|
||||||
|
* . = ALIGN(4);
|
||||||
|
* _sshared = .;
|
||||||
|
* __shared_start__ = _sshared;
|
||||||
|
* *(.shared)
|
||||||
|
* *(.shared.*)
|
||||||
|
* KEEP(*(.shared))
|
||||||
|
* . = ALIGN(4);
|
||||||
|
* _eshared = .;
|
||||||
|
* __shared_end__ = _eshared;
|
||||||
|
* } >SHARED
|
||||||
|
*
|
||||||
|
* Next, add a new MEMORY entry for SHARED at the start of RAM and reduce
|
||||||
|
* the length of the remaining RAM:
|
||||||
|
*
|
||||||
|
* SHARED (xrw) : ORIGIN = 0x200000C0, LENGTH = 64
|
||||||
|
* RAM (xrw) : ORIGIN = 0x20000100, LENGTH = 32K - 192 - 64
|
||||||
|
*
|
||||||
|
* Note that the previous example is for an STM32F0 microcontroller where
|
||||||
|
* the first 192 (0xC0) bytes in RAM are reserved for the user program
|
||||||
|
* vector table.
|
||||||
|
*
|
||||||
|
* \remark This same approach can be applied with other toolchains such as Keil MDK
|
||||||
|
* and IAR EWARM. Consult the compiler and linker user manuals of your
|
||||||
|
* toolchain to find out how to place a RAM variable at a fixed memory address
|
||||||
|
* and to prevent the C-startup code from zeroing its contents.
|
||||||
|
* Here are a few links to get you started:
|
||||||
|
* * IAR EWARM:
|
||||||
|
* https://www.iar.com/support/tech-notes/compiler/
|
||||||
|
* linker-error-for-absolute-located-variable/
|
||||||
|
* * Keil MDK:
|
||||||
|
* http://www.keil.com/support/docs/3480.htm
|
||||||
|
*/
|
||||||
|
static tSharedParamsBuffer sharedParamsBuffer __attribute__ ((section (".shared")));
|
||||||
|
|
||||||
|
|
||||||
|
/****************************************************************************************
|
||||||
|
* Function prototypes
|
||||||
|
****************************************************************************************/
|
||||||
|
static bool SharedParamsValidateBuffer(void);
|
||||||
|
static void SharedParamsWriteChecksum(void);
|
||||||
|
static bool SharedParamsVerifyChecksum(void);
|
||||||
|
static uint16_t SharedParamsCalculateChecksum(void);
|
||||||
|
|
||||||
|
|
||||||
|
/************************************************************************************//**
|
||||||
|
** \brief Initializes the shared RAM parameters module.
|
||||||
|
** \return none.
|
||||||
|
**
|
||||||
|
****************************************************************************************/
|
||||||
|
void SharedParamsInit(void)
|
||||||
|
{
|
||||||
|
uint32_t byteIdx;
|
||||||
|
|
||||||
|
/* The shared parameter buffer does not get initialized by the C-startup code. Another
|
||||||
|
* previously running program could have initialized it, in which case it is ready
|
||||||
|
* for use and nothing more needs to be done.
|
||||||
|
*/
|
||||||
|
if (!SharedParamsValidateBuffer())
|
||||||
|
{
|
||||||
|
/* The shared parameter buffer was not yet initialized by a running program. This
|
||||||
|
* typically happens after a cold reset where the RAM contents were lost. In this
|
||||||
|
* case we need to explicitly configure and initialize it, since the C-startup code
|
||||||
|
* was configured to not do this.
|
||||||
|
*
|
||||||
|
* The initialization consists of setting the buffer identifier, zeroing the
|
||||||
|
* actual parameter data and updating the checksum at the end.
|
||||||
|
*/
|
||||||
|
sharedParamsBuffer.identifier = SHARED_PARAMS_BUFFER_ID;
|
||||||
|
for (byteIdx=0; byteIdx < SHARED_PARAMS_CFG_BUFFER_DATA_LEN; byteIdx++)
|
||||||
|
{
|
||||||
|
sharedParamsBuffer.data[byteIdx] = 0;
|
||||||
|
}
|
||||||
|
SharedParamsWriteChecksum();
|
||||||
|
}
|
||||||
|
} /*** end of SharedParamsInit ***/
|
||||||
|
|
||||||
|
|
||||||
|
/************************************************************************************//**
|
||||||
|
** \brief Reads a data byte from the shared parameter buffer at the specified index.
|
||||||
|
** \param idx Index into the parameter data array. A valid value is between 0 and
|
||||||
|
** (SHARED_PARAMS_CFG_BUFFER_DATA_LEN - 1).
|
||||||
|
** \param value Pointer to where the read data value is stored.
|
||||||
|
** \return True if successful, false otherwise.
|
||||||
|
**
|
||||||
|
****************************************************************************************/
|
||||||
|
bool SharedParamsReadByIndex(uint32_t idx, uint8_t * value)
|
||||||
|
{
|
||||||
|
bool result = false;
|
||||||
|
|
||||||
|
/* Only continue if the buffer and the specified parameters are valid. */
|
||||||
|
if ( (SharedParamsValidateBuffer()) &&
|
||||||
|
(idx < SHARED_PARAMS_CFG_BUFFER_DATA_LEN) &&
|
||||||
|
(value != NULL) )
|
||||||
|
{
|
||||||
|
/* Read the value and update the result. */
|
||||||
|
*value = sharedParamsBuffer.data[idx];
|
||||||
|
result = true;
|
||||||
|
}
|
||||||
|
/* Give the result back to the caller. */
|
||||||
|
return result;
|
||||||
|
} /*** end of SharedParamsReadByIndex ***/
|
||||||
|
|
||||||
|
|
||||||
|
/************************************************************************************//**
|
||||||
|
** \brief Writes a data byte to the shared parameter buffer at the specified index.
|
||||||
|
** \param idx Index into the parameter data array. A valid value is between 0 and
|
||||||
|
** (SHARED_PARAMS_CFG_BUFFER_DATA_LEN - 1).
|
||||||
|
** \param value Value to write.
|
||||||
|
** \return True if successful, false otherwise.
|
||||||
|
**
|
||||||
|
****************************************************************************************/
|
||||||
|
bool SharedParamsWriteByIndex(uint32_t idx, uint8_t value)
|
||||||
|
{
|
||||||
|
bool result = false;
|
||||||
|
|
||||||
|
/* Only continue if the buffer and the specified parameters are valid. */
|
||||||
|
if ( (SharedParamsValidateBuffer()) &&
|
||||||
|
(idx < SHARED_PARAMS_CFG_BUFFER_DATA_LEN) )
|
||||||
|
{
|
||||||
|
/* Write the value. */
|
||||||
|
sharedParamsBuffer.data[idx] = value;
|
||||||
|
/* Update the checksum since the contents were just changed. */
|
||||||
|
SharedParamsWriteChecksum();
|
||||||
|
/* Update the result. */
|
||||||
|
result = true;
|
||||||
|
}
|
||||||
|
/* Give the result back to the caller. */
|
||||||
|
return result;
|
||||||
|
} /*** end of SharedParamsWriteByIndex ***/
|
||||||
|
|
||||||
|
|
||||||
|
/************************************************************************************//**
|
||||||
|
** \brief Validates the shared parameter buffer contents by looking at the table
|
||||||
|
** identifier and verifying its checksum.
|
||||||
|
** \return True if successful, false otherwise.
|
||||||
|
**
|
||||||
|
****************************************************************************************/
|
||||||
|
static bool SharedParamsValidateBuffer(void)
|
||||||
|
{
|
||||||
|
bool result = false;
|
||||||
|
|
||||||
|
/* Perform validation. */
|
||||||
|
if ( (sharedParamsBuffer.identifier == SHARED_PARAMS_BUFFER_ID) &&
|
||||||
|
(SharedParamsVerifyChecksum()) )
|
||||||
|
{
|
||||||
|
/* The shared parameter buffer is valid, so update the result value. */
|
||||||
|
result = true;
|
||||||
|
}
|
||||||
|
/* Give the result back to the caller. */
|
||||||
|
return result;
|
||||||
|
} /*** end of SharedParamsValitabeTable ***/
|
||||||
|
|
||||||
|
|
||||||
|
/************************************************************************************//**
|
||||||
|
** \brief Calculates and writes the checksum into the buffer.
|
||||||
|
** \return none.
|
||||||
|
**
|
||||||
|
****************************************************************************************/
|
||||||
|
static void SharedParamsWriteChecksum(void)
|
||||||
|
{
|
||||||
|
/* Calculate and write the checksum. */
|
||||||
|
sharedParamsBuffer.checksum = SharedParamsCalculateChecksum();
|
||||||
|
} /*** end of SharedParamsWriteChecksum ***/
|
||||||
|
|
||||||
|
|
||||||
|
/************************************************************************************//**
|
||||||
|
** \brief Calculates and verifies the checksum that is currently present in the
|
||||||
|
** buffer.
|
||||||
|
** \return True is the checksum is correct, false otherwise.
|
||||||
|
**
|
||||||
|
****************************************************************************************/
|
||||||
|
static bool SharedParamsVerifyChecksum(void)
|
||||||
|
{
|
||||||
|
bool result = false;
|
||||||
|
|
||||||
|
/* Calculate and verify the checksum. */
|
||||||
|
if (SharedParamsCalculateChecksum() == sharedParamsBuffer.checksum)
|
||||||
|
{
|
||||||
|
/* Checksum is correct, so update the result value. */
|
||||||
|
result = true;
|
||||||
|
}
|
||||||
|
/* Give the result back to the caller. */
|
||||||
|
return result;
|
||||||
|
} /*** end of SharedParamsVerifyChecksum ***/
|
||||||
|
|
||||||
|
|
||||||
|
/************************************************************************************//**
|
||||||
|
** \brief Calculates and returns the checksum value for the current contents in the
|
||||||
|
** buffer. The checksum is calculated by taking the sum of all bytes in the
|
||||||
|
** parameter buffer (excluding the checksum at the end) and them taking the
|
||||||
|
** two's complement value of it.
|
||||||
|
** \return The calculated checksum value.
|
||||||
|
**
|
||||||
|
****************************************************************************************/
|
||||||
|
static uint16_t SharedParamsCalculateChecksum(void)
|
||||||
|
{
|
||||||
|
uint16_t result = 0;
|
||||||
|
uint32_t byteIdx;
|
||||||
|
|
||||||
|
/* Add the identifier bytes to the checksum. */
|
||||||
|
result += (uint8_t)sharedParamsBuffer.identifier;
|
||||||
|
result += (uint8_t)(sharedParamsBuffer.identifier >> 8u);
|
||||||
|
result += (uint8_t)(sharedParamsBuffer.identifier >> 16u);
|
||||||
|
result += (uint8_t)(sharedParamsBuffer.identifier >> 24u);
|
||||||
|
/* Loop through the parameter data array. */
|
||||||
|
for (byteIdx=0; byteIdx<SHARED_PARAMS_CFG_BUFFER_DATA_LEN; byteIdx++)
|
||||||
|
{
|
||||||
|
/* Add parameter data byte to the checksum. */
|
||||||
|
result += (uint8_t)sharedParamsBuffer.data[byteIdx];
|
||||||
|
}
|
||||||
|
/* Determine one's complement. */
|
||||||
|
result = ~result;
|
||||||
|
/* Determine two's complement. */
|
||||||
|
result += 1;
|
||||||
|
/* Give the result back to the caller. */
|
||||||
|
return result;
|
||||||
|
} /*** end of SharedParamsCalculateChecksum ***/
|
||||||
|
|
||||||
|
|
||||||
|
/*********************************** end of shared_params.c ****************************/
|
|
@ -0,0 +1,57 @@
|
||||||
|
/************************************************************************************//**
|
||||||
|
* \file Demo/ARMCM3_LM3S_EK_LM3S6965_Crossworks/Prog/shared_params.h
|
||||||
|
* \brief Shared RAM parameters header file.
|
||||||
|
* \ingroup Prog_ARMCM3_LM3S_EK_LM3S6965_Crossworks
|
||||||
|
* \internal
|
||||||
|
*----------------------------------------------------------------------------------------
|
||||||
|
* C O P Y R I G H T
|
||||||
|
*----------------------------------------------------------------------------------------
|
||||||
|
* Copyright (c) 2018 by Feaser http://www.feaser.com All rights reserved
|
||||||
|
*
|
||||||
|
*----------------------------------------------------------------------------------------
|
||||||
|
* L I C E N S E
|
||||||
|
*----------------------------------------------------------------------------------------
|
||||||
|
* This file is part of OpenBLT. OpenBLT is free software: you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU General Public License as published by the Free
|
||||||
|
* Software Foundation, either version 3 of the License, or (at your option) any later
|
||||||
|
* version.
|
||||||
|
*
|
||||||
|
* OpenBLT is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
|
||||||
|
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
||||||
|
* PURPOSE. See the GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You have received a copy of the GNU General Public License along with OpenBLT. It
|
||||||
|
* should be located in ".\Doc\license.html". If not, contact Feaser to obtain a copy.
|
||||||
|
*
|
||||||
|
* \endinternal
|
||||||
|
****************************************************************************************/
|
||||||
|
#ifndef SHARED_PARAMS_H
|
||||||
|
#define SHARED_PARAMS_H
|
||||||
|
|
||||||
|
/****************************************************************************************
|
||||||
|
* Include files
|
||||||
|
****************************************************************************************/
|
||||||
|
#include <stdint.h> /* Standard integer types. */
|
||||||
|
#include <stdbool.h> /* Standard boolean types. */
|
||||||
|
|
||||||
|
|
||||||
|
/****************************************************************************************
|
||||||
|
* Configuration macros
|
||||||
|
****************************************************************************************/
|
||||||
|
/** \brief Configuration macro for specifying the size of the data inside the parameter
|
||||||
|
* buffer. This is the length in bytes of the actual parameter data, so
|
||||||
|
* excluding the bufferId and checksum.
|
||||||
|
*/
|
||||||
|
#define SHARED_PARAMS_CFG_BUFFER_DATA_LEN (56u)
|
||||||
|
|
||||||
|
|
||||||
|
/****************************************************************************************
|
||||||
|
* Function prototypes
|
||||||
|
****************************************************************************************/
|
||||||
|
void SharedParamsInit(void);
|
||||||
|
bool SharedParamsReadByIndex(uint32_t idx, uint8_t * value);
|
||||||
|
bool SharedParamsWriteByIndex(uint32_t idx, uint8_t value);
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* SHARED_PARAMS_H */
|
||||||
|
/*********************************** end of shared_params.h ****************************/
|
Binary file not shown.
Binary file not shown.
|
@ -7,45 +7,50 @@ start address 0x00000000
|
||||||
|
|
||||||
Program Header:
|
Program Header:
|
||||||
LOAD off 0x00010000 vaddr 0x00000000 paddr 0x00000000 align 2**16
|
LOAD off 0x00010000 vaddr 0x00000000 paddr 0x00000000 align 2**16
|
||||||
filesz 0x00006fbc memsz 0x00006fbc flags r-x
|
filesz 0x000079cc memsz 0x000079cc flags r-x
|
||||||
LOAD off 0x00020000 vaddr 0x20000000 paddr 0x00006fbc align 2**16
|
LOAD off 0x00020040 vaddr 0x20000040 paddr 0x000079cc align 2**16
|
||||||
filesz 0x000001dc memsz 0x00002098 flags rw-
|
filesz 0x000001dc memsz 0x00002120 flags rw-
|
||||||
|
LOAD off 0x00030000 vaddr 0x20000000 paddr 0x20000000 align 2**16
|
||||||
|
filesz 0x00000000 memsz 0x00000040 flags rw-
|
||||||
private flags = 5000200: [Version5 EABI] [soft-float ABI]
|
private flags = 5000200: [Version5 EABI] [soft-float ABI]
|
||||||
|
|
||||||
Sections:
|
Sections:
|
||||||
Idx Name Size VMA LMA File off Algn
|
Idx Name Size VMA LMA File off Algn
|
||||||
0 .text 00006fbc 00000000 00000000 00010000 2**2
|
0 .shared 00000040 20000000 20000000 00030000 2**2
|
||||||
CONTENTS, ALLOC, LOAD, READONLY, CODE
|
|
||||||
1 .data 000001dc 20000000 00006fbc 00020000 2**2
|
|
||||||
CONTENTS, ALLOC, LOAD, DATA
|
|
||||||
2 .bss 00001ebc 200001dc 00007198 000201dc 2**2
|
|
||||||
ALLOC
|
ALLOC
|
||||||
3 .ARM.attributes 00000029 00000000 00000000 000201dc 2**0
|
1 .text 000079cc 00000000 00000000 00010000 2**2
|
||||||
|
CONTENTS, ALLOC, LOAD, READONLY, CODE
|
||||||
|
2 .data 000001dc 20000040 000079cc 00020040 2**2
|
||||||
|
CONTENTS, ALLOC, LOAD, DATA
|
||||||
|
3 .bss 00001f44 2000021c 00007ba8 0002021c 2**2
|
||||||
|
ALLOC
|
||||||
|
4 .ARM.attributes 00000029 00000000 00000000 0002021c 2**0
|
||||||
CONTENTS, READONLY
|
CONTENTS, READONLY
|
||||||
4 .comment 0000006e 00000000 00000000 00020205 2**0
|
5 .comment 0000006e 00000000 00000000 00020245 2**0
|
||||||
CONTENTS, READONLY
|
CONTENTS, READONLY
|
||||||
5 .debug_info 0000fb37 00000000 00000000 00020273 2**0
|
6 .debug_info 00011169 00000000 00000000 000202b3 2**0
|
||||||
CONTENTS, READONLY, DEBUGGING
|
CONTENTS, READONLY, DEBUGGING
|
||||||
6 .debug_abbrev 00002575 00000000 00000000 0002fdaa 2**0
|
7 .debug_abbrev 00002b8d 00000000 00000000 0003141c 2**0
|
||||||
CONTENTS, READONLY, DEBUGGING
|
CONTENTS, READONLY, DEBUGGING
|
||||||
7 .debug_loc 0000bb26 00000000 00000000 0003231f 2**0
|
8 .debug_loc 0000c330 00000000 00000000 00033fa9 2**0
|
||||||
CONTENTS, READONLY, DEBUGGING
|
CONTENTS, READONLY, DEBUGGING
|
||||||
8 .debug_aranges 00000f88 00000000 00000000 0003de45 2**0
|
9 .debug_aranges 00001100 00000000 00000000 000402d9 2**0
|
||||||
CONTENTS, READONLY, DEBUGGING
|
CONTENTS, READONLY, DEBUGGING
|
||||||
9 .debug_ranges 00000da8 00000000 00000000 0003edcd 2**0
|
10 .debug_ranges 00000ee0 00000000 00000000 000413d9 2**0
|
||||||
CONTENTS, READONLY, DEBUGGING
|
CONTENTS, READONLY, DEBUGGING
|
||||||
10 .debug_macro 00008fe5 00000000 00000000 0003fb75 2**0
|
11 .debug_macro 0000a351 00000000 00000000 000422b9 2**0
|
||||||
CONTENTS, READONLY, DEBUGGING
|
CONTENTS, READONLY, DEBUGGING
|
||||||
11 .debug_line 00007367 00000000 00000000 00048b5a 2**0
|
12 .debug_line 00008415 00000000 00000000 0004c60a 2**0
|
||||||
CONTENTS, READONLY, DEBUGGING
|
CONTENTS, READONLY, DEBUGGING
|
||||||
12 .debug_str 000284ac 00000000 00000000 0004fec1 2**0
|
13 .debug_str 0002b14d 00000000 00000000 00054a1f 2**0
|
||||||
CONTENTS, READONLY, DEBUGGING
|
CONTENTS, READONLY, DEBUGGING
|
||||||
13 .debug_frame 00002c78 00000000 00000000 00078370 2**2
|
14 .debug_frame 00003004 00000000 00000000 0007fb6c 2**2
|
||||||
CONTENTS, READONLY, DEBUGGING
|
CONTENTS, READONLY, DEBUGGING
|
||||||
SYMBOL TABLE:
|
SYMBOL TABLE:
|
||||||
|
20000000 l d .shared 00000000 .shared
|
||||||
00000000 l d .text 00000000 .text
|
00000000 l d .text 00000000 .text
|
||||||
20000000 l d .data 00000000 .data
|
20000040 l d .data 00000000 .data
|
||||||
200001dc l d .bss 00000000 .bss
|
2000021c l d .bss 00000000 .bss
|
||||||
00000000 l d .ARM.attributes 00000000 .ARM.attributes
|
00000000 l d .ARM.attributes 00000000 .ARM.attributes
|
||||||
00000000 l d .comment 00000000 .comment
|
00000000 l d .comment 00000000 .comment
|
||||||
00000000 l d .debug_info 00000000 .debug_info
|
00000000 l d .debug_info 00000000 .debug_info
|
||||||
|
@ -59,189 +64,218 @@ SYMBOL TABLE:
|
||||||
00000000 l d .debug_frame 00000000 .debug_frame
|
00000000 l d .debug_frame 00000000 .debug_frame
|
||||||
00000000 l df *ABS* 00000000 vectors.c
|
00000000 l df *ABS* 00000000 vectors.c
|
||||||
00000000 l df *ABS* 00000000 crtstuff.c
|
00000000 l df *ABS* 00000000 crtstuff.c
|
||||||
00006fb8 l O .text 00000000 __EH_FRAME_BEGIN__
|
000079c8 l O .text 00000000 __EH_FRAME_BEGIN__
|
||||||
000000f0 l F .text 00000000 __do_global_dtors_aux
|
000000f0 l F .text 00000000 __do_global_dtors_aux
|
||||||
200001dc l .bss 00000000 completed.8603
|
2000021c l .bss 00000000 completed.8603
|
||||||
200001d8 l O .data 00000000 __do_global_dtors_aux_fini_array_entry
|
20000218 l O .data 00000000 __do_global_dtors_aux_fini_array_entry
|
||||||
00000114 l F .text 00000000 frame_dummy
|
00000114 l F .text 00000000 frame_dummy
|
||||||
200001e0 l .bss 00000000 object.8608
|
20000220 l .bss 00000000 object.8608
|
||||||
200001d4 l O .data 00000000 __frame_dummy_init_array_entry
|
20000214 l O .data 00000000 __frame_dummy_init_array_entry
|
||||||
00000000 l df *ABS* 00000000 uartlib.c
|
00000000 l df *ABS* 00000000 uartlib.c
|
||||||
0000014c l F .text 00000068 UARTBaseValid
|
0000014c l F .text 00000068 UARTBaseValid
|
||||||
00000000 l df *ABS* 00000000 gpio.c
|
00000000 l df *ABS* 00000000 gpio.c
|
||||||
000003a4 l F .text 00000124 GPIOBaseValid
|
000003a4 l F .text 00000124 GPIOBaseValid
|
||||||
00000000 l df *ABS* 00000000 ethernet.c
|
00000000 l df *ABS* 00000000 ethernet.c
|
||||||
0000076c l F .text 0000008a EthernetPacketGetInternal
|
0000078c l F .text 0000008a EthernetPacketGetInternal
|
||||||
000007f8 l F .text 0000007c EthernetPacketPutInternal
|
00000818 l F .text 0000007c EthernetPacketPutInternal
|
||||||
00000000 l df *ABS* 00000000 flashlib.c
|
00000000 l df *ABS* 00000000 flashlib.c
|
||||||
00000000 l df *ABS* 00000000 sysctl.c
|
00000000 l df *ABS* 00000000 sysctl.c
|
||||||
00000cb0 l F .text 000003f8 SysCtlPeripheralValid
|
00000cd0 l F .text 000003f8 SysCtlPeripheralValid
|
||||||
000066b8 l O .text 0000006c g_pulXtals
|
000070c0 l O .text 0000006c g_pulXtals
|
||||||
0000673c l O .text 0000000c g_pulRCGCRegs
|
00007144 l O .text 0000000c g_pulRCGCRegs
|
||||||
00006748 l O .text 0000000c g_pulSRCRRegs
|
00007150 l O .text 0000000c g_pulSRCRRegs
|
||||||
00000000 l df *ABS* 00000000 ssi.c
|
00000000 l df *ABS* 00000000 ssi.c
|
||||||
00001540 l F .text 00000038 SSIBaseValid
|
00001560 l F .text 00000038 SSIBaseValid
|
||||||
|
00000000 l df *ABS* 00000000 clock-arch.c
|
||||||
00000000 l df *ABS* 00000000 netdev.c
|
00000000 l df *ABS* 00000000 netdev.c
|
||||||
00000000 l df *ABS* 00000000 mmc.c
|
00000000 l df *ABS* 00000000 mmc.c
|
||||||
00001880 l F .text 00000010 power_off
|
000018b8 l F .text 00000010 power_off
|
||||||
00001890 l F .text 00000058 send_initial_clock_train
|
000018c8 l F .text 00000058 send_initial_clock_train
|
||||||
000018e8 l F .text 0000008c power_on
|
00001920 l F .text 0000008c power_on
|
||||||
00001974 l F .text 00000024 xchg_spi
|
000019ac l F .text 00000024 xchg_spi
|
||||||
00001998 l F .text 00000028 wait_ready
|
000019d0 l F .text 00000028 wait_ready
|
||||||
000019c0 l F .text 00000018 deselect
|
000019f8 l F .text 00000018 deselect
|
||||||
000019d8 l F .text 0000002c select
|
00001a10 l F .text 0000002c select
|
||||||
00001a04 l F .text 00000082 send_cmd
|
00001a3c l F .text 00000082 send_cmd
|
||||||
00001a88 l F .text 0000000e rcvr_spi_m
|
00001ac0 l F .text 0000000e rcvr_spi_m
|
||||||
00001a98 l F .text 0000004e rcvr_datablock
|
00001ad0 l F .text 0000004e rcvr_datablock
|
||||||
00001ae8 l F .text 0000005a xmit_datablock
|
00001b20 l F .text 0000005a xmit_datablock
|
||||||
00001b44 l F .text 00000044 set_max_speed
|
00001b7c l F .text 00000044 set_max_speed
|
||||||
200001f8 l O .bss 00000004 CardType
|
20000238 l O .bss 00000004 CardType
|
||||||
20000000 l O .data 00000001 Stat
|
20000040 l O .data 00000001 Stat
|
||||||
00000000 l df *ABS* 00000000 cstart.c
|
00000000 l df *ABS* 00000000 cstart.c
|
||||||
000020c6 l F .text 00000000 zero_loop
|
000020fe l F .text 00000000 zero_loop
|
||||||
00000000 l df *ABS* 00000000 hooks.c
|
00000000 l df *ABS* 00000000 hooks.c
|
||||||
00006768 l O .text 0000001b firmwareFilename
|
00007170 l O .text 0000001b firmwareFilename
|
||||||
200001fc l O .bss 0000022c logfile
|
2000023c l O .bss 0000022c logfile
|
||||||
00000000 l df *ABS* 00000000 main.c
|
00000000 l df *ABS* 00000000 main.c
|
||||||
00002204 l F .text 00000024 Init
|
00002250 l F .text 00000048 Init
|
||||||
|
00000000 l df *ABS* 00000000 shared_params.c
|
||||||
|
000022dc l F .text 00000038 SharedParamsCalculateChecksum
|
||||||
|
00002314 l F .text 0000001c SharedParamsVerifyChecksum
|
||||||
|
00002330 l F .text 00000024 SharedParamsValidateBuffer
|
||||||
|
00002354 l F .text 00000010 SharedParamsWriteChecksum
|
||||||
|
20000000 l O .shared 00000040 sharedParamsBuffer
|
||||||
00000000 l df *ABS* 00000000 assert.c
|
00000000 l df *ABS* 00000000 assert.c
|
||||||
00000000 l df *ABS* 00000000 file.c
|
00000000 l df *ABS* 00000000 file.c
|
||||||
00002250 l F .text 0000003c FileLibLongToIntString
|
000023cc l F .text 0000003c FileLibLongToIntString
|
||||||
0000228c l F .text 0000002a FileLibByteNibbleToChar
|
00002408 l F .text 0000002a FileLibByteNibbleToChar
|
||||||
000022b8 l F .text 00000020 FileLibByteToHexString
|
00002434 l F .text 00000020 FileLibByteToHexString
|
||||||
000022d8 l F .text 00000058 FileLibHexStringToByte
|
00002454 l F .text 00000058 FileLibHexStringToByte
|
||||||
20000428 l O .bss 00000040 loggingStr
|
20000468 l O .bss 00000040 loggingStr
|
||||||
20000468 l O .bss 00000001 firmwareUpdateState
|
200004a8 l O .bss 00000001 firmwareUpdateState
|
||||||
2000046c l O .bss 00000008 eraseInfo
|
200004ac l O .bss 00000008 eraseInfo
|
||||||
20000474 l O .bss 00000458 fatFsObjects
|
200004b4 l O .bss 00000458 fatFsObjects
|
||||||
200008cc l O .bss 00000184 lineParseObject
|
2000090c l O .bss 00000184 lineParseObject
|
||||||
00000000 l df *ABS* 00000000 cop.c
|
00000000 l df *ABS* 00000000 cop.c
|
||||||
00000000 l df *ABS* 00000000 boot.c
|
00000000 l df *ABS* 00000000 boot.c
|
||||||
00000000 l df *ABS* 00000000 backdoor.c
|
00000000 l df *ABS* 00000000 backdoor.c
|
||||||
20000a50 l O .bss 00000001 backdoorOpen
|
20000a90 l O .bss 00000004 backdoorExtensionTime
|
||||||
20000a54 l O .bss 00000004 backdoorOpenTime
|
20000a94 l O .bss 00000001 backdoorOpen
|
||||||
|
20000a98 l O .bss 00000004 backdoorOpenTime
|
||||||
00000000 l df *ABS* 00000000 com.c
|
00000000 l df *ABS* 00000000 com.c
|
||||||
20000001 l O .data 00000001 comActiveInterface
|
20000041 l O .data 00000001 comActiveInterface
|
||||||
20000a58 l O .bss 00000040 xcpCtoReqPacket.4517
|
20000a9c l O .bss 00000040 xcpCtoReqPacket.4531
|
||||||
00000000 l df *ABS* 00000000 net.c
|
00000000 l df *ABS* 00000000 net.c
|
||||||
00002b04 l F .text 000000d4 NetServerTask
|
00002cc4 l F .text 0000010c NetServerTask
|
||||||
20000a98 l O .bss 00000004 ARPTimerTimeOut
|
20000adc l O .bss 00000001 netInitializedFlag
|
||||||
20000a9c l O .bss 00000004 periodicTimerTimeOut
|
20000ae0 l O .bss 00000004 ARPTimerTimeOut
|
||||||
|
20000ae4 l O .bss 00000006 macAddress
|
||||||
|
20000042 l O .data 00000001 netInitializationDeferred
|
||||||
|
20000aec l O .bss 00000004 periodicTimerTimeOut
|
||||||
00000000 l df *ABS* 00000000 xcp.c
|
00000000 l df *ABS* 00000000 xcp.c
|
||||||
00002cfc l F .text 0000000c XcpProtectResources
|
00002f64 l F .text 0000000c XcpProtectResources
|
||||||
00002d08 l F .text 00000014 XcpSetCtoError
|
00002f70 l F .text 00000014 XcpSetCtoError
|
||||||
00002d1c l F .text 0000001c XcpCmdDisconnect
|
00002f84 l F .text 0000001c XcpCmdDisconnect
|
||||||
00002d38 l F .text 00000020 XcpCmdGetStatus
|
00002fa0 l F .text 00000020 XcpCmdGetStatus
|
||||||
00002d58 l F .text 0000000a XcpCmdSynch
|
00002fc0 l F .text 0000000a XcpCmdSynch
|
||||||
00002d64 l F .text 0000002c XcpCmdGetId
|
00002fcc l F .text 0000002c XcpCmdGetId
|
||||||
00002d90 l F .text 00000018 XcpCmdSetMta
|
00002ff8 l F .text 00000018 XcpCmdSetMta
|
||||||
00002da8 l F .text 0000000a XcpCmdProgramPrepare
|
00003010 l F .text 0000000a XcpCmdProgramPrepare
|
||||||
00002db4 l F .text 00000028 XcpCmdProgramStart
|
0000301c l F .text 00000028 XcpCmdProgramStart
|
||||||
00002ddc l F .text 00000050 XcpCmdConnect
|
00003044 l F .text 00000050 XcpCmdConnect
|
||||||
00002e2c l F .text 00000040 XcpCmdUpload
|
00003094 l F .text 00000040 XcpCmdUpload
|
||||||
00002e6c l F .text 00000040 XcpCmdShortUpload
|
000030d4 l F .text 00000040 XcpCmdShortUpload
|
||||||
00002eac l F .text 00000024 XcpComputeChecksum
|
00003114 l F .text 00000024 XcpComputeChecksum
|
||||||
00002ed0 l F .text 00000028 XcpCmdBuildCheckSum
|
00003138 l F .text 00000028 XcpCmdBuildCheckSum
|
||||||
00002ef8 l F .text 00000040 XcpCmdProgramMax
|
00003160 l F .text 00000040 XcpCmdProgramMax
|
||||||
00002f38 l F .text 0000005c XcpCmdProgram
|
000031a0 l F .text 0000005c XcpCmdProgram
|
||||||
00002f94 l F .text 00000028 XcpCmdProgramClear
|
000031fc l F .text 00000028 XcpCmdProgramClear
|
||||||
00002fbc l F .text 00000018 XcpCmdProgramReset
|
00003224 l F .text 00000018 XcpCmdProgramReset
|
||||||
00002fd4 l F .text 0000000a XcpTransmitPacket
|
0000323c l F .text 0000000a XcpTransmitPacket
|
||||||
00006964 l O .text 00000008 xcpStationId
|
0000736c l O .text 00000008 xcpStationId
|
||||||
20000aa0 l O .bss 0000004c xcpInfo
|
20000af0 l O .bss 0000004c xcpInfo
|
||||||
00000000 l df *ABS* 00000000 timer.c
|
00000000 l df *ABS* 00000000 timer.c
|
||||||
20000aec l O .bss 00000004 millisecond_counter
|
20000b3c l O .bss 00000004 millisecond_counter
|
||||||
00000000 l df *ABS* 00000000 flash.c
|
00000000 l df *ABS* 00000000 flash.c
|
||||||
00003158 l F .text 00000048 FlashGetSector
|
000033c0 l F .text 00000048 FlashGetSector
|
||||||
000031a0 l F .text 00000038 FlashGetSectorBaseAddr
|
00003408 l F .text 00000038 FlashGetSectorBaseAddr
|
||||||
000031d8 l F .text 00000038 FlashGetSectorSize
|
00003440 l F .text 00000038 FlashGetSectorSize
|
||||||
00003210 l F .text 00000026 FlashInitBlock
|
00003478 l F .text 00000026 FlashInitBlock
|
||||||
00003238 l F .text 0000005c FlashWriteBlock
|
000034a0 l F .text 0000005c FlashWriteBlock
|
||||||
00003294 l F .text 0000003c FlashSwitchBlock
|
000034fc l F .text 0000003c FlashSwitchBlock
|
||||||
000032d0 l F .text 0000007a FlashAddToBlock
|
00003538 l F .text 0000007a FlashAddToBlock
|
||||||
0000334c l F .text 0000005e FlashEraseSectors
|
000035b4 l F .text 0000005e FlashEraseSectors
|
||||||
0000696c l O .text 000000c0 flashLayout
|
00007374 l O .text 000000c0 flashLayout
|
||||||
20000af0 l O .bss 00000204 bootBlockInfo
|
20000b40 l O .bss 00000204 bootBlockInfo
|
||||||
20000cf4 l O .bss 00000204 blockInfo
|
20000d44 l O .bss 00000204 blockInfo
|
||||||
00000000 l df *ABS* 00000000 cpu.c
|
00000000 l df *ABS* 00000000 cpu.c
|
||||||
00000000 l df *ABS* 00000000 nvm.c
|
00000000 l df *ABS* 00000000 nvm.c
|
||||||
00000000 l df *ABS* 00000000 uart.c
|
00000000 l df *ABS* 00000000 uart.c
|
||||||
000035e0 l F .text 0000003c UartTransmitByte
|
0000385c l F .text 0000003c UartTransmitByte
|
||||||
0000361c l F .text 00000020 UartReceiveByte
|
00003898 l F .text 00000020 UartReceiveByte
|
||||||
20000ef8 l O .bss 00000004 xcpCtoRxStartTime.4736
|
20000f48 l O .bss 00000004 xcpCtoRxStartTime.4748
|
||||||
20000efc l O .bss 00000041 xcpCtoReqPacket.4733
|
20000f4c l O .bss 00000041 xcpCtoReqPacket.4745
|
||||||
20000f3d l O .bss 00000001 xcpCtoRxLength.4734
|
20000f8d l O .bss 00000001 xcpCtoRxLength.4746
|
||||||
20000f3e l O .bss 00000001 xcpCtoRxInProgress.4735
|
20000f8e l O .bss 00000001 xcpCtoRxInProgress.4747
|
||||||
00000000 l df *ABS* 00000000 cpu_comp.c
|
00000000 l df *ABS* 00000000 cpu_comp.c
|
||||||
00000000 l df *ABS* 00000000 ff.c
|
00000000 l df *ABS* 00000000 ff.c
|
||||||
00003760 l F .text 0000000a ld_word
|
000039dc l F .text 0000000a ld_word
|
||||||
0000376c l F .text 00000016 ld_dword
|
000039e8 l F .text 00000016 ld_dword
|
||||||
00003784 l F .text 00000008 st_word
|
00003a00 l F .text 00000008 st_word
|
||||||
0000378c l F .text 00000014 st_dword
|
00003a08 l F .text 00000014 st_dword
|
||||||
000037a0 l F .text 00000012 mem_cpy
|
00003a1c l F .text 00000012 mem_cpy
|
||||||
000037b4 l F .text 0000000a mem_set
|
00003a30 l F .text 0000000a mem_set
|
||||||
000037c0 l F .text 0000001e mem_cmp
|
00003a3c l F .text 0000001e mem_cmp
|
||||||
000037e0 l F .text 00000010 chk_chr
|
00003a5c l F .text 00000010 chk_chr
|
||||||
000037f0 l F .text 00000018 clust2sect
|
00003a6c l F .text 00000018 clust2sect
|
||||||
00003808 l F .text 00000024 ld_clust
|
00003a84 l F .text 00000024 ld_clust
|
||||||
0000382c l F .text 00000024 st_clust
|
00003aa8 l F .text 00000024 st_clust
|
||||||
00003850 l F .text 0000008c pick_lfn
|
00003acc l F .text 0000008c pick_lfn
|
||||||
000038dc l F .text 00000070 put_lfn
|
00003b58 l F .text 00000070 put_lfn
|
||||||
0000394c l F .text 000000a0 gen_numname
|
00003bc8 l F .text 000000a0 gen_numname
|
||||||
000039ec l F .text 0000001c sum_sfn
|
00003c68 l F .text 0000001c sum_sfn
|
||||||
00003a08 l F .text 00000052 get_ldnumber
|
00003c84 l F .text 00000052 get_ldnumber
|
||||||
00003a5c l F .text 00000034 validate
|
00003cd8 l F .text 00000034 validate
|
||||||
00003a90 l F .text 00000054 sync_window
|
00003d0c l F .text 00000054 sync_window
|
||||||
00003ae4 l F .text 00000034 move_window
|
00003d60 l F .text 00000034 move_window
|
||||||
00003b18 l F .text 00000060 check_fs
|
00003d94 l F .text 00000060 check_fs
|
||||||
00003b78 l F .text 000002d4 find_volume
|
00003df4 l F .text 000002d4 find_volume
|
||||||
00003e4c l F .text 000000d0 get_fat
|
000040c8 l F .text 000000d0 get_fat
|
||||||
00003f1c l F .text 000000b2 dir_sdi
|
00004198 l F .text 000000b2 dir_sdi
|
||||||
00003fd0 l F .text 0000010c put_fat
|
0000424c l F .text 0000010c put_fat
|
||||||
000040dc l F .text 000000ce create_chain
|
00004358 l F .text 000000ce create_chain
|
||||||
000041ac l F .text 0000007c remove_chain
|
00004428 l F .text 0000007c remove_chain
|
||||||
00004228 l F .text 00000126 dir_next
|
000044a4 l F .text 00000126 dir_next
|
||||||
00004350 l F .text 0000004c dir_alloc
|
000045cc l F .text 0000004c dir_alloc
|
||||||
0000439c l F .text 000000c4 dir_read
|
00004618 l F .text 000000c4 dir_read
|
||||||
00004460 l F .text 00000050 dir_remove
|
000046dc l F .text 00000050 dir_remove
|
||||||
000044b0 l F .text 00000228 create_name
|
0000472c l F .text 00000228 create_name
|
||||||
000046d8 l F .text 000000e2 get_fileinfo
|
00004954 l F .text 000000e2 get_fileinfo
|
||||||
000047bc l F .text 000000ac cmp_lfn
|
00004a38 l F .text 000000ac cmp_lfn
|
||||||
00004868 l F .text 000000e8 dir_find
|
00004ae4 l F .text 000000e8 dir_find
|
||||||
00004950 l F .text 0000008c follow_path
|
00004bcc l F .text 0000008c follow_path
|
||||||
000049dc l F .text 0000013c dir_register
|
00004c58 l F .text 0000013c dir_register
|
||||||
00004b18 l F .text 0000008c sync_fs
|
00004d94 l F .text 0000008c sync_fs
|
||||||
00005084 l F .text 0000004a putc_bfd
|
00005300 l F .text 0000004a putc_bfd
|
||||||
20000f40 l O .bss 00000200 LfnBuf
|
20000f90 l O .bss 00000200 LfnBuf
|
||||||
20001140 l O .bss 00000002 Fsid
|
20001190 l O .bss 00000002 Fsid
|
||||||
00006a64 l O .text 00000080 ExCvt
|
0000746c l O .text 00000080 ExCvt
|
||||||
00006ae4 l O .text 0000000d LfnOfs
|
000074ec l O .text 0000000d LfnOfs
|
||||||
20001144 l O .bss 00000004 FatFs
|
20001194 l O .bss 00000004 FatFs
|
||||||
00000000 l df *ABS* 00000000 unicode.c
|
00000000 l df *ABS* 00000000 unicode.c
|
||||||
00006af4 l O .text 000000bc cvt2.4380
|
000074fc l O .text 000000bc cvt2.4380
|
||||||
00006bb0 l O .text 00000100 Tbl
|
000075b8 l O .text 00000100 Tbl
|
||||||
00006cb0 l O .text 000001f2 cvt1.4379
|
000076b8 l O .text 000001f2 cvt1.4379
|
||||||
00000000 l df *ABS* 00000000 uip.c
|
00000000 l df *ABS* 00000000 uip.c
|
||||||
00005574 l F .text 0000003a chksum
|
000057f0 l F .text 0000003a chksum
|
||||||
0000560c l F .text 00000030 uip_add_rcv_nxt
|
00005888 l F .text 00000030 uip_add_rcv_nxt
|
||||||
000056f8 l F .text 0000003c upper_layer_chksum
|
00005998 l F .text 0000003c upper_layer_chksum
|
||||||
20001148 l O .bss 00000002 tmp16
|
20001198 l O .bss 00000002 tmp16
|
||||||
2000114a l O .bss 00000002 ipid
|
2000119a l O .bss 00000002 ipid
|
||||||
2000114c l O .bss 00000004 iss
|
2000119c l O .bss 00000004 iss
|
||||||
20001150 l O .bss 00000002 lastport
|
200011a0 l O .bss 00000002 lastport
|
||||||
20001152 l O .bss 00000001 c
|
200011a2 l O .bss 00000001 c
|
||||||
00000000 l df *ABS* 00000000 uip_arp.c
|
00000000 l df *ABS* 00000000 uip_arp.c
|
||||||
00006204 l F .text 00000104 uip_arp_update
|
0000669c l F .text 00000108 uip_arp_update
|
||||||
2000115a l O .bss 00000001 i
|
200011aa l O .bss 00000001 i
|
||||||
2000115b l O .bss 00000001 tmpage
|
200011ab l O .bss 00000001 tmpage
|
||||||
2000115c l O .bss 00000060 arp_table
|
200011ac l O .bss 00000060 arp_table
|
||||||
00006ea4 l O .text 00000006 broadcast_ethaddr
|
000078ac l O .text 00000006 broadcast_ethaddr
|
||||||
200011bc l O .bss 00000001 c
|
2000120c l O .bss 00000001 c
|
||||||
200011bd l O .bss 00000001 arptime
|
2000120d l O .bss 00000001 arptime
|
||||||
200011c0 l O .bss 00000004 ipaddr
|
20001210 l O .bss 00000004 ipaddr
|
||||||
|
00000000 l df *ABS* 00000000 uip_timer.c
|
||||||
|
00000000 l df *ABS* 00000000 dhcpc.c
|
||||||
|
00006a6c l F .text 0000000e add_msg_type
|
||||||
|
00006a7c l F .text 0000001c add_server_id
|
||||||
|
00006a98 l F .text 00000016 add_req_options
|
||||||
|
00006ab0 l F .text 00000008 add_end
|
||||||
|
00006ab8 l F .text 0000002c dhcpc_configured
|
||||||
|
00006ae4 l F .text 0000001c add_req_ipaddr
|
||||||
|
00006b00 l F .text 00000078 parse_options
|
||||||
|
00006b78 l F .text 00000080 create_msg
|
||||||
|
00006bf8 l F .text 00000030 send_discover
|
||||||
|
00006c28 l F .text 00000034 send_request
|
||||||
|
00006c5c l F .text 00000058 parse_msg
|
||||||
|
00006d00 l F .text 00000288 handle_dhcp
|
||||||
|
000078b4 l O .text 00000004 xid
|
||||||
|
20001214 l O .bss 00000034 s
|
||||||
|
000078b8 l O .text 00000004 magic_cookie
|
||||||
00000000 l df *ABS* 00000000 locale.c
|
00000000 l df *ABS* 00000000 locale.c
|
||||||
000065a8 l F .text 00000018 __get_current_locale
|
00006f90 l F .text 00000018 __get_current_locale
|
||||||
00000000 l df *ABS* 00000000 mbtowc_r.c
|
00000000 l df *ABS* 00000000 mbtowc_r.c
|
||||||
|
00000000 l df *ABS* 00000000 memcmp.c
|
||||||
00000000 l df *ABS* 00000000 memcpy-stub.c
|
00000000 l df *ABS* 00000000 memcpy-stub.c
|
||||||
00000000 l df *ABS* 00000000 memset.c
|
00000000 l df *ABS* 00000000 memset.c
|
||||||
00000000 l df *ABS* 00000000 wctomb_r.c
|
00000000 l df *ABS* 00000000 wctomb_r.c
|
||||||
|
@ -249,194 +283,216 @@ SYMBOL TABLE:
|
||||||
00000000 l df *ABS* 00000000 c:/progra~2/gnutoo~1/50a5a~1.420/bin/../lib/gcc/arm-none-eabi/5.4.1/armv7-m/crtn.o
|
00000000 l df *ABS* 00000000 c:/progra~2/gnutoo~1/50a5a~1.420/bin/../lib/gcc/arm-none-eabi/5.4.1/armv7-m/crtn.o
|
||||||
00000000 l df *ABS* 00000000 ctype_.c
|
00000000 l df *ABS* 00000000 ctype_.c
|
||||||
00000000 l df *ABS* 00000000 crtstuff.c
|
00000000 l df *ABS* 00000000 crtstuff.c
|
||||||
00006fb8 l O .text 00000000 __FRAME_END__
|
000079c8 l O .text 00000000 __FRAME_END__
|
||||||
00000000 l df *ABS* 00000000 impure.c
|
00000000 l df *ABS* 00000000 impure.c
|
||||||
20000004 l O .data 00000060 impure_data
|
20000044 l O .data 00000060 impure_data
|
||||||
00000000 l df *ABS* 00000000
|
00000000 l df *ABS* 00000000
|
||||||
00000000 l *UND* 00000000 __bss_start__
|
00000000 l *UND* 00000000 __bss_start__
|
||||||
00000000 l *UND* 00000000 __libc_fini_array
|
00000000 l *UND* 00000000 __libc_fini_array
|
||||||
00000000 l *UND* 00000000 __bss_end__
|
00000000 l *UND* 00000000 __bss_end__
|
||||||
00000000 l *UND* 00000000 __call_exitprocs
|
00000000 l *UND* 00000000 __call_exitprocs
|
||||||
00000000 l *UND* 00000000 software_init_hook
|
00000000 l *UND* 00000000 software_init_hook
|
||||||
200001d8 l .data 00000000 __init_array_end
|
20000218 l .data 00000000 __init_array_end
|
||||||
00000000 l *UND* 00000000 hardware_init_hook
|
00000000 l *UND* 00000000 hardware_init_hook
|
||||||
00000000 l *UND* 00000000 atexit
|
00000000 l *UND* 00000000 atexit
|
||||||
200001d4 l .data 00000000 __preinit_array_end
|
20000214 l .data 00000000 __preinit_array_end
|
||||||
00000000 l *UND* 00000000 __stack
|
00000000 l *UND* 00000000 __stack
|
||||||
200001d4 l .data 00000000 __init_array_start
|
20000214 l .data 00000000 __init_array_start
|
||||||
00000000 l *UND* 00000000 _exit
|
00000000 l *UND* 00000000 _exit
|
||||||
200001d4 l .data 00000000 __preinit_array_start
|
20000214 l .data 00000000 __preinit_array_start
|
||||||
00002a2c g F .text 00000020 ComInit
|
00002bdc g F .text 00000018 ComInit
|
||||||
000033c4 g F .text 00000068 FlashWrite
|
0000362c g F .text 00000068 FlashWrite
|
||||||
00005400 g F .text 00000054 f_gets
|
0000567c g F .text 00000054 f_gets
|
||||||
00002248 g F .text 00000008 AssertFailure
|
00001858 g F .text 00000010 netdev_get_mac
|
||||||
00000704 g F .text 00000034 GPIOPinTypeSSI
|
000023c4 g F .text 00000008 AssertFailure
|
||||||
000020a4 g F .text 00000040 reset_handler
|
00000724 g F .text 00000034 GPIOPinTypeSSI
|
||||||
000016dc g F .text 00000028 SSIDataGet
|
000020dc g F .text 00000040 reset_handler
|
||||||
0000312c g F .text 0000001c TimerUpdate
|
000016fc g F .text 00000028 SSIDataGet
|
||||||
0000300c g F .text 00000010 XcpPacketTransmitted
|
00003394 g F .text 0000001c TimerUpdate
|
||||||
00002a4c g F .text 00000050 ComTask
|
00003274 g F .text 00000010 XcpPacketTransmitted
|
||||||
00001654 g F .text 00000024 SSIEnable
|
00002bf4 g F .text 00000050 ComTask
|
||||||
000011bc g F .text 00000008 SysCtlDelay
|
00001674 g F .text 00000024 SSIEnable
|
||||||
200011c4 g O .bss 00000002 uip_len
|
000011dc g F .text 00000008 SysCtlDelay
|
||||||
20001154 g O .bss 00000006 uip_ethaddr
|
20001248 g O .bss 00000002 uip_len
|
||||||
000055b0 g F .text 0000005c uip_add32
|
200011a4 g O .bss 00000006 uip_ethaddr
|
||||||
00002990 g F .text 00000020 BootInit
|
00002b90 g F .text 0000000c BackDoorSetExtension
|
||||||
000023f0 g F .text 0000003a FileSrecVerifyChecksum
|
0000582c g F .text 0000005c uip_add32
|
||||||
000065c0 g F .text 00000014 __locale_ctype_ptr
|
00002b0c g F .text 00000020 BootInit
|
||||||
00002a0c g F .text 00000020 BackDoorInit
|
0000256c g F .text 0000003a FileSrecVerifyChecksum
|
||||||
00001578 g F .text 000000dc SSIConfigSetExpClk
|
00006fa8 g F .text 00000014 __locale_ctype_ptr
|
||||||
0000298c g F .text 00000002 CopService
|
00002bc4 g F .text 00000018 BackDoorInit
|
||||||
00006fbc g .text 00000000 _etext
|
00001598 g F .text 000000dc SSIConfigSetExpClk
|
||||||
000010a8 g F .text 000000a4 SysCtlPeripheralReset
|
00002b08 g F .text 00000002 CopService
|
||||||
00003758 g F .text 00000004 CpuIrqDisable
|
000079cc g .text 00000000 _etext
|
||||||
000054e0 g F .text 00000094 ff_wtoupper
|
000010c8 g F .text 000000a4 SysCtlPeripheralReset
|
||||||
00000678 g F .text 00000024 GPIOPinWrite
|
000039d4 g F .text 00000004 CpuIrqDisable
|
||||||
00001830 g F .text 00000034 netdev_read
|
0000575c g F .text 00000094 ff_wtoupper
|
||||||
00005740 g F .text 00000a9c uip_process
|
00000698 g F .text 00000024 GPIOPinWrite
|
||||||
00003540 g F .text 00000006 FlashGetUserProgBaseAddress
|
00001868 g F .text 00000034 netdev_read
|
||||||
000065f8 g F .text 00000016 memcpy
|
000059e0 g F .text 00000bec uip_process
|
||||||
00002578 g F .text 00000410 FileTask
|
000037a8 g F .text 00000006 FlashGetUserProgBaseAddress
|
||||||
|
00006ffe g F .text 00000016 memcpy
|
||||||
|
000026f4 g F .text 00000410 FileTask
|
||||||
00000304 g F .text 00000028 UARTSpaceAvail
|
00000304 g F .text 00000028 UARTSpaceAvail
|
||||||
000030fc g F .text 0000000c TimerReset
|
00003364 g F .text 0000000c TimerReset
|
||||||
00001b88 g F .text 00000160 disk_initialize
|
00001bc0 g F .text 00000160 disk_initialize
|
||||||
200011c8 g O .bss 00000004 uip_sappdata
|
2000124c g O .bss 00000004 uip_sappdata
|
||||||
00001704 g F .text 00000018 netdev_init
|
0000172c g F .text 00000018 netdev_init
|
||||||
200011cc g O .bss 00000004 uip_acc32
|
20001250 g O .bss 00000004 uip_acc32
|
||||||
000056d8 g F .text 00000020 uip_ipchksum
|
00005978 g F .text 00000020 uip_ipchksum
|
||||||
00000358 g F .text 0000002c UARTCharPutNonBlocking
|
00000358 g F .text 0000002c UARTCharPutNonBlocking
|
||||||
000029b0 g F .text 00000018 BootTask
|
00002b2c g F .text 00000018 BootTask
|
||||||
0000346c g F .text 0000004c FlashWriteChecksum
|
000036d4 g F .text 0000004c FlashWriteChecksum
|
||||||
00002aa0 g F .text 0000002c ComTransmitPacket
|
000065cc g F .text 000000a8 uip_udp_new
|
||||||
00000874 g F .text 00000030 EthernetInitExpClk
|
00002cac g F .text 00000018 ComDeferredInit
|
||||||
00001ce8 g F .text 00000014 disk_status
|
00002c48 g F .text 0000002c ComTransmitPacket
|
||||||
0000242c g F .text 0000014c FileSrecParseLine
|
00000894 g F .text 00000030 EthernetInitExpClk
|
||||||
00005698 g F .text 00000034 uip_listen
|
00001d20 g F .text 00000014 disk_status
|
||||||
00001864 g F .text 0000001c netdev_send
|
000025a8 g F .text 0000014c FileSrecParseLine
|
||||||
00001e30 g F .text 00000274 disk_ioctl
|
00005938 g F .text 00000034 uip_listen
|
||||||
00002370 g F .text 00000030 FileHandleFirmwareUpdateRequest
|
0000189c g F .text 0000001c netdev_send
|
||||||
000009f0 g F .text 00000050 EthernetPacketPut
|
00001e68 g F .text 00000274 disk_ioctl
|
||||||
0000114c g F .text 00000070 SysCtlPeripheralEnable
|
000024ec g F .text 00000030 FileHandleFirmwareUpdateRequest
|
||||||
200011d0 g O .bss 00000001 uip_flags
|
00000a10 g F .text 00000050 EthernetPacketPut
|
||||||
00002160 g F .text 00000044 FileFirmwareUpdateCompletedHook
|
0000116c g F .text 00000070 SysCtlPeripheralEnable
|
||||||
00002ffc g F .text 00000010 XcpIsConnected
|
20001254 g O .bss 00000001 uip_flags
|
||||||
00005344 g F .text 000000bc f_unlink
|
000021ac g F .text 00000044 FileFirmwareUpdateCompletedHook
|
||||||
00006638 g F .text 00000000 _init
|
00003264 g F .text 00000010 XcpIsConnected
|
||||||
000035a4 g F .text 00000008 NvmInit
|
000055c0 g F .text 000000bc f_unlink
|
||||||
000033ac g F .text 00000018 FlashInit
|
00007040 g F .text 00000000 _init
|
||||||
000035c4 g F .text 00000008 NvmGetUserProgBaseAddress
|
00003820 g F .text 00000008 NvmInit
|
||||||
20001898 g .bss 00000000 _ebss
|
00003614 g F .text 00000018 FlashInit
|
||||||
00005454 g F .text 00000050 f_puts
|
00003840 g F .text 00000008 NvmGetUserProgBaseAddress
|
||||||
|
20001960 g .bss 00000000 _ebss
|
||||||
|
000056d0 g F .text 00000050 f_puts
|
||||||
|
00006cb4 g F .text 0000003c dhcpc_init
|
||||||
00000800 g *ABS* 00000000 __STACKSIZE__
|
00000800 g *ABS* 00000000 __STACKSIZE__
|
||||||
00002238 g F .text 00000010 UnusedISR
|
000022cc g F .text 00000010 UnusedISR
|
||||||
0000099c g F .text 00000054 EthernetPacketGetNonBlocking
|
000009bc g F .text 00000054 EthernetPacketGetNonBlocking
|
||||||
00002a9c g F .text 00000002 ComFree
|
00000678 g F .text 00000020 GPIOPinRead
|
||||||
0000069c g F .text 00000034 GPIOPinTypeEthernetLED
|
00002c44 g F .text 00000002 ComFree
|
||||||
|
000006bc g F .text 00000034 GPIOPinTypeEthernetLED
|
||||||
|
20001258 g O .bss 00000004 uip_udp_conn
|
||||||
00000000 w *UND* 00000000 __sf_fake_stderr
|
00000000 w *UND* 00000000 __sf_fake_stderr
|
||||||
|
00006a54 g F .text 00000018 timer_expired
|
||||||
00000000 w *UND* 00000000 __deregister_frame_info
|
00000000 w *UND* 00000000 __deregister_frame_info
|
||||||
0000363c g F .text 00000024 UartInit
|
000038b8 g F .text 00000024 UartInit
|
||||||
000035b4 g F .text 00000008 NvmErase
|
00003830 g F .text 00000008 NvmErase
|
||||||
0000171c g F .text 00000114 netdev_init_mac
|
00002128 g F .text 00000014 CpuUserProgramStartHook
|
||||||
|
00001744 g F .text 00000114 netdev_init_mac
|
||||||
0000032c g F .text 0000002c UARTCharGetNonBlocking
|
0000032c g F .text 0000002c UARTCharGetNonBlocking
|
||||||
0000169c g F .text 00000040 SSIDataPut
|
000016bc g F .text 00000040 SSIDataPut
|
||||||
200001dc g .bss 00000000 _bss
|
2000021c g .bss 00000000 _bss
|
||||||
0000516c g F .text 00000024 f_close
|
000053e8 g F .text 00000024 f_close
|
||||||
0000301c g F .text 000000e0 XcpPacketReceived
|
00003284 g F .text 000000e0 XcpPacketReceived
|
||||||
00005734 g F .text 0000000a uip_tcpchksum
|
000059d4 g F .text 0000000a uip_tcpchksum
|
||||||
00003548 g F .text 00000008 CpuInit
|
000037b0 g F .text 00000008 CpuInit
|
||||||
00004d74 g F .text 0000016c f_read
|
00004ff0 g F .text 0000016c f_read
|
||||||
00003500 g F .text 00000040 FlashDone
|
00003768 g F .text 00000040 FlashDone
|
||||||
200011d4 g O .bss 00000004 uip_appdata
|
2000125c g O .bss 00000004 uip_appdata
|
||||||
200011d8 g O .bss 00000004 uip_conn
|
20001260 g O .bss 00000004 uip_conn
|
||||||
200011dc g O .bss 00000068 uip_conns
|
00006fe0 g F .text 0000001e memcmp
|
||||||
00000b70 g F .text 000000d8 FlashProgram
|
20000040 g .shared 00000000 __shared_end__
|
||||||
00002fe0 g F .text 0000001c XcpInit
|
20001264 g O .bss 00000068 uip_conns
|
||||||
00002330 g F .text 0000002c FileInit
|
00000b90 g F .text 000000d8 FlashProgram
|
||||||
00000a78 g F .text 00000028 EthernetIntStatus
|
00003248 g F .text 0000001c XcpInit
|
||||||
00006448 g F .text 00000160 uip_arp_out
|
000024ac g F .text 0000002c FileInit
|
||||||
|
00000a98 g F .text 00000028 EthernetIntStatus
|
||||||
|
000068e4 g F .text 00000160 uip_arp_out
|
||||||
00000000 w *UND* 00000000 __sf_fake_stdin
|
00000000 w *UND* 00000000 __sf_fake_stdin
|
||||||
0000342c g F .text 00000040 FlashErase
|
00003694 g F .text 00000040 FlashErase
|
||||||
0000660e g F .text 00000010 memset
|
00007014 g F .text 00000010 memset
|
||||||
000021a4 g F .text 00000018 FileFirmwareUpdateErrorHook
|
000021f0 g F .text 00000018 FileFirmwareUpdateErrorHook
|
||||||
00002228 g F .text 00000010 main
|
00002298 g F .text 00000032 main
|
||||||
000050d0 g F .text 0000009c f_sync
|
0000534c g F .text 0000009c f_sync
|
||||||
0000133c g F .text 00000204 SysCtlClockGet
|
0000135c g F .text 00000204 SysCtlClockGet
|
||||||
000023a0 g F .text 00000050 FileSrecGetLineType
|
0000251c g F .text 00000050 FileSrecGetLineType
|
||||||
000001e4 g F .text 00000038 UARTDisable
|
000001e4 g F .text 00000038 UARTDisable
|
||||||
0000661e g F .text 0000001a __ascii_wctomb
|
00007024 g F .text 0000001a __ascii_wctomb
|
||||||
000035cc g F .text 00000014 NvmDone
|
00003848 g F .text 00000014 NvmDone
|
||||||
0000095c g F .text 00000040 EthernetEnable
|
0000097c g F .text 00000040 EthernetEnable
|
||||||
00004ba4 g F .text 00000058 f_mount
|
00004e20 g F .text 00000058 f_mount
|
||||||
00003660 g F .text 00000050 UartTransmitPacket
|
000038dc g F .text 00000050 UartTransmitPacket
|
||||||
000035bc g F .text 00000008 NvmVerifyChecksum
|
00003838 g F .text 00000008 NvmVerifyChecksum
|
||||||
00003584 g F .text 00000020 CpuMemCopy
|
00003800 g F .text 00000020 CpuMemCopy
|
||||||
00006644 g F .text 00000000 _fini
|
00002364 g F .text 00000030 SharedParamsInit
|
||||||
00005190 g F .text 00000168 f_lseek
|
0000704c g F .text 00000000 _fini
|
||||||
00006368 g F .text 000000e0 uip_arp_arpin
|
0000540c g F .text 00000168 f_lseek
|
||||||
00002ae4 g F .text 00000018 ComGetActiveInterfaceMaxTxLen
|
00006804 g F .text 000000e0 uip_arp_arpin
|
||||||
000036b0 g F .text 000000a8 UartReceivePacket
|
00002c8c g F .text 00000018 ComGetActiveInterfaceMaxTxLen
|
||||||
00002130 g F .text 00000008 FileGetFirmwareFilenameHook
|
0000392c g F .text 000000a8 UartReceivePacket
|
||||||
0000375c g F .text 00000004 CpuIrqEnable
|
0000217c g F .text 00000008 FileGetFirmwareFilenameHook
|
||||||
000008fc g F .text 00000060 EthernetMACAddrSet
|
000039d8 g F .text 00000004 CpuIrqEnable
|
||||||
20000064 g O .data 00000004 _impure_ptr
|
0000091c g F .text 00000060 EthernetMACAddrSet
|
||||||
00006308 g F .text 00000060 uip_arp_timer
|
200000a4 g O .data 00000004 _impure_ptr
|
||||||
20001244 g O .bss 00000002 uip_listenports
|
000067a4 g F .text 00000060 uip_arp_timer
|
||||||
20001248 g O .bss 00000004 uip_draddr
|
200012cc g O .bss 00000002 uip_listenports
|
||||||
000065d4 g F .text 00000024 __ascii_mbtowc
|
200012d0 g O .bss 00000004 uip_draddr
|
||||||
20000000 g .data 00000000 _data
|
00006fbc g F .text 00000024 __ascii_mbtowc
|
||||||
00000ad4 g F .text 00000044 EthernetPHYRead
|
20000040 g .data 00000000 _data
|
||||||
000052f8 g F .text 0000004c f_stat
|
00000af4 g F .text 00000044 EthernetPHYRead
|
||||||
00002988 g F .text 00000002 CopInit
|
00005574 g F .text 0000004c f_stat
|
||||||
00001678 g F .text 00000024 SSIDisable
|
00002b04 g F .text 00000002 CopInit
|
||||||
000035ac g F .text 00000008 NvmWrite
|
00002b9c g F .text 0000000c BackDoorGetExtension
|
||||||
00003550 g F .text 00000034 CpuStartUserProgram
|
00006a44 g F .text 0000000e timer_set
|
||||||
20002098 g .bss 00000000 _estack
|
00001698 g F .text 00000024 SSIDisable
|
||||||
000008a4 g F .text 00000058 EthernetConfigSet
|
00003828 g F .text 00000008 NvmWrite
|
||||||
000034b8 g F .text 00000048 FlashVerifyChecksum
|
000037b8 g F .text 00000048 CpuStartUserProgram
|
||||||
00002c44 g F .text 0000003c NetTransmitPacket
|
20002160 g .bss 00000000 _estack
|
||||||
200001dc g .data 00000000 _edata
|
000008c4 g F .text 00000058 EthernetConfigSet
|
||||||
0000235c g F .text 00000014 FileIsIdle
|
00003720 g F .text 00000048 FlashVerifyChecksum
|
||||||
000056cc g F .text 0000000a htons
|
00002e8c g F .text 00000048 NetTransmitPacket
|
||||||
00004ee0 g F .text 000001a4 f_write
|
2000021c g .data 00000000 _edata
|
||||||
|
000024d8 g F .text 00000014 FileIsIdle
|
||||||
|
0000596c g F .text 0000000a htons
|
||||||
|
00006f88 g F .text 00000008 dhcpc_appcall
|
||||||
|
0000515c g F .text 000001a4 f_write
|
||||||
00000000 g O .text 000000f0 _vectab
|
00000000 g O .text 000000f0 _vectab
|
||||||
00000c48 g F .text 00000068 FlashUserGet
|
00000c68 g F .text 00000068 FlashUserGet
|
||||||
00000738 g F .text 00000034 GPIOPinTypeUART
|
00000758 g F .text 00000034 GPIOPinTypeUART
|
||||||
00004bfc g F .text 00000178 f_open
|
20000000 g .shared 00000000 __shared_start__
|
||||||
00001d84 g F .text 000000ac disk_write
|
00004e78 g F .text 00000178 f_open
|
||||||
000006d0 g F .text 00000034 GPIOPinTypeGPIOOutput
|
00001dbc g F .text 000000ac disk_write
|
||||||
000021bc g F .text 00000048 FileFirmwareUpdateLogHook
|
000006f0 g F .text 00000034 GPIOPinTypeGPIOOutput
|
||||||
00002afc g F .text 00000008 ComIsConnected
|
00002208 g F .text 00000048 FileFirmwareUpdateLogHook
|
||||||
|
00002ca4 g F .text 00000008 ComIsConnected
|
||||||
00000000 w *UND* 00000000 __sf_fake_stdout
|
00000000 w *UND* 00000000 __sf_fake_stdout
|
||||||
00000a40 g F .text 00000038 EthernetIntDisable
|
00000a60 g F .text 00000038 EthernetIntDisable
|
||||||
00006eb4 g O .text 00000101 _ctype_
|
000078c6 g O .text 00000101 _ctype_
|
||||||
00000aa0 g F .text 00000034 EthernetIntClear
|
00000ac0 g F .text 00000034 EthernetIntClear
|
||||||
000020f0 g F .text 00000040 FileIsFirmwareUpdateRequestedHook
|
0000213c g F .text 00000040 FileIsFirmwareUpdateRequestedHook
|
||||||
00000384 g F .text 00000020 UARTBusy
|
00000384 g F .text 00000020 UARTBusy
|
||||||
0000563c g F .text 0000005c uip_init
|
000058b8 g F .text 00000080 uip_init
|
||||||
00002acc g F .text 00000018 ComGetActiveInterfaceMaxRxLen
|
00001724 g F .text 00000008 clock_time
|
||||||
00002c80 g F .text 0000000a NetReceivePacket
|
00002ba8 g F .text 0000001c BackDoorRestartTimer
|
||||||
|
00002c74 g F .text 00000018 ComGetActiveInterfaceMaxRxLen
|
||||||
|
00002ed4 g F .text 00000018 NetReceivePacket
|
||||||
000004c8 g F .text 00000064 GPIODirModeSet
|
000004c8 g F .text 00000064 GPIODirModeSet
|
||||||
00001cfc g F .text 00000088 disk_read
|
00001d34 g F .text 00000088 disk_read
|
||||||
000029c8 g F .text 00000044 BackDoorCheck
|
00002b44 g F .text 0000004c BackDoorCheck
|
||||||
20001898 g .bss 00000000 _stack
|
20001960 g .bss 00000000 _stack
|
||||||
2000124c g O .bss 00000004 uip_netmask
|
00002394 g F .text 00000030 SharedParamsReadByIndex
|
||||||
20001250 g O .bss 00000004 uip_hostaddr
|
200012d4 g O .bss 00000004 uip_netmask
|
||||||
000054a4 g F .text 0000003c ff_convert
|
00002e70 g F .text 0000001c NetDeferredInit
|
||||||
00003148 g F .text 00000010 TimerGet
|
200012d8 g O .bss 00000004 uip_hostaddr
|
||||||
00002c8c g F .text 00000070 NetApp
|
00005720 g F .text 0000003c ff_convert
|
||||||
|
000033b0 g F .text 00000010 TimerGet
|
||||||
|
00002eec g F .text 00000078 NetApp
|
||||||
00000000 w *UND* 00000000 _Jv_RegisterClasses
|
00000000 w *UND* 00000000 _Jv_RegisterClasses
|
||||||
0000021c g F .text 000000e8 UARTConfigSetExpClk
|
0000021c g F .text 000000e8 UARTConfigSetExpClk
|
||||||
00002bd8 g F .text 0000006c NetInit
|
00002dd0 g F .text 000000a0 NetInit
|
||||||
000011c4 g F .text 00000178 SysCtlClockSet
|
000011e4 g F .text 00000178 SysCtlClockSet
|
||||||
0000052c g F .text 0000014c GPIOPadConfigSet
|
0000052c g F .text 0000014c GPIOPadConfigSet
|
||||||
00003108 g F .text 00000024 TimerInit
|
00003370 g F .text 00000024 TimerInit
|
||||||
00000000 w *UND* 00000000 __register_frame_info
|
00000000 w *UND* 00000000 __register_frame_info
|
||||||
20001254 g O .bss 00000642 uip_buf
|
200012dc g O .bss 00000642 uip_buf
|
||||||
20000068 g O .data 0000016c __global_locale
|
200000a8 g O .data 0000016c __global_locale
|
||||||
00000b18 g F .text 00000058 FlashClear
|
00000b38 g F .text 00000058 FlashClear
|
||||||
000061dc g F .text 00000028 uip_send
|
00006674 g F .text 00000028 uip_send
|
||||||
20001896 g O .bss 00000002 uip_slen
|
00006cf0 g F .text 00000010 dhcpc_request
|
||||||
00002138 g F .text 00000028 FileFirmwareUpdateStartedHook
|
2000191e g O .bss 00000002 uip_slen
|
||||||
|
00002184 g F .text 00000028 FileFirmwareUpdateStartedHook
|
||||||
|
20001920 g O .bss 00000040 uip_udp_conns
|
||||||
000001b4 g F .text 00000030 UARTEnable
|
000001b4 g F .text 00000030 UARTEnable
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -50,7 +50,7 @@
|
||||||
/** \brief Motorola or Intel style byte ordering. */
|
/** \brief Motorola or Intel style byte ordering. */
|
||||||
#define BOOT_CPU_BYTE_ORDER_MOTOROLA (0)
|
#define BOOT_CPU_BYTE_ORDER_MOTOROLA (0)
|
||||||
/** \brief Enable/disable hook function call right before user program start. */
|
/** \brief Enable/disable hook function call right before user program start. */
|
||||||
#define BOOT_CPU_USER_PROGRAM_START_HOOK (0)
|
#define BOOT_CPU_USER_PROGRAM_START_HOOK (1)
|
||||||
|
|
||||||
|
|
||||||
/****************************************************************************************
|
/****************************************************************************************
|
||||||
|
@ -80,72 +80,56 @@
|
||||||
* the BOOT_COM_NET_ENABLE configurable to 1. The maximum amount of data bytes in a
|
* the BOOT_COM_NET_ENABLE configurable to 1. The maximum amount of data bytes in a
|
||||||
* message for data transmission and reception is set through BOOT_COM_NET_TX_MAX_DATA
|
* message for data transmission and reception is set through BOOT_COM_NET_TX_MAX_DATA
|
||||||
* and BOOT_COM_NET_RX_MAX_DATA, respectively. The default IP address is configured
|
* and BOOT_COM_NET_RX_MAX_DATA, respectively. The default IP address is configured
|
||||||
* with the macros BOOT_COM_NET_IPADDRx. The default netmask is configued with the macros
|
* with the macros BOOT_COM_NET_IPADDRx. The default netmask is configured with the
|
||||||
* BOOT_COM_NET_NETMASKx. The default gateway is configured with the macros
|
* macro BOOT_COM_NET_NETMASKx. The default gateway is configured with the macros
|
||||||
* BOOT_COM_NET_GATEWAYx. The bootloader acts and a TCP/IP server. The port the server
|
* BOOT_COM_NET_GATEWAYx. The bootloader acts and a TCP/IP server. The port the server
|
||||||
* listen on for connections is configured with BOOT_COM_NET_PORT.
|
* listen on for connections is configured with BOOT_COM_NET_PORT.
|
||||||
|
* In case the network switch/router supports a DHCP server, you can set configuration
|
||||||
|
* macro BOOT_COM_NET_DHCP_ENABLE to 1 to enable the DHCP client. In this case the
|
||||||
|
* DHCP client handles the automatic IP address assignment. In this case the macros for
|
||||||
|
* configuring the IP address, network mask and gateway address are no longer needed.
|
||||||
*/
|
*/
|
||||||
/** \brief Enable/disable the NET transport layer. */
|
/** \brief Enable/disable the NET transport layer. */
|
||||||
#define BOOT_COM_NET_ENABLE (1)
|
#define BOOT_COM_NET_ENABLE (1)
|
||||||
/** \brief Configure number of bytes in the target->host data packet. */
|
/** \brief Configure number of bytes in the target->host data packet. */
|
||||||
#define BOOT_COM_NET_TX_MAX_DATA (64)
|
#define BOOT_COM_NET_TX_MAX_DATA (64)
|
||||||
/** \brief Configure number of bytes in the host->target data packet. */
|
/** \brief Configure number of bytes in the host->target data packet. */
|
||||||
#define BOOT_COM_NET_RX_MAX_DATA (64)
|
#define BOOT_COM_NET_RX_MAX_DATA (64)
|
||||||
/** \brief Configure the port that the TCP/IP server listens on */
|
/** \brief Configure the port that the TCP/IP server listens on */
|
||||||
#define BOOT_COM_NET_PORT (1000)
|
#define BOOT_COM_NET_PORT (1000)
|
||||||
|
/** \brief Enable/disable DHCP client for automatically obtaining an IP address. */
|
||||||
|
#define BOOT_COM_NET_DHCP_ENABLE (1)
|
||||||
/** \brief Configure the 1st byte of the IP address */
|
/** \brief Configure the 1st byte of the IP address */
|
||||||
#define BOOT_COM_NET_IPADDR0 (169)
|
#define BOOT_COM_NET_IPADDR0 (192)
|
||||||
/** \brief Configure the 2nd byte of the IP address */
|
/** \brief Configure the 2nd byte of the IP address */
|
||||||
#define BOOT_COM_NET_IPADDR1 (254)
|
#define BOOT_COM_NET_IPADDR1 (168)
|
||||||
/** \brief Configure the 3rd byte of the IP address */
|
/** \brief Configure the 3rd byte of the IP address */
|
||||||
#define BOOT_COM_NET_IPADDR2 (19)
|
#define BOOT_COM_NET_IPADDR2 (178)
|
||||||
/** \brief Configure the 4th byte of the IP address */
|
/** \brief Configure the 4th byte of the IP address */
|
||||||
#define BOOT_COM_NET_IPADDR3 (63)
|
#define BOOT_COM_NET_IPADDR3 (50)
|
||||||
/** \brief Configure the 1st byte of the network mask */
|
/** \brief Configure the 1st byte of the network mask */
|
||||||
#define BOOT_COM_NET_NETMASK0 (255)
|
#define BOOT_COM_NET_NETMASK0 (255)
|
||||||
/** \brief Configure the 2nd byte of the network mask */
|
/** \brief Configure the 2nd byte of the network mask */
|
||||||
#define BOOT_COM_NET_NETMASK1 (255)
|
#define BOOT_COM_NET_NETMASK1 (255)
|
||||||
/** \brief Configure the 3rd byte of the network mask */
|
/** \brief Configure the 3rd byte of the network mask */
|
||||||
#define BOOT_COM_NET_NETMASK2 (0)
|
#define BOOT_COM_NET_NETMASK2 (255)
|
||||||
/** \brief Configure the 4th byte of the network mask */
|
/** \brief Configure the 4th byte of the network mask */
|
||||||
#define BOOT_COM_NET_NETMASK3 (0)
|
#define BOOT_COM_NET_NETMASK3 (0)
|
||||||
/** \brief Configure the 1st byte of the gateway address */
|
/** \brief Configure the 1st byte of the gateway address */
|
||||||
#define BOOT_COM_NET_GATEWAY0 (169)
|
#define BOOT_COM_NET_GATEWAY0 (192)
|
||||||
/** \brief Configure the 2nd byte of the gateway address */
|
/** \brief Configure the 2nd byte of the gateway address */
|
||||||
#define BOOT_COM_NET_GATEWAY1 (254)
|
#define BOOT_COM_NET_GATEWAY1 (168)
|
||||||
/** \brief Configure the 3rd byte of the gateway address */
|
/** \brief Configure the 3rd byte of the gateway address */
|
||||||
#define BOOT_COM_NET_GATEWAY2 (19)
|
#define BOOT_COM_NET_GATEWAY2 (178)
|
||||||
/** \brief Configure the 4th byte of the gateway address */
|
/** \brief Configure the 4th byte of the gateway address */
|
||||||
#define BOOT_COM_NET_GATEWAY3 (1)
|
#define BOOT_COM_NET_GATEWAY3 (1)
|
||||||
/** \brief Enable/disable a hook function that is called when the IP address is about
|
/** \brief Enable/disable the deferred initialization mechanism. When enabled, the
|
||||||
* to be set. This allows a dynamic override of the BOOT_COM_NET_IPADDRx values.
|
* communication interface is only initialized when: (a) no valid user program
|
||||||
|
* is detected, or (b) when CpuUserProgramStartHook() returns BLT_FALSE. Your
|
||||||
|
* bootloader application can explicitly initialize the communication interface
|
||||||
|
* by calling ComDeferredInit().
|
||||||
*/
|
*/
|
||||||
#define BOOT_COM_NET_IPADDR_HOOK_ENABLE (0)
|
#define BOOT_COM_NET_DEFERRED_INIT_ENABLE (1)
|
||||||
/** \brief Enable/disable a hook function that is called when the netmask is about
|
|
||||||
* to be set. This allows a dynamic override of the BOOT_COM_NET_NETMASKx values.
|
|
||||||
*/
|
|
||||||
#define BOOT_COM_NET_NETMASK_HOOK_ENABLE (0)
|
|
||||||
/** \brief Enable/disable a hook function that is called when the gateway address is
|
|
||||||
* about to be set. This allows a dynamic override of the BOOT_COM_NET_GATEWAYx
|
|
||||||
* values.
|
|
||||||
*/
|
|
||||||
#define BOOT_COM_NET_GATEWAY_HOOK_ENABLE (0)
|
|
||||||
|
|
||||||
|
|
||||||
/****************************************************************************************
|
|
||||||
* B A C K D O O R C O N F I G U R A T I O N
|
|
||||||
****************************************************************************************/
|
|
||||||
#if (BOOT_COM_NET_ENABLE > 0)
|
|
||||||
/* Override the default time that the backdoor is open if firmware updates via TCP/IP
|
|
||||||
* are supported. in this case a reactivation of the bootloader results in a re-
|
|
||||||
* initialization of the ethernet MAC. when directly connected to the ethernet port of
|
|
||||||
* a PC this will go relatively fast (depending on what MS Windows is being used), but
|
|
||||||
* when connected to the network via a router this can take several seconds. feel free to
|
|
||||||
* shorten/lengthen this time for finetuning. the only downside of a long backdoor open
|
|
||||||
* time is that the starting of the user program will also be delayed for this time.
|
|
||||||
*/
|
|
||||||
#define BOOT_BACKDOOR_ENTRY_TIMEOUT_MS (10000)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
/****************************************************************************************
|
/****************************************************************************************
|
||||||
|
|
|
@ -30,6 +30,8 @@
|
||||||
* Include files
|
* Include files
|
||||||
****************************************************************************************/
|
****************************************************************************************/
|
||||||
#include "boot.h" /* bootloader generic header */
|
#include "boot.h" /* bootloader generic header */
|
||||||
|
#include "inc/hw_types.h"
|
||||||
|
#include "driverlib/gpio.h"
|
||||||
#if (BOOT_FILE_LOGGING_ENABLE > 0)
|
#if (BOOT_FILE_LOGGING_ENABLE > 0)
|
||||||
#include "inc/hw_memmap.h"
|
#include "inc/hw_memmap.h"
|
||||||
#include "inc/hw_types.h"
|
#include "inc/hw_types.h"
|
||||||
|
@ -81,6 +83,11 @@ blt_bool BackDoorEntryHook(void)
|
||||||
****************************************************************************************/
|
****************************************************************************************/
|
||||||
blt_bool CpuUserProgramStartHook(void)
|
blt_bool CpuUserProgramStartHook(void)
|
||||||
{
|
{
|
||||||
|
/* do not start the user program is the pushbutton is pressed */
|
||||||
|
if (GPIOPinRead(GPIO_PORTF_BASE, GPIO_PIN_1) == 0)
|
||||||
|
{
|
||||||
|
return BLT_FALSE;
|
||||||
|
}
|
||||||
/* okay to start the user program */
|
/* okay to start the user program */
|
||||||
return BLT_TRUE;
|
return BLT_TRUE;
|
||||||
} /*** end of CpuUserProgramStartHook ***/
|
} /*** end of CpuUserProgramStartHook ***/
|
||||||
|
@ -193,79 +200,6 @@ blt_bool NvmWriteChecksumHook(void)
|
||||||
#endif /* BOOT_NVM_CHECKSUM_HOOKS_ENABLE > 0 */
|
#endif /* BOOT_NVM_CHECKSUM_HOOKS_ENABLE > 0 */
|
||||||
|
|
||||||
|
|
||||||
/****************************************************************************************
|
|
||||||
* N E T W O R K I N T E R F A C E H O O K F U N C T I O N S
|
|
||||||
****************************************************************************************/
|
|
||||||
#if (BOOT_COM_NET_IPADDR_HOOK_ENABLE > 0)
|
|
||||||
/************************************************************************************//**
|
|
||||||
** \brief Callback that gets called when the IP address is about to be configured.
|
|
||||||
** \param ipAddrArray 4-byte array where the IP address should be stored.
|
|
||||||
** \return none.
|
|
||||||
**
|
|
||||||
****************************************************************************************/
|
|
||||||
void NetIpAddressHook(blt_int8u *ipAddrArray)
|
|
||||||
{
|
|
||||||
/* This hook function allows a dynamic configuration of the IP address. This could for
|
|
||||||
* example be used if the bootloader is activated from a running user program and
|
|
||||||
* should have the same IP address as the user program. This IP address could be stored
|
|
||||||
* at a fixed location in RAM which can be read here. For now the example implemen-
|
|
||||||
* tation simply configures the bootloader's default IP address.
|
|
||||||
*/
|
|
||||||
ipAddrArray[0] = BOOT_COM_NET_IPADDR0;
|
|
||||||
ipAddrArray[1] = BOOT_COM_NET_IPADDR1;
|
|
||||||
ipAddrArray[2] = BOOT_COM_NET_IPADDR2;
|
|
||||||
ipAddrArray[3] = BOOT_COM_NET_IPADDR3;
|
|
||||||
} /*** end of NetIpAddressHook ***/
|
|
||||||
#endif /* BOOT_COM_NET_IPADDR_HOOK_ENABLE > 0 */
|
|
||||||
|
|
||||||
|
|
||||||
#if (BOOT_COM_NET_NETMASK_HOOK_ENABLE > 0)
|
|
||||||
/************************************************************************************//**
|
|
||||||
** \brief Callback that gets called when the network mask is about to be configured.
|
|
||||||
** \param netMaskArray 4-byte array where the network mask should be stored.
|
|
||||||
** \return none.
|
|
||||||
**
|
|
||||||
****************************************************************************************/
|
|
||||||
void NetNetworkMaskHook(blt_int8u *netMaskArray)
|
|
||||||
{
|
|
||||||
/* This hook function allows a dynamic configuration of the network mask. This could
|
|
||||||
* for example be used if the bootloader is activated from a running user program and
|
|
||||||
* should have the same network mask as the user program. This network mask could be
|
|
||||||
* stored at a fixed location in RAM which can be read here. For now the example
|
|
||||||
* implementation simply configures the bootloader's default network mask.
|
|
||||||
*/
|
|
||||||
netMaskArray[0] = BOOT_COM_NET_NETMASK0;
|
|
||||||
netMaskArray[1] = BOOT_COM_NET_NETMASK1;
|
|
||||||
netMaskArray[2] = BOOT_COM_NET_NETMASK2;
|
|
||||||
netMaskArray[3] = BOOT_COM_NET_NETMASK3;
|
|
||||||
} /*** end of NetNetworkMaskHook ***/
|
|
||||||
#endif /* BOOT_COM_NET_NETMASK_HOOK_ENABLE > 0 */
|
|
||||||
|
|
||||||
|
|
||||||
#if (BOOT_COM_NET_GATEWAY_HOOK_ENABLE > 0)
|
|
||||||
/************************************************************************************//**
|
|
||||||
** \brief Callback that gets called when the gateway address is about to be
|
|
||||||
** configured.
|
|
||||||
** \param gatewayAddrArray 4-byte array where the gateway address should be stored.
|
|
||||||
** \return none.
|
|
||||||
**
|
|
||||||
****************************************************************************************/
|
|
||||||
void NetGatewayAddressHook(blt_int8u *gatewayAddrArray)
|
|
||||||
{
|
|
||||||
/* This hook function allows a dynamic configuration of the network mask. This could
|
|
||||||
* for example be used if the bootloader is activated from a running user program and
|
|
||||||
* should have the same network mask as the user program. This network mask could be
|
|
||||||
* stored at a fixed location in RAM which can be read here. For now the example
|
|
||||||
* implementation simply configures the bootloader's default network mask.
|
|
||||||
*/
|
|
||||||
gatewayAddrArray[0] = BOOT_COM_NET_GATEWAY0;
|
|
||||||
gatewayAddrArray[1] = BOOT_COM_NET_GATEWAY1;
|
|
||||||
gatewayAddrArray[2] = BOOT_COM_NET_GATEWAY2;
|
|
||||||
gatewayAddrArray[3] = BOOT_COM_NET_GATEWAY3;
|
|
||||||
} /*** end of NetGatewayAddressHook ***/
|
|
||||||
#endif /* BOOT_COM_NET_GATEWAY_HOOK_ENABLE > 0 */
|
|
||||||
|
|
||||||
|
|
||||||
/****************************************************************************************
|
/****************************************************************************************
|
||||||
* W A T C H D O G D R I V E R H O O K F U N C T I O N S
|
* W A T C H D O G D R I V E R H O O K F U N C T I O N S
|
||||||
****************************************************************************************/
|
****************************************************************************************/
|
||||||
|
|
|
@ -59,6 +59,10 @@
|
||||||
#define NETDEV_DEFAULT_MACADDR5 (0x45)
|
#define NETDEV_DEFAULT_MACADDR5 (0x45)
|
||||||
|
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
static struct uip_eth_addr macAddress;
|
||||||
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
void netdev_init(void)
|
void netdev_init(void)
|
||||||
{
|
{
|
||||||
|
@ -142,6 +146,18 @@ void netdev_init_mac(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
void netdev_get_mac(unsigned char * mac_addr)
|
||||||
|
{
|
||||||
|
mac_addr[0] = macAddress.addr[0];
|
||||||
|
mac_addr[1] = macAddress.addr[1];
|
||||||
|
mac_addr[2] = macAddress.addr[2];
|
||||||
|
mac_addr[3] = macAddress.addr[3];
|
||||||
|
mac_addr[4] = macAddress.addr[4];
|
||||||
|
mac_addr[5] = macAddress.addr[5];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
unsigned int netdev_read(void)
|
unsigned int netdev_read(void)
|
||||||
{
|
{
|
||||||
|
|
|
@ -40,6 +40,7 @@
|
||||||
|
|
||||||
void netdev_init(void);
|
void netdev_init(void);
|
||||||
void netdev_init_mac(void);
|
void netdev_init_mac(void);
|
||||||
|
void netdev_get_mac(unsigned char * mac_addr);
|
||||||
unsigned int netdev_read(void);
|
unsigned int netdev_read(void);
|
||||||
void netdev_send(void);
|
void netdev_send(void);
|
||||||
|
|
||||||
|
|
|
@ -98,6 +98,27 @@ typedef unsigned short uip_stats_t;
|
||||||
*/
|
*/
|
||||||
#define UIP_CONF_MAX_LISTENPORTS 1
|
#define UIP_CONF_MAX_LISTENPORTS 1
|
||||||
|
|
||||||
|
/**
|
||||||
|
* UDP support on or off
|
||||||
|
*
|
||||||
|
* \hideinitializer
|
||||||
|
*/
|
||||||
|
#define UIP_CONF_UDP 1
|
||||||
|
|
||||||
|
/**
|
||||||
|
* UDP Maximum Connections
|
||||||
|
*
|
||||||
|
* \hideinitializer
|
||||||
|
*/
|
||||||
|
#define UIP_CONF_UDP_CONNS 1
|
||||||
|
|
||||||
|
/**
|
||||||
|
* UDP checksums on or off
|
||||||
|
*
|
||||||
|
* \hideinitializer
|
||||||
|
*/
|
||||||
|
#define UIP_CONF_UDP_CHECKSUMS 0
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* uIP buffer size.
|
* uIP buffer size.
|
||||||
*
|
*
|
||||||
|
@ -119,20 +140,6 @@ typedef unsigned short uip_stats_t;
|
||||||
*/
|
*/
|
||||||
#define UIP_CONF_LOGGING 0
|
#define UIP_CONF_LOGGING 0
|
||||||
|
|
||||||
/**
|
|
||||||
* UDP support on or off
|
|
||||||
*
|
|
||||||
* \hideinitializer
|
|
||||||
*/
|
|
||||||
#define UIP_CONF_UDP 0
|
|
||||||
|
|
||||||
/**
|
|
||||||
* UDP checksums on or off
|
|
||||||
*
|
|
||||||
* \hideinitializer
|
|
||||||
*/
|
|
||||||
#define UIP_CONF_UDP_CHECKSUMS 1
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* uIP statistics on or off
|
* uIP statistics on or off
|
||||||
*
|
*
|
||||||
|
@ -140,10 +147,12 @@ typedef unsigned short uip_stats_t;
|
||||||
*/
|
*/
|
||||||
#define UIP_CONF_STATISTICS 0
|
#define UIP_CONF_STATISTICS 0
|
||||||
|
|
||||||
|
|
||||||
/* Here we include the header file for the application(s) we use in
|
/* Here we include the header file for the application(s) we use in
|
||||||
our project. */
|
our project. */
|
||||||
#include "boot.h"
|
#include "boot.h"
|
||||||
#include "net.h"
|
#include "net.h"
|
||||||
|
#include "dhcpc.h"
|
||||||
|
|
||||||
#endif /* __UIP_CONF_H__ */
|
#endif /* __UIP_CONF_H__ */
|
||||||
|
|
||||||
|
|
|
@ -40,6 +40,7 @@
|
||||||
#if (BOOT_FILE_LOGGING_ENABLE > 0)
|
#if (BOOT_FILE_LOGGING_ENABLE > 0)
|
||||||
#include "driverlib/uartlib.h"
|
#include "driverlib/uartlib.h"
|
||||||
#endif
|
#endif
|
||||||
|
#include "shared_params.h" /* Shared parameters header */
|
||||||
|
|
||||||
/****************************************************************************************
|
/****************************************************************************************
|
||||||
* Function prototypes
|
* Function prototypes
|
||||||
|
@ -55,11 +56,44 @@ static void Init(void);
|
||||||
****************************************************************************************/
|
****************************************************************************************/
|
||||||
int main(void)
|
int main(void)
|
||||||
{
|
{
|
||||||
|
blt_int8u deferredInitRequestFlag = 0;
|
||||||
|
|
||||||
/* initialize the microcontroller */
|
/* initialize the microcontroller */
|
||||||
Init();
|
Init();
|
||||||
|
/* initialize the shared parameters module */
|
||||||
|
SharedParamsInit();
|
||||||
/* initialize the bootloader */
|
/* initialize the bootloader */
|
||||||
BootInit();
|
BootInit();
|
||||||
|
#if (BOOT_COM_DEFERRED_INIT_ENABLE == 1)
|
||||||
|
/* the bootloader is configured to NOT initialize the TCP/IP network stack by default
|
||||||
|
* to bypass unnecessary delay times before starting the user program. the TCP/IP net-
|
||||||
|
* work tack is now only initialized when: (a) no valid user program is detected, or
|
||||||
|
* (b) a forced backdoor entry occurred (CpuUserProgramStartHook() returned BLT_FALSE).
|
||||||
|
*
|
||||||
|
* these demo bootloader and user programs have one extra feature implemented for
|
||||||
|
* demonstration purposes. the demo user program can detect firmware update requests
|
||||||
|
* from the TCP/IP network in which case it activates the bootloader. But...the
|
||||||
|
* TCP/IP network stack will not be initialized in this situation. for this reason
|
||||||
|
* the shared parameter module was integrated in both the bootloader and user program.
|
||||||
|
* more information about the shared parameter module can be found here:
|
||||||
|
* https://www.feaser.com/en/blog/?p=216
|
||||||
|
*
|
||||||
|
* the shared parameter at the first index (0) contains a flag. this flag is set to
|
||||||
|
* 1, right before the user program activates this bootloader, to explicitly request
|
||||||
|
* the bootloader to initialize the TCP/IP network stack. this makes it possible for
|
||||||
|
* a firmware update to proceed. the code here reads out this flag and performs the
|
||||||
|
* TCP/IP network stack initialization when requested.
|
||||||
|
*/
|
||||||
|
SharedParamsReadByIndex(0, &deferredInitRequestFlag);
|
||||||
|
if (deferredInitRequestFlag == 1)
|
||||||
|
{
|
||||||
|
/* explicitly initialize all communication interface for which the deferred
|
||||||
|
* initialization feature was enabled.
|
||||||
|
*/
|
||||||
|
ComDeferredInit();
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/* start the infinite program loop */
|
/* start the infinite program loop */
|
||||||
while (1)
|
while (1)
|
||||||
{
|
{
|
||||||
|
@ -81,6 +115,14 @@ static void Init(void)
|
||||||
{
|
{
|
||||||
/* set the clocking to run at 50MHz from the PLL */
|
/* set the clocking to run at 50MHz from the PLL */
|
||||||
SysCtlClockSet(SYSCTL_SYSDIV_4 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN | SYSCTL_XTAL_8MHZ);
|
SysCtlClockSet(SYSCTL_SYSDIV_4 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN | SYSCTL_XTAL_8MHZ);
|
||||||
|
|
||||||
|
/* initialize the status button as a digital input. it is used to override the
|
||||||
|
* starting of the user program.
|
||||||
|
*/
|
||||||
|
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
|
||||||
|
GPIODirModeSet(GPIO_PORTF_BASE, GPIO_PIN_1, GPIO_DIR_MODE_IN);
|
||||||
|
GPIOPadConfigSet(GPIO_PORTF_BASE, GPIO_PIN_1, GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD_WPU);
|
||||||
|
|
||||||
#if (BOOT_COM_UART_ENABLE > 0)
|
#if (BOOT_COM_UART_ENABLE > 0)
|
||||||
#if (BOOT_COM_UART_CHANNEL_INDEX == 0)
|
#if (BOOT_COM_UART_CHANNEL_INDEX == 0)
|
||||||
/* enable and configure UART0 related peripherals and pins */
|
/* enable and configure UART0 related peripherals and pins */
|
||||||
|
|
|
@ -82,6 +82,8 @@ PROJ_FILES += ../../../Source/third_party/uip/uip/uip_timer.h
|
||||||
PROJ_FILES += ../../../Source/third_party/uip/uip/uiplib.c
|
PROJ_FILES += ../../../Source/third_party/uip/uip/uiplib.c
|
||||||
PROJ_FILES += ../../../Source/third_party/uip/uip/uiplib.h
|
PROJ_FILES += ../../../Source/third_party/uip/uip/uiplib.h
|
||||||
PROJ_FILES += ../../../Source/third_party/uip/uip/uipopt.h
|
PROJ_FILES += ../../../Source/third_party/uip/uip/uipopt.h
|
||||||
|
PROJ_FILES += ../../../Source/third_party/uip/apps/dhcpc/dhcpc.c
|
||||||
|
PROJ_FILES += ../../../Source/third_party/uip/apps/dhcpc/dhcpc.h
|
||||||
|
|
||||||
|
|
||||||
#|--------------------------------------------------------------------------------------|
|
#|--------------------------------------------------------------------------------------|
|
||||||
|
|
|
@ -1,13 +1,25 @@
|
||||||
MEMORY
|
MEMORY
|
||||||
{
|
{
|
||||||
FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 32K
|
FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 32K
|
||||||
SRAM (rwx) : ORIGIN = 0x20000000, LENGTH = 64K
|
SHARED (rwx) : ORIGIN = 0x20000000, LENGTH = 64
|
||||||
|
SRAM (rwx) : ORIGIN = 0x20000040, LENGTH = 64K - 64
|
||||||
}
|
}
|
||||||
|
|
||||||
SECTIONS
|
SECTIONS
|
||||||
{
|
{
|
||||||
__STACKSIZE__ = 2048;
|
__STACKSIZE__ = 2048;
|
||||||
|
|
||||||
|
.shared (NOLOAD):
|
||||||
|
{
|
||||||
|
. = ALIGN(4);
|
||||||
|
__shared_start__ = .;
|
||||||
|
*(.shared)
|
||||||
|
*(.shared.*)
|
||||||
|
KEEP(*(.shared))
|
||||||
|
. = ALIGN(4);
|
||||||
|
__shared_end__ = .;
|
||||||
|
} > SHARED
|
||||||
|
|
||||||
.text :
|
.text :
|
||||||
{
|
{
|
||||||
KEEP(*(.isr_vector))
|
KEEP(*(.isr_vector))
|
||||||
|
|
|
@ -0,0 +1,301 @@
|
||||||
|
/************************************************************************************//**
|
||||||
|
* \file Demo/ARMCM3_LM3S_EK_LM3S6965_GCC/Boot/shared_params.c
|
||||||
|
* \brief Shared RAM parameters source file.
|
||||||
|
* \ingroup Boot_ARMCM3_LM3S_EK_LM3S6965_GCC
|
||||||
|
* \internal
|
||||||
|
*----------------------------------------------------------------------------------------
|
||||||
|
* C O P Y R I G H T
|
||||||
|
*----------------------------------------------------------------------------------------
|
||||||
|
* Copyright (c) 2018 by Feaser http://www.feaser.com All rights reserved
|
||||||
|
*
|
||||||
|
*----------------------------------------------------------------------------------------
|
||||||
|
* L I C E N S E
|
||||||
|
*----------------------------------------------------------------------------------------
|
||||||
|
* This file is part of OpenBLT. OpenBLT is free software: you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU General Public License as published by the Free
|
||||||
|
* Software Foundation, either version 3 of the License, or (at your option) any later
|
||||||
|
* version.
|
||||||
|
*
|
||||||
|
* OpenBLT is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
|
||||||
|
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
||||||
|
* PURPOSE. See the GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You have received a copy of the GNU General Public License along with OpenBLT. It
|
||||||
|
* should be located in ".\Doc\license.html". If not, contact Feaser to obtain a copy.
|
||||||
|
*
|
||||||
|
* \endinternal
|
||||||
|
****************************************************************************************/
|
||||||
|
|
||||||
|
/****************************************************************************************
|
||||||
|
* Include files
|
||||||
|
****************************************************************************************/
|
||||||
|
#include <stddef.h> /* Standard definitions (NULL). */
|
||||||
|
#include "shared_params.h" /* Shared parameters header. */
|
||||||
|
|
||||||
|
|
||||||
|
/****************************************************************************************
|
||||||
|
* Macro definitions
|
||||||
|
****************************************************************************************/
|
||||||
|
/** \brief Constant parameter buffer identifier. This value is always located as the
|
||||||
|
* start of the buffer to validate the the RAM contains valid shared parameters.
|
||||||
|
*/
|
||||||
|
#define SHARED_PARAMS_BUFFER_ID (0xCE42E7A2u)
|
||||||
|
|
||||||
|
|
||||||
|
/****************************************************************************************
|
||||||
|
* Type definitions
|
||||||
|
****************************************************************************************/
|
||||||
|
/** \brief Layout of the shared parameters RAM buffer. */
|
||||||
|
typedef struct t_shared_params_buffer
|
||||||
|
{
|
||||||
|
/** \brief Fixed buffer identifier to validate that the RAM contains valid shared
|
||||||
|
* parameters.
|
||||||
|
*/
|
||||||
|
uint32_t identifier;
|
||||||
|
/** \brief Array for the actual parameter data. */
|
||||||
|
uint8_t data[SHARED_PARAMS_CFG_BUFFER_DATA_LEN];
|
||||||
|
/** \brief Checksum value of all the bytes in the buffer, excluding this checksum
|
||||||
|
* value of obvious reasons. The checksum is calculated as the Two's
|
||||||
|
* complement of the sum of the bytes.
|
||||||
|
*/
|
||||||
|
uint16_t checksum;
|
||||||
|
} tSharedParamsBuffer;
|
||||||
|
|
||||||
|
|
||||||
|
/****************************************************************************************
|
||||||
|
* Global data declarations
|
||||||
|
****************************************************************************************/
|
||||||
|
/** \brief Declaration of the actual parameter buffer that this module manages.
|
||||||
|
* \warning For the shared RAM parameters to work properly for sharing information
|
||||||
|
* between the bootloader and user program, it is important that this
|
||||||
|
* variable is linked to the exact same RAM address in both the bootloader
|
||||||
|
* and the user program. Additionally, it should be configured such that the
|
||||||
|
* C-startup code does NOT zero its contents during system initialization. This
|
||||||
|
* is the code that runs in the reset event handler, before function main() is
|
||||||
|
* called.
|
||||||
|
* For GCC based embedded toolchains, the solution is to assign this variable
|
||||||
|
* to a custom section, in this case called ".shared". Then in the linker
|
||||||
|
* script, add the following to the SECTIONS:
|
||||||
|
*
|
||||||
|
* .shared (NOLOAD) :
|
||||||
|
* {
|
||||||
|
* . = ALIGN(4);
|
||||||
|
* _sshared = .;
|
||||||
|
* __shared_start__ = _sshared;
|
||||||
|
* *(.shared)
|
||||||
|
* *(.shared.*)
|
||||||
|
* KEEP(*(.shared))
|
||||||
|
* . = ALIGN(4);
|
||||||
|
* _eshared = .;
|
||||||
|
* __shared_end__ = _eshared;
|
||||||
|
* } >SHARED
|
||||||
|
*
|
||||||
|
* Next, add a new MEMORY entry for SHARED at the start of RAM and reduce
|
||||||
|
* the length of the remaining RAM:
|
||||||
|
*
|
||||||
|
* SHARED (xrw) : ORIGIN = 0x200000C0, LENGTH = 64
|
||||||
|
* RAM (xrw) : ORIGIN = 0x20000100, LENGTH = 32K - 192 - 64
|
||||||
|
*
|
||||||
|
* Note that the previous example is for an STM32F0 microcontroller where
|
||||||
|
* the first 192 (0xC0) bytes in RAM are reserved for the user program
|
||||||
|
* vector table.
|
||||||
|
*
|
||||||
|
* \remark This same approach can be applied with other toolchains such as Keil MDK
|
||||||
|
* and IAR EWARM. Consult the compiler and linker user manuals of your
|
||||||
|
* toolchain to find out how to place a RAM variable at a fixed memory address
|
||||||
|
* and to prevent the C-startup code from zeroing its contents.
|
||||||
|
* Here are a few links to get you started:
|
||||||
|
* * IAR EWARM:
|
||||||
|
* https://www.iar.com/support/tech-notes/compiler/
|
||||||
|
* linker-error-for-absolute-located-variable/
|
||||||
|
* * Keil MDK:
|
||||||
|
* http://www.keil.com/support/docs/3480.htm
|
||||||
|
*/
|
||||||
|
static tSharedParamsBuffer sharedParamsBuffer __attribute__ ((section (".shared")));
|
||||||
|
|
||||||
|
|
||||||
|
/****************************************************************************************
|
||||||
|
* Function prototypes
|
||||||
|
****************************************************************************************/
|
||||||
|
static bool SharedParamsValidateBuffer(void);
|
||||||
|
static void SharedParamsWriteChecksum(void);
|
||||||
|
static bool SharedParamsVerifyChecksum(void);
|
||||||
|
static uint16_t SharedParamsCalculateChecksum(void);
|
||||||
|
|
||||||
|
|
||||||
|
/************************************************************************************//**
|
||||||
|
** \brief Initializes the shared RAM parameters module.
|
||||||
|
** \return none.
|
||||||
|
**
|
||||||
|
****************************************************************************************/
|
||||||
|
void SharedParamsInit(void)
|
||||||
|
{
|
||||||
|
uint32_t byteIdx;
|
||||||
|
|
||||||
|
/* The shared parameter buffer does not get initialized by the C-startup code. Another
|
||||||
|
* previously running program could have initialized it, in which case it is ready
|
||||||
|
* for use and nothing more needs to be done.
|
||||||
|
*/
|
||||||
|
if (!SharedParamsValidateBuffer())
|
||||||
|
{
|
||||||
|
/* The shared parameter buffer was not yet initialized by a running program. This
|
||||||
|
* typically happens after a cold reset where the RAM contents were lost. In this
|
||||||
|
* case we need to explicitly configure and initialize it, since the C-startup code
|
||||||
|
* was configured to not do this.
|
||||||
|
*
|
||||||
|
* The initialization consists of setting the buffer identifier, zeroing the
|
||||||
|
* actual parameter data and updating the checksum at the end.
|
||||||
|
*/
|
||||||
|
sharedParamsBuffer.identifier = SHARED_PARAMS_BUFFER_ID;
|
||||||
|
for (byteIdx=0; byteIdx < SHARED_PARAMS_CFG_BUFFER_DATA_LEN; byteIdx++)
|
||||||
|
{
|
||||||
|
sharedParamsBuffer.data[byteIdx] = 0;
|
||||||
|
}
|
||||||
|
SharedParamsWriteChecksum();
|
||||||
|
}
|
||||||
|
} /*** end of SharedParamsInit ***/
|
||||||
|
|
||||||
|
|
||||||
|
/************************************************************************************//**
|
||||||
|
** \brief Reads a data byte from the shared parameter buffer at the specified index.
|
||||||
|
** \param idx Index into the parameter data array. A valid value is between 0 and
|
||||||
|
** (SHARED_PARAMS_CFG_BUFFER_DATA_LEN - 1).
|
||||||
|
** \param value Pointer to where the read data value is stored.
|
||||||
|
** \return True if successful, false otherwise.
|
||||||
|
**
|
||||||
|
****************************************************************************************/
|
||||||
|
bool SharedParamsReadByIndex(uint32_t idx, uint8_t * value)
|
||||||
|
{
|
||||||
|
bool result = false;
|
||||||
|
|
||||||
|
/* Only continue if the buffer and the specified parameters are valid. */
|
||||||
|
if ( (SharedParamsValidateBuffer()) &&
|
||||||
|
(idx < SHARED_PARAMS_CFG_BUFFER_DATA_LEN) &&
|
||||||
|
(value != NULL) )
|
||||||
|
{
|
||||||
|
/* Read the value and update the result. */
|
||||||
|
*value = sharedParamsBuffer.data[idx];
|
||||||
|
result = true;
|
||||||
|
}
|
||||||
|
/* Give the result back to the caller. */
|
||||||
|
return result;
|
||||||
|
} /*** end of SharedParamsReadByIndex ***/
|
||||||
|
|
||||||
|
|
||||||
|
/************************************************************************************//**
|
||||||
|
** \brief Writes a data byte to the shared parameter buffer at the specified index.
|
||||||
|
** \param idx Index into the parameter data array. A valid value is between 0 and
|
||||||
|
** (SHARED_PARAMS_CFG_BUFFER_DATA_LEN - 1).
|
||||||
|
** \param value Value to write.
|
||||||
|
** \return True if successful, false otherwise.
|
||||||
|
**
|
||||||
|
****************************************************************************************/
|
||||||
|
bool SharedParamsWriteByIndex(uint32_t idx, uint8_t value)
|
||||||
|
{
|
||||||
|
bool result = false;
|
||||||
|
|
||||||
|
/* Only continue if the buffer and the specified parameters are valid. */
|
||||||
|
if ( (SharedParamsValidateBuffer()) &&
|
||||||
|
(idx < SHARED_PARAMS_CFG_BUFFER_DATA_LEN) )
|
||||||
|
{
|
||||||
|
/* Write the value. */
|
||||||
|
sharedParamsBuffer.data[idx] = value;
|
||||||
|
/* Update the checksum since the contents were just changed. */
|
||||||
|
SharedParamsWriteChecksum();
|
||||||
|
/* Update the result. */
|
||||||
|
result = true;
|
||||||
|
}
|
||||||
|
/* Give the result back to the caller. */
|
||||||
|
return result;
|
||||||
|
} /*** end of SharedParamsWriteByIndex ***/
|
||||||
|
|
||||||
|
|
||||||
|
/************************************************************************************//**
|
||||||
|
** \brief Validates the shared parameter buffer contents by looking at the table
|
||||||
|
** identifier and verifying its checksum.
|
||||||
|
** \return True if successful, false otherwise.
|
||||||
|
**
|
||||||
|
****************************************************************************************/
|
||||||
|
static bool SharedParamsValidateBuffer(void)
|
||||||
|
{
|
||||||
|
bool result = false;
|
||||||
|
|
||||||
|
/* Perform validation. */
|
||||||
|
if ( (sharedParamsBuffer.identifier == SHARED_PARAMS_BUFFER_ID) &&
|
||||||
|
(SharedParamsVerifyChecksum()) )
|
||||||
|
{
|
||||||
|
/* The shared parameter buffer is valid, so update the result value. */
|
||||||
|
result = true;
|
||||||
|
}
|
||||||
|
/* Give the result back to the caller. */
|
||||||
|
return result;
|
||||||
|
} /*** end of SharedParamsValitabeTable ***/
|
||||||
|
|
||||||
|
|
||||||
|
/************************************************************************************//**
|
||||||
|
** \brief Calculates and writes the checksum into the buffer.
|
||||||
|
** \return none.
|
||||||
|
**
|
||||||
|
****************************************************************************************/
|
||||||
|
static void SharedParamsWriteChecksum(void)
|
||||||
|
{
|
||||||
|
/* Calculate and write the checksum. */
|
||||||
|
sharedParamsBuffer.checksum = SharedParamsCalculateChecksum();
|
||||||
|
} /*** end of SharedParamsWriteChecksum ***/
|
||||||
|
|
||||||
|
|
||||||
|
/************************************************************************************//**
|
||||||
|
** \brief Calculates and verifies the checksum that is currently present in the
|
||||||
|
** buffer.
|
||||||
|
** \return True is the checksum is correct, false otherwise.
|
||||||
|
**
|
||||||
|
****************************************************************************************/
|
||||||
|
static bool SharedParamsVerifyChecksum(void)
|
||||||
|
{
|
||||||
|
bool result = false;
|
||||||
|
|
||||||
|
/* Calculate and verify the checksum. */
|
||||||
|
if (SharedParamsCalculateChecksum() == sharedParamsBuffer.checksum)
|
||||||
|
{
|
||||||
|
/* Checksum is correct, so update the result value. */
|
||||||
|
result = true;
|
||||||
|
}
|
||||||
|
/* Give the result back to the caller. */
|
||||||
|
return result;
|
||||||
|
} /*** end of SharedParamsVerifyChecksum ***/
|
||||||
|
|
||||||
|
|
||||||
|
/************************************************************************************//**
|
||||||
|
** \brief Calculates and returns the checksum value for the current contents in the
|
||||||
|
** buffer. The checksum is calculated by taking the sum of all bytes in the
|
||||||
|
** parameter buffer (excluding the checksum at the end) and them taking the
|
||||||
|
** two's complement value of it.
|
||||||
|
** \return The calculated checksum value.
|
||||||
|
**
|
||||||
|
****************************************************************************************/
|
||||||
|
static uint16_t SharedParamsCalculateChecksum(void)
|
||||||
|
{
|
||||||
|
uint16_t result = 0;
|
||||||
|
uint32_t byteIdx;
|
||||||
|
|
||||||
|
/* Add the identifier bytes to the checksum. */
|
||||||
|
result += (uint8_t)sharedParamsBuffer.identifier;
|
||||||
|
result += (uint8_t)(sharedParamsBuffer.identifier >> 8u);
|
||||||
|
result += (uint8_t)(sharedParamsBuffer.identifier >> 16u);
|
||||||
|
result += (uint8_t)(sharedParamsBuffer.identifier >> 24u);
|
||||||
|
/* Loop through the parameter data array. */
|
||||||
|
for (byteIdx=0; byteIdx<SHARED_PARAMS_CFG_BUFFER_DATA_LEN; byteIdx++)
|
||||||
|
{
|
||||||
|
/* Add parameter data byte to the checksum. */
|
||||||
|
result += (uint8_t)sharedParamsBuffer.data[byteIdx];
|
||||||
|
}
|
||||||
|
/* Determine one's complement. */
|
||||||
|
result = ~result;
|
||||||
|
/* Determine two's complement. */
|
||||||
|
result += 1;
|
||||||
|
/* Give the result back to the caller. */
|
||||||
|
return result;
|
||||||
|
} /*** end of SharedParamsCalculateChecksum ***/
|
||||||
|
|
||||||
|
|
||||||
|
/*********************************** end of shared_params.c ****************************/
|
|
@ -0,0 +1,57 @@
|
||||||
|
/************************************************************************************//**
|
||||||
|
* \file Demo/ARMCM3_LM3S_EK_LM3S6965_GCC/Boot/shared_params.h
|
||||||
|
* \brief Shared RAM parameters header file.
|
||||||
|
* \ingroup Boot_ARMCM3_LM3S_EK_LM3S6965_GCC
|
||||||
|
* \internal
|
||||||
|
*----------------------------------------------------------------------------------------
|
||||||
|
* C O P Y R I G H T
|
||||||
|
*----------------------------------------------------------------------------------------
|
||||||
|
* Copyright (c) 2018 by Feaser http://www.feaser.com All rights reserved
|
||||||
|
*
|
||||||
|
*----------------------------------------------------------------------------------------
|
||||||
|
* L I C E N S E
|
||||||
|
*----------------------------------------------------------------------------------------
|
||||||
|
* This file is part of OpenBLT. OpenBLT is free software: you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU General Public License as published by the Free
|
||||||
|
* Software Foundation, either version 3 of the License, or (at your option) any later
|
||||||
|
* version.
|
||||||
|
*
|
||||||
|
* OpenBLT is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
|
||||||
|
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
||||||
|
* PURPOSE. See the GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You have received a copy of the GNU General Public License along with OpenBLT. It
|
||||||
|
* should be located in ".\Doc\license.html". If not, contact Feaser to obtain a copy.
|
||||||
|
*
|
||||||
|
* \endinternal
|
||||||
|
****************************************************************************************/
|
||||||
|
#ifndef SHARED_PARAMS_H
|
||||||
|
#define SHARED_PARAMS_H
|
||||||
|
|
||||||
|
/****************************************************************************************
|
||||||
|
* Include files
|
||||||
|
****************************************************************************************/
|
||||||
|
#include <stdint.h> /* Standard integer types. */
|
||||||
|
#include <stdbool.h> /* Standard boolean types. */
|
||||||
|
|
||||||
|
|
||||||
|
/****************************************************************************************
|
||||||
|
* Configuration macros
|
||||||
|
****************************************************************************************/
|
||||||
|
/** \brief Configuration macro for specifying the size of the data inside the parameter
|
||||||
|
* buffer. This is the length in bytes of the actual parameter data, so
|
||||||
|
* excluding the bufferId and checksum.
|
||||||
|
*/
|
||||||
|
#define SHARED_PARAMS_CFG_BUFFER_DATA_LEN (56u)
|
||||||
|
|
||||||
|
|
||||||
|
/****************************************************************************************
|
||||||
|
* Function prototypes
|
||||||
|
****************************************************************************************/
|
||||||
|
void SharedParamsInit(void);
|
||||||
|
bool SharedParamsReadByIndex(uint32_t idx, uint8_t * value);
|
||||||
|
bool SharedParamsWriteByIndex(uint32_t idx, uint8_t value);
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* SHARED_PARAMS_H */
|
||||||
|
/*********************************** end of shared_params.h ****************************/
|
Binary file not shown.
|
@ -7,45 +7,50 @@ start address 0x00008000
|
||||||
|
|
||||||
Program Header:
|
Program Header:
|
||||||
LOAD off 0x00000000 vaddr 0x00000000 paddr 0x00000000 align 2**16
|
LOAD off 0x00000000 vaddr 0x00000000 paddr 0x00000000 align 2**16
|
||||||
filesz 0x0000a72c memsz 0x0000a72c flags r-x
|
filesz 0x0000b058 memsz 0x0000b058 flags r-x
|
||||||
LOAD off 0x00010000 vaddr 0x20000000 paddr 0x0000a72c align 2**16
|
LOAD off 0x00010040 vaddr 0x20000040 paddr 0x0000b058 align 2**16
|
||||||
filesz 0x00000008 memsz 0x00000b8c flags rw-
|
filesz 0x00000008 memsz 0x00000c0c flags rw-
|
||||||
|
LOAD off 0x00020000 vaddr 0x20000000 paddr 0x20000000 align 2**16
|
||||||
|
filesz 0x00000000 memsz 0x00000040 flags rw-
|
||||||
private flags = 5000200: [Version5 EABI] [soft-float ABI]
|
private flags = 5000200: [Version5 EABI] [soft-float ABI]
|
||||||
|
|
||||||
Sections:
|
Sections:
|
||||||
Idx Name Size VMA LMA File off Algn
|
Idx Name Size VMA LMA File off Algn
|
||||||
0 .text 0000272c 00008000 00008000 00008000 2**2
|
0 .shared 00000040 20000000 20000000 00020000 2**2
|
||||||
CONTENTS, ALLOC, LOAD, READONLY, CODE
|
|
||||||
1 .data 00000008 20000000 0000a72c 00010000 2**2
|
|
||||||
CONTENTS, ALLOC, LOAD, DATA
|
|
||||||
2 .bss 00000b84 20000008 0000a734 00010008 2**2
|
|
||||||
ALLOC
|
ALLOC
|
||||||
3 .ARM.attributes 00000029 00000000 00000000 00010008 2**0
|
1 .text 00003058 00008000 00008000 00008000 2**2
|
||||||
|
CONTENTS, ALLOC, LOAD, READONLY, CODE
|
||||||
|
2 .data 00000008 20000040 0000b058 00010040 2**2
|
||||||
|
CONTENTS, ALLOC, LOAD, DATA
|
||||||
|
3 .bss 00000c04 20000048 0000b060 00010048 2**2
|
||||||
|
ALLOC
|
||||||
|
4 .ARM.attributes 00000029 00000000 00000000 00010048 2**0
|
||||||
CONTENTS, READONLY
|
CONTENTS, READONLY
|
||||||
4 .comment 0000006e 00000000 00000000 00010031 2**0
|
5 .comment 0000006e 00000000 00000000 00010071 2**0
|
||||||
CONTENTS, READONLY
|
CONTENTS, READONLY
|
||||||
5 .debug_info 000065fb 00000000 00000000 0001009f 2**0
|
6 .debug_info 00007b79 00000000 00000000 000100df 2**0
|
||||||
CONTENTS, READONLY, DEBUGGING
|
CONTENTS, READONLY, DEBUGGING
|
||||||
6 .debug_abbrev 00001381 00000000 00000000 0001669a 2**0
|
7 .debug_abbrev 0000194f 00000000 00000000 00017c58 2**0
|
||||||
CONTENTS, READONLY, DEBUGGING
|
CONTENTS, READONLY, DEBUGGING
|
||||||
7 .debug_loc 00003dac 00000000 00000000 00017a1b 2**0
|
8 .debug_loc 0000450b 00000000 00000000 000195a7 2**0
|
||||||
CONTENTS, READONLY, DEBUGGING
|
CONTENTS, READONLY, DEBUGGING
|
||||||
8 .debug_aranges 00000838 00000000 00000000 0001b7c7 2**0
|
9 .debug_aranges 00000978 00000000 00000000 0001dab2 2**0
|
||||||
CONTENTS, READONLY, DEBUGGING
|
CONTENTS, READONLY, DEBUGGING
|
||||||
9 .debug_ranges 00000738 00000000 00000000 0001bfff 2**0
|
10 .debug_ranges 00000838 00000000 00000000 0001e42a 2**0
|
||||||
CONTENTS, READONLY, DEBUGGING
|
CONTENTS, READONLY, DEBUGGING
|
||||||
10 .debug_macro 000055c7 00000000 00000000 0001c737 2**0
|
11 .debug_macro 000070a8 00000000 00000000 0001ec62 2**0
|
||||||
CONTENTS, READONLY, DEBUGGING
|
CONTENTS, READONLY, DEBUGGING
|
||||||
11 .debug_line 00003380 00000000 00000000 00021cfe 2**0
|
12 .debug_line 000051e3 00000000 00000000 00025d0a 2**0
|
||||||
CONTENTS, READONLY, DEBUGGING
|
CONTENTS, READONLY, DEBUGGING
|
||||||
12 .debug_str 00023b30 00000000 00000000 0002507e 2**0
|
13 .debug_str 000266b4 00000000 00000000 0002aeed 2**0
|
||||||
CONTENTS, READONLY, DEBUGGING
|
CONTENTS, READONLY, DEBUGGING
|
||||||
13 .debug_frame 00001540 00000000 00000000 00048bb0 2**2
|
14 .debug_frame 00001870 00000000 00000000 000515a4 2**2
|
||||||
CONTENTS, READONLY, DEBUGGING
|
CONTENTS, READONLY, DEBUGGING
|
||||||
SYMBOL TABLE:
|
SYMBOL TABLE:
|
||||||
|
20000000 l d .shared 00000000 .shared
|
||||||
00008000 l d .text 00000000 .text
|
00008000 l d .text 00000000 .text
|
||||||
20000000 l d .data 00000000 .data
|
20000040 l d .data 00000000 .data
|
||||||
20000008 l d .bss 00000000 .bss
|
20000048 l d .bss 00000000 .bss
|
||||||
00000000 l d .ARM.attributes 00000000 .ARM.attributes
|
00000000 l d .ARM.attributes 00000000 .ARM.attributes
|
||||||
00000000 l d .comment 00000000 .comment
|
00000000 l d .comment 00000000 .comment
|
||||||
00000000 l d .debug_info 00000000 .debug_info
|
00000000 l d .debug_info 00000000 .debug_info
|
||||||
|
@ -59,13 +64,13 @@ SYMBOL TABLE:
|
||||||
00000000 l d .debug_frame 00000000 .debug_frame
|
00000000 l d .debug_frame 00000000 .debug_frame
|
||||||
00000000 l df *ABS* 00000000 vectors.c
|
00000000 l df *ABS* 00000000 vectors.c
|
||||||
00000000 l df *ABS* 00000000 crtstuff.c
|
00000000 l df *ABS* 00000000 crtstuff.c
|
||||||
0000a728 l O .text 00000000 __EH_FRAME_BEGIN__
|
0000b054 l O .text 00000000 __EH_FRAME_BEGIN__
|
||||||
000080f4 l F .text 00000000 __do_global_dtors_aux
|
000080f4 l F .text 00000000 __do_global_dtors_aux
|
||||||
20000008 l .bss 00000000 completed.8603
|
20000048 l .bss 00000000 completed.8603
|
||||||
20000004 l O .data 00000000 __do_global_dtors_aux_fini_array_entry
|
20000044 l O .data 00000000 __do_global_dtors_aux_fini_array_entry
|
||||||
00008118 l F .text 00000000 frame_dummy
|
00008118 l F .text 00000000 frame_dummy
|
||||||
2000000c l .bss 00000000 object.8608
|
2000004c l .bss 00000000 object.8608
|
||||||
20000000 l O .data 00000000 __frame_dummy_init_array_entry
|
20000040 l O .data 00000000 __frame_dummy_init_array_entry
|
||||||
00000000 l df *ABS* 00000000 systick.c
|
00000000 l df *ABS* 00000000 systick.c
|
||||||
00000000 l df *ABS* 00000000 flash.c
|
00000000 l df *ABS* 00000000 flash.c
|
||||||
00000000 l df *ABS* 00000000 gpio.c
|
00000000 l df *ABS* 00000000 gpio.c
|
||||||
|
@ -77,53 +82,81 @@ SYMBOL TABLE:
|
||||||
000088f4 l F .text 0000002c UARTBaseValid
|
000088f4 l F .text 0000002c UARTBaseValid
|
||||||
00000000 l df *ABS* 00000000 sysctl.c
|
00000000 l df *ABS* 00000000 sysctl.c
|
||||||
00008a9c l F .text 000001f8 SysCtlPeripheralValid
|
00008a9c l F .text 000001f8 SysCtlPeripheralValid
|
||||||
0000a694 l O .text 0000005c g_pulXtals
|
0000afb8 l O .text 0000005c g_pulXtals
|
||||||
0000a708 l O .text 0000000c g_pulRCGCRegs
|
0000b02c l O .text 0000000c g_pulRCGCRegs
|
||||||
0000a714 l O .text 0000000c g_pulSRCRRegs
|
0000b038 l O .text 0000000c g_pulSRCRRegs
|
||||||
|
00000000 l df *ABS* 00000000 clock-arch.c
|
||||||
00000000 l df *ABS* 00000000 netdev.c
|
00000000 l df *ABS* 00000000 netdev.c
|
||||||
00000000 l df *ABS* 00000000 led.c
|
00000000 l df *ABS* 00000000 led.c
|
||||||
20000024 l O .bss 00000004 timer_counter_last.4548
|
20000064 l O .bss 00000004 timer_counter_last.4602
|
||||||
20000028 l O .bss 00000001 led_toggle_state.4547
|
20000068 l O .bss 00000001 led_toggle_state.4601
|
||||||
00000000 l df *ABS* 00000000 cstart.c
|
00000000 l df *ABS* 00000000 cstart.c
|
||||||
000092ba l F .text 00000000 zero_loop
|
000092d2 l F .text 00000000 zero_loop
|
||||||
00000000 l df *ABS* 00000000 main.c
|
00000000 l df *ABS* 00000000 main.c
|
||||||
000092e4 l F .text 00000018 Init
|
000092fc l F .text 00000018 Init
|
||||||
2000002c l O .bss 00000004 assert_failure_line.4555
|
2000006c l O .bss 00000004 assert_failure_line.4609
|
||||||
00000000 l df *ABS* 00000000 boot.c
|
00000000 l df *ABS* 00000000 boot.c
|
||||||
00009328 l F .text 00000038 BootComUartInit
|
0000934c l F .text 00000038 BootComUartInit
|
||||||
00009360 l F .text 00000020 UartReceiveByte
|
00009384 l F .text 00000020 UartReceiveByte
|
||||||
00009390 l F .text 00000098 BootComUartCheckActivationRequest
|
000093b4 l F .text 00000098 BootComUartCheckActivationRequest
|
||||||
20000030 l O .bss 00000004 xcpCtoRxStartTime.4565
|
20000070 l O .bss 00000004 xcpCtoRxStartTime.4619
|
||||||
20000034 l O .bss 00000041 xcpCtoReqPacket.4562
|
20000074 l O .bss 00000041 xcpCtoReqPacket.4616
|
||||||
20000075 l O .bss 00000001 xcpCtoRxLength.4563
|
200000b5 l O .bss 00000001 xcpCtoRxLength.4617
|
||||||
20000076 l O .bss 00000001 xcpCtoRxInProgress.4564
|
200000b6 l O .bss 00000001 xcpCtoRxInProgress.4618
|
||||||
|
00000000 l df *ABS* 00000000 shared_params.c
|
||||||
|
00009454 l F .text 00000038 SharedParamsCalculateChecksum
|
||||||
|
0000948c l F .text 0000001c SharedParamsVerifyChecksum
|
||||||
|
000094a8 l F .text 00000024 SharedParamsValidateBuffer
|
||||||
|
000094cc l F .text 00000010 SharedParamsWriteChecksum
|
||||||
|
20000000 l O .shared 00000040 sharedParamsBuffer
|
||||||
00000000 l df *ABS* 00000000 net.c
|
00000000 l df *ABS* 00000000 net.c
|
||||||
20000078 l O .bss 00000004 ARPTimerTimeOut
|
200000b8 l O .bss 00000004 ARPTimerTimeOut
|
||||||
2000007c l O .bss 00000004 periodicTimerTimeOut
|
200000bc l O .bss 00000006 macAddress
|
||||||
|
200000c4 l O .bss 00000004 periodicTimerTimeOut
|
||||||
00000000 l df *ABS* 00000000 time.c
|
00000000 l df *ABS* 00000000 time.c
|
||||||
20000080 l O .bss 00000004 millisecond_counter
|
200000c8 l O .bss 00000004 millisecond_counter
|
||||||
00000000 l df *ABS* 00000000 uip.c
|
00000000 l df *ABS* 00000000 uip.c
|
||||||
000095f4 l F .text 0000003a chksum
|
00009740 l F .text 0000003a chksum
|
||||||
0000968c l F .text 00000030 uip_add_rcv_nxt
|
000097d8 l F .text 00000030 uip_add_rcv_nxt
|
||||||
00009778 l F .text 0000003c upper_layer_chksum
|
000098e8 l F .text 0000003c upper_layer_chksum
|
||||||
20000084 l O .bss 00000002 tmp16
|
200000cc l O .bss 00000002 tmp16
|
||||||
20000086 l O .bss 00000002 ipid
|
200000ce l O .bss 00000002 ipid
|
||||||
20000088 l O .bss 00000004 iss
|
200000d0 l O .bss 00000004 iss
|
||||||
2000008c l O .bss 00000002 lastport
|
200000d4 l O .bss 00000002 lastport
|
||||||
2000008e l O .bss 00000001 c
|
200000d6 l O .bss 00000001 c
|
||||||
00000000 l df *ABS* 00000000 uip_arp.c
|
00000000 l df *ABS* 00000000 uip_arp.c
|
||||||
0000a25c l F .text 00000104 uip_arp_update
|
0000a5ec l F .text 00000108 uip_arp_update
|
||||||
20000096 l O .bss 00000001 i
|
200000de l O .bss 00000001 i
|
||||||
20000097 l O .bss 00000001 tmpage
|
200000df l O .bss 00000001 tmpage
|
||||||
20000098 l O .bss 00000060 arp_table
|
200000e0 l O .bss 00000060 arp_table
|
||||||
0000a720 l O .text 00000006 broadcast_ethaddr
|
0000b044 l O .text 00000006 broadcast_ethaddr
|
||||||
200000f8 l O .bss 00000001 c
|
20000140 l O .bss 00000001 c
|
||||||
200000f9 l O .bss 00000001 arptime
|
20000141 l O .bss 00000001 arptime
|
||||||
200000fc l O .bss 00000004 ipaddr
|
20000144 l O .bss 00000004 ipaddr
|
||||||
|
00000000 l df *ABS* 00000000 uip_timer.c
|
||||||
|
00000000 l df *ABS* 00000000 dhcpc.c
|
||||||
|
0000a9bc l F .text 0000000e add_msg_type
|
||||||
|
0000a9cc l F .text 0000001c add_server_id
|
||||||
|
0000a9e8 l F .text 00000016 add_req_options
|
||||||
|
0000aa00 l F .text 00000008 add_end
|
||||||
|
0000aa08 l F .text 0000002c dhcpc_configured
|
||||||
|
0000aa34 l F .text 0000001c add_req_ipaddr
|
||||||
|
0000aa50 l F .text 00000078 parse_options
|
||||||
|
0000aac8 l F .text 00000080 create_msg
|
||||||
|
0000ab48 l F .text 00000030 send_discover
|
||||||
|
0000ab78 l F .text 00000034 send_request
|
||||||
|
0000abac l F .text 00000058 parse_msg
|
||||||
|
0000ac50 l F .text 00000288 handle_dhcp
|
||||||
|
0000b04c l O .text 00000004 xid
|
||||||
|
20000148 l O .bss 00000034 s
|
||||||
|
0000b050 l O .text 00000004 magic_cookie
|
||||||
|
00000000 l df *ABS* 00000000 memcmp.c
|
||||||
|
00000000 l df *ABS* 00000000 memcpy-stub.c
|
||||||
|
00000000 l df *ABS* 00000000 memset.c
|
||||||
00000000 l df *ABS* 00000000 c:/progra~2/gnutoo~1/50a5a~1.420/bin/../lib/gcc/arm-none-eabi/5.4.1/armv7-m/crti.o
|
00000000 l df *ABS* 00000000 c:/progra~2/gnutoo~1/50a5a~1.420/bin/../lib/gcc/arm-none-eabi/5.4.1/armv7-m/crti.o
|
||||||
00000000 l df *ABS* 00000000 c:/progra~2/gnutoo~1/50a5a~1.420/bin/../lib/gcc/arm-none-eabi/5.4.1/armv7-m/crtn.o
|
00000000 l df *ABS* 00000000 c:/progra~2/gnutoo~1/50a5a~1.420/bin/../lib/gcc/arm-none-eabi/5.4.1/armv7-m/crtn.o
|
||||||
00000000 l df *ABS* 00000000 crtstuff.c
|
00000000 l df *ABS* 00000000 crtstuff.c
|
||||||
0000a728 l O .text 00000000 __FRAME_END__
|
0000b054 l O .text 00000000 __FRAME_END__
|
||||||
00000000 l df *ABS* 00000000
|
00000000 l df *ABS* 00000000
|
||||||
00000000 l *UND* 00000000 __bss_start__
|
00000000 l *UND* 00000000 __bss_start__
|
||||||
00000000 l *UND* 00000000 __libc_fini_array
|
00000000 l *UND* 00000000 __libc_fini_array
|
||||||
|
@ -132,102 +165,120 @@ SYMBOL TABLE:
|
||||||
00000000 l *UND* 00000000 __call_exitprocs
|
00000000 l *UND* 00000000 __call_exitprocs
|
||||||
00000000 l *UND* 00000000 software_init_hook
|
00000000 l *UND* 00000000 software_init_hook
|
||||||
00000000 l *UND* 00000000 __sf_fake_stdin
|
00000000 l *UND* 00000000 __sf_fake_stdin
|
||||||
20000004 l .data 00000000 __init_array_end
|
20000044 l .data 00000000 __init_array_end
|
||||||
00000000 l *UND* 00000000 hardware_init_hook
|
00000000 l *UND* 00000000 hardware_init_hook
|
||||||
00000000 l *UND* 00000000 atexit
|
00000000 l *UND* 00000000 atexit
|
||||||
20000000 l .data 00000000 __preinit_array_end
|
20000040 l .data 00000000 __preinit_array_end
|
||||||
00000000 l *UND* 00000000 __stack
|
00000000 l *UND* 00000000 __stack
|
||||||
00000000 l *UND* 00000000 __sf_fake_stdout
|
00000000 l *UND* 00000000 __sf_fake_stdout
|
||||||
20000000 l .data 00000000 __init_array_start
|
20000040 l .data 00000000 __init_array_start
|
||||||
00000000 l *UND* 00000000 _exit
|
00000000 l *UND* 00000000 _exit
|
||||||
20000000 l .data 00000000 __preinit_array_start
|
20000040 l .data 00000000 __preinit_array_start
|
||||||
00009318 g F .text 0000000c __error__
|
0000933c g F .text 0000000c __error__
|
||||||
00009298 g F .text 00000040 reset_handler
|
000091d8 g F .text 00000010 netdev_get_mac
|
||||||
|
000092b0 g F .text 00000040 reset_handler
|
||||||
00008d34 g F .text 00000008 SysCtlDelay
|
00008d34 g F .text 00000008 SysCtlDelay
|
||||||
20000100 g O .bss 00000002 uip_len
|
2000017c g O .bss 00000002 uip_len
|
||||||
20000090 g O .bss 00000006 uip_ethaddr
|
200000d8 g O .bss 00000006 uip_ethaddr
|
||||||
00009630 g F .text 0000005c uip_add32
|
0000977c g F .text 0000005c uip_add32
|
||||||
0000a72c g .text 00000000 _etext
|
0000b058 g .text 00000000 _etext
|
||||||
00008c94 g F .text 00000058 SysCtlPeripheralReset
|
00008c94 g F .text 00000058 SysCtlPeripheralReset
|
||||||
00008488 g F .text 00000024 GPIOPinWrite
|
00008488 g F .text 00000024 GPIOPinWrite
|
||||||
000091d0 g F .text 00000038 netdev_read
|
000091e8 g F .text 00000038 netdev_read
|
||||||
000097c0 g F .text 00000a9c uip_process
|
00009930 g F .text 00000bec uip_process
|
||||||
000095e4 g F .text 00000010 TimerISRHandler
|
00009730 g F .text 00000010 TimerISRHandler
|
||||||
20000104 g O .bss 00000004 uip_sappdata
|
0000aefe g F .text 00000016 memcpy
|
||||||
000090a4 g F .text 00000018 netdev_init
|
20000180 g O .bss 00000004 uip_sappdata
|
||||||
20000108 g O .bss 00000004 uip_acc32
|
000090ac g F .text 00000018 netdev_init
|
||||||
00009758 g F .text 00000020 uip_ipchksum
|
20000184 g O .bss 00000004 uip_acc32
|
||||||
|
000098c8 g F .text 00000020 uip_ipchksum
|
||||||
|
0000a51c g F .text 000000a8 uip_udp_new
|
||||||
00008650 g F .text 00000030 EthernetInitExpClk
|
00008650 g F .text 00000030 EthernetInitExpClk
|
||||||
00009718 g F .text 00000034 uip_listen
|
00009888 g F .text 00000034 uip_listen
|
||||||
00009208 g F .text 0000001c netdev_send
|
00009220 g F .text 0000001c netdev_send
|
||||||
000087cc g F .text 00000050 EthernetPacketPut
|
000087cc g F .text 00000050 EthernetPacketPut
|
||||||
00008cec g F .text 00000038 SysCtlPeripheralEnable
|
00008cec g F .text 00000038 SysCtlPeripheralEnable
|
||||||
2000010c g O .bss 00000001 uip_flags
|
20000188 g O .bss 00000001 uip_flags
|
||||||
0000a600 g F .text 00000000 _init
|
0000af24 g F .text 00000000 _init
|
||||||
00009388 g F .text 00000008 BootActivate
|
000093ac g F .text 00000008 BootActivate
|
||||||
00008d24 g F .text 00000010 SysCtlReset
|
00008d24 g F .text 00000010 SysCtlReset
|
||||||
2000078c g .bss 00000000 _ebss
|
2000084c g .bss 00000000 _ebss
|
||||||
|
0000ac04 g F .text 0000003c dhcpc_init
|
||||||
00000400 g *ABS* 00000000 __STACKSIZE__
|
00000400 g *ABS* 00000000 __STACKSIZE__
|
||||||
00009324 g F .text 00000002 UnusedISR
|
00009348 g F .text 00000002 UnusedISR
|
||||||
00008778 g F .text 00000054 EthernetPacketGetNonBlocking
|
00008778 g F .text 00000054 EthernetPacketGetNonBlocking
|
||||||
00009224 g F .text 00000028 LedInit
|
0000923c g F .text 00000028 LedInit
|
||||||
00008514 g F .text 00000034 GPIOPinTypeEthernetLED
|
00008514 g F .text 00000034 GPIOPinTypeEthernetLED
|
||||||
000094cc g F .text 000000d8 NetTask
|
000095e4 g F .text 0000010c NetTask
|
||||||
|
2000018c g O .bss 00000004 uip_udp_conn
|
||||||
|
0000a9a4 g F .text 00000018 timer_expired
|
||||||
00000000 w *UND* 00000000 __deregister_frame_info
|
00000000 w *UND* 00000000 __deregister_frame_info
|
||||||
000090bc g F .text 00000114 netdev_init_mac
|
000090c4 g F .text 00000114 netdev_init_mac
|
||||||
00008a70 g F .text 0000002c UARTCharGetNonBlocking
|
00008a70 g F .text 0000002c UARTCharGetNonBlocking
|
||||||
20000008 g .bss 00000000 _bss
|
20000048 g .bss 00000000 _bss
|
||||||
000097b4 g F .text 0000000a uip_tcpchksum
|
00009924 g F .text 0000000a uip_tcpchksum
|
||||||
20000110 g O .bss 00000004 uip_appdata
|
20000190 g O .bss 00000004 uip_appdata
|
||||||
00008170 g F .text 00000020 SysTickPeriodSet
|
00008170 g F .text 00000020 SysTickPeriodSet
|
||||||
20000114 g O .bss 00000004 uip_conn
|
20000194 g O .bss 00000004 uip_conn
|
||||||
20000118 g O .bss 0000001e uip_conns
|
0000aee0 g F .text 0000001e memcmp
|
||||||
|
20000040 g .shared 00000000 __shared_end__
|
||||||
|
20000198 g O .bss 0000001e uip_conns
|
||||||
|
0000950c g F .text 0000002c SharedParamsWriteByIndex
|
||||||
00008854 g F .text 00000028 EthernetIntStatus
|
00008854 g F .text 00000028 EthernetIntStatus
|
||||||
0000a4a0 g F .text 00000160 uip_arp_out
|
0000a834 g F .text 00000160 uip_arp_out
|
||||||
000092fc g F .text 0000001c main
|
0000af14 g F .text 00000010 memset
|
||||||
|
00009314 g F .text 00000028 main
|
||||||
00008ea0 g F .text 00000204 SysCtlClockGet
|
00008ea0 g F .text 00000204 SysCtlClockGet
|
||||||
00008950 g F .text 00000038 UARTDisable
|
00008950 g F .text 00000038 UARTDisable
|
||||||
00008738 g F .text 00000040 EthernetEnable
|
00008738 g F .text 00000040 EthernetEnable
|
||||||
000095a4 g F .text 0000000c TimerSet
|
000096f0 g F .text 0000000c TimerSet
|
||||||
00009380 g F .text 00000008 BootComInit
|
000094dc g F .text 00000030 SharedParamsInit
|
||||||
0000a60c g F .text 00000000 _fini
|
000093a4 g F .text 00000008 BootComInit
|
||||||
0000a3c0 g F .text 000000e0 uip_arp_arpin
|
0000af30 g F .text 00000000 _fini
|
||||||
|
0000a754 g F .text 000000e0 uip_arp_arpin
|
||||||
000086d8 g F .text 00000060 EthernetMACAddrSet
|
000086d8 g F .text 00000060 EthernetMACAddrSet
|
||||||
0000a360 g F .text 00000060 uip_arp_timer
|
0000a6f4 g F .text 00000060 uip_arp_timer
|
||||||
20000138 g O .bss 00000002 uip_listenports
|
200001b8 g O .bss 00000002 uip_listenports
|
||||||
2000013c g O .bss 00000004 uip_draddr
|
200001bc g O .bss 00000004 uip_draddr
|
||||||
20000000 g .data 00000000 _data
|
20000040 g .data 00000000 _data
|
||||||
000088b0 g F .text 00000044 EthernetPHYRead
|
000088b0 g F .text 00000044 EthernetPHYRead
|
||||||
0000924c g F .text 0000004c LedToggle
|
00009264 g F .text 0000004c LedToggle
|
||||||
20000b8c g .bss 00000000 _estack
|
0000a994 g F .text 0000000e timer_set
|
||||||
|
20000c4c g .bss 00000000 _estack
|
||||||
00008680 g F .text 00000058 EthernetConfigSet
|
00008680 g F .text 00000058 EthernetConfigSet
|
||||||
20000008 g .data 00000000 _edata
|
20000048 g .data 00000000 _edata
|
||||||
0000974c g F .text 0000000a htons
|
000098bc g F .text 0000000a htons
|
||||||
|
0000aed8 g F .text 00000008 dhcpc_appcall
|
||||||
00008000 g O .text 000000f4 _vectab
|
00008000 g O .text 000000f4 _vectab
|
||||||
00008190 g F .text 00000068 FlashUserGet
|
00008190 g F .text 00000068 FlashUserGet
|
||||||
000084e0 g F .text 00000034 GPIOPinTypeUART
|
000084e0 g F .text 00000034 GPIOPinTypeUART
|
||||||
|
20000000 g .shared 00000000 __shared_start__
|
||||||
000084ac g F .text 00000034 GPIOPinTypeGPIOOutput
|
000084ac g F .text 00000034 GPIOPinTypeGPIOOutput
|
||||||
0000881c g F .text 00000038 EthernetIntDisable
|
0000881c g F .text 00000038 EthernetIntDisable
|
||||||
00009428 g F .text 00000008 BootComCheckActivationRequest
|
0000944c g F .text 00000008 BootComCheckActivationRequest
|
||||||
0000887c g F .text 00000034 EthernetIntClear
|
0000887c g F .text 00000034 EthernetIntClear
|
||||||
000096bc g F .text 0000005c uip_init
|
00009808 g F .text 00000080 uip_init
|
||||||
|
000090a4 g F .text 00000008 clock_time
|
||||||
000082d4 g F .text 00000060 GPIODirModeSet
|
000082d4 g F .text 00000060 GPIODirModeSet
|
||||||
2000078c g .bss 00000000 _stack
|
2000084c g .bss 00000000 _stack
|
||||||
20000140 g O .bss 00000004 uip_netmask
|
200001c0 g O .bss 00000004 uip_netmask
|
||||||
00008150 g F .text 00000010 SysTickEnable
|
00008150 g F .text 00000010 SysTickEnable
|
||||||
20000144 g O .bss 00000004 uip_hostaddr
|
200001c4 g O .bss 00000004 uip_hostaddr
|
||||||
000095d8 g F .text 0000000c TimerGet
|
00009724 g F .text 0000000c TimerGet
|
||||||
0000949c g F .text 00000030 NetApp
|
000095ac g F .text 00000038 NetApp
|
||||||
00000000 w *UND* 00000000 _Jv_RegisterClasses
|
00000000 w *UND* 00000000 _Jv_RegisterClasses
|
||||||
00008160 g F .text 00000010 SysTickIntEnable
|
00008160 g F .text 00000010 SysTickIntEnable
|
||||||
00008988 g F .text 000000e8 UARTConfigSetExpClk
|
00008988 g F .text 000000e8 UARTConfigSetExpClk
|
||||||
00009430 g F .text 0000006c NetInit
|
00009538 g F .text 00000074 NetInit
|
||||||
00008d3c g F .text 00000164 SysCtlClockSet
|
00008d3c g F .text 00000164 SysCtlClockSet
|
||||||
00008334 g F .text 00000154 GPIOPadConfigSet
|
00008334 g F .text 00000154 GPIOPadConfigSet
|
||||||
000095b0 g F .text 00000028 TimerInit
|
000096fc g F .text 00000028 TimerInit
|
||||||
00000000 w *UND* 00000000 __register_frame_info
|
00000000 w *UND* 00000000 __register_frame_info
|
||||||
20000148 g O .bss 00000642 uip_buf
|
200001c8 g O .bss 00000642 uip_buf
|
||||||
2000078a g O .bss 00000002 uip_slen
|
0000a5c4 g F .text 00000028 uip_send
|
||||||
|
0000ac40 g F .text 00000010 dhcpc_request
|
||||||
|
2000080a g O .bss 00000002 uip_slen
|
||||||
|
2000080c g O .bss 00000040 uip_udp_conns
|
||||||
00008920 g F .text 00000030 UARTEnable
|
00008920 g F .text 00000030 UARTEnable
|
||||||
|
|
||||||
|
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -36,6 +36,7 @@
|
||||||
#include "led.h" /* LED driver */
|
#include "led.h" /* LED driver */
|
||||||
#include "time.h" /* Timer driver */
|
#include "time.h" /* Timer driver */
|
||||||
#include "net.h" /* TCP/IP server application */
|
#include "net.h" /* TCP/IP server application */
|
||||||
|
#include "shared_params.h" /* Shared parameters header. */
|
||||||
#include "inc/hw_ints.h"
|
#include "inc/hw_ints.h"
|
||||||
#include "inc/hw_memmap.h"
|
#include "inc/hw_memmap.h"
|
||||||
#include "inc/hw_nvic.h"
|
#include "inc/hw_nvic.h"
|
||||||
|
|
|
@ -59,6 +59,10 @@
|
||||||
#define NETDEV_DEFAULT_MACADDR5 (0x45)
|
#define NETDEV_DEFAULT_MACADDR5 (0x45)
|
||||||
|
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
static struct uip_eth_addr macAddress;
|
||||||
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
void netdev_init(void)
|
void netdev_init(void)
|
||||||
{
|
{
|
||||||
|
@ -142,6 +146,18 @@ void netdev_init_mac(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
void netdev_get_mac(unsigned char * mac_addr)
|
||||||
|
{
|
||||||
|
mac_addr[0] = macAddress.addr[0];
|
||||||
|
mac_addr[1] = macAddress.addr[1];
|
||||||
|
mac_addr[2] = macAddress.addr[2];
|
||||||
|
mac_addr[3] = macAddress.addr[3];
|
||||||
|
mac_addr[4] = macAddress.addr[4];
|
||||||
|
mac_addr[5] = macAddress.addr[5];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
unsigned int netdev_read(void)
|
unsigned int netdev_read(void)
|
||||||
{
|
{
|
||||||
|
|
|
@ -40,6 +40,7 @@
|
||||||
|
|
||||||
void netdev_init(void);
|
void netdev_init(void);
|
||||||
void netdev_init_mac(void);
|
void netdev_init_mac(void);
|
||||||
|
void netdev_get_mac(unsigned char * mac_addr);
|
||||||
unsigned int netdev_read(void);
|
unsigned int netdev_read(void);
|
||||||
void netdev_send(void);
|
void netdev_send(void);
|
||||||
|
|
||||||
|
|
|
@ -98,6 +98,27 @@ typedef unsigned short uip_stats_t;
|
||||||
*/
|
*/
|
||||||
#define UIP_CONF_MAX_LISTENPORTS 1
|
#define UIP_CONF_MAX_LISTENPORTS 1
|
||||||
|
|
||||||
|
/**
|
||||||
|
* UDP support on or off
|
||||||
|
*
|
||||||
|
* \hideinitializer
|
||||||
|
*/
|
||||||
|
#define UIP_CONF_UDP 1
|
||||||
|
|
||||||
|
/**
|
||||||
|
* UDP Maximum Connections
|
||||||
|
*
|
||||||
|
* \hideinitializer
|
||||||
|
*/
|
||||||
|
#define UIP_CONF_UDP_CONNS 1
|
||||||
|
|
||||||
|
/**
|
||||||
|
* UDP checksums on or off
|
||||||
|
*
|
||||||
|
* \hideinitializer
|
||||||
|
*/
|
||||||
|
#define UIP_CONF_UDP_CHECKSUMS 0
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* uIP buffer size.
|
* uIP buffer size.
|
||||||
*
|
*
|
||||||
|
@ -119,20 +140,6 @@ typedef unsigned short uip_stats_t;
|
||||||
*/
|
*/
|
||||||
#define UIP_CONF_LOGGING 0
|
#define UIP_CONF_LOGGING 0
|
||||||
|
|
||||||
/**
|
|
||||||
* UDP support on or off
|
|
||||||
*
|
|
||||||
* \hideinitializer
|
|
||||||
*/
|
|
||||||
#define UIP_CONF_UDP 0
|
|
||||||
|
|
||||||
/**
|
|
||||||
* UDP checksums on or off
|
|
||||||
*
|
|
||||||
* \hideinitializer
|
|
||||||
*/
|
|
||||||
#define UIP_CONF_UDP_CHECKSUMS 1
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* uIP statistics on or off
|
* uIP statistics on or off
|
||||||
*
|
*
|
||||||
|
@ -140,10 +147,12 @@ typedef unsigned short uip_stats_t;
|
||||||
*/
|
*/
|
||||||
#define UIP_CONF_STATISTICS 0
|
#define UIP_CONF_STATISTICS 0
|
||||||
|
|
||||||
|
|
||||||
/* Here we include the header file for the application(s) we use in
|
/* Here we include the header file for the application(s) we use in
|
||||||
our project. */
|
our project. */
|
||||||
#include "boot.h"
|
#include "header.h"
|
||||||
#include "net.h"
|
#include "net.h"
|
||||||
|
#include "dhcpc.h"
|
||||||
|
|
||||||
#endif /* __UIP_CONF_H__ */
|
#endif /* __UIP_CONF_H__ */
|
||||||
|
|
||||||
|
|
|
@ -48,10 +48,17 @@ int main(void)
|
||||||
{
|
{
|
||||||
/* initialize the microcontroller */
|
/* initialize the microcontroller */
|
||||||
Init();
|
Init();
|
||||||
|
/* initialize the shared parameters module */
|
||||||
|
SharedParamsInit();
|
||||||
/* initialize the network application */
|
/* initialize the network application */
|
||||||
NetInit();
|
NetInit();
|
||||||
/* initialize the bootloader interface */
|
/* initialize the bootloader interface */
|
||||||
BootComInit();
|
BootComInit();
|
||||||
|
/* the shared parameter at index 0 is used as a boolean flag to indicate if the
|
||||||
|
* bootloader should initialize the TCP/IP network stack. by default this flag
|
||||||
|
* should be reset.
|
||||||
|
*/
|
||||||
|
SharedParamsWriteByIndex(0, 0);
|
||||||
|
|
||||||
/* start the infinite program loop */
|
/* start the infinite program loop */
|
||||||
while (1)
|
while (1)
|
||||||
|
|
|
@ -68,6 +68,8 @@ PROJ_FILES += ../../../Source/third_party/uip/uip/uip_timer.h
|
||||||
PROJ_FILES += ../../../Source/third_party/uip/uip/uiplib.c
|
PROJ_FILES += ../../../Source/third_party/uip/uip/uiplib.c
|
||||||
PROJ_FILES += ../../../Source/third_party/uip/uip/uiplib.h
|
PROJ_FILES += ../../../Source/third_party/uip/uip/uiplib.h
|
||||||
PROJ_FILES += ../../../Source/third_party/uip/uip/uipopt.h
|
PROJ_FILES += ../../../Source/third_party/uip/uip/uipopt.h
|
||||||
|
PROJ_FILES += ../../../Source/third_party/uip/apps/dhcpc/dhcpc.c
|
||||||
|
PROJ_FILES += ../../../Source/third_party/uip/apps/dhcpc/dhcpc.h
|
||||||
|
|
||||||
|
|
||||||
#|--------------------------------------------------------------------------------------|
|
#|--------------------------------------------------------------------------------------|
|
||||||
|
|
|
@ -1,13 +1,25 @@
|
||||||
MEMORY
|
MEMORY
|
||||||
{
|
{
|
||||||
FLASH (rx) : ORIGIN = 0x00008000, LENGTH = 224K
|
FLASH (rx) : ORIGIN = 0x00008000, LENGTH = 224K
|
||||||
SRAM (rwx) : ORIGIN = 0x20000000, LENGTH = 64K
|
SHARED (rwx) : ORIGIN = 0x20000000, LENGTH = 64
|
||||||
|
SRAM (rwx) : ORIGIN = 0x20000040, LENGTH = 64K - 64
|
||||||
}
|
}
|
||||||
|
|
||||||
SECTIONS
|
SECTIONS
|
||||||
{
|
{
|
||||||
__STACKSIZE__ = 1024;
|
__STACKSIZE__ = 1024;
|
||||||
|
|
||||||
|
.shared (NOLOAD):
|
||||||
|
{
|
||||||
|
. = ALIGN(4);
|
||||||
|
__shared_start__ = .;
|
||||||
|
*(.shared)
|
||||||
|
*(.shared.*)
|
||||||
|
KEEP(*(.shared))
|
||||||
|
. = ALIGN(4);
|
||||||
|
__shared_end__ = .;
|
||||||
|
} > SHARED
|
||||||
|
|
||||||
.text :
|
.text :
|
||||||
{
|
{
|
||||||
KEEP(*(.isr_vector))
|
KEEP(*(.isr_vector))
|
||||||
|
|
|
@ -53,6 +53,10 @@
|
||||||
static unsigned long periodicTimerTimeOut;
|
static unsigned long periodicTimerTimeOut;
|
||||||
/** \brief Holds the time out value of the uIP ARP timer. */
|
/** \brief Holds the time out value of the uIP ARP timer. */
|
||||||
static unsigned long ARPTimerTimeOut;
|
static unsigned long ARPTimerTimeOut;
|
||||||
|
#if (BOOT_COM_NET_DHCP_ENABLE > 0)
|
||||||
|
/** \brief Holds the MAC address which is used by the DHCP client. */
|
||||||
|
static struct uip_eth_addr macAddress;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/************************************************************************************//**
|
/************************************************************************************//**
|
||||||
|
@ -71,6 +75,7 @@ void NetInit(void)
|
||||||
ARPTimerTimeOut = TimerGet() + NET_UIP_ARP_TIMER_MS;
|
ARPTimerTimeOut = TimerGet() + NET_UIP_ARP_TIMER_MS;
|
||||||
/* initialize the uIP TCP/IP stack. */
|
/* initialize the uIP TCP/IP stack. */
|
||||||
uip_init();
|
uip_init();
|
||||||
|
#if (BOOT_COM_NET_DHCP_ENABLE == 0)
|
||||||
/* set the IP address */
|
/* set the IP address */
|
||||||
uip_ipaddr(ipaddr, BOOT_COM_NET_IPADDR0, BOOT_COM_NET_IPADDR1, BOOT_COM_NET_IPADDR2,
|
uip_ipaddr(ipaddr, BOOT_COM_NET_IPADDR0, BOOT_COM_NET_IPADDR1, BOOT_COM_NET_IPADDR2,
|
||||||
BOOT_COM_NET_IPADDR3);
|
BOOT_COM_NET_IPADDR3);
|
||||||
|
@ -83,10 +88,28 @@ void NetInit(void)
|
||||||
uip_ipaddr(ipaddr, BOOT_COM_NET_GATEWAY0, BOOT_COM_NET_GATEWAY1, BOOT_COM_NET_GATEWAY2,
|
uip_ipaddr(ipaddr, BOOT_COM_NET_GATEWAY0, BOOT_COM_NET_GATEWAY1, BOOT_COM_NET_GATEWAY2,
|
||||||
BOOT_COM_NET_GATEWAY3);
|
BOOT_COM_NET_GATEWAY3);
|
||||||
uip_setdraddr(ipaddr);
|
uip_setdraddr(ipaddr);
|
||||||
|
#else
|
||||||
|
/* set the IP address */
|
||||||
|
uip_ipaddr(ipaddr, 0, 0, 0, 0);
|
||||||
|
uip_sethostaddr(ipaddr);
|
||||||
|
/* set the network mask */
|
||||||
|
uip_ipaddr(ipaddr, 0, 0, 0, 0);
|
||||||
|
uip_setnetmask(ipaddr);
|
||||||
|
/* set the gateway address */
|
||||||
|
uip_ipaddr(ipaddr, 0, 0, 0, 0);
|
||||||
|
uip_setdraddr(ipaddr);
|
||||||
|
#endif
|
||||||
/* start listening on the configured port for XCP transfers on TCP/IP */
|
/* start listening on the configured port for XCP transfers on TCP/IP */
|
||||||
uip_listen(HTONS(BOOT_COM_NET_PORT));
|
uip_listen(HTONS(BOOT_COM_NET_PORT));
|
||||||
/* initialize the MAC and set the MAC address */
|
/* initialize the MAC and set the MAC address */
|
||||||
netdev_init_mac();
|
netdev_init_mac();
|
||||||
|
|
||||||
|
#if (BOOT_COM_NET_DHCP_ENABLE > 0)
|
||||||
|
/* initialize the DHCP client application and send the initial request. */
|
||||||
|
netdev_get_mac(&macAddress.addr[0]);
|
||||||
|
dhcpc_init(&macAddress.addr[0], 6);
|
||||||
|
dhcpc_request();
|
||||||
|
#endif
|
||||||
} /*** end of NetInit ***/
|
} /*** end of NetInit ***/
|
||||||
|
|
||||||
|
|
||||||
|
@ -117,6 +140,13 @@ void NetApp(void)
|
||||||
/* check if this was an XCP CONNECT command */
|
/* check if this was an XCP CONNECT command */
|
||||||
if ((newDataPtr[0] == 0xff) && (newDataPtr[1] == 0x00))
|
if ((newDataPtr[0] == 0xff) && (newDataPtr[1] == 0x00))
|
||||||
{
|
{
|
||||||
|
/* the shared parameter at index 0 is used as a boolean flag to indicate if the
|
||||||
|
* bootloader should initialize the TCP/IP network stack. we just received a
|
||||||
|
* firmware update request from the TCP/IP network and we are about to active
|
||||||
|
* the bootloader for a firmware update via TCP/IP. At this point we should
|
||||||
|
* set the flag to make sure the bootloader initializes its TCP/IP network stack.
|
||||||
|
*/
|
||||||
|
SharedParamsWriteByIndex(0, 1);
|
||||||
/* connection request received so start the bootloader */
|
/* connection request received so start the bootloader */
|
||||||
BootActivate();
|
BootActivate();
|
||||||
}
|
}
|
||||||
|
@ -136,13 +166,13 @@ void NetTask(void)
|
||||||
|
|
||||||
/* check for an RX packet and read it. */
|
/* check for an RX packet and read it. */
|
||||||
packetLen = netdev_read();
|
packetLen = netdev_read();
|
||||||
if(packetLen > 0)
|
if (packetLen > 0)
|
||||||
{
|
{
|
||||||
/* set uip_len for uIP stack usage */
|
/* set uip_len for uIP stack usage */
|
||||||
uip_len = (unsigned short)packetLen;
|
uip_len = (unsigned short)packetLen;
|
||||||
|
|
||||||
/* process incoming IP packets here. */
|
/* process incoming IP packets here. */
|
||||||
if(NET_UIP_HEADER_BUF->type == htons(UIP_ETHTYPE_IP))
|
if (NET_UIP_HEADER_BUF->type == htons(UIP_ETHTYPE_IP))
|
||||||
{
|
{
|
||||||
uip_arp_ipin();
|
uip_arp_ipin();
|
||||||
uip_input();
|
uip_input();
|
||||||
|
@ -150,7 +180,7 @@ void NetTask(void)
|
||||||
* should be sent out on the network, the global variable
|
* should be sent out on the network, the global variable
|
||||||
* uip_len is set to a value > 0.
|
* uip_len is set to a value > 0.
|
||||||
*/
|
*/
|
||||||
if(uip_len > 0)
|
if (uip_len > 0)
|
||||||
{
|
{
|
||||||
uip_arp_out();
|
uip_arp_out();
|
||||||
netdev_send();
|
netdev_send();
|
||||||
|
@ -158,7 +188,7 @@ void NetTask(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* process incoming ARP packets here. */
|
/* process incoming ARP packets here. */
|
||||||
else if(NET_UIP_HEADER_BUF->type == htons(UIP_ETHTYPE_ARP))
|
else if (NET_UIP_HEADER_BUF->type == htons(UIP_ETHTYPE_ARP))
|
||||||
{
|
{
|
||||||
uip_arp_arpin();
|
uip_arp_arpin();
|
||||||
|
|
||||||
|
@ -166,14 +196,14 @@ void NetTask(void)
|
||||||
* should be sent out on the network, the global variable
|
* should be sent out on the network, the global variable
|
||||||
* uip_len is set to a value > 0.
|
* uip_len is set to a value > 0.
|
||||||
*/
|
*/
|
||||||
if(uip_len > 0)
|
if (uip_len > 0)
|
||||||
{
|
{
|
||||||
netdev_send();
|
netdev_send();
|
||||||
uip_len = 0;
|
uip_len = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* process TCP/IP Periodic Timer here. */
|
/* process TCP/IP Periodic Timer here. */
|
||||||
if (TimerGet() >= periodicTimerTimeOut)
|
if (TimerGet() >= periodicTimerTimeOut)
|
||||||
{
|
{
|
||||||
|
@ -181,6 +211,22 @@ void NetTask(void)
|
||||||
for (connection = 0; connection < UIP_CONNS; connection++)
|
for (connection = 0; connection < UIP_CONNS; connection++)
|
||||||
{
|
{
|
||||||
uip_periodic(connection);
|
uip_periodic(connection);
|
||||||
|
/* If the above function invocation resulted in data that
|
||||||
|
* should be sent out on the network, the global variable
|
||||||
|
* uip_len is set to a value > 0.
|
||||||
|
*/
|
||||||
|
if (uip_len > 0)
|
||||||
|
{
|
||||||
|
uip_arp_out();
|
||||||
|
netdev_send();
|
||||||
|
uip_len = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#if UIP_UDP
|
||||||
|
for (connection = 0; connection < UIP_UDP_CONNS; connection++)
|
||||||
|
{
|
||||||
|
uip_udp_periodic(connection);
|
||||||
/* If the above function invocation resulted in data that
|
/* If the above function invocation resulted in data that
|
||||||
* should be sent out on the network, the global variable
|
* should be sent out on the network, the global variable
|
||||||
* uip_len is set to a value > 0.
|
* uip_len is set to a value > 0.
|
||||||
|
@ -192,13 +238,14 @@ void NetTask(void)
|
||||||
uip_len = 0;
|
uip_len = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/* process ARP Timer here. */
|
/* process ARP Timer here. */
|
||||||
if (TimerGet() >= ARPTimerTimeOut)
|
if (TimerGet() >= ARPTimerTimeOut)
|
||||||
{
|
{
|
||||||
ARPTimerTimeOut += NET_UIP_ARP_TIMER_MS;
|
ARPTimerTimeOut += NET_UIP_ARP_TIMER_MS;
|
||||||
uip_arp_timer();
|
uip_arp_timer();
|
||||||
}
|
}
|
||||||
} /*** end of NetServerTask ***/
|
} /*** end of NetServerTask ***/
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,301 @@
|
||||||
|
/************************************************************************************//**
|
||||||
|
* \file Demo/ARMCM3_LM3S_EK_LM3S6965_GCC/Prog/shared_params.c
|
||||||
|
* \brief Shared RAM parameters source file.
|
||||||
|
* \ingroup Prog_ARMCM3_LM3S_EK_LM3S6965_GCC
|
||||||
|
* \internal
|
||||||
|
*----------------------------------------------------------------------------------------
|
||||||
|
* C O P Y R I G H T
|
||||||
|
*----------------------------------------------------------------------------------------
|
||||||
|
* Copyright (c) 2018 by Feaser http://www.feaser.com All rights reserved
|
||||||
|
*
|
||||||
|
*----------------------------------------------------------------------------------------
|
||||||
|
* L I C E N S E
|
||||||
|
*----------------------------------------------------------------------------------------
|
||||||
|
* This file is part of OpenBLT. OpenBLT is free software: you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU General Public License as published by the Free
|
||||||
|
* Software Foundation, either version 3 of the License, or (at your option) any later
|
||||||
|
* version.
|
||||||
|
*
|
||||||
|
* OpenBLT is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
|
||||||
|
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
||||||
|
* PURPOSE. See the GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You have received a copy of the GNU General Public License along with OpenBLT. It
|
||||||
|
* should be located in ".\Doc\license.html". If not, contact Feaser to obtain a copy.
|
||||||
|
*
|
||||||
|
* \endinternal
|
||||||
|
****************************************************************************************/
|
||||||
|
|
||||||
|
/****************************************************************************************
|
||||||
|
* Include files
|
||||||
|
****************************************************************************************/
|
||||||
|
#include <stddef.h> /* Standard definitions (NULL). */
|
||||||
|
#include "shared_params.h" /* Shared parameters header. */
|
||||||
|
|
||||||
|
|
||||||
|
/****************************************************************************************
|
||||||
|
* Macro definitions
|
||||||
|
****************************************************************************************/
|
||||||
|
/** \brief Constant parameter buffer identifier. This value is always located as the
|
||||||
|
* start of the buffer to validate the the RAM contains valid shared parameters.
|
||||||
|
*/
|
||||||
|
#define SHARED_PARAMS_BUFFER_ID (0xCE42E7A2u)
|
||||||
|
|
||||||
|
|
||||||
|
/****************************************************************************************
|
||||||
|
* Type definitions
|
||||||
|
****************************************************************************************/
|
||||||
|
/** \brief Layout of the shared parameters RAM buffer. */
|
||||||
|
typedef struct t_shared_params_buffer
|
||||||
|
{
|
||||||
|
/** \brief Fixed buffer identifier to validate that the RAM contains valid shared
|
||||||
|
* parameters.
|
||||||
|
*/
|
||||||
|
uint32_t identifier;
|
||||||
|
/** \brief Array for the actual parameter data. */
|
||||||
|
uint8_t data[SHARED_PARAMS_CFG_BUFFER_DATA_LEN];
|
||||||
|
/** \brief Checksum value of all the bytes in the buffer, excluding this checksum
|
||||||
|
* value of obvious reasons. The checksum is calculated as the Two's
|
||||||
|
* complement of the sum of the bytes.
|
||||||
|
*/
|
||||||
|
uint16_t checksum;
|
||||||
|
} tSharedParamsBuffer;
|
||||||
|
|
||||||
|
|
||||||
|
/****************************************************************************************
|
||||||
|
* Global data declarations
|
||||||
|
****************************************************************************************/
|
||||||
|
/** \brief Declaration of the actual parameter buffer that this module manages.
|
||||||
|
* \warning For the shared RAM parameters to work properly for sharing information
|
||||||
|
* between the bootloader and user program, it is important that this
|
||||||
|
* variable is linked to the exact same RAM address in both the bootloader
|
||||||
|
* and the user program. Additionally, it should be configured such that the
|
||||||
|
* C-startup code does NOT zero its contents during system initialization. This
|
||||||
|
* is the code that runs in the reset event handler, before function main() is
|
||||||
|
* called.
|
||||||
|
* For GCC based embedded toolchains, the solution is to assign this variable
|
||||||
|
* to a custom section, in this case called ".shared". Then in the linker
|
||||||
|
* script, add the following to the SECTIONS:
|
||||||
|
*
|
||||||
|
* .shared (NOLOAD) :
|
||||||
|
* {
|
||||||
|
* . = ALIGN(4);
|
||||||
|
* _sshared = .;
|
||||||
|
* __shared_start__ = _sshared;
|
||||||
|
* *(.shared)
|
||||||
|
* *(.shared.*)
|
||||||
|
* KEEP(*(.shared))
|
||||||
|
* . = ALIGN(4);
|
||||||
|
* _eshared = .;
|
||||||
|
* __shared_end__ = _eshared;
|
||||||
|
* } >SHARED
|
||||||
|
*
|
||||||
|
* Next, add a new MEMORY entry for SHARED at the start of RAM and reduce
|
||||||
|
* the length of the remaining RAM:
|
||||||
|
*
|
||||||
|
* SHARED (xrw) : ORIGIN = 0x200000C0, LENGTH = 64
|
||||||
|
* RAM (xrw) : ORIGIN = 0x20000100, LENGTH = 32K - 192 - 64
|
||||||
|
*
|
||||||
|
* Note that the previous example is for an STM32F0 microcontroller where
|
||||||
|
* the first 192 (0xC0) bytes in RAM are reserved for the user program
|
||||||
|
* vector table.
|
||||||
|
*
|
||||||
|
* \remark This same approach can be applied with other toolchains such as Keil MDK
|
||||||
|
* and IAR EWARM. Consult the compiler and linker user manuals of your
|
||||||
|
* toolchain to find out how to place a RAM variable at a fixed memory address
|
||||||
|
* and to prevent the C-startup code from zeroing its contents.
|
||||||
|
* Here are a few links to get you started:
|
||||||
|
* * IAR EWARM:
|
||||||
|
* https://www.iar.com/support/tech-notes/compiler/
|
||||||
|
* linker-error-for-absolute-located-variable/
|
||||||
|
* * Keil MDK:
|
||||||
|
* http://www.keil.com/support/docs/3480.htm
|
||||||
|
*/
|
||||||
|
static tSharedParamsBuffer sharedParamsBuffer __attribute__ ((section (".shared")));
|
||||||
|
|
||||||
|
|
||||||
|
/****************************************************************************************
|
||||||
|
* Function prototypes
|
||||||
|
****************************************************************************************/
|
||||||
|
static bool SharedParamsValidateBuffer(void);
|
||||||
|
static void SharedParamsWriteChecksum(void);
|
||||||
|
static bool SharedParamsVerifyChecksum(void);
|
||||||
|
static uint16_t SharedParamsCalculateChecksum(void);
|
||||||
|
|
||||||
|
|
||||||
|
/************************************************************************************//**
|
||||||
|
** \brief Initializes the shared RAM parameters module.
|
||||||
|
** \return none.
|
||||||
|
**
|
||||||
|
****************************************************************************************/
|
||||||
|
void SharedParamsInit(void)
|
||||||
|
{
|
||||||
|
uint32_t byteIdx;
|
||||||
|
|
||||||
|
/* The shared parameter buffer does not get initialized by the C-startup code. Another
|
||||||
|
* previously running program could have initialized it, in which case it is ready
|
||||||
|
* for use and nothing more needs to be done.
|
||||||
|
*/
|
||||||
|
if (!SharedParamsValidateBuffer())
|
||||||
|
{
|
||||||
|
/* The shared parameter buffer was not yet initialized by a running program. This
|
||||||
|
* typically happens after a cold reset where the RAM contents were lost. In this
|
||||||
|
* case we need to explicitly configure and initialize it, since the C-startup code
|
||||||
|
* was configured to not do this.
|
||||||
|
*
|
||||||
|
* The initialization consists of setting the buffer identifier, zeroing the
|
||||||
|
* actual parameter data and updating the checksum at the end.
|
||||||
|
*/
|
||||||
|
sharedParamsBuffer.identifier = SHARED_PARAMS_BUFFER_ID;
|
||||||
|
for (byteIdx=0; byteIdx < SHARED_PARAMS_CFG_BUFFER_DATA_LEN; byteIdx++)
|
||||||
|
{
|
||||||
|
sharedParamsBuffer.data[byteIdx] = 0;
|
||||||
|
}
|
||||||
|
SharedParamsWriteChecksum();
|
||||||
|
}
|
||||||
|
} /*** end of SharedParamsInit ***/
|
||||||
|
|
||||||
|
|
||||||
|
/************************************************************************************//**
|
||||||
|
** \brief Reads a data byte from the shared parameter buffer at the specified index.
|
||||||
|
** \param idx Index into the parameter data array. A valid value is between 0 and
|
||||||
|
** (SHARED_PARAMS_CFG_BUFFER_DATA_LEN - 1).
|
||||||
|
** \param value Pointer to where the read data value is stored.
|
||||||
|
** \return True if successful, false otherwise.
|
||||||
|
**
|
||||||
|
****************************************************************************************/
|
||||||
|
bool SharedParamsReadByIndex(uint32_t idx, uint8_t * value)
|
||||||
|
{
|
||||||
|
bool result = false;
|
||||||
|
|
||||||
|
/* Only continue if the buffer and the specified parameters are valid. */
|
||||||
|
if ( (SharedParamsValidateBuffer()) &&
|
||||||
|
(idx < SHARED_PARAMS_CFG_BUFFER_DATA_LEN) &&
|
||||||
|
(value != NULL) )
|
||||||
|
{
|
||||||
|
/* Read the value and update the result. */
|
||||||
|
*value = sharedParamsBuffer.data[idx];
|
||||||
|
result = true;
|
||||||
|
}
|
||||||
|
/* Give the result back to the caller. */
|
||||||
|
return result;
|
||||||
|
} /*** end of SharedParamsReadByIndex ***/
|
||||||
|
|
||||||
|
|
||||||
|
/************************************************************************************//**
|
||||||
|
** \brief Writes a data byte to the shared parameter buffer at the specified index.
|
||||||
|
** \param idx Index into the parameter data array. A valid value is between 0 and
|
||||||
|
** (SHARED_PARAMS_CFG_BUFFER_DATA_LEN - 1).
|
||||||
|
** \param value Value to write.
|
||||||
|
** \return True if successful, false otherwise.
|
||||||
|
**
|
||||||
|
****************************************************************************************/
|
||||||
|
bool SharedParamsWriteByIndex(uint32_t idx, uint8_t value)
|
||||||
|
{
|
||||||
|
bool result = false;
|
||||||
|
|
||||||
|
/* Only continue if the buffer and the specified parameters are valid. */
|
||||||
|
if ( (SharedParamsValidateBuffer()) &&
|
||||||
|
(idx < SHARED_PARAMS_CFG_BUFFER_DATA_LEN) )
|
||||||
|
{
|
||||||
|
/* Write the value. */
|
||||||
|
sharedParamsBuffer.data[idx] = value;
|
||||||
|
/* Update the checksum since the contents were just changed. */
|
||||||
|
SharedParamsWriteChecksum();
|
||||||
|
/* Update the result. */
|
||||||
|
result = true;
|
||||||
|
}
|
||||||
|
/* Give the result back to the caller. */
|
||||||
|
return result;
|
||||||
|
} /*** end of SharedParamsWriteByIndex ***/
|
||||||
|
|
||||||
|
|
||||||
|
/************************************************************************************//**
|
||||||
|
** \brief Validates the shared parameter buffer contents by looking at the table
|
||||||
|
** identifier and verifying its checksum.
|
||||||
|
** \return True if successful, false otherwise.
|
||||||
|
**
|
||||||
|
****************************************************************************************/
|
||||||
|
static bool SharedParamsValidateBuffer(void)
|
||||||
|
{
|
||||||
|
bool result = false;
|
||||||
|
|
||||||
|
/* Perform validation. */
|
||||||
|
if ( (sharedParamsBuffer.identifier == SHARED_PARAMS_BUFFER_ID) &&
|
||||||
|
(SharedParamsVerifyChecksum()) )
|
||||||
|
{
|
||||||
|
/* The shared parameter buffer is valid, so update the result value. */
|
||||||
|
result = true;
|
||||||
|
}
|
||||||
|
/* Give the result back to the caller. */
|
||||||
|
return result;
|
||||||
|
} /*** end of SharedParamsValitabeTable ***/
|
||||||
|
|
||||||
|
|
||||||
|
/************************************************************************************//**
|
||||||
|
** \brief Calculates and writes the checksum into the buffer.
|
||||||
|
** \return none.
|
||||||
|
**
|
||||||
|
****************************************************************************************/
|
||||||
|
static void SharedParamsWriteChecksum(void)
|
||||||
|
{
|
||||||
|
/* Calculate and write the checksum. */
|
||||||
|
sharedParamsBuffer.checksum = SharedParamsCalculateChecksum();
|
||||||
|
} /*** end of SharedParamsWriteChecksum ***/
|
||||||
|
|
||||||
|
|
||||||
|
/************************************************************************************//**
|
||||||
|
** \brief Calculates and verifies the checksum that is currently present in the
|
||||||
|
** buffer.
|
||||||
|
** \return True is the checksum is correct, false otherwise.
|
||||||
|
**
|
||||||
|
****************************************************************************************/
|
||||||
|
static bool SharedParamsVerifyChecksum(void)
|
||||||
|
{
|
||||||
|
bool result = false;
|
||||||
|
|
||||||
|
/* Calculate and verify the checksum. */
|
||||||
|
if (SharedParamsCalculateChecksum() == sharedParamsBuffer.checksum)
|
||||||
|
{
|
||||||
|
/* Checksum is correct, so update the result value. */
|
||||||
|
result = true;
|
||||||
|
}
|
||||||
|
/* Give the result back to the caller. */
|
||||||
|
return result;
|
||||||
|
} /*** end of SharedParamsVerifyChecksum ***/
|
||||||
|
|
||||||
|
|
||||||
|
/************************************************************************************//**
|
||||||
|
** \brief Calculates and returns the checksum value for the current contents in the
|
||||||
|
** buffer. The checksum is calculated by taking the sum of all bytes in the
|
||||||
|
** parameter buffer (excluding the checksum at the end) and them taking the
|
||||||
|
** two's complement value of it.
|
||||||
|
** \return The calculated checksum value.
|
||||||
|
**
|
||||||
|
****************************************************************************************/
|
||||||
|
static uint16_t SharedParamsCalculateChecksum(void)
|
||||||
|
{
|
||||||
|
uint16_t result = 0;
|
||||||
|
uint32_t byteIdx;
|
||||||
|
|
||||||
|
/* Add the identifier bytes to the checksum. */
|
||||||
|
result += (uint8_t)sharedParamsBuffer.identifier;
|
||||||
|
result += (uint8_t)(sharedParamsBuffer.identifier >> 8u);
|
||||||
|
result += (uint8_t)(sharedParamsBuffer.identifier >> 16u);
|
||||||
|
result += (uint8_t)(sharedParamsBuffer.identifier >> 24u);
|
||||||
|
/* Loop through the parameter data array. */
|
||||||
|
for (byteIdx=0; byteIdx<SHARED_PARAMS_CFG_BUFFER_DATA_LEN; byteIdx++)
|
||||||
|
{
|
||||||
|
/* Add parameter data byte to the checksum. */
|
||||||
|
result += (uint8_t)sharedParamsBuffer.data[byteIdx];
|
||||||
|
}
|
||||||
|
/* Determine one's complement. */
|
||||||
|
result = ~result;
|
||||||
|
/* Determine two's complement. */
|
||||||
|
result += 1;
|
||||||
|
/* Give the result back to the caller. */
|
||||||
|
return result;
|
||||||
|
} /*** end of SharedParamsCalculateChecksum ***/
|
||||||
|
|
||||||
|
|
||||||
|
/*********************************** end of shared_params.c ****************************/
|
|
@ -0,0 +1,57 @@
|
||||||
|
/************************************************************************************//**
|
||||||
|
* \file Demo/ARMCM3_LM3S_EK_LM3S6965_GCC/Prog/shared_params.h
|
||||||
|
* \brief Shared RAM parameters header file.
|
||||||
|
* \ingroup Prog_ARMCM3_LM3S_EK_LM3S6965_GCC
|
||||||
|
* \internal
|
||||||
|
*----------------------------------------------------------------------------------------
|
||||||
|
* C O P Y R I G H T
|
||||||
|
*----------------------------------------------------------------------------------------
|
||||||
|
* Copyright (c) 2018 by Feaser http://www.feaser.com All rights reserved
|
||||||
|
*
|
||||||
|
*----------------------------------------------------------------------------------------
|
||||||
|
* L I C E N S E
|
||||||
|
*----------------------------------------------------------------------------------------
|
||||||
|
* This file is part of OpenBLT. OpenBLT is free software: you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU General Public License as published by the Free
|
||||||
|
* Software Foundation, either version 3 of the License, or (at your option) any later
|
||||||
|
* version.
|
||||||
|
*
|
||||||
|
* OpenBLT is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
|
||||||
|
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
||||||
|
* PURPOSE. See the GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You have received a copy of the GNU General Public License along with OpenBLT. It
|
||||||
|
* should be located in ".\Doc\license.html". If not, contact Feaser to obtain a copy.
|
||||||
|
*
|
||||||
|
* \endinternal
|
||||||
|
****************************************************************************************/
|
||||||
|
#ifndef SHARED_PARAMS_H
|
||||||
|
#define SHARED_PARAMS_H
|
||||||
|
|
||||||
|
/****************************************************************************************
|
||||||
|
* Include files
|
||||||
|
****************************************************************************************/
|
||||||
|
#include <stdint.h> /* Standard integer types. */
|
||||||
|
#include <stdbool.h> /* Standard boolean types. */
|
||||||
|
|
||||||
|
|
||||||
|
/****************************************************************************************
|
||||||
|
* Configuration macros
|
||||||
|
****************************************************************************************/
|
||||||
|
/** \brief Configuration macro for specifying the size of the data inside the parameter
|
||||||
|
* buffer. This is the length in bytes of the actual parameter data, so
|
||||||
|
* excluding the bufferId and checksum.
|
||||||
|
*/
|
||||||
|
#define SHARED_PARAMS_CFG_BUFFER_DATA_LEN (56u)
|
||||||
|
|
||||||
|
|
||||||
|
/****************************************************************************************
|
||||||
|
* Function prototypes
|
||||||
|
****************************************************************************************/
|
||||||
|
void SharedParamsInit(void);
|
||||||
|
bool SharedParamsReadByIndex(uint32_t idx, uint8_t * value);
|
||||||
|
bool SharedParamsWriteByIndex(uint32_t idx, uint8_t value);
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* SHARED_PARAMS_H */
|
||||||
|
/*********************************** end of shared_params.h ****************************/
|
|
@ -1,10 +1,12 @@
|
||||||
/*-Specials-*/
|
/*-Specials-*/
|
||||||
define symbol __ICFEDIT_intvec_start__ = 0x00000000;
|
define symbol __ICFEDIT_intvec_start__ = 0x00000000;
|
||||||
/*-Memory Regions-*/
|
/*-Memory Regions-*/
|
||||||
define symbol __ICFEDIT_region_ROM_start__ = 0x00000000;
|
define symbol __ICFEDIT_region_ROM_start__ = 0x00000000;
|
||||||
define symbol __ICFEDIT_region_ROM_end__ = 0x00007FFF;
|
define symbol __ICFEDIT_region_ROM_end__ = 0x00007FFF;
|
||||||
define symbol __ICFEDIT_region_RAM_start__ = 0x20000000;
|
define symbol __ICFEDIT_region_SHARED_start__ = 0x20000000;
|
||||||
define symbol __ICFEDIT_region_RAM_end__ = 0x2000FFFF;
|
define symbol __ICFEDIT_region_SHARED_end__ = 0x2000003F;
|
||||||
|
define symbol __ICFEDIT_region_RAM_start__ = 0x20000040;
|
||||||
|
define symbol __ICFEDIT_region_RAM_end__ = 0x2000FFFF;
|
||||||
/*-Sizes-*/
|
/*-Sizes-*/
|
||||||
define symbol __ICFEDIT_size_cstack__ = 0x800;
|
define symbol __ICFEDIT_size_cstack__ = 0x800;
|
||||||
define symbol __ICFEDIT_size_heap__ = 0x400;
|
define symbol __ICFEDIT_size_heap__ = 0x400;
|
||||||
|
@ -20,6 +22,8 @@ initialize by copy { readwrite };
|
||||||
do not initialize { section .noinit };
|
do not initialize { section .noinit };
|
||||||
|
|
||||||
place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec };
|
place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec };
|
||||||
|
place at address mem:__ICFEDIT_region_SHARED_start__ { readwrite section .shared };
|
||||||
|
|
||||||
place in ROM_region { readonly };
|
place in ROM_region { readonly };
|
||||||
place in RAM_region { readwrite,
|
place in RAM_region { readwrite,
|
||||||
block CSTACK, block HEAP };
|
block CSTACK, block HEAP };
|
Binary file not shown.
File diff suppressed because it is too large
Load Diff
|
@ -50,7 +50,7 @@
|
||||||
/** \brief Motorola or Intel style byte ordering. */
|
/** \brief Motorola or Intel style byte ordering. */
|
||||||
#define BOOT_CPU_BYTE_ORDER_MOTOROLA (0)
|
#define BOOT_CPU_BYTE_ORDER_MOTOROLA (0)
|
||||||
/** \brief Enable/disable hook function call right before user program start. */
|
/** \brief Enable/disable hook function call right before user program start. */
|
||||||
#define BOOT_CPU_USER_PROGRAM_START_HOOK (0)
|
#define BOOT_CPU_USER_PROGRAM_START_HOOK (1)
|
||||||
|
|
||||||
|
|
||||||
/****************************************************************************************
|
/****************************************************************************************
|
||||||
|
@ -80,72 +80,56 @@
|
||||||
* the BOOT_COM_NET_ENABLE configurable to 1. The maximum amount of data bytes in a
|
* the BOOT_COM_NET_ENABLE configurable to 1. The maximum amount of data bytes in a
|
||||||
* message for data transmission and reception is set through BOOT_COM_NET_TX_MAX_DATA
|
* message for data transmission and reception is set through BOOT_COM_NET_TX_MAX_DATA
|
||||||
* and BOOT_COM_NET_RX_MAX_DATA, respectively. The default IP address is configured
|
* and BOOT_COM_NET_RX_MAX_DATA, respectively. The default IP address is configured
|
||||||
* with the macros BOOT_COM_NET_IPADDRx. The default netmask is configued with the macros
|
* with the macros BOOT_COM_NET_IPADDRx. The default netmask is configured with the
|
||||||
* BOOT_COM_NET_NETMASKx. The default gateway is configured with the macros
|
* macro BOOT_COM_NET_NETMASKx. The default gateway is configured with the macros
|
||||||
* BOOT_COM_NET_GATEWAYx. The bootloader acts and a TCP/IP server. The port the server
|
* BOOT_COM_NET_GATEWAYx. The bootloader acts and a TCP/IP server. The port the server
|
||||||
* listen on for connections is configured with BOOT_COM_NET_PORT.
|
* listen on for connections is configured with BOOT_COM_NET_PORT.
|
||||||
|
* In case the network switch/router supports a DHCP server, you can set configuration
|
||||||
|
* macro BOOT_COM_NET_DHCP_ENABLE to 1 to enable the DHCP client. In this case the
|
||||||
|
* DHCP client handles the automatic IP address assignment. In this case the macros for
|
||||||
|
* configuring the IP address, network mask and gateway address are no longer needed.
|
||||||
*/
|
*/
|
||||||
/** \brief Enable/disable the NET transport layer. */
|
/** \brief Enable/disable the NET transport layer. */
|
||||||
#define BOOT_COM_NET_ENABLE (1)
|
#define BOOT_COM_NET_ENABLE (1)
|
||||||
/** \brief Configure number of bytes in the target->host data packet. */
|
/** \brief Configure number of bytes in the target->host data packet. */
|
||||||
#define BOOT_COM_NET_TX_MAX_DATA (64)
|
#define BOOT_COM_NET_TX_MAX_DATA (64)
|
||||||
/** \brief Configure number of bytes in the host->target data packet. */
|
/** \brief Configure number of bytes in the host->target data packet. */
|
||||||
#define BOOT_COM_NET_RX_MAX_DATA (64)
|
#define BOOT_COM_NET_RX_MAX_DATA (64)
|
||||||
/** \brief Configure the port that the TCP/IP server listens on */
|
/** \brief Configure the port that the TCP/IP server listens on */
|
||||||
#define BOOT_COM_NET_PORT (1000)
|
#define BOOT_COM_NET_PORT (1000)
|
||||||
|
/** \brief Enable/disable DHCP client for automatically obtaining an IP address. */
|
||||||
|
#define BOOT_COM_NET_DHCP_ENABLE (1)
|
||||||
/** \brief Configure the 1st byte of the IP address */
|
/** \brief Configure the 1st byte of the IP address */
|
||||||
#define BOOT_COM_NET_IPADDR0 (169)
|
#define BOOT_COM_NET_IPADDR0 (192)
|
||||||
/** \brief Configure the 2nd byte of the IP address */
|
/** \brief Configure the 2nd byte of the IP address */
|
||||||
#define BOOT_COM_NET_IPADDR1 (254)
|
#define BOOT_COM_NET_IPADDR1 (168)
|
||||||
/** \brief Configure the 3rd byte of the IP address */
|
/** \brief Configure the 3rd byte of the IP address */
|
||||||
#define BOOT_COM_NET_IPADDR2 (19)
|
#define BOOT_COM_NET_IPADDR2 (178)
|
||||||
/** \brief Configure the 4th byte of the IP address */
|
/** \brief Configure the 4th byte of the IP address */
|
||||||
#define BOOT_COM_NET_IPADDR3 (63)
|
#define BOOT_COM_NET_IPADDR3 (50)
|
||||||
/** \brief Configure the 1st byte of the network mask */
|
/** \brief Configure the 1st byte of the network mask */
|
||||||
#define BOOT_COM_NET_NETMASK0 (255)
|
#define BOOT_COM_NET_NETMASK0 (255)
|
||||||
/** \brief Configure the 2nd byte of the network mask */
|
/** \brief Configure the 2nd byte of the network mask */
|
||||||
#define BOOT_COM_NET_NETMASK1 (255)
|
#define BOOT_COM_NET_NETMASK1 (255)
|
||||||
/** \brief Configure the 3rd byte of the network mask */
|
/** \brief Configure the 3rd byte of the network mask */
|
||||||
#define BOOT_COM_NET_NETMASK2 (0)
|
#define BOOT_COM_NET_NETMASK2 (255)
|
||||||
/** \brief Configure the 4th byte of the network mask */
|
/** \brief Configure the 4th byte of the network mask */
|
||||||
#define BOOT_COM_NET_NETMASK3 (0)
|
#define BOOT_COM_NET_NETMASK3 (0)
|
||||||
/** \brief Configure the 1st byte of the gateway address */
|
/** \brief Configure the 1st byte of the gateway address */
|
||||||
#define BOOT_COM_NET_GATEWAY0 (169)
|
#define BOOT_COM_NET_GATEWAY0 (192)
|
||||||
/** \brief Configure the 2nd byte of the gateway address */
|
/** \brief Configure the 2nd byte of the gateway address */
|
||||||
#define BOOT_COM_NET_GATEWAY1 (254)
|
#define BOOT_COM_NET_GATEWAY1 (168)
|
||||||
/** \brief Configure the 3rd byte of the gateway address */
|
/** \brief Configure the 3rd byte of the gateway address */
|
||||||
#define BOOT_COM_NET_GATEWAY2 (19)
|
#define BOOT_COM_NET_GATEWAY2 (178)
|
||||||
/** \brief Configure the 4th byte of the gateway address */
|
/** \brief Configure the 4th byte of the gateway address */
|
||||||
#define BOOT_COM_NET_GATEWAY3 (1)
|
#define BOOT_COM_NET_GATEWAY3 (1)
|
||||||
/** \brief Enable/disable a hook function that is called when the IP address is about
|
/** \brief Enable/disable the deferred initialization mechanism. When enabled, the
|
||||||
* to be set. This allows a dynamic override of the BOOT_COM_NET_IPADDRx values.
|
* communication interface is only initialized when: (a) no valid user program
|
||||||
|
* is detected, or (b) when CpuUserProgramStartHook() returns BLT_FALSE. Your
|
||||||
|
* bootloader application can explicitly initialize the communication interface
|
||||||
|
* by calling ComDeferredInit().
|
||||||
*/
|
*/
|
||||||
#define BOOT_COM_NET_IPADDR_HOOK_ENABLE (0)
|
#define BOOT_COM_NET_DEFERRED_INIT_ENABLE (1)
|
||||||
/** \brief Enable/disable a hook function that is called when the netmask is about
|
|
||||||
* to be set. This allows a dynamic override of the BOOT_COM_NET_NETMASKx values.
|
|
||||||
*/
|
|
||||||
#define BOOT_COM_NET_NETMASK_HOOK_ENABLE (0)
|
|
||||||
/** \brief Enable/disable a hook function that is called when the gateway address is
|
|
||||||
* about to be set. This allows a dynamic override of the BOOT_COM_NET_GATEWAYx
|
|
||||||
* values.
|
|
||||||
*/
|
|
||||||
#define BOOT_COM_NET_GATEWAY_HOOK_ENABLE (0)
|
|
||||||
|
|
||||||
|
|
||||||
/****************************************************************************************
|
|
||||||
* B A C K D O O R C O N F I G U R A T I O N
|
|
||||||
****************************************************************************************/
|
|
||||||
#if (BOOT_COM_NET_ENABLE > 0)
|
|
||||||
/* Override the default time that the backdoor is open if firmware updates via TCP/IP
|
|
||||||
* are supported. in this case a reactivation of the bootloader results in a re-
|
|
||||||
* initialization of the ethernet MAC. when directly connected to the ethernet port of
|
|
||||||
* a PC this will go relatively fast (depending on what MS Windows is being used), but
|
|
||||||
* when connected to the network via a router this can take several seconds. feel free to
|
|
||||||
* shorten/lengthen this time for finetuning. the only downside of a long backdoor open
|
|
||||||
* time is that the starting of the user program will also be delayed for this time.
|
|
||||||
*/
|
|
||||||
#define BOOT_BACKDOOR_ENTRY_TIMEOUT_MS (10000)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
/****************************************************************************************
|
/****************************************************************************************
|
||||||
|
|
|
@ -30,6 +30,8 @@
|
||||||
* Include files
|
* Include files
|
||||||
****************************************************************************************/
|
****************************************************************************************/
|
||||||
#include "boot.h" /* bootloader generic header */
|
#include "boot.h" /* bootloader generic header */
|
||||||
|
#include "inc/hw_types.h"
|
||||||
|
#include "driverlib/gpio.h"
|
||||||
#if (BOOT_FILE_LOGGING_ENABLE > 0)
|
#if (BOOT_FILE_LOGGING_ENABLE > 0)
|
||||||
#include "inc/hw_memmap.h"
|
#include "inc/hw_memmap.h"
|
||||||
#include "inc/hw_types.h"
|
#include "inc/hw_types.h"
|
||||||
|
@ -81,6 +83,11 @@ blt_bool BackDoorEntryHook(void)
|
||||||
****************************************************************************************/
|
****************************************************************************************/
|
||||||
blt_bool CpuUserProgramStartHook(void)
|
blt_bool CpuUserProgramStartHook(void)
|
||||||
{
|
{
|
||||||
|
/* do not start the user program if the select pushbutton is pressed */
|
||||||
|
if (GPIOPinRead(GPIO_PORTF_BASE, GPIO_PIN_1) == 0)
|
||||||
|
{
|
||||||
|
return BLT_FALSE;
|
||||||
|
}
|
||||||
/* okay to start the user program */
|
/* okay to start the user program */
|
||||||
return BLT_TRUE;
|
return BLT_TRUE;
|
||||||
} /*** end of CpuUserProgramStartHook ***/
|
} /*** end of CpuUserProgramStartHook ***/
|
||||||
|
@ -193,79 +200,6 @@ blt_bool NvmWriteChecksumHook(void)
|
||||||
#endif /* BOOT_NVM_CHECKSUM_HOOKS_ENABLE > 0 */
|
#endif /* BOOT_NVM_CHECKSUM_HOOKS_ENABLE > 0 */
|
||||||
|
|
||||||
|
|
||||||
/****************************************************************************************
|
|
||||||
* N E T W O R K I N T E R F A C E H O O K F U N C T I O N S
|
|
||||||
****************************************************************************************/
|
|
||||||
#if (BOOT_COM_NET_IPADDR_HOOK_ENABLE > 0)
|
|
||||||
/************************************************************************************//**
|
|
||||||
** \brief Callback that gets called when the IP address is about to be configured.
|
|
||||||
** \param ipAddrArray 4-byte array where the IP address should be stored.
|
|
||||||
** \return none.
|
|
||||||
**
|
|
||||||
****************************************************************************************/
|
|
||||||
void NetIpAddressHook(blt_int8u *ipAddrArray)
|
|
||||||
{
|
|
||||||
/* This hook function allows a dynamic configuration of the IP address. This could for
|
|
||||||
* example be used if the bootloader is activated from a running user program and
|
|
||||||
* should have the same IP address as the user program. This IP address could be stored
|
|
||||||
* at a fixed location in RAM which can be read here. For now the example implemen-
|
|
||||||
* tation simply configures the bootloader's default IP address.
|
|
||||||
*/
|
|
||||||
ipAddrArray[0] = BOOT_COM_NET_IPADDR0;
|
|
||||||
ipAddrArray[1] = BOOT_COM_NET_IPADDR1;
|
|
||||||
ipAddrArray[2] = BOOT_COM_NET_IPADDR2;
|
|
||||||
ipAddrArray[3] = BOOT_COM_NET_IPADDR3;
|
|
||||||
} /*** end of NetIpAddressHook ***/
|
|
||||||
#endif /* BOOT_COM_NET_IPADDR_HOOK_ENABLE > 0 */
|
|
||||||
|
|
||||||
|
|
||||||
#if (BOOT_COM_NET_NETMASK_HOOK_ENABLE > 0)
|
|
||||||
/************************************************************************************//**
|
|
||||||
** \brief Callback that gets called when the network mask is about to be configured.
|
|
||||||
** \param netMaskArray 4-byte array where the network mask should be stored.
|
|
||||||
** \return none.
|
|
||||||
**
|
|
||||||
****************************************************************************************/
|
|
||||||
void NetNetworkMaskHook(blt_int8u *netMaskArray)
|
|
||||||
{
|
|
||||||
/* This hook function allows a dynamic configuration of the network mask. This could
|
|
||||||
* for example be used if the bootloader is activated from a running user program and
|
|
||||||
* should have the same network mask as the user program. This network mask could be
|
|
||||||
* stored at a fixed location in RAM which can be read here. For now the example
|
|
||||||
* implementation simply configures the bootloader's default network mask.
|
|
||||||
*/
|
|
||||||
netMaskArray[0] = BOOT_COM_NET_NETMASK0;
|
|
||||||
netMaskArray[1] = BOOT_COM_NET_NETMASK1;
|
|
||||||
netMaskArray[2] = BOOT_COM_NET_NETMASK2;
|
|
||||||
netMaskArray[3] = BOOT_COM_NET_NETMASK3;
|
|
||||||
} /*** end of NetNetworkMaskHook ***/
|
|
||||||
#endif /* BOOT_COM_NET_NETMASK_HOOK_ENABLE > 0 */
|
|
||||||
|
|
||||||
|
|
||||||
#if (BOOT_COM_NET_GATEWAY_HOOK_ENABLE > 0)
|
|
||||||
/************************************************************************************//**
|
|
||||||
** \brief Callback that gets called when the gateway address is about to be
|
|
||||||
** configured.
|
|
||||||
** \param gatewayAddrArray 4-byte array where the gateway address should be stored.
|
|
||||||
** \return none.
|
|
||||||
**
|
|
||||||
****************************************************************************************/
|
|
||||||
void NetGatewayAddressHook(blt_int8u *gatewayAddrArray)
|
|
||||||
{
|
|
||||||
/* This hook function allows a dynamic configuration of the network mask. This could
|
|
||||||
* for example be used if the bootloader is activated from a running user program and
|
|
||||||
* should have the same network mask as the user program. This network mask could be
|
|
||||||
* stored at a fixed location in RAM which can be read here. For now the example
|
|
||||||
* implementation simply configures the bootloader's default network mask.
|
|
||||||
*/
|
|
||||||
gatewayAddrArray[0] = BOOT_COM_NET_GATEWAY0;
|
|
||||||
gatewayAddrArray[1] = BOOT_COM_NET_GATEWAY1;
|
|
||||||
gatewayAddrArray[2] = BOOT_COM_NET_GATEWAY2;
|
|
||||||
gatewayAddrArray[3] = BOOT_COM_NET_GATEWAY3;
|
|
||||||
} /*** end of NetGatewayAddressHook ***/
|
|
||||||
#endif /* BOOT_COM_NET_GATEWAY_HOOK_ENABLE > 0 */
|
|
||||||
|
|
||||||
|
|
||||||
/****************************************************************************************
|
/****************************************************************************************
|
||||||
* W A T C H D O G D R I V E R H O O K F U N C T I O N S
|
* W A T C H D O G D R I V E R H O O K F U N C T I O N S
|
||||||
****************************************************************************************/
|
****************************************************************************************/
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -247,7 +247,7 @@
|
||||||
<option>
|
<option>
|
||||||
<name>CCAllowList</name>
|
<name>CCAllowList</name>
|
||||||
<version>1</version>
|
<version>1</version>
|
||||||
<state>00000000</state>
|
<state>11111110</state>
|
||||||
</option>
|
</option>
|
||||||
<option>
|
<option>
|
||||||
<name>CCDebugInfo</name>
|
<name>CCDebugInfo</name>
|
||||||
|
@ -318,7 +318,7 @@
|
||||||
<state>$PROJ_DIR$\..\..\..\..\Source</state>
|
<state>$PROJ_DIR$\..\..\..\..\Source</state>
|
||||||
<state>$PROJ_DIR$\..\..\..\..\Source\third_party\fatfs\src</state>
|
<state>$PROJ_DIR$\..\..\..\..\Source\third_party\fatfs\src</state>
|
||||||
<state>$PROJ_DIR$\..\..\..\..\Source\third_party\uip\uip</state>
|
<state>$PROJ_DIR$\..\..\..\..\Source\third_party\uip\uip</state>
|
||||||
<state>$PROJ_DIR$\..\..\..\..\Source\third_party\uip\apps\hello-world</state>
|
<state>$PROJ_DIR$\..\..\..\..\Source\third_party\uip\apps\dhcpc</state>
|
||||||
<state>$PROJ_DIR$\..\..\..\..\Source\ARMCM3_LM3S</state>
|
<state>$PROJ_DIR$\..\..\..\..\Source\ARMCM3_LM3S</state>
|
||||||
<state>$PROJ_DIR$\..\..\..\..\Source\ARMCM3_LM3S\IAR</state>
|
<state>$PROJ_DIR$\..\..\..\..\Source\ARMCM3_LM3S\IAR</state>
|
||||||
<state>$PROJ_DIR$\..</state>
|
<state>$PROJ_DIR$\..</state>
|
||||||
|
@ -346,7 +346,7 @@
|
||||||
</option>
|
</option>
|
||||||
<option>
|
<option>
|
||||||
<name>CCOptLevel</name>
|
<name>CCOptLevel</name>
|
||||||
<state>1</state>
|
<state>3</state>
|
||||||
</option>
|
</option>
|
||||||
<option>
|
<option>
|
||||||
<name>CCOptStrategy</name>
|
<name>CCOptStrategy</name>
|
||||||
|
@ -355,7 +355,7 @@
|
||||||
</option>
|
</option>
|
||||||
<option>
|
<option>
|
||||||
<name>CCOptLevelSlave</name>
|
<name>CCOptLevelSlave</name>
|
||||||
<state>1</state>
|
<state>3</state>
|
||||||
</option>
|
</option>
|
||||||
<option>
|
<option>
|
||||||
<name>CompilerMisraRules98</name>
|
<name>CompilerMisraRules98</name>
|
||||||
|
@ -2074,6 +2074,12 @@
|
||||||
<file>
|
<file>
|
||||||
<name>$PROJ_DIR$\..\main.c</name>
|
<name>$PROJ_DIR$\..\main.c</name>
|
||||||
</file>
|
</file>
|
||||||
|
<file>
|
||||||
|
<name>$PROJ_DIR$\..\shared_params.c</name>
|
||||||
|
</file>
|
||||||
|
<file>
|
||||||
|
<name>$PROJ_DIR$\..\shared_params.h</name>
|
||||||
|
</file>
|
||||||
<file>
|
<file>
|
||||||
<name>$PROJ_DIR$\..\vectors.c</name>
|
<name>$PROJ_DIR$\..\vectors.c</name>
|
||||||
</file>
|
</file>
|
||||||
|
@ -2135,6 +2141,12 @@
|
||||||
<file>
|
<file>
|
||||||
<name>$PROJ_DIR$\..\..\..\..\Source\third_party\uip\uip\clock.h</name>
|
<name>$PROJ_DIR$\..\..\..\..\Source\third_party\uip\uip\clock.h</name>
|
||||||
</file>
|
</file>
|
||||||
|
<file>
|
||||||
|
<name>$PROJ_DIR$\..\..\..\..\Source\third_party\uip\apps\dhcpc\dhcpc.c</name>
|
||||||
|
</file>
|
||||||
|
<file>
|
||||||
|
<name>$PROJ_DIR$\..\..\..\..\Source\third_party\uip\apps\dhcpc\dhcpc.h</name>
|
||||||
|
</file>
|
||||||
<file>
|
<file>
|
||||||
<name>$PROJ_DIR$\..\..\..\..\Source\third_party\uip\uip\lc-addrlabels.h</name>
|
<name>$PROJ_DIR$\..\..\..\..\Source\third_party\uip\uip\lc-addrlabels.h</name>
|
||||||
</file>
|
</file>
|
||||||
|
|
|
@ -34,12 +34,12 @@
|
||||||
|
|
||||||
|
|
||||||
<PreferedWindows><Position>2</Position><ScreenPosX>0</ScreenPosX><ScreenPosY>0</ScreenPosY><Windows/></PreferedWindows><ShowCodeCoverage>0</ShowCodeCoverage><ShowInstrProfiling>0</ShowInstrProfiling></Disassembly>
|
<PreferedWindows><Position>2</Position><ScreenPosX>0</ScreenPosX><ScreenPosY>0</ScreenPosY><Windows/></PreferedWindows><ShowCodeCoverage>0</ShowCodeCoverage><ShowInstrProfiling>0</ShowInstrProfiling></Disassembly>
|
||||||
<WATCH_1><PreferedWindows><Position>2</Position><ScreenPosX>0</ScreenPosX><ScreenPosY>0</ScreenPosY><Windows/></PreferedWindows><expressions><item>data</item><item>s->dto_data</item><item/></expressions><col-names><item>Expression</item><item>Location</item><item>Type</item><item>Value</item></col-names><col-widths><item>147</item><item>150</item><item>100</item><item>174</item></col-widths></WATCH_1><Register><PreferedWindows><Position>2</Position><ScreenPosX>0</ScreenPosX><ScreenPosY>0</ScreenPosY><Windows/></PreferedWindows></Register><STACK_1><PreferedWindows><Position>1</Position><ScreenPosX>0</ScreenPosX><ScreenPosY>0</ScreenPosY><Windows/></PreferedWindows><stack>CSTACK</stack><width>4</width><vars>1</vars><offset>0</offset><col-names><item>Data</item><item>Frame</item><item>Location</item><item>Type</item><item>Value</item><item>Variable</item></col-names><col-widths><item>100</item><item>100</item><item>100</item><item>100</item><item>100</item><item>100</item></col-widths></STACK_1><Memory><PreferedWindows><Position>3</Position><ScreenPosX>0</ScreenPosX><ScreenPosY>0</ScreenPosY><Windows/></PreferedWindows><FindDirection>1</FindDirection><FindAsHex>0</FindAsHex></Memory></Static>
|
<WATCH_1><PreferedWindows><Position>2</Position><ScreenPosX>0</ScreenPosX><ScreenPosY>0</ScreenPosY><Windows/></PreferedWindows><expressions><item></item></expressions><col-names><item>Expression</item><item>Location</item><item>Type</item><item>Value</item></col-names><col-widths><item>147</item><item>150</item><item>100</item><item>289</item></col-widths></WATCH_1><Register><PreferedWindows><Position>2</Position><ScreenPosX>0</ScreenPosX><ScreenPosY>0</ScreenPosY><Windows/></PreferedWindows></Register><STACK_1><PreferedWindows><Position>1</Position><ScreenPosX>0</ScreenPosX><ScreenPosY>0</ScreenPosY><Windows/></PreferedWindows><stack>CSTACK</stack><width>4</width><vars>1</vars><offset>0</offset><col-names><item>Data</item><item>Frame</item><item>Location</item><item>Type</item><item>Value</item><item>Variable</item></col-names><col-widths><item>100</item><item>100</item><item>100</item><item>100</item><item>100</item><item>100</item></col-widths></STACK_1><Memory><PreferedWindows><Position>3</Position><ScreenPosX>0</ScreenPosX><ScreenPosY>0</ScreenPosY><Windows/></PreferedWindows><FindDirection>1</FindDirection><MemGotoHistory><item>0x20001ec8</item></MemGotoHistory><FindAsHex>0</FindAsHex></Memory><CallStack><col-names><item>Frame</item><item>_I0</item></col-names><col-widths><item>3500</item><item>20</item></col-widths><PreferedWindows><Position>1</Position><ScreenPosX>0</ScreenPosX><ScreenPosY>0</ScreenPosY><Windows/></PreferedWindows></CallStack></Static>
|
||||||
<Windows>
|
<Windows>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<Wnd0>
|
<Wnd1>
|
||||||
<Tabs>
|
<Tabs>
|
||||||
<Tab>
|
<Tab>
|
||||||
<Identity>TabID-4214-26312</Identity>
|
<Identity>TabID-4214-26312</Identity>
|
||||||
|
@ -51,20 +51,20 @@
|
||||||
</Tab>
|
</Tab>
|
||||||
</Tabs>
|
</Tabs>
|
||||||
|
|
||||||
<SelectedTab>0</SelectedTab></Wnd0><Wnd1><Tabs><Tab><Identity>TabID-14429-10902</Identity><TabName>Debug Log</TabName><Factory>Debug-Log</Factory><Session/></Tab></Tabs><SelectedTab>0</SelectedTab></Wnd1><Wnd4><Tabs><Tab><Identity>TabID-29443-18340</Identity><TabName>Disassembly</TabName><Factory>Disassembly</Factory><Session/></Tab></Tabs><SelectedTab>0</SelectedTab></Wnd4></Windows>
|
<SelectedTab>0</SelectedTab></Wnd1><Wnd4><Tabs><Tab><Identity>TabID-14429-10902</Identity><TabName>Debug Log</TabName><Factory>Debug-Log</Factory><Session/></Tab></Tabs><SelectedTab>0</SelectedTab></Wnd4><Wnd5><Tabs><Tab><Identity>TabID-21835-3732</Identity><TabName>Watch 1</TabName><Factory>WATCH_1</Factory></Tab></Tabs><SelectedTab>0</SelectedTab></Wnd5></Windows>
|
||||||
<Editor>
|
<Editor>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<Pane><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>75</YPos2><SelStart2>5273</SelStart2><SelEnd2>5273</SelEnd2></Tab><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>19</YPos2><SelStart2>2788</SelStart2><SelEnd2>2788</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>532</YPos2><SelStart2>17458</SelStart2><SelEnd2>17458</SelEnd2></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\..\..\..\Source\third_party\fatfs\src\ff.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>5144</YPos2><SelStart2>174744</SelStart2><SelEnd2>174744</SelEnd2></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\..\..\..\Source\third_party\fatfs\src\diskio.h</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>0</YPos2><SelStart2>977</SelStart2><SelEnd2>977</SelEnd2></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\lib\driverlib\ethernet.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>1163</YPos2><SelStart2>43132</SelStart2><SelEnd2>43132</SelEnd2></Tab><ActiveTab>5</ActiveTab></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$\..\blt_conf.h</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>75</YPos2><SelStart2>5274</SelStart2><SelEnd2>5274</SelEnd2></Tab><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>36</YPos2><SelStart2>2879</SelStart2><SelEnd2>2879</SelEnd2></Tab><ActiveTab>1</ActiveTab><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>102</YPos2><SelStart2>5310</SelStart2><SelEnd2>5310</SelEnd2></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\..\..\..\Source\net.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>164</YPos2><SelStart2>7862</SelStart2><SelEnd2>7862</SelEnd2></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\..\..\..\Source\ARMCM3_LM3S\cpu.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>63</YPos2><SelStart2>3699</SelStart2><SelEnd2>3699</SelEnd2></Tab></Pane><ActivePane>0</ActivePane><Sizes><Pane><X>1000000</X><Y>1000000</Y></Pane></Sizes><SplitMode>1</SplitMode></Editor>
|
||||||
<Positions>
|
<Positions>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<Top><Row0><Sizes><Toolbar-04DB1F58><key>iaridepm.enu1</key></Toolbar-04DB1F58></Sizes></Row0><Row1><Sizes><Toolbar-0E9D39C0><key>debuggergui.enu1</key></Toolbar-0E9D39C0></Sizes></Row1></Top><Left><Row0><Sizes><Wnd0><Rect><Top>-2</Top><Left>-2</Left><Bottom>740</Bottom><Right>285</Right><x>-2</x><y>-2</y><xscreen>240</xscreen><yscreen>243</yscreen><sizeHorzCX>125000</sizeHorzCX><sizeHorzCY>241311</sizeHorzCY><sizeVertCX>149479</sizeVertCX><sizeVertCY>736842</sizeVertCY></Rect></Wnd0></Sizes></Row0></Left><Right><Row0><Sizes><Wnd4><Rect><Top>-2</Top><Left>-2</Left><Bottom>740</Bottom><Right>198</Right><x>-2</x><y>-2</y><xscreen>200</xscreen><yscreen>200</yscreen><sizeHorzCX>104167</sizeHorzCX><sizeHorzCY>198610</sizeHorzCY><sizeVertCX>104167</sizeVertCX><sizeVertCY>736842</sizeVertCY></Rect></Wnd4></Sizes></Row0></Right><Bottom><Row0><Sizes><Wnd1><Rect><Top>-2</Top><Left>-2</Left><Bottom>198</Bottom><Right>1922</Right><x>-2</x><y>-2</y><xscreen>1924</xscreen><yscreen>200</yscreen><sizeHorzCX>1002083</sizeHorzCX><sizeHorzCY>198610</sizeHorzCY><sizeVertCX>104167</sizeVertCX><sizeVertCY>198610</sizeVertCY></Rect></Wnd1></Sizes></Row0></Bottom><Float><Sizes/></Float></Positions>
|
<Top><Row0><Sizes><Toolbar-049D4890><key>iaridepm.enu1</key></Toolbar-049D4890></Sizes></Row0><Row1><Sizes><Toolbar-0DDA0508><key>debuggergui.enu1</key></Toolbar-0DDA0508></Sizes></Row1></Top><Left><Row0><Sizes><Wnd1><Rect><Top>-2</Top><Left>-2</Left><Bottom>740</Bottom><Right>285</Right><x>-2</x><y>-2</y><xscreen>240</xscreen><yscreen>243</yscreen><sizeHorzCX>125000</sizeHorzCX><sizeHorzCY>241311</sizeHorzCY><sizeVertCX>149479</sizeVertCX><sizeVertCY>736842</sizeVertCY></Rect></Wnd1></Sizes></Row0></Left><Right><Row0><Sizes><Wnd5><Rect><Top>-2</Top><Left>-2</Left><Bottom>740</Bottom><Right>444</Right><x>-2</x><y>-2</y><xscreen>200</xscreen><yscreen>200</yscreen><sizeHorzCX>104167</sizeHorzCX><sizeHorzCY>198610</sizeHorzCY><sizeVertCX>232292</sizeVertCX><sizeVertCY>736842</sizeVertCY></Rect></Wnd5></Sizes></Row0></Right><Bottom><Row0><Sizes><Wnd4><Rect><Top>-2</Top><Left>-2</Left><Bottom>198</Bottom><Right>1922</Right><x>-2</x><y>-2</y><xscreen>1924</xscreen><yscreen>200</yscreen><sizeHorzCX>1002083</sizeHorzCX><sizeHorzCY>198610</sizeHorzCY><sizeVertCX>104167</sizeVertCX><sizeVertCY>198610</sizeVertCY></Rect></Wnd4></Sizes></Row0></Bottom><Float><Sizes/></Float></Positions>
|
||||||
</Desktop>
|
</Desktop>
|
||||||
</Project>
|
</Project>
|
||||||
|
|
||||||
|
|
|
@ -9,7 +9,7 @@ TriggerName=main
|
||||||
LimitSize=0
|
LimitSize=0
|
||||||
ByteLimit=50
|
ByteLimit=50
|
||||||
[DebugChecksum]
|
[DebugChecksum]
|
||||||
Checksum=-1582861970
|
Checksum=2100562844
|
||||||
[Exceptions]
|
[Exceptions]
|
||||||
StopOnUncaught=_ 0
|
StopOnUncaught=_ 0
|
||||||
StopOnThrow=_ 0
|
StopOnThrow=_ 0
|
||||||
|
@ -19,11 +19,9 @@ ShowArgs=0
|
||||||
MixedMode=1
|
MixedMode=1
|
||||||
[LMIFTDIDriver]
|
[LMIFTDIDriver]
|
||||||
LMI_ResetMode=0x00000000
|
LMI_ResetMode=0x00000000
|
||||||
LMIFTDIserialNo=04110716A
|
LMIFTDIserialNo=04110450A
|
||||||
LMIFTDIfoundProbes=
|
LMIFTDIfoundProbes=
|
||||||
LMI_LeaveTargetRunning=0x00000000
|
LMI_LeaveTargetRunning=0x00000000
|
||||||
[watch_formats]
|
|
||||||
Fmt0={W}0:test_address 4 0
|
|
||||||
[CallStackLog]
|
[CallStackLog]
|
||||||
Enabled=0
|
Enabled=0
|
||||||
[DriverProfiling]
|
[DriverProfiling]
|
||||||
|
@ -32,6 +30,9 @@ Mode=0
|
||||||
Graph=0
|
Graph=0
|
||||||
Symbiont=0
|
Symbiont=0
|
||||||
Exclusions=
|
Exclusions=
|
||||||
|
[watch_formats]
|
||||||
|
Fmt0={W}0:test_address 4 0
|
||||||
|
Fmt1={W}1:ulBase 4 0
|
||||||
[Log file]
|
[Log file]
|
||||||
LoggingEnabled=_ 0
|
LoggingEnabled=_ 0
|
||||||
LogFile=_ ""
|
LogFile=_ ""
|
||||||
|
@ -42,7 +43,8 @@ LogFile=_ ""
|
||||||
[Disassemble mode]
|
[Disassemble mode]
|
||||||
mode=0
|
mode=0
|
||||||
[Breakpoints]
|
[Breakpoints]
|
||||||
Count=0
|
Bp0=_ "STD_CODE" "{$PROJ_DIR$\..\..\..\..\Source\net.c}.300.7" 0 0 0 0 "" 0 ""
|
||||||
|
Count=1
|
||||||
[Aliases]
|
[Aliases]
|
||||||
Count=0
|
Count=0
|
||||||
SuppressDialog=0
|
SuppressDialog=0
|
||||||
|
|
|
@ -25,7 +25,7 @@
|
||||||
<Factory>Workspace</Factory>
|
<Factory>Workspace</Factory>
|
||||||
<Session>
|
<Session>
|
||||||
|
|
||||||
<NodeDict><ExpandedNode>lm3s6965</ExpandedNode><ExpandedNode>lm3s6965/Boot</ExpandedNode><ExpandedNode>lm3s6965/Output</ExpandedNode><ExpandedNode>lm3s6965/Source</ExpandedNode><ExpandedNode>lm3s6965/Source/ARMCM3_LM3S</ExpandedNode><ExpandedNode>lm3s6965/Source/ARMCM3_LM3S/IAR</ExpandedNode><ExpandedNode>lm3s6965/Source/fatfs</ExpandedNode><ExpandedNode>lm3s6965/Source/third_party</ExpandedNode><ExpandedNode>lm3s6965/Source/third_party/fatfs</ExpandedNode></NodeDict></Session>
|
<NodeDict><ExpandedNode>lm3s6965</ExpandedNode><ExpandedNode>lm3s6965/Boot</ExpandedNode><ExpandedNode>lm3s6965/Output</ExpandedNode><ExpandedNode>lm3s6965/Source</ExpandedNode><ExpandedNode>lm3s6965/Source/ARMCM3_LM3S</ExpandedNode><ExpandedNode>lm3s6965/Source/ARMCM3_LM3S/IAR</ExpandedNode><ExpandedNode>lm3s6965/Source/fatfs</ExpandedNode><ExpandedNode>lm3s6965/Source/third_party</ExpandedNode><ExpandedNode>lm3s6965/Source/third_party/uip</ExpandedNode></NodeDict></Session>
|
||||||
</Tab>
|
</Tab>
|
||||||
</Tabs>
|
</Tabs>
|
||||||
|
|
||||||
|
@ -35,14 +35,14 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<Pane><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>75</YPos2><SelStart2>5273</SelStart2><SelEnd2>5273</SelEnd2></Tab><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>19</YPos2><SelStart2>2788</SelStart2><SelEnd2>2788</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>532</YPos2><SelStart2>17458</SelStart2><SelEnd2>17458</SelEnd2></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\..\..\..\Source\third_party\fatfs\src\ff.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>5144</YPos2><SelStart2>174744</SelStart2><SelEnd2>174744</SelEnd2></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\..\..\..\Source\third_party\fatfs\src\diskio.h</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>0</YPos2><SelStart2>977</SelStart2><SelEnd2>977</SelEnd2></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\lib\driverlib\ethernet.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>1163</YPos2><SelStart2>43132</SelStart2><SelEnd2>43132</SelEnd2></Tab><ActiveTab>5</ActiveTab></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$\..\blt_conf.h</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>75</YPos2><SelStart2>5274</SelStart2><SelEnd2>5274</SelEnd2></Tab><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>36</YPos2><SelStart2>2624</SelStart2><SelEnd2>2624</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>51</YPos2><SelStart2>3539</SelStart2><SelEnd2>3539</SelEnd2></Tab><ActiveTab>2</ActiveTab></Pane><ActivePane>0</ActivePane><Sizes><Pane><X>1000000</X><Y>1000000</Y></Pane></Sizes><SplitMode>1</SplitMode></Editor>
|
||||||
<Positions>
|
<Positions>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<Top><Row0><Sizes><Toolbar-04DB1F58><key>iaridepm.enu1</key></Toolbar-04DB1F58></Sizes></Row0><Row1><Sizes/></Row1><Row2><Sizes/></Row2></Top><Left><Row0><Sizes><Wnd0><Rect><Top>-2</Top><Left>-2</Left><Bottom>463</Bottom><Right>467</Right><x>-2</x><y>-2</y><xscreen>372</xscreen><yscreen>353</yscreen><sizeHorzCX>193750</sizeHorzCX><sizeHorzCY>350546</sizeHorzCY><sizeVertCX>244271</sizeVertCX><sizeVertCY>461768</sizeVertCY></Rect></Wnd0><Wnd3><Rect><Top>0</Top><Left>0</Left><Bottom>1817980462</Bottom><Right>1545884233</Right><x>-2</x><y>461</y><xscreen>258</xscreen><yscreen>237</yscreen><sizeHorzCX>134375</sizeHorzCX><sizeHorzCY>235353</sizeHorzCY><sizeVertCX>244271</sizeVertCX><sizeVertCY>497517</sizeVertCY></Rect></Wnd3></Sizes></Row0></Left><Right><Row0><Sizes/></Row0></Right><Bottom><Row0><Sizes/></Row0></Bottom><Float><Sizes/></Float></Positions>
|
<Top><Row0><Sizes><Toolbar-049D4890><key>iaridepm.enu1</key></Toolbar-049D4890></Sizes></Row0><Row1><Sizes/></Row1><Row2><Sizes/></Row2></Top><Left><Row0><Sizes><Wnd0><Rect><Top>-2</Top><Left>-2</Left><Bottom>463</Bottom><Right>467</Right><x>-2</x><y>-2</y><xscreen>372</xscreen><yscreen>353</yscreen><sizeHorzCX>193750</sizeHorzCX><sizeHorzCY>350546</sizeHorzCY><sizeVertCX>244271</sizeVertCX><sizeVertCY>461768</sizeVertCY></Rect></Wnd0><Wnd3><Rect><Top>0</Top><Left>0</Left><Bottom>0</Bottom><Right>7</Right><x>-2</x><y>461</y><xscreen>258</xscreen><yscreen>237</yscreen><sizeHorzCX>134375</sizeHorzCX><sizeHorzCY>235353</sizeHorzCY><sizeVertCX>244271</sizeVertCX><sizeVertCY>497517</sizeVertCY></Rect></Wnd3></Sizes></Row0></Left><Right><Row0><Sizes/></Row0></Right><Bottom><Row0><Sizes/></Row0></Bottom><Float><Sizes/></Float></Positions>
|
||||||
</Desktop>
|
</Desktop>
|
||||||
</Workspace>
|
</Workspace>
|
||||||
|
|
||||||
|
|
|
@ -59,6 +59,10 @@
|
||||||
#define NETDEV_DEFAULT_MACADDR5 (0x45)
|
#define NETDEV_DEFAULT_MACADDR5 (0x45)
|
||||||
|
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
static struct uip_eth_addr macAddress;
|
||||||
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
void netdev_init(void)
|
void netdev_init(void)
|
||||||
{
|
{
|
||||||
|
@ -142,6 +146,18 @@ void netdev_init_mac(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
void netdev_get_mac(unsigned char * mac_addr)
|
||||||
|
{
|
||||||
|
mac_addr[0] = macAddress.addr[0];
|
||||||
|
mac_addr[1] = macAddress.addr[1];
|
||||||
|
mac_addr[2] = macAddress.addr[2];
|
||||||
|
mac_addr[3] = macAddress.addr[3];
|
||||||
|
mac_addr[4] = macAddress.addr[4];
|
||||||
|
mac_addr[5] = macAddress.addr[5];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
unsigned int netdev_read(void)
|
unsigned int netdev_read(void)
|
||||||
{
|
{
|
||||||
|
|
|
@ -40,6 +40,7 @@
|
||||||
|
|
||||||
void netdev_init(void);
|
void netdev_init(void);
|
||||||
void netdev_init_mac(void);
|
void netdev_init_mac(void);
|
||||||
|
void netdev_get_mac(unsigned char * mac_addr);
|
||||||
unsigned int netdev_read(void);
|
unsigned int netdev_read(void);
|
||||||
void netdev_send(void);
|
void netdev_send(void);
|
||||||
|
|
||||||
|
|
|
@ -98,6 +98,27 @@ typedef unsigned short uip_stats_t;
|
||||||
*/
|
*/
|
||||||
#define UIP_CONF_MAX_LISTENPORTS 1
|
#define UIP_CONF_MAX_LISTENPORTS 1
|
||||||
|
|
||||||
|
/**
|
||||||
|
* UDP support on or off
|
||||||
|
*
|
||||||
|
* \hideinitializer
|
||||||
|
*/
|
||||||
|
#define UIP_CONF_UDP 1
|
||||||
|
|
||||||
|
/**
|
||||||
|
* UDP Maximum Connections
|
||||||
|
*
|
||||||
|
* \hideinitializer
|
||||||
|
*/
|
||||||
|
#define UIP_CONF_UDP_CONNS 1
|
||||||
|
|
||||||
|
/**
|
||||||
|
* UDP checksums on or off
|
||||||
|
*
|
||||||
|
* \hideinitializer
|
||||||
|
*/
|
||||||
|
#define UIP_CONF_UDP_CHECKSUMS 0
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* uIP buffer size.
|
* uIP buffer size.
|
||||||
*
|
*
|
||||||
|
@ -119,20 +140,6 @@ typedef unsigned short uip_stats_t;
|
||||||
*/
|
*/
|
||||||
#define UIP_CONF_LOGGING 0
|
#define UIP_CONF_LOGGING 0
|
||||||
|
|
||||||
/**
|
|
||||||
* UDP support on or off
|
|
||||||
*
|
|
||||||
* \hideinitializer
|
|
||||||
*/
|
|
||||||
#define UIP_CONF_UDP 0
|
|
||||||
|
|
||||||
/**
|
|
||||||
* UDP checksums on or off
|
|
||||||
*
|
|
||||||
* \hideinitializer
|
|
||||||
*/
|
|
||||||
#define UIP_CONF_UDP_CHECKSUMS 1
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* uIP statistics on or off
|
* uIP statistics on or off
|
||||||
*
|
*
|
||||||
|
@ -140,10 +147,12 @@ typedef unsigned short uip_stats_t;
|
||||||
*/
|
*/
|
||||||
#define UIP_CONF_STATISTICS 0
|
#define UIP_CONF_STATISTICS 0
|
||||||
|
|
||||||
|
|
||||||
/* Here we include the header file for the application(s) we use in
|
/* Here we include the header file for the application(s) we use in
|
||||||
our project. */
|
our project. */
|
||||||
#include "boot.h"
|
#include "boot.h"
|
||||||
#include "net.h"
|
#include "net.h"
|
||||||
|
#include "dhcpc.h"
|
||||||
|
|
||||||
#endif /* __UIP_CONF_H__ */
|
#endif /* __UIP_CONF_H__ */
|
||||||
|
|
||||||
|
|
|
@ -40,6 +40,7 @@
|
||||||
#if (BOOT_FILE_LOGGING_ENABLE > 0)
|
#if (BOOT_FILE_LOGGING_ENABLE > 0)
|
||||||
#include "driverlib/uartlib.h"
|
#include "driverlib/uartlib.h"
|
||||||
#endif
|
#endif
|
||||||
|
#include "shared_params.h" /* Shared parameters header */
|
||||||
|
|
||||||
/****************************************************************************************
|
/****************************************************************************************
|
||||||
* Function prototypes
|
* Function prototypes
|
||||||
|
@ -55,11 +56,44 @@ static void Init(void);
|
||||||
****************************************************************************************/
|
****************************************************************************************/
|
||||||
void main(void)
|
void main(void)
|
||||||
{
|
{
|
||||||
|
blt_int8u deferredInitRequestFlag = 0;
|
||||||
|
|
||||||
/* initialize the microcontroller */
|
/* initialize the microcontroller */
|
||||||
Init();
|
Init();
|
||||||
|
/* initialize the shared parameters module */
|
||||||
|
SharedParamsInit();
|
||||||
/* initialize the bootloader */
|
/* initialize the bootloader */
|
||||||
BootInit();
|
BootInit();
|
||||||
|
#if (BOOT_COM_DEFERRED_INIT_ENABLE == 1)
|
||||||
|
/* the bootloader is configured to NOT initialize the TCP/IP network stack by default
|
||||||
|
* to bypass unnecessary delay times before starting the user program. the TCP/IP net-
|
||||||
|
* work tack is now only initialized when: (a) no valid user program is detected, or
|
||||||
|
* (b) a forced backdoor entry occurred (CpuUserProgramStartHook() returned BLT_FALSE).
|
||||||
|
*
|
||||||
|
* these demo bootloader and user programs have one extra feature implemented for
|
||||||
|
* demonstration purposes. the demo user program can detect firmware update requests
|
||||||
|
* from the TCP/IP network in which case it activates the bootloader. But...the
|
||||||
|
* TCP/IP network stack will not be initialized in this situation. for this reason
|
||||||
|
* the shared parameter module was integrated in both the bootloader and user program.
|
||||||
|
* more information about the shared parameter module can be found here:
|
||||||
|
* https://www.feaser.com/en/blog/?p=216
|
||||||
|
*
|
||||||
|
* the shared parameter at the first index (0) contains a flag. this flag is set to
|
||||||
|
* 1, right before the user program activates this bootloader, to explicitly request
|
||||||
|
* the bootloader to initialize the TCP/IP network stack. this makes it possible for
|
||||||
|
* a firmware update to proceed. the code here reads out this flag and performs the
|
||||||
|
* TCP/IP network stack initialization when requested.
|
||||||
|
*/
|
||||||
|
SharedParamsReadByIndex(0, &deferredInitRequestFlag);
|
||||||
|
if (deferredInitRequestFlag == 1)
|
||||||
|
{
|
||||||
|
/* explicitly initialize all communication interface for which the deferred
|
||||||
|
* initialization feature was enabled.
|
||||||
|
*/
|
||||||
|
ComDeferredInit();
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/* start the infinite program loop */
|
/* start the infinite program loop */
|
||||||
while (1)
|
while (1)
|
||||||
{
|
{
|
||||||
|
@ -78,6 +112,14 @@ static void Init(void)
|
||||||
{
|
{
|
||||||
/* set the clocking to run at 50MHz from the PLL */
|
/* set the clocking to run at 50MHz from the PLL */
|
||||||
SysCtlClockSet(SYSCTL_SYSDIV_4 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN | SYSCTL_XTAL_8MHZ);
|
SysCtlClockSet(SYSCTL_SYSDIV_4 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN | SYSCTL_XTAL_8MHZ);
|
||||||
|
|
||||||
|
/* initialize the status button as a digital input. it is used to override the
|
||||||
|
* starting of the user program.
|
||||||
|
*/
|
||||||
|
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
|
||||||
|
GPIODirModeSet(GPIO_PORTF_BASE, GPIO_PIN_1, GPIO_DIR_MODE_IN);
|
||||||
|
GPIOPadConfigSet(GPIO_PORTF_BASE, GPIO_PIN_1, GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD_WPU);
|
||||||
|
|
||||||
#if (BOOT_COM_UART_ENABLE > 0)
|
#if (BOOT_COM_UART_ENABLE > 0)
|
||||||
#if (BOOT_COM_UART_CHANNEL_INDEX == 0)
|
#if (BOOT_COM_UART_CHANNEL_INDEX == 0)
|
||||||
/* enable and configure UART0 related peripherals and pins */
|
/* enable and configure UART0 related peripherals and pins */
|
||||||
|
|
|
@ -0,0 +1,301 @@
|
||||||
|
/************************************************************************************//**
|
||||||
|
* \file Demo/ARMCM3_LM3S_EK_LM3S6965_IAR/Boot/shared_params.c
|
||||||
|
* \brief Shared RAM parameters source file.
|
||||||
|
* \ingroup Boot_ARMCM3_LM3S_EK_LM3S6965_IAR
|
||||||
|
* \internal
|
||||||
|
*----------------------------------------------------------------------------------------
|
||||||
|
* C O P Y R I G H T
|
||||||
|
*----------------------------------------------------------------------------------------
|
||||||
|
* Copyright (c) 2018 by Feaser http://www.feaser.com All rights reserved
|
||||||
|
*
|
||||||
|
*----------------------------------------------------------------------------------------
|
||||||
|
* L I C E N S E
|
||||||
|
*----------------------------------------------------------------------------------------
|
||||||
|
* This file is part of OpenBLT. OpenBLT is free software: you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU General Public License as published by the Free
|
||||||
|
* Software Foundation, either version 3 of the License, or (at your option) any later
|
||||||
|
* version.
|
||||||
|
*
|
||||||
|
* OpenBLT is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
|
||||||
|
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
||||||
|
* PURPOSE. See the GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You have received a copy of the GNU General Public License along with OpenBLT. It
|
||||||
|
* should be located in ".\Doc\license.html". If not, contact Feaser to obtain a copy.
|
||||||
|
*
|
||||||
|
* \endinternal
|
||||||
|
****************************************************************************************/
|
||||||
|
|
||||||
|
/****************************************************************************************
|
||||||
|
* Include files
|
||||||
|
****************************************************************************************/
|
||||||
|
#include <stddef.h> /* Standard definitions (NULL). */
|
||||||
|
#include "shared_params.h" /* Shared parameters header. */
|
||||||
|
|
||||||
|
|
||||||
|
/****************************************************************************************
|
||||||
|
* Macro definitions
|
||||||
|
****************************************************************************************/
|
||||||
|
/** \brief Constant parameter buffer identifier. This value is always located as the
|
||||||
|
* start of the buffer to validate the the RAM contains valid shared parameters.
|
||||||
|
*/
|
||||||
|
#define SHARED_PARAMS_BUFFER_ID (0xCE42E7A2u)
|
||||||
|
|
||||||
|
|
||||||
|
/****************************************************************************************
|
||||||
|
* Type definitions
|
||||||
|
****************************************************************************************/
|
||||||
|
/** \brief Layout of the shared parameters RAM buffer. */
|
||||||
|
typedef struct t_shared_params_buffer
|
||||||
|
{
|
||||||
|
/** \brief Fixed buffer identifier to validate that the RAM contains valid shared
|
||||||
|
* parameters.
|
||||||
|
*/
|
||||||
|
uint32_t identifier;
|
||||||
|
/** \brief Array for the actual parameter data. */
|
||||||
|
uint8_t data[SHARED_PARAMS_CFG_BUFFER_DATA_LEN];
|
||||||
|
/** \brief Checksum value of all the bytes in the buffer, excluding this checksum
|
||||||
|
* value of obvious reasons. The checksum is calculated as the Two's
|
||||||
|
* complement of the sum of the bytes.
|
||||||
|
*/
|
||||||
|
uint16_t checksum;
|
||||||
|
} tSharedParamsBuffer;
|
||||||
|
|
||||||
|
|
||||||
|
/****************************************************************************************
|
||||||
|
* Global data declarations
|
||||||
|
****************************************************************************************/
|
||||||
|
/** \brief Declaration of the actual parameter buffer that this module manages.
|
||||||
|
* \warning For the shared RAM parameters to work properly for sharing information
|
||||||
|
* between the bootloader and user program, it is important that this
|
||||||
|
* variable is linked to the exact same RAM address in both the bootloader
|
||||||
|
* and the user program. Additionally, it should be configured such that the
|
||||||
|
* C-startup code does NOT zero its contents during system initialization. This
|
||||||
|
* is the code that runs in the reset event handler, before function main() is
|
||||||
|
* called.
|
||||||
|
* For GCC based embedded toolchains, the solution is to assign this variable
|
||||||
|
* to a custom section, in this case called ".shared". Then in the linker
|
||||||
|
* script, add the following to the SECTIONS:
|
||||||
|
*
|
||||||
|
* .shared (NOLOAD) :
|
||||||
|
* {
|
||||||
|
* . = ALIGN(4);
|
||||||
|
* _sshared = .;
|
||||||
|
* __shared_start__ = _sshared;
|
||||||
|
* *(.shared)
|
||||||
|
* *(.shared.*)
|
||||||
|
* KEEP(*(.shared))
|
||||||
|
* . = ALIGN(4);
|
||||||
|
* _eshared = .;
|
||||||
|
* __shared_end__ = _eshared;
|
||||||
|
* } >SHARED
|
||||||
|
*
|
||||||
|
* Next, add a new MEMORY entry for SHARED at the start of RAM and reduce
|
||||||
|
* the length of the remaining RAM:
|
||||||
|
*
|
||||||
|
* SHARED (xrw) : ORIGIN = 0x200000C0, LENGTH = 64
|
||||||
|
* RAM (xrw) : ORIGIN = 0x20000100, LENGTH = 32K - 192 - 64
|
||||||
|
*
|
||||||
|
* Note that the previous example is for an STM32F0 microcontroller where
|
||||||
|
* the first 192 (0xC0) bytes in RAM are reserved for the user program
|
||||||
|
* vector table.
|
||||||
|
*
|
||||||
|
* \remark This same approach can be applied with other toolchains such as Keil MDK
|
||||||
|
* and IAR EWARM. Consult the compiler and linker user manuals of your
|
||||||
|
* toolchain to find out how to place a RAM variable at a fixed memory address
|
||||||
|
* and to prevent the C-startup code from zeroing its contents.
|
||||||
|
* Here are a few links to get you started:
|
||||||
|
* * IAR EWARM:
|
||||||
|
* https://www.iar.com/support/tech-notes/compiler/
|
||||||
|
* linker-error-for-absolute-located-variable/
|
||||||
|
* * Keil MDK:
|
||||||
|
* http://www.keil.com/support/docs/3480.htm
|
||||||
|
*/
|
||||||
|
__no_init static tSharedParamsBuffer sharedParamsBuffer @ ".shared";
|
||||||
|
|
||||||
|
|
||||||
|
/****************************************************************************************
|
||||||
|
* Function prototypes
|
||||||
|
****************************************************************************************/
|
||||||
|
static bool SharedParamsValidateBuffer(void);
|
||||||
|
static void SharedParamsWriteChecksum(void);
|
||||||
|
static bool SharedParamsVerifyChecksum(void);
|
||||||
|
static uint16_t SharedParamsCalculateChecksum(void);
|
||||||
|
|
||||||
|
|
||||||
|
/************************************************************************************//**
|
||||||
|
** \brief Initializes the shared RAM parameters module.
|
||||||
|
** \return none.
|
||||||
|
**
|
||||||
|
****************************************************************************************/
|
||||||
|
void SharedParamsInit(void)
|
||||||
|
{
|
||||||
|
uint32_t byteIdx;
|
||||||
|
|
||||||
|
/* The shared parameter buffer does not get initialized by the C-startup code. Another
|
||||||
|
* previously running program could have initialized it, in which case it is ready
|
||||||
|
* for use and nothing more needs to be done.
|
||||||
|
*/
|
||||||
|
if (!SharedParamsValidateBuffer())
|
||||||
|
{
|
||||||
|
/* The shared parameter buffer was not yet initialized by a running program. This
|
||||||
|
* typically happens after a cold reset where the RAM contents were lost. In this
|
||||||
|
* case we need to explicitly configure and initialize it, since the C-startup code
|
||||||
|
* was configured to not do this.
|
||||||
|
*
|
||||||
|
* The initialization consists of setting the buffer identifier, zeroing the
|
||||||
|
* actual parameter data and updating the checksum at the end.
|
||||||
|
*/
|
||||||
|
sharedParamsBuffer.identifier = SHARED_PARAMS_BUFFER_ID;
|
||||||
|
for (byteIdx=0; byteIdx < SHARED_PARAMS_CFG_BUFFER_DATA_LEN; byteIdx++)
|
||||||
|
{
|
||||||
|
sharedParamsBuffer.data[byteIdx] = 0;
|
||||||
|
}
|
||||||
|
SharedParamsWriteChecksum();
|
||||||
|
}
|
||||||
|
} /*** end of SharedParamsInit ***/
|
||||||
|
|
||||||
|
|
||||||
|
/************************************************************************************//**
|
||||||
|
** \brief Reads a data byte from the shared parameter buffer at the specified index.
|
||||||
|
** \param idx Index into the parameter data array. A valid value is between 0 and
|
||||||
|
** (SHARED_PARAMS_CFG_BUFFER_DATA_LEN - 1).
|
||||||
|
** \param value Pointer to where the read data value is stored.
|
||||||
|
** \return True if successful, false otherwise.
|
||||||
|
**
|
||||||
|
****************************************************************************************/
|
||||||
|
bool SharedParamsReadByIndex(uint32_t idx, uint8_t * value)
|
||||||
|
{
|
||||||
|
bool result = false;
|
||||||
|
|
||||||
|
/* Only continue if the buffer and the specified parameters are valid. */
|
||||||
|
if ( (SharedParamsValidateBuffer()) &&
|
||||||
|
(idx < SHARED_PARAMS_CFG_BUFFER_DATA_LEN) &&
|
||||||
|
(value != NULL) )
|
||||||
|
{
|
||||||
|
/* Read the value and update the result. */
|
||||||
|
*value = sharedParamsBuffer.data[idx];
|
||||||
|
result = true;
|
||||||
|
}
|
||||||
|
/* Give the result back to the caller. */
|
||||||
|
return result;
|
||||||
|
} /*** end of SharedParamsReadByIndex ***/
|
||||||
|
|
||||||
|
|
||||||
|
/************************************************************************************//**
|
||||||
|
** \brief Writes a data byte to the shared parameter buffer at the specified index.
|
||||||
|
** \param idx Index into the parameter data array. A valid value is between 0 and
|
||||||
|
** (SHARED_PARAMS_CFG_BUFFER_DATA_LEN - 1).
|
||||||
|
** \param value Value to write.
|
||||||
|
** \return True if successful, false otherwise.
|
||||||
|
**
|
||||||
|
****************************************************************************************/
|
||||||
|
bool SharedParamsWriteByIndex(uint32_t idx, uint8_t value)
|
||||||
|
{
|
||||||
|
bool result = false;
|
||||||
|
|
||||||
|
/* Only continue if the buffer and the specified parameters are valid. */
|
||||||
|
if ( (SharedParamsValidateBuffer()) &&
|
||||||
|
(idx < SHARED_PARAMS_CFG_BUFFER_DATA_LEN) )
|
||||||
|
{
|
||||||
|
/* Write the value. */
|
||||||
|
sharedParamsBuffer.data[idx] = value;
|
||||||
|
/* Update the checksum since the contents were just changed. */
|
||||||
|
SharedParamsWriteChecksum();
|
||||||
|
/* Update the result. */
|
||||||
|
result = true;
|
||||||
|
}
|
||||||
|
/* Give the result back to the caller. */
|
||||||
|
return result;
|
||||||
|
} /*** end of SharedParamsWriteByIndex ***/
|
||||||
|
|
||||||
|
|
||||||
|
/************************************************************************************//**
|
||||||
|
** \brief Validates the shared parameter buffer contents by looking at the table
|
||||||
|
** identifier and verifying its checksum.
|
||||||
|
** \return True if successful, false otherwise.
|
||||||
|
**
|
||||||
|
****************************************************************************************/
|
||||||
|
static bool SharedParamsValidateBuffer(void)
|
||||||
|
{
|
||||||
|
bool result = false;
|
||||||
|
|
||||||
|
/* Perform validation. */
|
||||||
|
if ( (sharedParamsBuffer.identifier == SHARED_PARAMS_BUFFER_ID) &&
|
||||||
|
(SharedParamsVerifyChecksum()) )
|
||||||
|
{
|
||||||
|
/* The shared parameter buffer is valid, so update the result value. */
|
||||||
|
result = true;
|
||||||
|
}
|
||||||
|
/* Give the result back to the caller. */
|
||||||
|
return result;
|
||||||
|
} /*** end of SharedParamsValitabeTable ***/
|
||||||
|
|
||||||
|
|
||||||
|
/************************************************************************************//**
|
||||||
|
** \brief Calculates and writes the checksum into the buffer.
|
||||||
|
** \return none.
|
||||||
|
**
|
||||||
|
****************************************************************************************/
|
||||||
|
static void SharedParamsWriteChecksum(void)
|
||||||
|
{
|
||||||
|
/* Calculate and write the checksum. */
|
||||||
|
sharedParamsBuffer.checksum = SharedParamsCalculateChecksum();
|
||||||
|
} /*** end of SharedParamsWriteChecksum ***/
|
||||||
|
|
||||||
|
|
||||||
|
/************************************************************************************//**
|
||||||
|
** \brief Calculates and verifies the checksum that is currently present in the
|
||||||
|
** buffer.
|
||||||
|
** \return True is the checksum is correct, false otherwise.
|
||||||
|
**
|
||||||
|
****************************************************************************************/
|
||||||
|
static bool SharedParamsVerifyChecksum(void)
|
||||||
|
{
|
||||||
|
bool result = false;
|
||||||
|
|
||||||
|
/* Calculate and verify the checksum. */
|
||||||
|
if (SharedParamsCalculateChecksum() == sharedParamsBuffer.checksum)
|
||||||
|
{
|
||||||
|
/* Checksum is correct, so update the result value. */
|
||||||
|
result = true;
|
||||||
|
}
|
||||||
|
/* Give the result back to the caller. */
|
||||||
|
return result;
|
||||||
|
} /*** end of SharedParamsVerifyChecksum ***/
|
||||||
|
|
||||||
|
|
||||||
|
/************************************************************************************//**
|
||||||
|
** \brief Calculates and returns the checksum value for the current contents in the
|
||||||
|
** buffer. The checksum is calculated by taking the sum of all bytes in the
|
||||||
|
** parameter buffer (excluding the checksum at the end) and them taking the
|
||||||
|
** two's complement value of it.
|
||||||
|
** \return The calculated checksum value.
|
||||||
|
**
|
||||||
|
****************************************************************************************/
|
||||||
|
static uint16_t SharedParamsCalculateChecksum(void)
|
||||||
|
{
|
||||||
|
uint16_t result = 0;
|
||||||
|
uint32_t byteIdx;
|
||||||
|
|
||||||
|
/* Add the identifier bytes to the checksum. */
|
||||||
|
result += (uint8_t)sharedParamsBuffer.identifier;
|
||||||
|
result += (uint8_t)(sharedParamsBuffer.identifier >> 8u);
|
||||||
|
result += (uint8_t)(sharedParamsBuffer.identifier >> 16u);
|
||||||
|
result += (uint8_t)(sharedParamsBuffer.identifier >> 24u);
|
||||||
|
/* Loop through the parameter data array. */
|
||||||
|
for (byteIdx=0; byteIdx<SHARED_PARAMS_CFG_BUFFER_DATA_LEN; byteIdx++)
|
||||||
|
{
|
||||||
|
/* Add parameter data byte to the checksum. */
|
||||||
|
result += (uint8_t)sharedParamsBuffer.data[byteIdx];
|
||||||
|
}
|
||||||
|
/* Determine one's complement. */
|
||||||
|
result = ~result;
|
||||||
|
/* Determine two's complement. */
|
||||||
|
result += 1;
|
||||||
|
/* Give the result back to the caller. */
|
||||||
|
return result;
|
||||||
|
} /*** end of SharedParamsCalculateChecksum ***/
|
||||||
|
|
||||||
|
|
||||||
|
/*********************************** end of shared_params.c ****************************/
|
|
@ -0,0 +1,57 @@
|
||||||
|
/************************************************************************************//**
|
||||||
|
* \file Demo/ARMCM3_LM3S_EK_LM3S6965_IAR/Boot/shared_params.h
|
||||||
|
* \brief Shared RAM parameters header file.
|
||||||
|
* \ingroup Boot_ARMCM3_LM3S_EK_LM3S6965_IAR
|
||||||
|
* \internal
|
||||||
|
*----------------------------------------------------------------------------------------
|
||||||
|
* C O P Y R I G H T
|
||||||
|
*----------------------------------------------------------------------------------------
|
||||||
|
* Copyright (c) 2018 by Feaser http://www.feaser.com All rights reserved
|
||||||
|
*
|
||||||
|
*----------------------------------------------------------------------------------------
|
||||||
|
* L I C E N S E
|
||||||
|
*----------------------------------------------------------------------------------------
|
||||||
|
* This file is part of OpenBLT. OpenBLT is free software: you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU General Public License as published by the Free
|
||||||
|
* Software Foundation, either version 3 of the License, or (at your option) any later
|
||||||
|
* version.
|
||||||
|
*
|
||||||
|
* OpenBLT is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
|
||||||
|
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
||||||
|
* PURPOSE. See the GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You have received a copy of the GNU General Public License along with OpenBLT. It
|
||||||
|
* should be located in ".\Doc\license.html". If not, contact Feaser to obtain a copy.
|
||||||
|
*
|
||||||
|
* \endinternal
|
||||||
|
****************************************************************************************/
|
||||||
|
#ifndef SHARED_PARAMS_H
|
||||||
|
#define SHARED_PARAMS_H
|
||||||
|
|
||||||
|
/****************************************************************************************
|
||||||
|
* Include files
|
||||||
|
****************************************************************************************/
|
||||||
|
#include <stdint.h> /* Standard integer types. */
|
||||||
|
#include <stdbool.h> /* Standard boolean types. */
|
||||||
|
|
||||||
|
|
||||||
|
/****************************************************************************************
|
||||||
|
* Configuration macros
|
||||||
|
****************************************************************************************/
|
||||||
|
/** \brief Configuration macro for specifying the size of the data inside the parameter
|
||||||
|
* buffer. This is the length in bytes of the actual parameter data, so
|
||||||
|
* excluding the bufferId and checksum.
|
||||||
|
*/
|
||||||
|
#define SHARED_PARAMS_CFG_BUFFER_DATA_LEN (56u)
|
||||||
|
|
||||||
|
|
||||||
|
/****************************************************************************************
|
||||||
|
* Function prototypes
|
||||||
|
****************************************************************************************/
|
||||||
|
void SharedParamsInit(void);
|
||||||
|
bool SharedParamsReadByIndex(uint32_t idx, uint8_t * value);
|
||||||
|
bool SharedParamsWriteByIndex(uint32_t idx, uint8_t value);
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* SHARED_PARAMS_H */
|
||||||
|
/*********************************** end of shared_params.h ****************************/
|
Binary file not shown.
File diff suppressed because it is too large
Load Diff
|
@ -36,6 +36,7 @@
|
||||||
#include "led.h" /* LED driver */
|
#include "led.h" /* LED driver */
|
||||||
#include "time.h" /* Timer driver */
|
#include "time.h" /* Timer driver */
|
||||||
#include "net.h" /* TCP/IP server application */
|
#include "net.h" /* TCP/IP server application */
|
||||||
|
#include "shared_params.h" /* Shared parameters header. */
|
||||||
#include "inc/hw_ints.h"
|
#include "inc/hw_ints.h"
|
||||||
#include "inc/hw_memmap.h"
|
#include "inc/hw_memmap.h"
|
||||||
#include "inc/hw_nvic.h"
|
#include "inc/hw_nvic.h"
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -321,6 +321,7 @@
|
||||||
<state>$PROJ_DIR$\..\lib\driverlib</state>
|
<state>$PROJ_DIR$\..\lib\driverlib</state>
|
||||||
<state>$PROJ_DIR$\..\lib\uip</state>
|
<state>$PROJ_DIR$\..\lib\uip</state>
|
||||||
<state>$PROJ_DIR$\..\..\..\..\Source\third_party\uip\uip</state>
|
<state>$PROJ_DIR$\..\..\..\..\Source\third_party\uip\uip</state>
|
||||||
|
<state>$PROJ_DIR$\..\..\..\..\Source\third_party\uip\apps\dhcpc</state>
|
||||||
</option>
|
</option>
|
||||||
<option>
|
<option>
|
||||||
<name>CCStdIncCheck</name>
|
<name>CCStdIncCheck</name>
|
||||||
|
@ -2186,6 +2187,12 @@
|
||||||
<file>
|
<file>
|
||||||
<name>$PROJ_DIR$\..\..\..\..\Source\third_party\uip\uip\clock.h</name>
|
<name>$PROJ_DIR$\..\..\..\..\Source\third_party\uip\uip\clock.h</name>
|
||||||
</file>
|
</file>
|
||||||
|
<file>
|
||||||
|
<name>$PROJ_DIR$\..\..\..\..\Source\third_party\uip\apps\dhcpc\dhcpc.c</name>
|
||||||
|
</file>
|
||||||
|
<file>
|
||||||
|
<name>$PROJ_DIR$\..\..\..\..\Source\third_party\uip\apps\dhcpc\dhcpc.h</name>
|
||||||
|
</file>
|
||||||
<file>
|
<file>
|
||||||
<name>$PROJ_DIR$\..\..\..\..\Source\third_party\uip\uip\lc-addrlabels.h</name>
|
<name>$PROJ_DIR$\..\..\..\..\Source\third_party\uip\uip\lc-addrlabels.h</name>
|
||||||
</file>
|
</file>
|
||||||
|
@ -2269,6 +2276,12 @@
|
||||||
<file>
|
<file>
|
||||||
<name>$PROJ_DIR$\..\net.h</name>
|
<name>$PROJ_DIR$\..\net.h</name>
|
||||||
</file>
|
</file>
|
||||||
|
<file>
|
||||||
|
<name>$PROJ_DIR$\..\shared_params.c</name>
|
||||||
|
</file>
|
||||||
|
<file>
|
||||||
|
<name>$PROJ_DIR$\..\shared_params.h</name>
|
||||||
|
</file>
|
||||||
<file>
|
<file>
|
||||||
<name>$PROJ_DIR$\..\time.c</name>
|
<name>$PROJ_DIR$\..\time.c</name>
|
||||||
</file>
|
</file>
|
||||||
|
|
|
@ -35,7 +35,7 @@
|
||||||
<Windows>
|
<Windows>
|
||||||
|
|
||||||
|
|
||||||
<Wnd1>
|
<Wnd0>
|
||||||
<Tabs>
|
<Tabs>
|
||||||
<Tab>
|
<Tab>
|
||||||
<Identity>TabID-27300-28131</Identity>
|
<Identity>TabID-27300-28131</Identity>
|
||||||
|
@ -47,20 +47,20 @@
|
||||||
</Tab>
|
</Tab>
|
||||||
</Tabs>
|
</Tabs>
|
||||||
|
|
||||||
<SelectedTab>0</SelectedTab></Wnd1><Wnd3><Tabs><Tab><Identity>TabID-32469-16784</Identity><TabName>Build</TabName><Factory>Build</Factory><Session/></Tab><Tab><Identity>TabID-4992-29791</Identity><TabName>Debug Log</TabName><Factory>Debug-Log</Factory><Session/></Tab></Tabs><SelectedTab>0</SelectedTab></Wnd3></Windows>
|
<SelectedTab>0</SelectedTab></Wnd0><Wnd2><Tabs><Tab><Identity>TabID-32469-16784</Identity><TabName>Build</TabName><Factory>Build</Factory><Session/></Tab><Tab><Identity>TabID-4992-29791</Identity><TabName>Debug Log</TabName><Factory>Debug-Log</Factory><Session/></Tab></Tabs><SelectedTab>0</SelectedTab></Wnd2></Windows>
|
||||||
<Editor>
|
<Editor>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<Pane><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\led.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>45</YPos2><SelStart2>3072</SelStart2><SelEnd2>3072</SelEnd2></Tab><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>61</YPos2><SelStart2>4156</SelStart2><SelEnd2>4156</SelEnd2></Tab><ActiveTab>1</ActiveTab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\net.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>60</YPos2><SelStart2>4159</SelStart2><SelEnd2>4159</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$\..\led.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>45</YPos2><SelStart2>3072</SelStart2><SelEnd2>3072</SelEnd2></Tab><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>61</YPos2><SelStart2>3588</SelStart2><SelEnd2>3588</SelEnd2></Tab><ActiveTab>1</ActiveTab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\net.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>60</YPos2><SelStart2>4159</SelStart2><SelEnd2>4159</SelEnd2></Tab></Pane><ActivePane>0</ActivePane><Sizes><Pane><X>1000000</X><Y>1000000</Y></Pane></Sizes><SplitMode>1</SplitMode></Editor>
|
||||||
<Positions>
|
<Positions>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<Top><Row0><Sizes><Toolbar-05D81F58><key>iaridepm.enu1</key></Toolbar-05D81F58></Sizes></Row0></Top><Left><Row0><Sizes><Wnd1><Rect><Top>-2</Top><Left>-2</Left><Bottom>764</Bottom><Right>357</Right><x>-2</x><y>-2</y><xscreen>186</xscreen><yscreen>205</yscreen><sizeHorzCX>96875</sizeHorzCX><sizeHorzCY>203575</sizeHorzCY><sizeVertCX>186979</sizeVertCX><sizeVertCY>760675</sizeVertCY></Rect></Wnd1></Sizes></Row0></Left><Right><Row0><Sizes/></Row0></Right><Bottom><Row0><Sizes><Wnd3><Rect><Top>-2</Top><Left>-2</Left><Bottom>198</Bottom><Right>1922</Right><x>-2</x><y>-2</y><xscreen>1924</xscreen><yscreen>200</yscreen><sizeHorzCX>1002083</sizeHorzCX><sizeHorzCY>198610</sizeHorzCY><sizeVertCX>104167</sizeVertCX><sizeVertCY>198610</sizeVertCY></Rect></Wnd3></Sizes></Row0></Bottom><Float><Sizes/></Float></Positions>
|
<Top><Row0><Sizes><Toolbar-03E54D40><key>iaridepm.enu1</key></Toolbar-03E54D40></Sizes></Row0></Top><Left><Row0><Sizes><Wnd0><Rect><Top>-2</Top><Left>-2</Left><Bottom>764</Bottom><Right>357</Right><x>-2</x><y>-2</y><xscreen>186</xscreen><yscreen>205</yscreen><sizeHorzCX>96875</sizeHorzCX><sizeHorzCY>203575</sizeHorzCY><sizeVertCX>186979</sizeVertCX><sizeVertCY>760675</sizeVertCY></Rect></Wnd0></Sizes></Row0></Left><Right><Row0><Sizes/></Row0></Right><Bottom><Row0><Sizes><Wnd2><Rect><Top>-2</Top><Left>-2</Left><Bottom>198</Bottom><Right>1922</Right><x>-2</x><y>-2</y><xscreen>1924</xscreen><yscreen>200</yscreen><sizeHorzCX>1002083</sizeHorzCX><sizeHorzCY>198610</sizeHorzCY><sizeVertCX>104167</sizeVertCX><sizeVertCY>198610</sizeVertCY></Rect></Wnd2></Sizes></Row0></Bottom><Float><Sizes/></Float></Positions>
|
||||||
</Desktop>
|
</Desktop>
|
||||||
</Workspace>
|
</Workspace>
|
||||||
|
|
||||||
|
|
|
@ -59,6 +59,10 @@
|
||||||
#define NETDEV_DEFAULT_MACADDR5 (0x45)
|
#define NETDEV_DEFAULT_MACADDR5 (0x45)
|
||||||
|
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
static struct uip_eth_addr macAddress;
|
||||||
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
void netdev_init(void)
|
void netdev_init(void)
|
||||||
{
|
{
|
||||||
|
@ -142,6 +146,18 @@ void netdev_init_mac(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
void netdev_get_mac(unsigned char * mac_addr)
|
||||||
|
{
|
||||||
|
mac_addr[0] = macAddress.addr[0];
|
||||||
|
mac_addr[1] = macAddress.addr[1];
|
||||||
|
mac_addr[2] = macAddress.addr[2];
|
||||||
|
mac_addr[3] = macAddress.addr[3];
|
||||||
|
mac_addr[4] = macAddress.addr[4];
|
||||||
|
mac_addr[5] = macAddress.addr[5];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
unsigned int netdev_read(void)
|
unsigned int netdev_read(void)
|
||||||
{
|
{
|
||||||
|
|
|
@ -40,6 +40,7 @@
|
||||||
|
|
||||||
void netdev_init(void);
|
void netdev_init(void);
|
||||||
void netdev_init_mac(void);
|
void netdev_init_mac(void);
|
||||||
|
void netdev_get_mac(unsigned char * mac_addr);
|
||||||
unsigned int netdev_read(void);
|
unsigned int netdev_read(void);
|
||||||
void netdev_send(void);
|
void netdev_send(void);
|
||||||
|
|
||||||
|
|
|
@ -98,6 +98,27 @@ typedef unsigned short uip_stats_t;
|
||||||
*/
|
*/
|
||||||
#define UIP_CONF_MAX_LISTENPORTS 1
|
#define UIP_CONF_MAX_LISTENPORTS 1
|
||||||
|
|
||||||
|
/**
|
||||||
|
* UDP support on or off
|
||||||
|
*
|
||||||
|
* \hideinitializer
|
||||||
|
*/
|
||||||
|
#define UIP_CONF_UDP 1
|
||||||
|
|
||||||
|
/**
|
||||||
|
* UDP Maximum Connections
|
||||||
|
*
|
||||||
|
* \hideinitializer
|
||||||
|
*/
|
||||||
|
#define UIP_CONF_UDP_CONNS 1
|
||||||
|
|
||||||
|
/**
|
||||||
|
* UDP checksums on or off
|
||||||
|
*
|
||||||
|
* \hideinitializer
|
||||||
|
*/
|
||||||
|
#define UIP_CONF_UDP_CHECKSUMS 0
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* uIP buffer size.
|
* uIP buffer size.
|
||||||
*
|
*
|
||||||
|
@ -119,20 +140,6 @@ typedef unsigned short uip_stats_t;
|
||||||
*/
|
*/
|
||||||
#define UIP_CONF_LOGGING 0
|
#define UIP_CONF_LOGGING 0
|
||||||
|
|
||||||
/**
|
|
||||||
* UDP support on or off
|
|
||||||
*
|
|
||||||
* \hideinitializer
|
|
||||||
*/
|
|
||||||
#define UIP_CONF_UDP 0
|
|
||||||
|
|
||||||
/**
|
|
||||||
* UDP checksums on or off
|
|
||||||
*
|
|
||||||
* \hideinitializer
|
|
||||||
*/
|
|
||||||
#define UIP_CONF_UDP_CHECKSUMS 1
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* uIP statistics on or off
|
* uIP statistics on or off
|
||||||
*
|
*
|
||||||
|
@ -140,10 +147,12 @@ typedef unsigned short uip_stats_t;
|
||||||
*/
|
*/
|
||||||
#define UIP_CONF_STATISTICS 0
|
#define UIP_CONF_STATISTICS 0
|
||||||
|
|
||||||
|
|
||||||
/* Here we include the header file for the application(s) we use in
|
/* Here we include the header file for the application(s) we use in
|
||||||
our project. */
|
our project. */
|
||||||
#include "boot.h"
|
#include "header.h"
|
||||||
#include "net.h"
|
#include "net.h"
|
||||||
|
#include "dhcpc.h"
|
||||||
|
|
||||||
#endif /* __UIP_CONF_H__ */
|
#endif /* __UIP_CONF_H__ */
|
||||||
|
|
||||||
|
|
|
@ -48,10 +48,17 @@ void main(void)
|
||||||
{
|
{
|
||||||
/* initialize the microcontroller */
|
/* initialize the microcontroller */
|
||||||
Init();
|
Init();
|
||||||
|
/* initialize the shared parameters module */
|
||||||
|
SharedParamsInit();
|
||||||
/* initialize the network application */
|
/* initialize the network application */
|
||||||
NetInit();
|
NetInit();
|
||||||
/* initialize the bootloader interface */
|
/* initialize the bootloader interface */
|
||||||
BootComInit();
|
BootComInit();
|
||||||
|
/* the shared parameter at index 0 is used as a boolean flag to indicate if the
|
||||||
|
* bootloader should initialize the TCP/IP network stack. by default this flag
|
||||||
|
* should be reset.
|
||||||
|
*/
|
||||||
|
SharedParamsWriteByIndex(0, 0);
|
||||||
|
|
||||||
/* start the infinite program loop */
|
/* start the infinite program loop */
|
||||||
while (1)
|
while (1)
|
||||||
|
|
|
@ -1,10 +1,12 @@
|
||||||
/*-Specials-*/
|
/*-Specials-*/
|
||||||
define symbol __ICFEDIT_intvec_start__ = 0x00008000;
|
define symbol __ICFEDIT_intvec_start__ = 0x00008000;
|
||||||
/*-Memory Regions-*/
|
/*-Memory Regions-*/
|
||||||
define symbol __ICFEDIT_region_ROM_start__ = 0x00008000;
|
define symbol __ICFEDIT_region_ROM_start__ = 0x00008000;
|
||||||
define symbol __ICFEDIT_region_ROM_end__ = 0x0003FFFF;
|
define symbol __ICFEDIT_region_ROM_end__ = 0x0003FFFF;
|
||||||
define symbol __ICFEDIT_region_RAM_start__ = 0x20000000;
|
define symbol __ICFEDIT_region_SHARED_start__ = 0x20000000;
|
||||||
define symbol __ICFEDIT_region_RAM_end__ = 0x2000FFFF;
|
define symbol __ICFEDIT_region_SHARED_end__ = 0x2000003F;
|
||||||
|
define symbol __ICFEDIT_region_RAM_start__ = 0x20000040;
|
||||||
|
define symbol __ICFEDIT_region_RAM_end__ = 0x2000FFFF;
|
||||||
/*-Sizes-*/
|
/*-Sizes-*/
|
||||||
define symbol __ICFEDIT_size_cstack__ = 0x400;
|
define symbol __ICFEDIT_size_cstack__ = 0x400;
|
||||||
define symbol __ICFEDIT_size_heap__ = 0x800;
|
define symbol __ICFEDIT_size_heap__ = 0x800;
|
||||||
|
@ -23,6 +25,7 @@ initialize by copy { readwrite };
|
||||||
do not initialize { section .noinit };
|
do not initialize { section .noinit };
|
||||||
|
|
||||||
place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec };
|
place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec };
|
||||||
|
place at address mem:__ICFEDIT_region_SHARED_start__ { readwrite section .shared };
|
||||||
|
|
||||||
place in ROM_region { readonly };
|
place in ROM_region { readonly };
|
||||||
place in RAM_region { readwrite,
|
place in RAM_region { readwrite,
|
||||||
|
|
|
@ -53,6 +53,10 @@
|
||||||
static unsigned long periodicTimerTimeOut;
|
static unsigned long periodicTimerTimeOut;
|
||||||
/** \brief Holds the time out value of the uIP ARP timer. */
|
/** \brief Holds the time out value of the uIP ARP timer. */
|
||||||
static unsigned long ARPTimerTimeOut;
|
static unsigned long ARPTimerTimeOut;
|
||||||
|
#if (BOOT_COM_NET_DHCP_ENABLE > 0)
|
||||||
|
/** \brief Holds the MAC address which is used by the DHCP client. */
|
||||||
|
static struct uip_eth_addr macAddress;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/************************************************************************************//**
|
/************************************************************************************//**
|
||||||
|
@ -71,6 +75,7 @@ void NetInit(void)
|
||||||
ARPTimerTimeOut = TimerGet() + NET_UIP_ARP_TIMER_MS;
|
ARPTimerTimeOut = TimerGet() + NET_UIP_ARP_TIMER_MS;
|
||||||
/* initialize the uIP TCP/IP stack. */
|
/* initialize the uIP TCP/IP stack. */
|
||||||
uip_init();
|
uip_init();
|
||||||
|
#if (BOOT_COM_NET_DHCP_ENABLE == 0)
|
||||||
/* set the IP address */
|
/* set the IP address */
|
||||||
uip_ipaddr(ipaddr, BOOT_COM_NET_IPADDR0, BOOT_COM_NET_IPADDR1, BOOT_COM_NET_IPADDR2,
|
uip_ipaddr(ipaddr, BOOT_COM_NET_IPADDR0, BOOT_COM_NET_IPADDR1, BOOT_COM_NET_IPADDR2,
|
||||||
BOOT_COM_NET_IPADDR3);
|
BOOT_COM_NET_IPADDR3);
|
||||||
|
@ -83,10 +88,28 @@ void NetInit(void)
|
||||||
uip_ipaddr(ipaddr, BOOT_COM_NET_GATEWAY0, BOOT_COM_NET_GATEWAY1, BOOT_COM_NET_GATEWAY2,
|
uip_ipaddr(ipaddr, BOOT_COM_NET_GATEWAY0, BOOT_COM_NET_GATEWAY1, BOOT_COM_NET_GATEWAY2,
|
||||||
BOOT_COM_NET_GATEWAY3);
|
BOOT_COM_NET_GATEWAY3);
|
||||||
uip_setdraddr(ipaddr);
|
uip_setdraddr(ipaddr);
|
||||||
|
#else
|
||||||
|
/* set the IP address */
|
||||||
|
uip_ipaddr(ipaddr, 0, 0, 0, 0);
|
||||||
|
uip_sethostaddr(ipaddr);
|
||||||
|
/* set the network mask */
|
||||||
|
uip_ipaddr(ipaddr, 0, 0, 0, 0);
|
||||||
|
uip_setnetmask(ipaddr);
|
||||||
|
/* set the gateway address */
|
||||||
|
uip_ipaddr(ipaddr, 0, 0, 0, 0);
|
||||||
|
uip_setdraddr(ipaddr);
|
||||||
|
#endif
|
||||||
/* start listening on the configured port for XCP transfers on TCP/IP */
|
/* start listening on the configured port for XCP transfers on TCP/IP */
|
||||||
uip_listen(HTONS(BOOT_COM_NET_PORT));
|
uip_listen(HTONS(BOOT_COM_NET_PORT));
|
||||||
/* initialize the MAC and set the MAC address */
|
/* initialize the MAC and set the MAC address */
|
||||||
netdev_init_mac();
|
netdev_init_mac();
|
||||||
|
|
||||||
|
#if (BOOT_COM_NET_DHCP_ENABLE > 0)
|
||||||
|
/* initialize the DHCP client application and send the initial request. */
|
||||||
|
netdev_get_mac(&macAddress.addr[0]);
|
||||||
|
dhcpc_init(&macAddress.addr[0], 6);
|
||||||
|
dhcpc_request();
|
||||||
|
#endif
|
||||||
} /*** end of NetInit ***/
|
} /*** end of NetInit ***/
|
||||||
|
|
||||||
|
|
||||||
|
@ -117,6 +140,13 @@ void NetApp(void)
|
||||||
/* check if this was an XCP CONNECT command */
|
/* check if this was an XCP CONNECT command */
|
||||||
if ((newDataPtr[0] == 0xff) && (newDataPtr[1] == 0x00))
|
if ((newDataPtr[0] == 0xff) && (newDataPtr[1] == 0x00))
|
||||||
{
|
{
|
||||||
|
/* the shared parameter at index 0 is used as a boolean flag to indicate if the
|
||||||
|
* bootloader should initialize the TCP/IP network stack. we just received a
|
||||||
|
* firmware update request from the TCP/IP network and we are about to active
|
||||||
|
* the bootloader for a firmware update via TCP/IP. At this point we should
|
||||||
|
* set the flag to make sure the bootloader initializes its TCP/IP network stack.
|
||||||
|
*/
|
||||||
|
SharedParamsWriteByIndex(0, 1);
|
||||||
/* connection request received so start the bootloader */
|
/* connection request received so start the bootloader */
|
||||||
BootActivate();
|
BootActivate();
|
||||||
}
|
}
|
||||||
|
@ -136,13 +166,13 @@ void NetTask(void)
|
||||||
|
|
||||||
/* check for an RX packet and read it. */
|
/* check for an RX packet and read it. */
|
||||||
packetLen = netdev_read();
|
packetLen = netdev_read();
|
||||||
if(packetLen > 0)
|
if (packetLen > 0)
|
||||||
{
|
{
|
||||||
/* set uip_len for uIP stack usage */
|
/* set uip_len for uIP stack usage */
|
||||||
uip_len = (unsigned short)packetLen;
|
uip_len = (unsigned short)packetLen;
|
||||||
|
|
||||||
/* process incoming IP packets here. */
|
/* process incoming IP packets here. */
|
||||||
if(NET_UIP_HEADER_BUF->type == htons(UIP_ETHTYPE_IP))
|
if (NET_UIP_HEADER_BUF->type == htons(UIP_ETHTYPE_IP))
|
||||||
{
|
{
|
||||||
uip_arp_ipin();
|
uip_arp_ipin();
|
||||||
uip_input();
|
uip_input();
|
||||||
|
@ -150,7 +180,7 @@ void NetTask(void)
|
||||||
* should be sent out on the network, the global variable
|
* should be sent out on the network, the global variable
|
||||||
* uip_len is set to a value > 0.
|
* uip_len is set to a value > 0.
|
||||||
*/
|
*/
|
||||||
if(uip_len > 0)
|
if (uip_len > 0)
|
||||||
{
|
{
|
||||||
uip_arp_out();
|
uip_arp_out();
|
||||||
netdev_send();
|
netdev_send();
|
||||||
|
@ -158,7 +188,7 @@ void NetTask(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* process incoming ARP packets here. */
|
/* process incoming ARP packets here. */
|
||||||
else if(NET_UIP_HEADER_BUF->type == htons(UIP_ETHTYPE_ARP))
|
else if (NET_UIP_HEADER_BUF->type == htons(UIP_ETHTYPE_ARP))
|
||||||
{
|
{
|
||||||
uip_arp_arpin();
|
uip_arp_arpin();
|
||||||
|
|
||||||
|
@ -166,14 +196,14 @@ void NetTask(void)
|
||||||
* should be sent out on the network, the global variable
|
* should be sent out on the network, the global variable
|
||||||
* uip_len is set to a value > 0.
|
* uip_len is set to a value > 0.
|
||||||
*/
|
*/
|
||||||
if(uip_len > 0)
|
if (uip_len > 0)
|
||||||
{
|
{
|
||||||
netdev_send();
|
netdev_send();
|
||||||
uip_len = 0;
|
uip_len = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* process TCP/IP Periodic Timer here. */
|
/* process TCP/IP Periodic Timer here. */
|
||||||
if (TimerGet() >= periodicTimerTimeOut)
|
if (TimerGet() >= periodicTimerTimeOut)
|
||||||
{
|
{
|
||||||
|
@ -181,6 +211,22 @@ void NetTask(void)
|
||||||
for (connection = 0; connection < UIP_CONNS; connection++)
|
for (connection = 0; connection < UIP_CONNS; connection++)
|
||||||
{
|
{
|
||||||
uip_periodic(connection);
|
uip_periodic(connection);
|
||||||
|
/* If the above function invocation resulted in data that
|
||||||
|
* should be sent out on the network, the global variable
|
||||||
|
* uip_len is set to a value > 0.
|
||||||
|
*/
|
||||||
|
if (uip_len > 0)
|
||||||
|
{
|
||||||
|
uip_arp_out();
|
||||||
|
netdev_send();
|
||||||
|
uip_len = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#if UIP_UDP
|
||||||
|
for (connection = 0; connection < UIP_UDP_CONNS; connection++)
|
||||||
|
{
|
||||||
|
uip_udp_periodic(connection);
|
||||||
/* If the above function invocation resulted in data that
|
/* If the above function invocation resulted in data that
|
||||||
* should be sent out on the network, the global variable
|
* should be sent out on the network, the global variable
|
||||||
* uip_len is set to a value > 0.
|
* uip_len is set to a value > 0.
|
||||||
|
@ -192,13 +238,14 @@ void NetTask(void)
|
||||||
uip_len = 0;
|
uip_len = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/* process ARP Timer here. */
|
/* process ARP Timer here. */
|
||||||
if (TimerGet() >= ARPTimerTimeOut)
|
if (TimerGet() >= ARPTimerTimeOut)
|
||||||
{
|
{
|
||||||
ARPTimerTimeOut += NET_UIP_ARP_TIMER_MS;
|
ARPTimerTimeOut += NET_UIP_ARP_TIMER_MS;
|
||||||
uip_arp_timer();
|
uip_arp_timer();
|
||||||
}
|
}
|
||||||
} /*** end of NetServerTask ***/
|
} /*** end of NetServerTask ***/
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,301 @@
|
||||||
|
/************************************************************************************//**
|
||||||
|
* \file Demo/ARMCM3_LM3S_EK_LM3S6965_IAR/Prog/shared_params.c
|
||||||
|
* \brief Shared RAM parameters source file.
|
||||||
|
* \ingroup Prog_ARMCM3_LM3S_EK_LM3S6965_IAR
|
||||||
|
* \internal
|
||||||
|
*----------------------------------------------------------------------------------------
|
||||||
|
* C O P Y R I G H T
|
||||||
|
*----------------------------------------------------------------------------------------
|
||||||
|
* Copyright (c) 2018 by Feaser http://www.feaser.com All rights reserved
|
||||||
|
*
|
||||||
|
*----------------------------------------------------------------------------------------
|
||||||
|
* L I C E N S E
|
||||||
|
*----------------------------------------------------------------------------------------
|
||||||
|
* This file is part of OpenBLT. OpenBLT is free software: you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU General Public License as published by the Free
|
||||||
|
* Software Foundation, either version 3 of the License, or (at your option) any later
|
||||||
|
* version.
|
||||||
|
*
|
||||||
|
* OpenBLT is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
|
||||||
|
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
||||||
|
* PURPOSE. See the GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You have received a copy of the GNU General Public License along with OpenBLT. It
|
||||||
|
* should be located in ".\Doc\license.html". If not, contact Feaser to obtain a copy.
|
||||||
|
*
|
||||||
|
* \endinternal
|
||||||
|
****************************************************************************************/
|
||||||
|
|
||||||
|
/****************************************************************************************
|
||||||
|
* Include files
|
||||||
|
****************************************************************************************/
|
||||||
|
#include <stddef.h> /* Standard definitions (NULL). */
|
||||||
|
#include "shared_params.h" /* Shared parameters header. */
|
||||||
|
|
||||||
|
|
||||||
|
/****************************************************************************************
|
||||||
|
* Macro definitions
|
||||||
|
****************************************************************************************/
|
||||||
|
/** \brief Constant parameter buffer identifier. This value is always located as the
|
||||||
|
* start of the buffer to validate the the RAM contains valid shared parameters.
|
||||||
|
*/
|
||||||
|
#define SHARED_PARAMS_BUFFER_ID (0xCE42E7A2u)
|
||||||
|
|
||||||
|
|
||||||
|
/****************************************************************************************
|
||||||
|
* Type definitions
|
||||||
|
****************************************************************************************/
|
||||||
|
/** \brief Layout of the shared parameters RAM buffer. */
|
||||||
|
typedef struct t_shared_params_buffer
|
||||||
|
{
|
||||||
|
/** \brief Fixed buffer identifier to validate that the RAM contains valid shared
|
||||||
|
* parameters.
|
||||||
|
*/
|
||||||
|
uint32_t identifier;
|
||||||
|
/** \brief Array for the actual parameter data. */
|
||||||
|
uint8_t data[SHARED_PARAMS_CFG_BUFFER_DATA_LEN];
|
||||||
|
/** \brief Checksum value of all the bytes in the buffer, excluding this checksum
|
||||||
|
* value of obvious reasons. The checksum is calculated as the Two's
|
||||||
|
* complement of the sum of the bytes.
|
||||||
|
*/
|
||||||
|
uint16_t checksum;
|
||||||
|
} tSharedParamsBuffer;
|
||||||
|
|
||||||
|
|
||||||
|
/****************************************************************************************
|
||||||
|
* Global data declarations
|
||||||
|
****************************************************************************************/
|
||||||
|
/** \brief Declaration of the actual parameter buffer that this module manages.
|
||||||
|
* \warning For the shared RAM parameters to work properly for sharing information
|
||||||
|
* between the bootloader and user program, it is important that this
|
||||||
|
* variable is linked to the exact same RAM address in both the bootloader
|
||||||
|
* and the user program. Additionally, it should be configured such that the
|
||||||
|
* C-startup code does NOT zero its contents during system initialization. This
|
||||||
|
* is the code that runs in the reset event handler, before function main() is
|
||||||
|
* called.
|
||||||
|
* For GCC based embedded toolchains, the solution is to assign this variable
|
||||||
|
* to a custom section, in this case called ".shared". Then in the linker
|
||||||
|
* script, add the following to the SECTIONS:
|
||||||
|
*
|
||||||
|
* .shared (NOLOAD) :
|
||||||
|
* {
|
||||||
|
* . = ALIGN(4);
|
||||||
|
* _sshared = .;
|
||||||
|
* __shared_start__ = _sshared;
|
||||||
|
* *(.shared)
|
||||||
|
* *(.shared.*)
|
||||||
|
* KEEP(*(.shared))
|
||||||
|
* . = ALIGN(4);
|
||||||
|
* _eshared = .;
|
||||||
|
* __shared_end__ = _eshared;
|
||||||
|
* } >SHARED
|
||||||
|
*
|
||||||
|
* Next, add a new MEMORY entry for SHARED at the start of RAM and reduce
|
||||||
|
* the length of the remaining RAM:
|
||||||
|
*
|
||||||
|
* SHARED (xrw) : ORIGIN = 0x200000C0, LENGTH = 64
|
||||||
|
* RAM (xrw) : ORIGIN = 0x20000100, LENGTH = 32K - 192 - 64
|
||||||
|
*
|
||||||
|
* Note that the previous example is for an STM32F0 microcontroller where
|
||||||
|
* the first 192 (0xC0) bytes in RAM are reserved for the user program
|
||||||
|
* vector table.
|
||||||
|
*
|
||||||
|
* \remark This same approach can be applied with other toolchains such as Keil MDK
|
||||||
|
* and IAR EWARM. Consult the compiler and linker user manuals of your
|
||||||
|
* toolchain to find out how to place a RAM variable at a fixed memory address
|
||||||
|
* and to prevent the C-startup code from zeroing its contents.
|
||||||
|
* Here are a few links to get you started:
|
||||||
|
* * IAR EWARM:
|
||||||
|
* https://www.iar.com/support/tech-notes/compiler/
|
||||||
|
* linker-error-for-absolute-located-variable/
|
||||||
|
* * Keil MDK:
|
||||||
|
* http://www.keil.com/support/docs/3480.htm
|
||||||
|
*/
|
||||||
|
__no_init static tSharedParamsBuffer sharedParamsBuffer @ ".shared";
|
||||||
|
|
||||||
|
|
||||||
|
/****************************************************************************************
|
||||||
|
* Function prototypes
|
||||||
|
****************************************************************************************/
|
||||||
|
static bool SharedParamsValidateBuffer(void);
|
||||||
|
static void SharedParamsWriteChecksum(void);
|
||||||
|
static bool SharedParamsVerifyChecksum(void);
|
||||||
|
static uint16_t SharedParamsCalculateChecksum(void);
|
||||||
|
|
||||||
|
|
||||||
|
/************************************************************************************//**
|
||||||
|
** \brief Initializes the shared RAM parameters module.
|
||||||
|
** \return none.
|
||||||
|
**
|
||||||
|
****************************************************************************************/
|
||||||
|
void SharedParamsInit(void)
|
||||||
|
{
|
||||||
|
uint32_t byteIdx;
|
||||||
|
|
||||||
|
/* The shared parameter buffer does not get initialized by the C-startup code. Another
|
||||||
|
* previously running program could have initialized it, in which case it is ready
|
||||||
|
* for use and nothing more needs to be done.
|
||||||
|
*/
|
||||||
|
if (!SharedParamsValidateBuffer())
|
||||||
|
{
|
||||||
|
/* The shared parameter buffer was not yet initialized by a running program. This
|
||||||
|
* typically happens after a cold reset where the RAM contents were lost. In this
|
||||||
|
* case we need to explicitly configure and initialize it, since the C-startup code
|
||||||
|
* was configured to not do this.
|
||||||
|
*
|
||||||
|
* The initialization consists of setting the buffer identifier, zeroing the
|
||||||
|
* actual parameter data and updating the checksum at the end.
|
||||||
|
*/
|
||||||
|
sharedParamsBuffer.identifier = SHARED_PARAMS_BUFFER_ID;
|
||||||
|
for (byteIdx=0; byteIdx < SHARED_PARAMS_CFG_BUFFER_DATA_LEN; byteIdx++)
|
||||||
|
{
|
||||||
|
sharedParamsBuffer.data[byteIdx] = 0;
|
||||||
|
}
|
||||||
|
SharedParamsWriteChecksum();
|
||||||
|
}
|
||||||
|
} /*** end of SharedParamsInit ***/
|
||||||
|
|
||||||
|
|
||||||
|
/************************************************************************************//**
|
||||||
|
** \brief Reads a data byte from the shared parameter buffer at the specified index.
|
||||||
|
** \param idx Index into the parameter data array. A valid value is between 0 and
|
||||||
|
** (SHARED_PARAMS_CFG_BUFFER_DATA_LEN - 1).
|
||||||
|
** \param value Pointer to where the read data value is stored.
|
||||||
|
** \return True if successful, false otherwise.
|
||||||
|
**
|
||||||
|
****************************************************************************************/
|
||||||
|
bool SharedParamsReadByIndex(uint32_t idx, uint8_t * value)
|
||||||
|
{
|
||||||
|
bool result = false;
|
||||||
|
|
||||||
|
/* Only continue if the buffer and the specified parameters are valid. */
|
||||||
|
if ( (SharedParamsValidateBuffer()) &&
|
||||||
|
(idx < SHARED_PARAMS_CFG_BUFFER_DATA_LEN) &&
|
||||||
|
(value != NULL) )
|
||||||
|
{
|
||||||
|
/* Read the value and update the result. */
|
||||||
|
*value = sharedParamsBuffer.data[idx];
|
||||||
|
result = true;
|
||||||
|
}
|
||||||
|
/* Give the result back to the caller. */
|
||||||
|
return result;
|
||||||
|
} /*** end of SharedParamsReadByIndex ***/
|
||||||
|
|
||||||
|
|
||||||
|
/************************************************************************************//**
|
||||||
|
** \brief Writes a data byte to the shared parameter buffer at the specified index.
|
||||||
|
** \param idx Index into the parameter data array. A valid value is between 0 and
|
||||||
|
** (SHARED_PARAMS_CFG_BUFFER_DATA_LEN - 1).
|
||||||
|
** \param value Value to write.
|
||||||
|
** \return True if successful, false otherwise.
|
||||||
|
**
|
||||||
|
****************************************************************************************/
|
||||||
|
bool SharedParamsWriteByIndex(uint32_t idx, uint8_t value)
|
||||||
|
{
|
||||||
|
bool result = false;
|
||||||
|
|
||||||
|
/* Only continue if the buffer and the specified parameters are valid. */
|
||||||
|
if ( (SharedParamsValidateBuffer()) &&
|
||||||
|
(idx < SHARED_PARAMS_CFG_BUFFER_DATA_LEN) )
|
||||||
|
{
|
||||||
|
/* Write the value. */
|
||||||
|
sharedParamsBuffer.data[idx] = value;
|
||||||
|
/* Update the checksum since the contents were just changed. */
|
||||||
|
SharedParamsWriteChecksum();
|
||||||
|
/* Update the result. */
|
||||||
|
result = true;
|
||||||
|
}
|
||||||
|
/* Give the result back to the caller. */
|
||||||
|
return result;
|
||||||
|
} /*** end of SharedParamsWriteByIndex ***/
|
||||||
|
|
||||||
|
|
||||||
|
/************************************************************************************//**
|
||||||
|
** \brief Validates the shared parameter buffer contents by looking at the table
|
||||||
|
** identifier and verifying its checksum.
|
||||||
|
** \return True if successful, false otherwise.
|
||||||
|
**
|
||||||
|
****************************************************************************************/
|
||||||
|
static bool SharedParamsValidateBuffer(void)
|
||||||
|
{
|
||||||
|
bool result = false;
|
||||||
|
|
||||||
|
/* Perform validation. */
|
||||||
|
if ( (sharedParamsBuffer.identifier == SHARED_PARAMS_BUFFER_ID) &&
|
||||||
|
(SharedParamsVerifyChecksum()) )
|
||||||
|
{
|
||||||
|
/* The shared parameter buffer is valid, so update the result value. */
|
||||||
|
result = true;
|
||||||
|
}
|
||||||
|
/* Give the result back to the caller. */
|
||||||
|
return result;
|
||||||
|
} /*** end of SharedParamsValitabeTable ***/
|
||||||
|
|
||||||
|
|
||||||
|
/************************************************************************************//**
|
||||||
|
** \brief Calculates and writes the checksum into the buffer.
|
||||||
|
** \return none.
|
||||||
|
**
|
||||||
|
****************************************************************************************/
|
||||||
|
static void SharedParamsWriteChecksum(void)
|
||||||
|
{
|
||||||
|
/* Calculate and write the checksum. */
|
||||||
|
sharedParamsBuffer.checksum = SharedParamsCalculateChecksum();
|
||||||
|
} /*** end of SharedParamsWriteChecksum ***/
|
||||||
|
|
||||||
|
|
||||||
|
/************************************************************************************//**
|
||||||
|
** \brief Calculates and verifies the checksum that is currently present in the
|
||||||
|
** buffer.
|
||||||
|
** \return True is the checksum is correct, false otherwise.
|
||||||
|
**
|
||||||
|
****************************************************************************************/
|
||||||
|
static bool SharedParamsVerifyChecksum(void)
|
||||||
|
{
|
||||||
|
bool result = false;
|
||||||
|
|
||||||
|
/* Calculate and verify the checksum. */
|
||||||
|
if (SharedParamsCalculateChecksum() == sharedParamsBuffer.checksum)
|
||||||
|
{
|
||||||
|
/* Checksum is correct, so update the result value. */
|
||||||
|
result = true;
|
||||||
|
}
|
||||||
|
/* Give the result back to the caller. */
|
||||||
|
return result;
|
||||||
|
} /*** end of SharedParamsVerifyChecksum ***/
|
||||||
|
|
||||||
|
|
||||||
|
/************************************************************************************//**
|
||||||
|
** \brief Calculates and returns the checksum value for the current contents in the
|
||||||
|
** buffer. The checksum is calculated by taking the sum of all bytes in the
|
||||||
|
** parameter buffer (excluding the checksum at the end) and them taking the
|
||||||
|
** two's complement value of it.
|
||||||
|
** \return The calculated checksum value.
|
||||||
|
**
|
||||||
|
****************************************************************************************/
|
||||||
|
static uint16_t SharedParamsCalculateChecksum(void)
|
||||||
|
{
|
||||||
|
uint16_t result = 0;
|
||||||
|
uint32_t byteIdx;
|
||||||
|
|
||||||
|
/* Add the identifier bytes to the checksum. */
|
||||||
|
result += (uint8_t)sharedParamsBuffer.identifier;
|
||||||
|
result += (uint8_t)(sharedParamsBuffer.identifier >> 8u);
|
||||||
|
result += (uint8_t)(sharedParamsBuffer.identifier >> 16u);
|
||||||
|
result += (uint8_t)(sharedParamsBuffer.identifier >> 24u);
|
||||||
|
/* Loop through the parameter data array. */
|
||||||
|
for (byteIdx=0; byteIdx<SHARED_PARAMS_CFG_BUFFER_DATA_LEN; byteIdx++)
|
||||||
|
{
|
||||||
|
/* Add parameter data byte to the checksum. */
|
||||||
|
result += (uint8_t)sharedParamsBuffer.data[byteIdx];
|
||||||
|
}
|
||||||
|
/* Determine one's complement. */
|
||||||
|
result = ~result;
|
||||||
|
/* Determine two's complement. */
|
||||||
|
result += 1;
|
||||||
|
/* Give the result back to the caller. */
|
||||||
|
return result;
|
||||||
|
} /*** end of SharedParamsCalculateChecksum ***/
|
||||||
|
|
||||||
|
|
||||||
|
/*********************************** end of shared_params.c ****************************/
|
|
@ -0,0 +1,57 @@
|
||||||
|
/************************************************************************************//**
|
||||||
|
* \file Demo/ARMCM3_LM3S_EK_LM3S6965_IAR/Prog/shared_params.h
|
||||||
|
* \brief Shared RAM parameters header file.
|
||||||
|
* \ingroup Prog_ARMCM3_LM3S_EK_LM3S6965_IAR
|
||||||
|
* \internal
|
||||||
|
*----------------------------------------------------------------------------------------
|
||||||
|
* C O P Y R I G H T
|
||||||
|
*----------------------------------------------------------------------------------------
|
||||||
|
* Copyright (c) 2018 by Feaser http://www.feaser.com All rights reserved
|
||||||
|
*
|
||||||
|
*----------------------------------------------------------------------------------------
|
||||||
|
* L I C E N S E
|
||||||
|
*----------------------------------------------------------------------------------------
|
||||||
|
* This file is part of OpenBLT. OpenBLT is free software: you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU General Public License as published by the Free
|
||||||
|
* Software Foundation, either version 3 of the License, or (at your option) any later
|
||||||
|
* version.
|
||||||
|
*
|
||||||
|
* OpenBLT is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
|
||||||
|
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
||||||
|
* PURPOSE. See the GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You have received a copy of the GNU General Public License along with OpenBLT. It
|
||||||
|
* should be located in ".\Doc\license.html". If not, contact Feaser to obtain a copy.
|
||||||
|
*
|
||||||
|
* \endinternal
|
||||||
|
****************************************************************************************/
|
||||||
|
#ifndef SHARED_PARAMS_H
|
||||||
|
#define SHARED_PARAMS_H
|
||||||
|
|
||||||
|
/****************************************************************************************
|
||||||
|
* Include files
|
||||||
|
****************************************************************************************/
|
||||||
|
#include <stdint.h> /* Standard integer types. */
|
||||||
|
#include <stdbool.h> /* Standard boolean types. */
|
||||||
|
|
||||||
|
|
||||||
|
/****************************************************************************************
|
||||||
|
* Configuration macros
|
||||||
|
****************************************************************************************/
|
||||||
|
/** \brief Configuration macro for specifying the size of the data inside the parameter
|
||||||
|
* buffer. This is the length in bytes of the actual parameter data, so
|
||||||
|
* excluding the bufferId and checksum.
|
||||||
|
*/
|
||||||
|
#define SHARED_PARAMS_CFG_BUFFER_DATA_LEN (56u)
|
||||||
|
|
||||||
|
|
||||||
|
/****************************************************************************************
|
||||||
|
* Function prototypes
|
||||||
|
****************************************************************************************/
|
||||||
|
void SharedParamsInit(void);
|
||||||
|
bool SharedParamsReadByIndex(uint32_t idx, uint8_t * value);
|
||||||
|
bool SharedParamsWriteByIndex(uint32_t idx, uint8_t value);
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* SHARED_PARAMS_H */
|
||||||
|
/*********************************** end of shared_params.h ****************************/
|
|
@ -70,22 +70,6 @@
|
||||||
#define BOOT_COM_USB_RX_MAX_DATA (63)
|
#define BOOT_COM_USB_RX_MAX_DATA (63)
|
||||||
|
|
||||||
|
|
||||||
/****************************************************************************************
|
|
||||||
* B A C K D O O R C O N F I G U R A T I O N
|
|
||||||
****************************************************************************************/
|
|
||||||
#if (BOOT_COM_USB_ENABLE > 0)
|
|
||||||
/* For a USB bootloader, the backdoor needs to stay open long enough for the USB device
|
|
||||||
* to enumerate on the host PC. Therefore it needs to be set a bit longer than the
|
|
||||||
* default value, which is done here by overriding the macro. Note that this won't be
|
|
||||||
* long enough for a first time USB driver install on the host PC. In this case the
|
|
||||||
* bootloader should be started with the backup backdoor that uses a digital input to
|
|
||||||
* for the bootloader to stay active. Refer to CpuUserProgramStartHook() to determine
|
|
||||||
* the digital input to use for this.
|
|
||||||
*/
|
|
||||||
#define BOOT_BACKDOOR_ENTRY_TIMEOUT_MS (2000)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
/****************************************************************************************
|
/****************************************************************************************
|
||||||
* B A C K D O O R E N T R Y C O N F I G U R A T I O N
|
* B A C K D O O R E N T R Y C O N F I G U R A T I O N
|
||||||
****************************************************************************************/
|
****************************************************************************************/
|
||||||
|
|
|
@ -70,22 +70,6 @@
|
||||||
#define BOOT_COM_USB_RX_MAX_DATA (63)
|
#define BOOT_COM_USB_RX_MAX_DATA (63)
|
||||||
|
|
||||||
|
|
||||||
/****************************************************************************************
|
|
||||||
* B A C K D O O R C O N F I G U R A T I O N
|
|
||||||
****************************************************************************************/
|
|
||||||
#if (BOOT_COM_USB_ENABLE > 0)
|
|
||||||
/* For a USB bootloader, the backdoor needs to stay open long enough for the USB device
|
|
||||||
* to enumerate on the host PC. Therefore it needs to be set a bit longer than the
|
|
||||||
* default value, which is done here by overriding the macro. Note that this won't be
|
|
||||||
* long enough for a first time USB driver install on the host PC. In this case the
|
|
||||||
* bootloader should be started with the backup backdoor that uses a digital input to
|
|
||||||
* for the bootloader to stay active. Refer to CpuUserProgramStartHook() to determine
|
|
||||||
* the digital input to use for this.
|
|
||||||
*/
|
|
||||||
#define BOOT_BACKDOOR_ENTRY_TIMEOUT_MS (2000)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
/****************************************************************************************
|
/****************************************************************************************
|
||||||
* B A C K D O O R E N T R Y C O N F I G U R A T I O N
|
* B A C K D O O R E N T R Y C O N F I G U R A T I O N
|
||||||
****************************************************************************************/
|
****************************************************************************************/
|
||||||
|
|
|
@ -70,22 +70,6 @@
|
||||||
#define BOOT_COM_USB_RX_MAX_DATA (63)
|
#define BOOT_COM_USB_RX_MAX_DATA (63)
|
||||||
|
|
||||||
|
|
||||||
/****************************************************************************************
|
|
||||||
* B A C K D O O R C O N F I G U R A T I O N
|
|
||||||
****************************************************************************************/
|
|
||||||
#if (BOOT_COM_USB_ENABLE > 0)
|
|
||||||
/* For a USB bootloader, the backdoor needs to stay open long enough for the USB device
|
|
||||||
* to enumerate on the host PC. Therefore it needs to be set a bit longer than the
|
|
||||||
* default value, which is done here by overriding the macro. Note that this won't be
|
|
||||||
* long enough for a first time USB driver install on the host PC. In this case the
|
|
||||||
* bootloader should be started with the backup backdoor that uses a digital input to
|
|
||||||
* for the bootloader to stay active. Refer to CpuUserProgramStartHook() to determine
|
|
||||||
* the digital input to use for this.
|
|
||||||
*/
|
|
||||||
#define BOOT_BACKDOOR_ENTRY_TIMEOUT_MS (2000)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
/****************************************************************************************
|
/****************************************************************************************
|
||||||
* B A C K D O O R E N T R Y C O N F I G U R A T I O N
|
* B A C K D O O R E N T R Y C O N F I G U R A T I O N
|
||||||
****************************************************************************************/
|
****************************************************************************************/
|
||||||
|
|
|
@ -70,22 +70,6 @@
|
||||||
#define BOOT_COM_USB_RX_MAX_DATA (63)
|
#define BOOT_COM_USB_RX_MAX_DATA (63)
|
||||||
|
|
||||||
|
|
||||||
/****************************************************************************************
|
|
||||||
* B A C K D O O R C O N F I G U R A T I O N
|
|
||||||
****************************************************************************************/
|
|
||||||
#if (BOOT_COM_USB_ENABLE > 0)
|
|
||||||
/* For a USB bootloader, the backdoor needs to stay open long enough for the USB device
|
|
||||||
* to enumerate on the host PC. Therefore it needs to be set a bit longer than the
|
|
||||||
* default value, which is done here by overriding the macro. Note that this won't be
|
|
||||||
* long enough for a first time USB driver install on the host PC. In this case the
|
|
||||||
* bootloader should be started with the backup backdoor that uses a digital input to
|
|
||||||
* for the bootloader to stay active. Refer to CpuUserProgramStartHook() to determine
|
|
||||||
* the digital input to use for this.
|
|
||||||
*/
|
|
||||||
#define BOOT_BACKDOOR_ENTRY_TIMEOUT_MS (2000)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
/****************************************************************************************
|
/****************************************************************************************
|
||||||
* B A C K D O O R E N T R Y C O N F I G U R A T I O N
|
* B A C K D O O R E N T R Y C O N F I G U R A T I O N
|
||||||
****************************************************************************************/
|
****************************************************************************************/
|
||||||
|
|
|
@ -98,22 +98,6 @@
|
||||||
#define BOOT_COM_USB_RX_MAX_DATA (63)
|
#define BOOT_COM_USB_RX_MAX_DATA (63)
|
||||||
|
|
||||||
|
|
||||||
/****************************************************************************************
|
|
||||||
* B A C K D O O R C O N F I G U R A T I O N
|
|
||||||
****************************************************************************************/
|
|
||||||
#if (BOOT_COM_USB_ENABLE > 0)
|
|
||||||
/* For a USB bootloader, the backdoor needs to stay open long enough for the USB device
|
|
||||||
* to enumerate on the host PC. Therefore it needs to be set a bit longer than the
|
|
||||||
* default value, which is done here by overriding the macro. Note that this won't be
|
|
||||||
* long enough for a first time USB driver install on the host PC. In this case the
|
|
||||||
* bootloader should be started with the backup backdoor that uses a digital input to
|
|
||||||
* for the bootloader to stay active. Refer to CpuUserProgramStartHook() to determine
|
|
||||||
* the digital input to use for this.
|
|
||||||
*/
|
|
||||||
#define BOOT_BACKDOOR_ENTRY_TIMEOUT_MS (2000)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
/****************************************************************************************
|
/****************************************************************************************
|
||||||
* F I L E S Y S T E M I N T E R F A C E C O N F I G U R A T I O N
|
* F I L E S Y S T E M I N T E R F A C E C O N F I G U R A T I O N
|
||||||
****************************************************************************************/
|
****************************************************************************************/
|
||||||
|
|
|
@ -98,22 +98,6 @@
|
||||||
#define BOOT_COM_USB_RX_MAX_DATA (63)
|
#define BOOT_COM_USB_RX_MAX_DATA (63)
|
||||||
|
|
||||||
|
|
||||||
/****************************************************************************************
|
|
||||||
* B A C K D O O R C O N F I G U R A T I O N
|
|
||||||
****************************************************************************************/
|
|
||||||
#if (BOOT_COM_USB_ENABLE > 0)
|
|
||||||
/* For a USB bootloader, the backdoor needs to stay open long enough for the USB device
|
|
||||||
* to enumerate on the host PC. Therefore it needs to be set a bit longer than the
|
|
||||||
* default value, which is done here by overriding the macro. Note that this won't be
|
|
||||||
* long enough for a first time USB driver install on the host PC. In this case the
|
|
||||||
* bootloader should be started with the backup backdoor that uses a digital input to
|
|
||||||
* for the bootloader to stay active. Refer to CpuUserProgramStartHook() to determine
|
|
||||||
* the digital input to use for this.
|
|
||||||
*/
|
|
||||||
#define BOOT_BACKDOOR_ENTRY_TIMEOUT_MS (2000)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
/****************************************************************************************
|
/****************************************************************************************
|
||||||
* F I L E S Y S T E M I N T E R F A C E C O N F I G U R A T I O N
|
* F I L E S Y S T E M I N T E R F A C E C O N F I G U R A T I O N
|
||||||
****************************************************************************************/
|
****************************************************************************************/
|
||||||
|
|
|
@ -98,22 +98,6 @@
|
||||||
#define BOOT_COM_USB_RX_MAX_DATA (63)
|
#define BOOT_COM_USB_RX_MAX_DATA (63)
|
||||||
|
|
||||||
|
|
||||||
/****************************************************************************************
|
|
||||||
* B A C K D O O R C O N F I G U R A T I O N
|
|
||||||
****************************************************************************************/
|
|
||||||
#if (BOOT_COM_USB_ENABLE > 0)
|
|
||||||
/* For a USB bootloader, the backdoor needs to stay open long enough for the USB device
|
|
||||||
* to enumerate on the host PC. Therefore it needs to be set a bit longer than the
|
|
||||||
* default value, which is done here by overriding the macro. Note that this won't be
|
|
||||||
* long enough for a first time USB driver install on the host PC. In this case the
|
|
||||||
* bootloader should be started with the backup backdoor that uses a digital input to
|
|
||||||
* for the bootloader to stay active. Refer to CpuUserProgramStartHook() to determine
|
|
||||||
* the digital input to use for this.
|
|
||||||
*/
|
|
||||||
#define BOOT_BACKDOOR_ENTRY_TIMEOUT_MS (2000)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
/****************************************************************************************
|
/****************************************************************************************
|
||||||
* F I L E S Y S T E M I N T E R F A C E C O N F I G U R A T I O N
|
* F I L E S Y S T E M I N T E R F A C E C O N F I G U R A T I O N
|
||||||
****************************************************************************************/
|
****************************************************************************************/
|
||||||
|
|
|
@ -104,18 +104,6 @@
|
||||||
/** \brief Enable/disable the backdoor override hook functions. */
|
/** \brief Enable/disable the backdoor override hook functions. */
|
||||||
#define BOOT_BACKDOOR_HOOKS_ENABLE (0)
|
#define BOOT_BACKDOOR_HOOKS_ENABLE (0)
|
||||||
|
|
||||||
#if (BOOT_COM_USB_ENABLE > 0)
|
|
||||||
/* For a USB bootloader, the backdoor needs to stay open long enough for the USB device
|
|
||||||
* to enumerate on the host PC. Therefore it needs to be set a bit longer than the
|
|
||||||
* default value, which is done here by overriding the macro. Note that this won't be
|
|
||||||
* long enough for a first time USB driver install on the host PC. In this case the
|
|
||||||
* bootloader should be started with the backup backdoor that uses a digital input to
|
|
||||||
* for the bootloader to stay active. Refer to CpuUserProgramStartHook() to determine
|
|
||||||
* the digital input to use for this.
|
|
||||||
*/
|
|
||||||
#define BOOT_BACKDOOR_ENTRY_TIMEOUT_MS (2000)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
/****************************************************************************************
|
/****************************************************************************************
|
||||||
* N O N - V O L A T I L E M E M O R Y D R I V E R C O N F I G U R A T I O N
|
* N O N - V O L A T I L E M E M O R Y D R I V E R C O N F I G U R A T I O N
|
||||||
|
|
|
@ -104,18 +104,6 @@
|
||||||
/** \brief Enable/disable the backdoor override hook functions. */
|
/** \brief Enable/disable the backdoor override hook functions. */
|
||||||
#define BOOT_BACKDOOR_HOOKS_ENABLE (0)
|
#define BOOT_BACKDOOR_HOOKS_ENABLE (0)
|
||||||
|
|
||||||
#if (BOOT_COM_USB_ENABLE > 0)
|
|
||||||
/* For a USB bootloader, the backdoor needs to stay open long enough for the USB device
|
|
||||||
* to enumerate on the host PC. Therefore it needs to be set a bit longer than the
|
|
||||||
* default value, which is done here by overriding the macro. Note that this won't be
|
|
||||||
* long enough for a first time USB driver install on the host PC. In this case the
|
|
||||||
* bootloader should be started with the backup backdoor that uses a digital input to
|
|
||||||
* for the bootloader to stay active. Refer to CpuUserProgramStartHook() to determine
|
|
||||||
* the digital input to use for this.
|
|
||||||
*/
|
|
||||||
#define BOOT_BACKDOOR_ENTRY_TIMEOUT_MS (2000)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
/****************************************************************************************
|
/****************************************************************************************
|
||||||
* N O N - V O L A T I L E M E M O R Y D R I V E R C O N F I G U R A T I O N
|
* N O N - V O L A T I L E M E M O R Y D R I V E R C O N F I G U R A T I O N
|
||||||
|
|
|
@ -104,18 +104,6 @@
|
||||||
/** \brief Enable/disable the backdoor override hook functions. */
|
/** \brief Enable/disable the backdoor override hook functions. */
|
||||||
#define BOOT_BACKDOOR_HOOKS_ENABLE (0)
|
#define BOOT_BACKDOOR_HOOKS_ENABLE (0)
|
||||||
|
|
||||||
#if (BOOT_COM_USB_ENABLE > 0)
|
|
||||||
/* For a USB bootloader, the backdoor needs to stay open long enough for the USB device
|
|
||||||
* to enumerate on the host PC. Therefore it needs to be set a bit longer than the
|
|
||||||
* default value, which is done here by overriding the macro. Note that this won't be
|
|
||||||
* long enough for a first time USB driver install on the host PC. In this case the
|
|
||||||
* bootloader should be started with the backup backdoor that uses a digital input to
|
|
||||||
* for the bootloader to stay active. Refer to CpuUserProgramStartHook() to determine
|
|
||||||
* the digital input to use for this.
|
|
||||||
*/
|
|
||||||
#define BOOT_BACKDOOR_ENTRY_TIMEOUT_MS (2000)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
/****************************************************************************************
|
/****************************************************************************************
|
||||||
* N O N - V O L A T I L E M E M O R Y D R I V E R C O N F I G U R A T I O N
|
* N O N - V O L A T I L E M E M O R Y D R I V E R C O N F I G U R A T I O N
|
||||||
|
|
Binary file not shown.
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -122,82 +122,56 @@
|
||||||
* the BOOT_COM_NET_ENABLE configurable to 1. The maximum amount of data bytes in a
|
* the BOOT_COM_NET_ENABLE configurable to 1. The maximum amount of data bytes in a
|
||||||
* message for data transmission and reception is set through BOOT_COM_NET_TX_MAX_DATA
|
* message for data transmission and reception is set through BOOT_COM_NET_TX_MAX_DATA
|
||||||
* and BOOT_COM_NET_RX_MAX_DATA, respectively. The default IP address is configured
|
* and BOOT_COM_NET_RX_MAX_DATA, respectively. The default IP address is configured
|
||||||
* with the macros BOOT_COM_NET_IPADDRx. The default netmask is configued with the macros
|
* with the macros BOOT_COM_NET_IPADDRx. The default netmask is configured with the
|
||||||
* BOOT_COM_NET_NETMASKx. The default gateway is configured with the macros
|
* macro BOOT_COM_NET_NETMASKx. The default gateway is configured with the macros
|
||||||
* BOOT_COM_NET_GATEWAYx. The bootloader acts and a TCP/IP server. The port the server
|
* BOOT_COM_NET_GATEWAYx. The bootloader acts and a TCP/IP server. The port the server
|
||||||
* listen on for connections is configured with BOOT_COM_NET_PORT.
|
* listen on for connections is configured with BOOT_COM_NET_PORT.
|
||||||
|
* In case the network switch/router supports a DHCP server, you can set configuration
|
||||||
|
* macro BOOT_COM_NET_DHCP_ENABLE to 1 to enable the DHCP client. In this case the
|
||||||
|
* DHCP client handles the automatic IP address assignment. In this case the macros for
|
||||||
|
* configuring the IP address, network mask and gateway address are no longer needed.
|
||||||
*/
|
*/
|
||||||
/** \brief Enable/disable the NET transport layer. */
|
/** \brief Enable/disable the NET transport layer. */
|
||||||
#define BOOT_COM_NET_ENABLE (1)
|
#define BOOT_COM_NET_ENABLE (1)
|
||||||
/** \brief Configure number of bytes in the target->host data packet. */
|
/** \brief Configure number of bytes in the target->host data packet. */
|
||||||
#define BOOT_COM_NET_TX_MAX_DATA (64)
|
#define BOOT_COM_NET_TX_MAX_DATA (64)
|
||||||
/** \brief Configure number of bytes in the host->target data packet. */
|
/** \brief Configure number of bytes in the host->target data packet. */
|
||||||
#define BOOT_COM_NET_RX_MAX_DATA (64)
|
#define BOOT_COM_NET_RX_MAX_DATA (64)
|
||||||
/** \brief Configure the port that the TCP/IP server listens on */
|
/** \brief Configure the port that the TCP/IP server listens on */
|
||||||
#define BOOT_COM_NET_PORT (1000)
|
#define BOOT_COM_NET_PORT (1000)
|
||||||
|
/** \brief Enable/disable DHCP client for automatically obtaining an IP address. */
|
||||||
|
#define BOOT_COM_NET_DHCP_ENABLE (1)
|
||||||
/** \brief Configure the 1st byte of the IP address */
|
/** \brief Configure the 1st byte of the IP address */
|
||||||
#define BOOT_COM_NET_IPADDR0 (169)
|
#define BOOT_COM_NET_IPADDR0 (192)
|
||||||
/** \brief Configure the 2nd byte of the IP address */
|
/** \brief Configure the 2nd byte of the IP address */
|
||||||
#define BOOT_COM_NET_IPADDR1 (254)
|
#define BOOT_COM_NET_IPADDR1 (168)
|
||||||
/** \brief Configure the 3rd byte of the IP address */
|
/** \brief Configure the 3rd byte of the IP address */
|
||||||
#define BOOT_COM_NET_IPADDR2 (19)
|
#define BOOT_COM_NET_IPADDR2 (178)
|
||||||
/** \brief Configure the 4th byte of the IP address */
|
/** \brief Configure the 4th byte of the IP address */
|
||||||
#define BOOT_COM_NET_IPADDR3 (63)
|
#define BOOT_COM_NET_IPADDR3 (50)
|
||||||
/** \brief Configure the 1st byte of the network mask */
|
/** \brief Configure the 1st byte of the network mask */
|
||||||
#define BOOT_COM_NET_NETMASK0 (255)
|
#define BOOT_COM_NET_NETMASK0 (255)
|
||||||
/** \brief Configure the 2nd byte of the network mask */
|
/** \brief Configure the 2nd byte of the network mask */
|
||||||
#define BOOT_COM_NET_NETMASK1 (255)
|
#define BOOT_COM_NET_NETMASK1 (255)
|
||||||
/** \brief Configure the 3rd byte of the network mask */
|
/** \brief Configure the 3rd byte of the network mask */
|
||||||
#define BOOT_COM_NET_NETMASK2 (0)
|
#define BOOT_COM_NET_NETMASK2 (255)
|
||||||
/** \brief Configure the 4th byte of the network mask */
|
/** \brief Configure the 4th byte of the network mask */
|
||||||
#define BOOT_COM_NET_NETMASK3 (0)
|
#define BOOT_COM_NET_NETMASK3 (0)
|
||||||
/** \brief Configure the 1st byte of the gateway address */
|
/** \brief Configure the 1st byte of the gateway address */
|
||||||
#define BOOT_COM_NET_GATEWAY0 (169)
|
#define BOOT_COM_NET_GATEWAY0 (192)
|
||||||
/** \brief Configure the 2nd byte of the gateway address */
|
/** \brief Configure the 2nd byte of the gateway address */
|
||||||
#define BOOT_COM_NET_GATEWAY1 (254)
|
#define BOOT_COM_NET_GATEWAY1 (168)
|
||||||
/** \brief Configure the 3rd byte of the gateway address */
|
/** \brief Configure the 3rd byte of the gateway address */
|
||||||
#define BOOT_COM_NET_GATEWAY2 (19)
|
#define BOOT_COM_NET_GATEWAY2 (178)
|
||||||
/** \brief Configure the 4th byte of the gateway address */
|
/** \brief Configure the 4th byte of the gateway address */
|
||||||
#define BOOT_COM_NET_GATEWAY3 (1)
|
#define BOOT_COM_NET_GATEWAY3 (1)
|
||||||
/** \brief Enable/disable a hook function that is called when the IP address is about
|
/** \brief Enable/disable the deferred initialization mechanism. When enabled, the
|
||||||
* to be set. This allows a dynamic override of the BOOT_COM_NET_IPADDRx values.
|
* communication interface is only initialized when: (a) no valid user program
|
||||||
|
* is detected, or (b) when CpuUserProgramStartHook() returns BLT_FALSE. Your
|
||||||
|
* bootloader application can explicitly initialize the communication interface
|
||||||
|
* by calling ComDeferredInit().
|
||||||
*/
|
*/
|
||||||
#define BOOT_COM_NET_IPADDR_HOOK_ENABLE (0)
|
#define BOOT_COM_NET_DEFERRED_INIT_ENABLE (1)
|
||||||
/** \brief Enable/disable a hook function that is called when the netmask is about
|
|
||||||
* to be set. This allows a dynamic override of the BOOT_COM_NET_NETMASKx values.
|
|
||||||
*/
|
|
||||||
#define BOOT_COM_NET_NETMASK_HOOK_ENABLE (0)
|
|
||||||
/** \brief Enable/disable a hook function that is called when the gateway address is
|
|
||||||
* about to be set. This allows a dynamic override of the BOOT_COM_NET_GATEWAYx
|
|
||||||
* values.
|
|
||||||
*/
|
|
||||||
#define BOOT_COM_NET_GATEWAY_HOOK_ENABLE (0)
|
|
||||||
|
|
||||||
|
|
||||||
/****************************************************************************************
|
|
||||||
* B A C K D O O R C O N F I G U R A T I O N
|
|
||||||
****************************************************************************************/
|
|
||||||
#if (BOOT_COM_NET_ENABLE > 0)
|
|
||||||
/* Override the default time that the backdoor is open if firmware updates via TCP/IP
|
|
||||||
* are supported. in this case a reactivation of the bootloader results in a re-
|
|
||||||
* initialization of the ethernet MAC. when directly connected to the ethernet port of
|
|
||||||
* a PC this will go relatively fast (depending on what MS Windows is being used), but
|
|
||||||
* when connected to the network via a router this can take several seconds. feel free to
|
|
||||||
* shorten/lengthen this time for finetuning. the only downside of a long backdoor open
|
|
||||||
* time is that the starting of the user program will also be delayed for this time.
|
|
||||||
*/
|
|
||||||
#define BOOT_BACKDOOR_ENTRY_TIMEOUT_MS (10000)
|
|
||||||
#elif (BOOT_COM_USB_ENABLE > 0)
|
|
||||||
/* For a USB bootloader, the backdoor needs to stay open long enough for the USB device
|
|
||||||
* to enumerate on the host PC. Therefore it needs to be set a bit longer than the
|
|
||||||
* default value, which is done here by overriding the macro. Note that this won't be
|
|
||||||
* long enough for a first time USB driver install on the host PC. In this case the
|
|
||||||
* bootloader should be started with the backup backdoor that uses a digital input to
|
|
||||||
* for the bootloader to stay active. Refer to CpuUserProgramStartHook() to determine
|
|
||||||
* the digital input to use for this.
|
|
||||||
*/
|
|
||||||
#define BOOT_BACKDOOR_ENTRY_TIMEOUT_MS (2000)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
/****************************************************************************************
|
/****************************************************************************************
|
||||||
|
|
|
@ -37,9 +37,10 @@ SEARCH_DIR(.)
|
||||||
/* Memory Spaces Definitions */
|
/* Memory Spaces Definitions */
|
||||||
MEMORY
|
MEMORY
|
||||||
{
|
{
|
||||||
ROM (rx) : ORIGIN = 0x08000000, LENGTH = 48K
|
ROM (rx) : ORIGIN = 0x08000000, LENGTH = 48K
|
||||||
RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 128K
|
SHARED (rwx) : ORIGIN = 0x20000000, LENGTH = 64
|
||||||
CCRAM (rwx) : ORIGIN = 0x10000000, LENGTH = 64K
|
RAM (rwx) : ORIGIN = 0x20000040, LENGTH = 128K - 64
|
||||||
|
CCRAM (rwx) : ORIGIN = 0x10000000, LENGTH = 64K
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Linker script to place sections and symbol values. Should be used together
|
/* Linker script to place sections and symbol values. Should be used together
|
||||||
|
@ -72,6 +73,17 @@ MEMORY
|
||||||
|
|
||||||
SECTIONS
|
SECTIONS
|
||||||
{
|
{
|
||||||
|
.shared (NOLOAD):
|
||||||
|
{
|
||||||
|
. = ALIGN(4);
|
||||||
|
__shared_start__ = .;
|
||||||
|
*(.shared)
|
||||||
|
*(.shared.*)
|
||||||
|
KEEP(*(.shared))
|
||||||
|
. = ALIGN(4);
|
||||||
|
__shared_end__ = .;
|
||||||
|
} > SHARED
|
||||||
|
|
||||||
.text :
|
.text :
|
||||||
{
|
{
|
||||||
KEEP(*(.isr_vector))
|
KEEP(*(.isr_vector))
|
||||||
|
|
|
@ -405,8 +405,9 @@ static void SetSysClock(void)
|
||||||
RCC->CFGR |= RCC_CFGR_SW_PLL;
|
RCC->CFGR |= RCC_CFGR_SW_PLL;
|
||||||
|
|
||||||
/* Wait till the main PLL is used as system clock source */
|
/* Wait till the main PLL is used as system clock source */
|
||||||
while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL);
|
while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL)
|
||||||
{
|
{
|
||||||
|
;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue