- Added CAN support to the STM32Fxx port and the Olimex STM32-P207 demo programs.

git-svn-id: https://svn.code.sf.net/p/openblt/code/trunk@146 5dc33758-31d5-4daf-9ae8-b24bf3d40d73
This commit is contained in:
Frank Voorburg 2016-07-23 16:30:55 +00:00
parent 0656616db9
commit 6a6d2555a4
15 changed files with 3084 additions and 2214 deletions

View File

@ -56,6 +56,33 @@
/****************************************************************************************
* C O M M U N I C A T I O N I N T E R F A C E C O N F I G U R A T I O N
****************************************************************************************/
/* The CAN communication interface is selected by setting the BOOT_COM_CAN_ENABLE
* configurable to 1. Configurable BOOT_COM_CAN_BAUDRATE selects the communication speed
* in bits/second. Two CAN messages are reserved for communication with the host. The
* message identifier for sending data from the target to the host is configured with
* BOOT_COM_CAN_TXMSG_ID. The one for receiving data from the host is configured with
* BOOT_COM_CAN_RXMSG_ID. The maximum amount of data bytes in a message for data
* transmission and reception is set through BOOT_COM_CAN_TX_MAX_DATA and
* BOOT_COM_CAN_RX_MAX_DATA, respectively. It is common for a microcontroller to have more
* than 1 CAN controller on board. The zero-based BOOT_COM_CAN_CHANNEL_INDEX selects the
* CAN controller channel.
*
*/
/** \brief Enable/disable CAN transport layer. */
#define BOOT_COM_CAN_ENABLE (1)
/** \brief Configure the desired CAN baudrate. */
#define BOOT_COM_CAN_BAUDRATE (500000)
/** \brief Configure CAN message ID target->host. */
#define BOOT_COM_CAN_TX_MSG_ID (0x7E1)
/** \brief Configure number of bytes in the target->host CAN message. */
#define BOOT_COM_CAN_TX_MAX_DATA (8)
/** \brief Configure CAN message ID host->target. */
#define BOOT_COM_CAN_RX_MSG_ID (0x667)
/** \brief Configure number of bytes in the host->target CAN message. */
#define BOOT_COM_CAN_RX_MAX_DATA (8)
/** \brief Select the desired CAN peripheral as a zero based index. */
#define BOOT_COM_CAN_CHANNEL_INDEX (0)
/* The UART communication interface is selected by setting the BOOT_COM_UART_ENABLE
* configurable to 1. Configurable BOOT_COM_UART_BAUDRATE selects the communication speed
* in bits/second. The maximum amount of data bytes in a message for data transmission

View File

@ -811,7 +811,7 @@
1469267887 source:c:\work\software\openblt\target\source\armcm3_stm32f2\gcc\cstart.s
1469286137 source:c:\work\software\openblt\target\demo\armcm3_stm32f2_olimex_stm32p207_gcc\boot\hooks.c
1469286972 source:c:\work\software\openblt\target\demo\armcm3_stm32f2_olimex_stm32p207_gcc\boot\hooks.c
"boot.h"
"led.h"
"stm32f2xx.h"
@ -833,7 +833,7 @@
1462050329 c:\work\software\openblt\target\source\assert.h
1469285352 c:\work\software\openblt\target\demo\armcm3_stm32f2_olimex_stm32p207_gcc\boot\\blt_conf.h
1469290552 c:\work\software\openblt\target\demo\armcm3_stm32f2_olimex_stm32p207_gcc\boot\\blt_conf.h
1469095224 c:\work\software\openblt\target\source\plausibility.h
@ -868,7 +868,7 @@
1469268835 c:\work\software\openblt\target\source\armcm3_stm32f2\flash.h
1469285339 source:c:\work\software\openblt\target\demo\armcm3_stm32f2_olimex_stm32p207_gcc\boot\main.c
1469290821 source:c:\work\software\openblt\target\demo\armcm3_stm32f2_olimex_stm32p207_gcc\boot\main.c
"boot.h"
"stm32f2xx.h"
@ -961,3 +961,6 @@
1456845502 c:\work\software\openblt\target\source\third_party\fatfs\src\option\ccsbcs.c
"../ff.h"
1469290576 source:c:\work\software\openblt\target\source\armcm3_stm32f2\can.c
"boot.h"

View File

@ -312,6 +312,10 @@
<Option compilerVar="CC" />
<Option virtualFolder="Sources\" />
</Unit>
<Unit filename="..\..\..\..\Source\ARMCM3_STM32F2\can.c">
<Option compilerVar="CC" />
<Option virtualFolder="Sources\Core\" />
</Unit>
<Unit filename="..\..\..\..\Source\ARMCM3_STM32F2\cpu.c">
<Option compilerVar="CC" />
<Option virtualFolder="Sources\Core\" />

View File

@ -1,9 +1,9 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<EmBitz_layout_file>
<ActiveTarget name="Debug" />
<File name="..\blt_conf.h" open="0" top="0" tabpos="4" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<File name="..\blt_conf.h" open="0" top="0" tabpos="1" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="5914" topLine="60" />
<Cursor1 position="4969" topLine="51" />
</Cursor>
</File>
<File name="..\hooks.c" open="0" top="0" tabpos="6" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
@ -33,7 +33,12 @@
</File>
<File name="..\main.c" open="1" top="1" tabpos="1" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="2" topLine="6" />
<Cursor1 position="2697" topLine="41" />
</Cursor>
</File>
<File name="..\..\..\..\Source\ARMCM3_STM32F2\can.c" open="0" top="0" tabpos="2" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="9731" topLine="218" />
</Cursor>
</File>
<File name="..\..\..\..\Source\ARMCM3_STM32F2\flash.c" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">

View File

@ -132,6 +132,24 @@ static void Init(void)
/* enable UART */
USART_Cmd(USART3, ENABLE);
#endif
#if (BOOT_COM_CAN_ENABLE > 0)
/* enable clocks for CAN1 transmitter and receiver pins */
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);
/* select alternate function for the CAN2 pins */
GPIO_PinAFConfig(GPIOB, GPIO_PinSource8, GPIO_AF_CAN1);
GPIO_PinAFConfig(GPIOB, GPIO_PinSource9, GPIO_AF_CAN1);
/* configure CAN1 RX and TX pins */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(GPIOB, &GPIO_InitStructure);
/* enable CAN clock */
RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE);
#endif
} /*** end of Init ***/

View File

@ -105,7 +105,7 @@ Discarded input sections
.text.IrqInterruptRestore
0x00000000 0x28 ..\obj\irq.o
.debug_macro 0x00000000 0x862 ..\obj\irq.o
.debug_macro 0x00000000 0x87 ..\obj\irq.o
.debug_macro 0x00000000 0xb7 ..\obj\irq.o
.debug_macro 0x00000000 0x4c ..\obj\irq.o
.debug_macro 0x00000000 0x3a ..\obj\irq.o
.debug_macro 0x00000000 0x16 ..\obj\irq.o
@ -180,7 +180,7 @@ Discarded input sections
.data 0x00000000 0x0 ..\obj\led.o
.bss 0x00000000 0x0 ..\obj\led.o
.debug_macro 0x00000000 0x862 ..\obj\led.o
.debug_macro 0x00000000 0x87 ..\obj\led.o
.debug_macro 0x00000000 0xb7 ..\obj\led.o
.debug_macro 0x00000000 0x4c ..\obj\led.o
.debug_macro 0x00000000 0x3a ..\obj\led.o
.debug_macro 0x00000000 0x16 ..\obj\led.o
@ -508,14 +508,6 @@ Discarded input sections
.text 0x00000000 0x0 ..\obj\lib\spl\src\stm32f2xx_can.o
.data 0x00000000 0x0 ..\obj\lib\spl\src\stm32f2xx_can.o
.bss 0x00000000 0x0 ..\obj\lib\spl\src\stm32f2xx_can.o
.text.CAN_DeInit
0x00000000 0x44 ..\obj\lib\spl\src\stm32f2xx_can.o
.text.CAN_Init
0x00000000 0x1a4 ..\obj\lib\spl\src\stm32f2xx_can.o
.text.CAN_FilterInit
0x00000000 0x164 ..\obj\lib\spl\src\stm32f2xx_can.o
.text.CAN_StructInit
0x00000000 0x54 ..\obj\lib\spl\src\stm32f2xx_can.o
.text.CAN_SlaveStartBank
0x00000000 0x60 ..\obj\lib\spl\src\stm32f2xx_can.o
.text.CAN_DBGFreeze
@ -528,12 +520,8 @@ Discarded input sections
0x00000000 0xd4 ..\obj\lib\spl\src\stm32f2xx_can.o
.text.CAN_CancelTransmit
0x00000000 0x50 ..\obj\lib\spl\src\stm32f2xx_can.o
.text.CAN_Receive
0x00000000 0x170 ..\obj\lib\spl\src\stm32f2xx_can.o
.text.CAN_FIFORelease
0x00000000 0x38 ..\obj\lib\spl\src\stm32f2xx_can.o
.text.CAN_MessagePending
0x00000000 0x4c ..\obj\lib\spl\src\stm32f2xx_can.o
.text.CAN_OperatingModeRequest
0x00000000 0xfc ..\obj\lib\spl\src\stm32f2xx_can.o
.text.CAN_Sleep
@ -558,12 +546,6 @@ Discarded input sections
0x00000000 0xdc ..\obj\lib\spl\src\stm32f2xx_can.o
.text.CheckITStatus
0x00000000 0x30 ..\obj\lib\spl\src\stm32f2xx_can.o
.debug_info 0x00000000 0xba4 ..\obj\lib\spl\src\stm32f2xx_can.o
.debug_abbrev 0x00000000 0x1f8 ..\obj\lib\spl\src\stm32f2xx_can.o
.debug_aranges
0x00000000 0xe0 ..\obj\lib\spl\src\stm32f2xx_can.o
.debug_ranges 0x00000000 0xd0 ..\obj\lib\spl\src\stm32f2xx_can.o
.debug_macro 0x00000000 0x1e8 ..\obj\lib\spl\src\stm32f2xx_can.o
.debug_macro 0x00000000 0x862 ..\obj\lib\spl\src\stm32f2xx_can.o
.debug_macro 0x00000000 0x4c ..\obj\lib\spl\src\stm32f2xx_can.o
.debug_macro 0x00000000 0x3a ..\obj\lib\spl\src\stm32f2xx_can.o
@ -599,12 +581,6 @@ Discarded input sections
.debug_macro 0x00000000 0x82 ..\obj\lib\spl\src\stm32f2xx_can.o
.debug_macro 0x00000000 0x35 ..\obj\lib\spl\src\stm32f2xx_can.o
.debug_macro 0x00000000 0x3c9 ..\obj\lib\spl\src\stm32f2xx_can.o
.debug_line 0x00000000 0x7bd ..\obj\lib\spl\src\stm32f2xx_can.o
.debug_str 0x00000000 0x54a62 ..\obj\lib\spl\src\stm32f2xx_can.o
.comment 0x00000000 0x47 ..\obj\lib\spl\src\stm32f2xx_can.o
.ARM.attributes
0x00000000 0x33 ..\obj\lib\spl\src\stm32f2xx_can.o
.debug_frame 0x00000000 0x2d4 ..\obj\lib\spl\src\stm32f2xx_can.o
.group 0x00000000 0x8 ..\obj\lib\spl\src\stm32f2xx_crc.o
.group 0x00000000 0x8 ..\obj\lib\spl\src\stm32f2xx_crc.o
.group 0x00000000 0x8 ..\obj\lib\spl\src\stm32f2xx_crc.o
@ -2748,8 +2724,6 @@ Discarded input sections
0x00000000 0x3c ..\obj\lib\spl\src\stm32f2xx_rcc.o
.text.RCC_AHB3PeriphResetCmd
0x00000000 0x3c ..\obj\lib\spl\src\stm32f2xx_rcc.o
.text.RCC_APB1PeriphResetCmd
0x00000000 0x3c ..\obj\lib\spl\src\stm32f2xx_rcc.o
.text.RCC_APB2PeriphResetCmd
0x00000000 0x3c ..\obj\lib\spl\src\stm32f2xx_rcc.o
.text.RCC_AHB1PeriphClockLPModeCmd
@ -4060,7 +4034,7 @@ Discarded input sections
.data 0x00000000 0x0 ..\obj\main.o
.bss 0x00000000 0x0 ..\obj\main.o
.debug_macro 0x00000000 0x862 ..\obj\main.o
.debug_macro 0x00000000 0x87 ..\obj\main.o
.debug_macro 0x00000000 0xb7 ..\obj\main.o
.debug_macro 0x00000000 0x4c ..\obj\main.o
.debug_macro 0x00000000 0x3a ..\obj\main.o
.debug_macro 0x00000000 0x16 ..\obj\main.o
@ -4139,7 +4113,7 @@ Discarded input sections
.text.TimerDeinit
0x00000000 0x18 ..\obj\timer.o
.debug_macro 0x00000000 0x862 ..\obj\timer.o
.debug_macro 0x00000000 0x87 ..\obj\timer.o
.debug_macro 0x00000000 0xb7 ..\obj\timer.o
.debug_macro 0x00000000 0x4c ..\obj\timer.o
.debug_macro 0x00000000 0x3a ..\obj\timer.o
.debug_macro 0x00000000 0x16 ..\obj\timer.o
@ -4213,7 +4187,7 @@ LOAD c:/program files (x86)/embitz/0.42/share/em_armgcc/bin/../lib/gcc/arm-none-
0x00000000 __HEAP_SIZE = 0x0
0x00000100 __STACK_SIZE = 0x100
.text 0x08008000 0xe74
.text 0x08008000 0x162c
*(.isr_vector)
.isr_vector 0x08008000 0x188 ..\obj\startup_stm32f2xx.o
0x08008000 __isr_vector
@ -4225,195 +4199,222 @@ LOAD c:/program files (x86)/embitz/0.42/share/em_armgcc/bin/../lib/gcc/arm-none-
.text.NVIC_SystemReset
0x08008250 0x28 ..\obj\boot.o
.text.BootComInit
0x08008278 0xc ..\obj\boot.o
0x08008278 0x10 ..\obj\boot.o
0x08008278 BootComInit
.text.BootComCheckActivationRequest
0x08008284 0xc ..\obj\boot.o
0x08008284 BootComCheckActivationRequest
0x08008288 0x10 ..\obj\boot.o
0x08008288 BootComCheckActivationRequest
.text.BootActivate
0x08008290 0xc ..\obj\boot.o
0x08008290 BootActivate
0x08008298 0xc ..\obj\boot.o
0x08008298 BootActivate
.text.BootComUartInit
0x0800829c 0xa0 ..\obj\boot.o
0x080082a4 0xa0 ..\obj\boot.o
.text.BootComUartCheckActivationRequest
0x0800833c 0x7c ..\obj\boot.o
0x08008344 0x7c ..\obj\boot.o
.text.UartReceiveByte
0x080083b8 0x38 ..\obj\boot.o
0x080083c0 0x38 ..\obj\boot.o
.text.CanGetSpeedConfig
0x080083f8 0xc0 ..\obj\boot.o
.text.BootComCanInit
0x080084b8 0xf0 ..\obj\boot.o
.text.BootComCanCheckActivationRequest
0x080085a8 0x44 ..\obj\boot.o
.text.IrqInterruptEnable
0x080083f0 0x10 ..\obj\irq.o
0x080083f0 IrqInterruptEnable
.text.LedInit 0x08008400 0x44 ..\obj\led.o
0x08008400 LedInit
0x080085ec 0x10 ..\obj\irq.o
0x080085ec IrqInterruptEnable
.text.LedInit 0x080085fc 0x44 ..\obj\led.o
0x080085fc LedInit
.text.LedToggle
0x08008444 0x60 ..\obj\led.o
0x08008444 LedToggle
0x08008640 0x60 ..\obj\led.o
0x08008640 LedToggle
.text.CAN_DeInit
0x080086a0 0x44 ..\obj\lib\spl\src\stm32f2xx_can.o
0x080086a0 CAN_DeInit
.text.CAN_Init
0x080086e4 0x1a4 ..\obj\lib\spl\src\stm32f2xx_can.o
0x080086e4 CAN_Init
.text.CAN_FilterInit
0x08008888 0x164 ..\obj\lib\spl\src\stm32f2xx_can.o
0x08008888 CAN_FilterInit
.text.CAN_StructInit
0x080089ec 0x54 ..\obj\lib\spl\src\stm32f2xx_can.o
0x080089ec CAN_StructInit
.text.CAN_Receive
0x08008a40 0x170 ..\obj\lib\spl\src\stm32f2xx_can.o
0x08008a40 CAN_Receive
.text.CAN_MessagePending
0x08008bb0 0x4c ..\obj\lib\spl\src\stm32f2xx_can.o
0x08008bb0 CAN_MessagePending
.text.GPIO_Init
0x080084a4 0x11c ..\obj\lib\spl\src\stm32f2xx_gpio.o
0x080084a4 GPIO_Init
0x08008bfc 0x11c ..\obj\lib\spl\src\stm32f2xx_gpio.o
0x08008bfc GPIO_Init
.text.GPIO_SetBits
0x080085c0 0x1c ..\obj\lib\spl\src\stm32f2xx_gpio.o
0x080085c0 GPIO_SetBits
0x08008d18 0x1c ..\obj\lib\spl\src\stm32f2xx_gpio.o
0x08008d18 GPIO_SetBits
.text.GPIO_ResetBits
0x080085dc 0x1c ..\obj\lib\spl\src\stm32f2xx_gpio.o
0x080085dc GPIO_ResetBits
0x08008d34 0x1c ..\obj\lib\spl\src\stm32f2xx_gpio.o
0x08008d34 GPIO_ResetBits
.text.GPIO_PinAFConfig
0x080085f8 0x8c ..\obj\lib\spl\src\stm32f2xx_gpio.o
0x080085f8 GPIO_PinAFConfig
0x08008d50 0x8c ..\obj\lib\spl\src\stm32f2xx_gpio.o
0x08008d50 GPIO_PinAFConfig
.text.RCC_GetClocksFreq
0x08008684 0x154 ..\obj\lib\spl\src\stm32f2xx_rcc.o
0x08008684 RCC_GetClocksFreq
0x08008ddc 0x154 ..\obj\lib\spl\src\stm32f2xx_rcc.o
0x08008ddc RCC_GetClocksFreq
.text.RCC_AHB1PeriphClockCmd
0x080087d8 0x3c ..\obj\lib\spl\src\stm32f2xx_rcc.o
0x080087d8 RCC_AHB1PeriphClockCmd
0x08008f30 0x3c ..\obj\lib\spl\src\stm32f2xx_rcc.o
0x08008f30 RCC_AHB1PeriphClockCmd
.text.RCC_APB1PeriphClockCmd
0x08008814 0x3c ..\obj\lib\spl\src\stm32f2xx_rcc.o
0x08008814 RCC_APB1PeriphClockCmd
0x08008f6c 0x3c ..\obj\lib\spl\src\stm32f2xx_rcc.o
0x08008f6c RCC_APB1PeriphClockCmd
.text.RCC_APB1PeriphResetCmd
0x08008fa8 0x3c ..\obj\lib\spl\src\stm32f2xx_rcc.o
0x08008fa8 RCC_APB1PeriphResetCmd
.text.USART_Init
0x08008850 0x174 ..\obj\lib\spl\src\stm32f2xx_usart.o
0x08008850 USART_Init
0x08008fe4 0x174 ..\obj\lib\spl\src\stm32f2xx_usart.o
0x08008fe4 USART_Init
.text.USART_Cmd
0x080089c4 0x40 ..\obj\lib\spl\src\stm32f2xx_usart.o
0x080089c4 USART_Cmd
0x08009158 0x40 ..\obj\lib\spl\src\stm32f2xx_usart.o
0x08009158 USART_Cmd
.text.USART_ReceiveData
0x08008a04 0x20 ..\obj\lib\spl\src\stm32f2xx_usart.o
0x08008a04 USART_ReceiveData
0x08009198 0x20 ..\obj\lib\spl\src\stm32f2xx_usart.o
0x08009198 USART_ReceiveData
.text.USART_GetFlagStatus
0x08008a24 0x38 ..\obj\lib\spl\src\stm32f2xx_usart.o
0x08008a24 USART_GetFlagStatus
0x080091b8 0x38 ..\obj\lib\spl\src\stm32f2xx_usart.o
0x080091b8 USART_GetFlagStatus
.text.SystemInit
0x08008a5c 0x4c ..\obj\lib\system_stm32f2xx.o
0x08008a5c SystemInit
0x080091f0 0x4c ..\obj\lib\system_stm32f2xx.o
0x080091f0 SystemInit
.text.SetSysClock
0x08008aa8 0xd8 ..\obj\lib\system_stm32f2xx.o
.text.main 0x08008b80 0x18 ..\obj\main.o
0x08008b80 main
.text.Init 0x08008b98 0x14 ..\obj\main.o
.text 0x08008bac 0x10c ..\obj\startup_stm32f2xx.o
0x08008bac Reset_Handler
0x08008bfa NMI_Handler
0x08008bfc HardFault_Handler
0x08008bfe MemManage_Handler
0x08008c00 BusFault_Handler
0x08008c02 UsageFault_Handler
0x08008c04 SVC_Handler
0x08008c06 DebugMon_Handler
0x08008c08 PendSV_Handler
0x08008c0c Default_Handler
0x08008c0e WWDG_IRQHandler
0x08008c10 PVD_IRQHandler
0x08008c12 TAMP_STAMP_IRQHandler
0x08008c14 RTC_WKUP_IRQHandler
0x08008c16 FLASH_IRQHandler
0x08008c18 RCC_IRQHandler
0x08008c1a EXTI0_IRQHandler
0x08008c1c EXTI1_IRQHandler
0x08008c1e EXTI2_IRQHandler
0x08008c20 EXTI3_IRQHandler
0x08008c22 EXTI4_IRQHandler
0x08008c24 DMA1_Stream0_IRQHandler
0x08008c26 DMA1_Stream1_IRQHandler
0x08008c28 DMA1_Stream2_IRQHandler
0x08008c2a DMA1_Stream3_IRQHandler
0x08008c2c DMA1_Stream4_IRQHandler
0x08008c2e DMA1_Stream5_IRQHandler
0x08008c30 DMA1_Stream6_IRQHandler
0x08008c32 ADC_IRQHandler
0x08008c34 CAN1_TX_IRQHandler
0x08008c36 CAN1_RX0_IRQHandler
0x08008c38 CAN1_RX1_IRQHandler
0x08008c3a CAN1_SCE_IRQHandler
0x08008c3c EXTI9_5_IRQHandler
0x08008c3e TIM1_BRK_TIM9_IRQHandler
0x08008c40 TIM1_UP_TIM10_IRQHandler
0x08008c42 TIM1_TRG_COM_TIM11_IRQHandler
0x08008c44 TIM1_CC_IRQHandler
0x08008c46 TIM2_IRQHandler
0x08008c48 TIM3_IRQHandler
0x08008c4a TIM4_IRQHandler
0x08008c4c I2C1_EV_IRQHandler
0x08008c4e I2C1_ER_IRQHandler
0x08008c50 I2C2_EV_IRQHandler
0x08008c52 I2C2_ER_IRQHandler
0x08008c54 SPI1_IRQHandler
0x08008c56 SPI2_IRQHandler
0x08008c58 USART1_IRQHandler
0x08008c5a USART2_IRQHandler
0x08008c5c USART3_IRQHandler
0x08008c5e EXTI15_10_IRQHandler
0x08008c60 RTC_Alarm_IRQHandler
0x08008c62 OTG_FS_WKUP_IRQHandler
0x08008c64 TIM8_BRK_TIM12_IRQHandler
0x08008c66 TIM8_UP_TIM13_IRQHandler
0x08008c68 TIM8_TRG_COM_TIM14_IRQHandler
0x08008c6a TIM8_CC_IRQHandler
0x08008c6c DMA1_Stream7_IRQHandler
0x08008c6e FSMC_IRQHandler
0x08008c70 SDIO_IRQHandler
0x08008c72 TIM5_IRQHandler
0x08008c74 SPI3_IRQHandler
0x08008c76 UART4_IRQHandler
0x08008c78 UART5_IRQHandler
0x08008c7a TIM6_DAC_IRQHandler
0x08008c7c TIM7_IRQHandler
0x08008c7e DMA2_Stream0_IRQHandler
0x08008c80 DMA2_Stream1_IRQHandler
0x08008c82 DMA2_Stream2_IRQHandler
0x08008c84 DMA2_Stream3_IRQHandler
0x08008c86 DMA2_Stream4_IRQHandler
0x08008c88 ETH_IRQHandler
0x08008c8a ETH_WKUP_IRQHandler
0x08008c8c CAN2_TX_IRQHandler
0x08008c8e CAN2_RX0_IRQHandler
0x08008c90 CAN2_RX1_IRQHandler
0x08008c92 CAN2_SCE_IRQHandler
0x08008c94 OTG_FS_IRQHandler
0x08008c96 DMA2_Stream5_IRQHandler
0x08008c98 DMA2_Stream6_IRQHandler
0x08008c9a DMA2_Stream7_IRQHandler
0x08008c9c USART6_IRQHandler
0x08008c9e I2C3_EV_IRQHandler
0x08008ca0 I2C3_ER_IRQHandler
0x08008ca2 OTG_HS_EP1_OUT_IRQHandler
0x08008ca4 OTG_HS_EP1_IN_IRQHandler
0x08008ca6 OTG_HS_WKUP_IRQHandler
0x08008ca8 OTG_HS_IRQHandler
0x08008caa DCMI_IRQHandler
0x08008cac CRYP_IRQHandler
0x08008cae HASH_RNG_IRQHandler
0x0800923c 0xd8 ..\obj\lib\system_stm32f2xx.o
.text.main 0x08009314 0x18 ..\obj\main.o
0x08009314 main
.text.Init 0x0800932c 0x14 ..\obj\main.o
.text 0x08009340 0x10c ..\obj\startup_stm32f2xx.o
0x08009340 Reset_Handler
0x0800938e NMI_Handler
0x08009390 HardFault_Handler
0x08009392 MemManage_Handler
0x08009394 BusFault_Handler
0x08009396 UsageFault_Handler
0x08009398 SVC_Handler
0x0800939a DebugMon_Handler
0x0800939c PendSV_Handler
0x080093a0 Default_Handler
0x080093a2 WWDG_IRQHandler
0x080093a4 PVD_IRQHandler
0x080093a6 TAMP_STAMP_IRQHandler
0x080093a8 RTC_WKUP_IRQHandler
0x080093aa FLASH_IRQHandler
0x080093ac RCC_IRQHandler
0x080093ae EXTI0_IRQHandler
0x080093b0 EXTI1_IRQHandler
0x080093b2 EXTI2_IRQHandler
0x080093b4 EXTI3_IRQHandler
0x080093b6 EXTI4_IRQHandler
0x080093b8 DMA1_Stream0_IRQHandler
0x080093ba DMA1_Stream1_IRQHandler
0x080093bc DMA1_Stream2_IRQHandler
0x080093be DMA1_Stream3_IRQHandler
0x080093c0 DMA1_Stream4_IRQHandler
0x080093c2 DMA1_Stream5_IRQHandler
0x080093c4 DMA1_Stream6_IRQHandler
0x080093c6 ADC_IRQHandler
0x080093c8 CAN1_TX_IRQHandler
0x080093ca CAN1_RX0_IRQHandler
0x080093cc CAN1_RX1_IRQHandler
0x080093ce CAN1_SCE_IRQHandler
0x080093d0 EXTI9_5_IRQHandler
0x080093d2 TIM1_BRK_TIM9_IRQHandler
0x080093d4 TIM1_UP_TIM10_IRQHandler
0x080093d6 TIM1_TRG_COM_TIM11_IRQHandler
0x080093d8 TIM1_CC_IRQHandler
0x080093da TIM2_IRQHandler
0x080093dc TIM3_IRQHandler
0x080093de TIM4_IRQHandler
0x080093e0 I2C1_EV_IRQHandler
0x080093e2 I2C1_ER_IRQHandler
0x080093e4 I2C2_EV_IRQHandler
0x080093e6 I2C2_ER_IRQHandler
0x080093e8 SPI1_IRQHandler
0x080093ea SPI2_IRQHandler
0x080093ec USART1_IRQHandler
0x080093ee USART2_IRQHandler
0x080093f0 USART3_IRQHandler
0x080093f2 EXTI15_10_IRQHandler
0x080093f4 RTC_Alarm_IRQHandler
0x080093f6 OTG_FS_WKUP_IRQHandler
0x080093f8 TIM8_BRK_TIM12_IRQHandler
0x080093fa TIM8_UP_TIM13_IRQHandler
0x080093fc TIM8_TRG_COM_TIM14_IRQHandler
0x080093fe TIM8_CC_IRQHandler
0x08009400 DMA1_Stream7_IRQHandler
0x08009402 FSMC_IRQHandler
0x08009404 SDIO_IRQHandler
0x08009406 TIM5_IRQHandler
0x08009408 SPI3_IRQHandler
0x0800940a UART4_IRQHandler
0x0800940c UART5_IRQHandler
0x0800940e TIM6_DAC_IRQHandler
0x08009410 TIM7_IRQHandler
0x08009412 DMA2_Stream0_IRQHandler
0x08009414 DMA2_Stream1_IRQHandler
0x08009416 DMA2_Stream2_IRQHandler
0x08009418 DMA2_Stream3_IRQHandler
0x0800941a DMA2_Stream4_IRQHandler
0x0800941c ETH_IRQHandler
0x0800941e ETH_WKUP_IRQHandler
0x08009420 CAN2_TX_IRQHandler
0x08009422 CAN2_RX0_IRQHandler
0x08009424 CAN2_RX1_IRQHandler
0x08009426 CAN2_SCE_IRQHandler
0x08009428 OTG_FS_IRQHandler
0x0800942a DMA2_Stream5_IRQHandler
0x0800942c DMA2_Stream6_IRQHandler
0x0800942e DMA2_Stream7_IRQHandler
0x08009430 USART6_IRQHandler
0x08009432 I2C3_EV_IRQHandler
0x08009434 I2C3_ER_IRQHandler
0x08009436 OTG_HS_EP1_OUT_IRQHandler
0x08009438 OTG_HS_EP1_IN_IRQHandler
0x0800943a OTG_HS_WKUP_IRQHandler
0x0800943c OTG_HS_IRQHandler
0x0800943e DCMI_IRQHandler
0x08009440 CRYP_IRQHandler
0x08009442 HASH_RNG_IRQHandler
.text.NVIC_SetPriority
0x08008cb8 0x54 ..\obj\timer.o
0x0800944c 0x54 ..\obj\timer.o
.text.SysTick_Config
0x08008d0c 0x44 ..\obj\timer.o
0x080094a0 0x44 ..\obj\timer.o
.text.TimerInit
0x08008d50 0x28 ..\obj\timer.o
0x08008d50 TimerInit
0x080094e4 0x28 ..\obj\timer.o
0x080094e4 TimerInit
.text.TimerSet
0x08008d78 0x1c ..\obj\timer.o
0x08008d78 TimerSet
0x0800950c 0x1c ..\obj\timer.o
0x0800950c TimerSet
.text.TimerGet
0x08008d94 0x18 ..\obj\timer.o
0x08008d94 TimerGet
0x08009528 0x18 ..\obj\timer.o
0x08009528 TimerGet
.text.SysTick_Handler
0x08008dac 0x1c ..\obj\timer.o
0x08008dac SysTick_Handler
.text.exit 0x08008dc8 0x28 c:/program files (x86)/embitz/0.42/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/4.8.4/../../../../arm-none-eabi/lib/armv7-m\libg_n.a(lib_a-exit.o)
0x08008dc8 exit
0x08009540 0x1c ..\obj\timer.o
0x08009540 SysTick_Handler
.text.exit 0x0800955c 0x28 c:/program files (x86)/embitz/0.42/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/4.8.4/../../../../arm-none-eabi/lib/armv7-m\libg_n.a(lib_a-exit.o)
0x0800955c exit
.text.__libc_init_array
0x08008df0 0x4c c:/program files (x86)/embitz/0.42/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/4.8.4/../../../../arm-none-eabi/lib/armv7-m\libg_n.a(lib_a-init.o)
0x08008df0 __libc_init_array
.text.memset 0x08008e3c 0x10 c:/program files (x86)/embitz/0.42/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/4.8.4/../../../../arm-none-eabi/lib/armv7-m\libg_n.a(lib_a-memset.o)
0x08008e3c memset
.text 0x08008e4c 0x2 c:/program files (x86)/embitz/0.42/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/4.8.4/../../../../arm-none-eabi/lib/armv7-m\libnosys_s.a(_exit.o)
0x08008e4c _exit
0x08009584 0x4c c:/program files (x86)/embitz/0.42/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/4.8.4/../../../../arm-none-eabi/lib/armv7-m\libg_n.a(lib_a-init.o)
0x08009584 __libc_init_array
.text.memset 0x080095d0 0x10 c:/program files (x86)/embitz/0.42/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/4.8.4/../../../../arm-none-eabi/lib/armv7-m\libg_n.a(lib_a-memset.o)
0x080095d0 memset
.text 0x080095e0 0x2 c:/program files (x86)/embitz/0.42/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/4.8.4/../../../../arm-none-eabi/lib/armv7-m\libnosys_s.a(_exit.o)
0x080095e0 _exit
*(.init)
*fill* 0x08008e4e 0x2
.init 0x08008e50 0x4 c:/program files (x86)/embitz/0.42/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/4.8.4/armv7-m/crti.o
0x08008e50 _init
.init 0x08008e54 0x8 c:/program files (x86)/embitz/0.42/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/4.8.4/armv7-m/crtn.o
*fill* 0x080095e2 0x2
.init 0x080095e4 0x4 c:/program files (x86)/embitz/0.42/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/4.8.4/armv7-m/crti.o
0x080095e4 _init
.init 0x080095e8 0x8 c:/program files (x86)/embitz/0.42/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/4.8.4/armv7-m/crtn.o
*(.fini)
.fini 0x08008e5c 0x4 c:/program files (x86)/embitz/0.42/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/4.8.4/armv7-m/crti.o
0x08008e5c _fini
.fini 0x08008e60 0x8 c:/program files (x86)/embitz/0.42/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/4.8.4/armv7-m/crtn.o
.fini 0x080095f0 0x4 c:/program files (x86)/embitz/0.42/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/4.8.4/armv7-m/crti.o
0x080095f0 _fini
.fini 0x080095f4 0x8 c:/program files (x86)/embitz/0.42/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/4.8.4/armv7-m/crtn.o
*crtbegin.o(.ctors)
*crtbegin?.o(.ctors)
*(EXCLUDE_FILE(*crtend.o *crtend?.o) .ctors)
@ -4425,45 +4426,47 @@ LOAD c:/program files (x86)/embitz/0.42/share/em_armgcc/bin/../lib/gcc/arm-none-
*(SORT(.dtors.*))
*(.dtors)
*(.rodata*)
.rodata.canTiming
0x080095fc 0x24 ..\obj\boot.o
.rodata.str1.1
0x08008e68 0x2 c:/program files (x86)/embitz/0.42/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/4.8.4/../../../../arm-none-eabi/lib/armv7-m\libg_n.a(lib_a-impure.o)
*fill* 0x08008e6a 0x2
0x08009620 0x2 c:/program files (x86)/embitz/0.42/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/4.8.4/../../../../arm-none-eabi/lib/armv7-m\libg_n.a(lib_a-impure.o)
*fill* 0x08009622 0x2
.rodata._global_impure_ptr
0x08008e6c 0x4 c:/program files (x86)/embitz/0.42/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/4.8.4/../../../../arm-none-eabi/lib/armv7-m\libg_n.a(lib_a-impure.o)
0x08008e6c _global_impure_ptr
0x08009624 0x4 c:/program files (x86)/embitz/0.42/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/4.8.4/../../../../arm-none-eabi/lib/armv7-m\libg_n.a(lib_a-impure.o)
0x08009624 _global_impure_ptr
*(.eh_frame*)
.eh_frame 0x08008e70 0x0 c:/program files (x86)/embitz/0.42/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/4.8.4/armv7-m/crtbegin.o
.eh_frame 0x08008e70 0x4 c:/program files (x86)/embitz/0.42/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/4.8.4/armv7-m/crtend.o
.eh_frame 0x08009628 0x0 c:/program files (x86)/embitz/0.42/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/4.8.4/armv7-m/crtbegin.o
.eh_frame 0x08009628 0x4 c:/program files (x86)/embitz/0.42/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/4.8.4/armv7-m/crtend.o
.glue_7 0x08008e74 0x0
.glue_7 0x0800962c 0x0
.glue_7 0x00000000 0x0 linker stubs
.glue_7t 0x08008e74 0x0
.glue_7t 0x0800962c 0x0
.glue_7t 0x00000000 0x0 linker stubs
.vfp11_veneer 0x08008e74 0x0
.vfp11_veneer 0x0800962c 0x0
.vfp11_veneer 0x00000000 0x0 linker stubs
.v4_bx 0x08008e74 0x0
.v4_bx 0x0800962c 0x0
.v4_bx 0x00000000 0x0 linker stubs
.iplt 0x08008e74 0x0
.iplt 0x0800962c 0x0
.iplt 0x00000000 0x0 c:/program files (x86)/embitz/0.42/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/4.8.4/armv7-m/crtbegin.o
.ARM.extab
*(.ARM.extab* .gnu.linkonce.armextab.*)
0x08008e74 __exidx_start = .
0x0800962c __exidx_start = .
.ARM.exidx 0x08008e74 0x8
.ARM.exidx 0x0800962c 0x8
*(.ARM.exidx* .gnu.linkonce.armexidx.*)
.ARM.exidx 0x08008e74 0x8 c:/program files (x86)/embitz/0.42/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/4.8.4/../../../../arm-none-eabi/lib/armv7-m/crt0.o
0x08008e7c __exidx_end = .
0x08008e7c __etext = .
.ARM.exidx 0x0800962c 0x8 c:/program files (x86)/embitz/0.42/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/4.8.4/../../../../arm-none-eabi/lib/armv7-m/crt0.o
0x08009634 __exidx_end = .
0x08009634 __etext = .
.rel.dyn 0x08008e7c 0x0
.rel.dyn 0x08009634 0x0
.rel.iplt 0x00000000 0x0 c:/program files (x86)/embitz/0.42/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/4.8.4/armv7-m/crtbegin.o
.data 0x20000000 0x7c load address 0x08008e7c
.data 0x20000000 0x7c load address 0x08009634
0x20000000 __data_start__ = .
*(vtable)
*(.data*)
@ -4493,22 +4496,22 @@ LOAD c:/program files (x86)/embitz/0.42/share/em_armgcc/bin/../lib/gcc/arm-none-
0x2000007c . = ALIGN (0x4)
0x2000007c __data_end__ = .
.jcr 0x2000007c 0x0 load address 0x08008ef8
.jcr 0x2000007c 0x0 load address 0x080096b0
.jcr 0x2000007c 0x0 c:/program files (x86)/embitz/0.42/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/4.8.4/armv7-m/crtbegin.o
.igot.plt 0x2000007c 0x0 load address 0x08008ef8
.igot.plt 0x2000007c 0x0 load address 0x080096b0
.igot.plt 0x00000000 0x0 c:/program files (x86)/embitz/0.42/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/4.8.4/armv7-m/crtbegin.o
.bss 0x2000007c 0x74 load address 0x08008ef8
.bss 0x2000007c 0x74 load address 0x080096b0
0x2000007c __bss_start__ = .
*(.bss*)
.bss 0x2000007c 0x1c c:/program files (x86)/embitz/0.42/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/4.8.4/armv7-m/crtbegin.o
.bss.xcpCtoRxInProgress.7886
.bss.xcpCtoRxInProgress.7890
0x20000098 0x1 ..\obj\boot.o
*fill* 0x20000099 0x3
.bss.xcpCtoReqPacket.7884
.bss.xcpCtoReqPacket.7888
0x2000009c 0x44 ..\obj\boot.o
.bss.xcpCtoRxLength.7885
.bss.xcpCtoRxLength.7889
0x200000e0 0x1 ..\obj\boot.o
*fill* 0x200000e1 0x3
.bss.timer_counter_last.7869
@ -4602,39 +4605,42 @@ OUTPUT(..\bin\demoprog_stm32f207.elf elf32-littlearm)
.ARM.attributes
0x000000cb 0x33 ..\obj\led.o
.ARM.attributes
0x000000fe 0x33 ..\obj\lib\spl\src\stm32f2xx_gpio.o
0x000000fe 0x33 ..\obj\lib\spl\src\stm32f2xx_can.o
.ARM.attributes
0x00000131 0x33 ..\obj\lib\spl\src\stm32f2xx_rcc.o
0x00000131 0x33 ..\obj\lib\spl\src\stm32f2xx_gpio.o
.ARM.attributes
0x00000164 0x33 ..\obj\lib\spl\src\stm32f2xx_usart.o
0x00000164 0x33 ..\obj\lib\spl\src\stm32f2xx_rcc.o
.ARM.attributes
0x00000197 0x33 ..\obj\lib\system_stm32f2xx.o
0x00000197 0x33 ..\obj\lib\spl\src\stm32f2xx_usart.o
.ARM.attributes
0x000001ca 0x33 ..\obj\main.o
0x000001ca 0x33 ..\obj\lib\system_stm32f2xx.o
.ARM.attributes
0x000001fd 0x1b ..\obj\startup_stm32f2xx.o
0x000001fd 0x33 ..\obj\main.o
.ARM.attributes
0x00000218 0x33 ..\obj\timer.o
0x00000230 0x1b ..\obj\startup_stm32f2xx.o
.ARM.attributes
0x0000024b 0x2d c:/program files (x86)/embitz/0.42/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/4.8.4/../../../../arm-none-eabi/lib/armv7-m\libg_n.a(lib_a-exit.o)
0x0000024b 0x33 ..\obj\timer.o
.ARM.attributes
0x00000278 0x2d c:/program files (x86)/embitz/0.42/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/4.8.4/../../../../arm-none-eabi/lib/armv7-m\libg_n.a(lib_a-impure.o)
0x0000027e 0x2d c:/program files (x86)/embitz/0.42/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/4.8.4/../../../../arm-none-eabi/lib/armv7-m\libg_n.a(lib_a-exit.o)
.ARM.attributes
0x000002a5 0x2d c:/program files (x86)/embitz/0.42/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/4.8.4/../../../../arm-none-eabi/lib/armv7-m\libg_n.a(lib_a-init.o)
0x000002ab 0x2d c:/program files (x86)/embitz/0.42/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/4.8.4/../../../../arm-none-eabi/lib/armv7-m\libg_n.a(lib_a-impure.o)
.ARM.attributes
0x000002d2 0x2d c:/program files (x86)/embitz/0.42/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/4.8.4/../../../../arm-none-eabi/lib/armv7-m\libg_n.a(lib_a-memset.o)
0x000002d8 0x2d c:/program files (x86)/embitz/0.42/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/4.8.4/../../../../arm-none-eabi/lib/armv7-m\libg_n.a(lib_a-init.o)
.ARM.attributes
0x000002ff 0x2d c:/program files (x86)/embitz/0.42/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/4.8.4/../../../../arm-none-eabi/lib/armv7-m\libnosys_s.a(_exit.o)
0x00000305 0x2d c:/program files (x86)/embitz/0.42/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/4.8.4/../../../../arm-none-eabi/lib/armv7-m\libg_n.a(lib_a-memset.o)
.ARM.attributes
0x0000032c 0x2d c:/program files (x86)/embitz/0.42/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/4.8.4/armv7-m/crtend.o
0x00000332 0x2d c:/program files (x86)/embitz/0.42/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/4.8.4/../../../../arm-none-eabi/lib/armv7-m\libnosys_s.a(_exit.o)
.ARM.attributes
0x00000359 0x1d c:/program files (x86)/embitz/0.42/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/4.8.4/armv7-m/crtn.o
0x0000035f 0x2d c:/program files (x86)/embitz/0.42/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/4.8.4/armv7-m/crtend.o
.ARM.attributes
0x0000038c 0x1d c:/program files (x86)/embitz/0.42/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/4.8.4/armv7-m/crtn.o
.comment 0x00000000 0x46
.comment 0x00000000 0x46 ..\obj\boot.o
0x47 (size before relaxing)
.comment 0x00000000 0x47 ..\obj\irq.o
.comment 0x00000000 0x47 ..\obj\led.o
.comment 0x00000000 0x47 ..\obj\lib\spl\src\stm32f2xx_can.o
.comment 0x00000000 0x47 ..\obj\lib\spl\src\stm32f2xx_gpio.o
.comment 0x00000000 0x47 ..\obj\lib\spl\src\stm32f2xx_rcc.o
.comment 0x00000000 0x47 ..\obj\lib\spl\src\stm32f2xx_usart.o
@ -4642,156 +4648,166 @@ OUTPUT(..\bin\demoprog_stm32f207.elf elf32-littlearm)
.comment 0x00000000 0x47 ..\obj\main.o
.comment 0x00000000 0x47 ..\obj\timer.o
.debug_info 0x00000000 0x3311
.debug_info 0x00000000 0x682 ..\obj\boot.o
.debug_info 0x00000682 0x130 ..\obj\irq.o
.debug_info 0x000007b2 0x2ef ..\obj\led.o
.debug_info 0x00000aa1 0x60d ..\obj\lib\spl\src\stm32f2xx_gpio.o
.debug_info 0x000010ae 0xc55 ..\obj\lib\spl\src\stm32f2xx_rcc.o
.debug_info 0x00001d03 0x9ca ..\obj\lib\spl\src\stm32f2xx_usart.o
.debug_info 0x000026cd 0x3ec ..\obj\lib\system_stm32f2xx.o
.debug_info 0x00002ab9 0xc4 ..\obj\main.o
.debug_info 0x00002b7d 0x8f ..\obj\startup_stm32f2xx.o
.debug_info 0x00002c0c 0x705 ..\obj\timer.o
.debug_info 0x00000000 0x4410
.debug_info 0x00000000 0xbdd ..\obj\boot.o
.debug_info 0x00000bdd 0x130 ..\obj\irq.o
.debug_info 0x00000d0d 0x2ef ..\obj\led.o
.debug_info 0x00000ffc 0xba4 ..\obj\lib\spl\src\stm32f2xx_can.o
.debug_info 0x00001ba0 0x60d ..\obj\lib\spl\src\stm32f2xx_gpio.o
.debug_info 0x000021ad 0xc55 ..\obj\lib\spl\src\stm32f2xx_rcc.o
.debug_info 0x00002e02 0x9ca ..\obj\lib\spl\src\stm32f2xx_usart.o
.debug_info 0x000037cc 0x3ec ..\obj\lib\system_stm32f2xx.o
.debug_info 0x00003bb8 0xc4 ..\obj\main.o
.debug_info 0x00003c7c 0x8f ..\obj\startup_stm32f2xx.o
.debug_info 0x00003d0b 0x705 ..\obj\timer.o
.debug_abbrev 0x00000000 0xbad
.debug_abbrev 0x00000000 0x192 ..\obj\boot.o
.debug_abbrev 0x00000192 0x99 ..\obj\irq.o
.debug_abbrev 0x0000022b 0x104 ..\obj\led.o
.debug_abbrev 0x0000032f 0x1a8 ..\obj\lib\spl\src\stm32f2xx_gpio.o
.debug_abbrev 0x000004d7 0x1e8 ..\obj\lib\spl\src\stm32f2xx_rcc.o
.debug_abbrev 0x000006bf 0x15a ..\obj\lib\spl\src\stm32f2xx_usart.o
.debug_abbrev 0x00000819 0x13b ..\obj\lib\system_stm32f2xx.o
.debug_abbrev 0x00000954 0x82 ..\obj\main.o
.debug_abbrev 0x000009d6 0x14 ..\obj\startup_stm32f2xx.o
.debug_abbrev 0x000009ea 0x1c3 ..\obj\timer.o
.debug_abbrev 0x00000000 0xe4d
.debug_abbrev 0x00000000 0x23a ..\obj\boot.o
.debug_abbrev 0x0000023a 0x99 ..\obj\irq.o
.debug_abbrev 0x000002d3 0x104 ..\obj\led.o
.debug_abbrev 0x000003d7 0x1f8 ..\obj\lib\spl\src\stm32f2xx_can.o
.debug_abbrev 0x000005cf 0x1a8 ..\obj\lib\spl\src\stm32f2xx_gpio.o
.debug_abbrev 0x00000777 0x1e8 ..\obj\lib\spl\src\stm32f2xx_rcc.o
.debug_abbrev 0x0000095f 0x15a ..\obj\lib\spl\src\stm32f2xx_usart.o
.debug_abbrev 0x00000ab9 0x13b ..\obj\lib\system_stm32f2xx.o
.debug_abbrev 0x00000bf4 0x82 ..\obj\main.o
.debug_abbrev 0x00000c76 0x14 ..\obj\startup_stm32f2xx.o
.debug_abbrev 0x00000c8a 0x1c3 ..\obj\timer.o
.debug_aranges 0x00000000 0x470
.debug_aranges 0x00000000 0x568
.debug_aranges
0x00000000 0x50 ..\obj\boot.o
0x00000000 0x68 ..\obj\boot.o
.debug_aranges
0x00000050 0x30 ..\obj\irq.o
0x00000068 0x30 ..\obj\irq.o
.debug_aranges
0x00000080 0x28 ..\obj\led.o
0x00000098 0x28 ..\obj\led.o
.debug_aranges
0x000000a8 0x88 ..\obj\lib\spl\src\stm32f2xx_gpio.o
0x000000c0 0xe0 ..\obj\lib\spl\src\stm32f2xx_can.o
.debug_aranges
0x00000130 0x178 ..\obj\lib\spl\src\stm32f2xx_rcc.o
0x000001a0 0x88 ..\obj\lib\spl\src\stm32f2xx_gpio.o
.debug_aranges
0x000002a8 0x100 ..\obj\lib\spl\src\stm32f2xx_usart.o
0x00000228 0x178 ..\obj\lib\spl\src\stm32f2xx_rcc.o
.debug_aranges
0x000003a8 0x30 ..\obj\lib\system_stm32f2xx.o
0x000003a0 0x100 ..\obj\lib\spl\src\stm32f2xx_usart.o
.debug_aranges
0x000003d8 0x28 ..\obj\main.o
0x000004a0 0x30 ..\obj\lib\system_stm32f2xx.o
.debug_aranges
0x00000400 0x20 ..\obj\startup_stm32f2xx.o
0x000004d0 0x28 ..\obj\main.o
.debug_aranges
0x00000420 0x50 ..\obj\timer.o
0x000004f8 0x20 ..\obj\startup_stm32f2xx.o
.debug_aranges
0x00000518 0x50 ..\obj\timer.o
.debug_ranges 0x00000000 0x3c0
.debug_ranges 0x00000000 0x40 ..\obj\boot.o
.debug_ranges 0x00000040 0x20 ..\obj\irq.o
.debug_ranges 0x00000060 0x18 ..\obj\led.o
.debug_ranges 0x00000078 0x78 ..\obj\lib\spl\src\stm32f2xx_gpio.o
.debug_ranges 0x000000f0 0x168 ..\obj\lib\spl\src\stm32f2xx_rcc.o
.debug_ranges 0x00000258 0xf0 ..\obj\lib\spl\src\stm32f2xx_usart.o
.debug_ranges 0x00000348 0x20 ..\obj\lib\system_stm32f2xx.o
.debug_ranges 0x00000368 0x18 ..\obj\main.o
.debug_ranges 0x00000380 0x40 ..\obj\timer.o
.debug_ranges 0x00000000 0x4a8
.debug_ranges 0x00000000 0x58 ..\obj\boot.o
.debug_ranges 0x00000058 0x20 ..\obj\irq.o
.debug_ranges 0x00000078 0x18 ..\obj\led.o
.debug_ranges 0x00000090 0xd0 ..\obj\lib\spl\src\stm32f2xx_can.o
.debug_ranges 0x00000160 0x78 ..\obj\lib\spl\src\stm32f2xx_gpio.o
.debug_ranges 0x000001d8 0x168 ..\obj\lib\spl\src\stm32f2xx_rcc.o
.debug_ranges 0x00000340 0xf0 ..\obj\lib\spl\src\stm32f2xx_usart.o
.debug_ranges 0x00000430 0x20 ..\obj\lib\system_stm32f2xx.o
.debug_ranges 0x00000450 0x18 ..\obj\main.o
.debug_ranges 0x00000468 0x40 ..\obj\timer.o
.debug_macro 0x00000000 0xe816
.debug_macro 0x00000000 0xea2e
.debug_macro 0x00000000 0x1c3 ..\obj\boot.o
.debug_macro 0x000001c3 0x862 ..\obj\boot.o
.debug_macro 0x00000a25 0x87 ..\obj\boot.o
.debug_macro 0x00000aac 0x4c ..\obj\boot.o
.debug_macro 0x00000af8 0x3a ..\obj\boot.o
.debug_macro 0x00000b32 0x16 ..\obj\boot.o
.debug_macro 0x00000b48 0x44 ..\obj\boot.o
.debug_macro 0x00000b8c 0x209 ..\obj\boot.o
.debug_macro 0x00000d95 0x18 ..\obj\boot.o
.debug_macro 0x00000dad 0xb08 ..\obj\boot.o
.debug_macro 0x000018b5 0x7f1c ..\obj\boot.o
.debug_macro 0x000097d1 0x44f ..\obj\boot.o
.debug_macro 0x00009c20 0x3cf ..\obj\boot.o
.debug_macro 0x00009fef 0x111 ..\obj\boot.o
.debug_macro 0x0000a100 0x188 ..\obj\boot.o
.debug_macro 0x0000a288 0xb2 ..\obj\boot.o
.debug_macro 0x0000a33a 0x149 ..\obj\boot.o
.debug_macro 0x0000a483 0x477 ..\obj\boot.o
.debug_macro 0x0000a8fa 0xae ..\obj\boot.o
.debug_macro 0x0000a9a8 0x242 ..\obj\boot.o
.debug_macro 0x0000abea 0x279 ..\obj\boot.o
.debug_macro 0x0000ae63 0xb5 ..\obj\boot.o
.debug_macro 0x0000af18 0x25e ..\obj\boot.o
.debug_macro 0x0000b176 0x2b3 ..\obj\boot.o
.debug_macro 0x0000b429 0x64 ..\obj\boot.o
.debug_macro 0x0000b48d 0x88 ..\obj\boot.o
.debug_macro 0x0000b515 0x536 ..\obj\boot.o
.debug_macro 0x0000ba4b 0x40 ..\obj\boot.o
.debug_macro 0x0000ba8b 0x3f3 ..\obj\boot.o
.debug_macro 0x0000be7e 0x342 ..\obj\boot.o
.debug_macro 0x0000c1c0 0x357 ..\obj\boot.o
.debug_macro 0x0000c517 0xe1 ..\obj\boot.o
.debug_macro 0x0000c5f8 0x73b ..\obj\boot.o
.debug_macro 0x0000cd33 0x221 ..\obj\boot.o
.debug_macro 0x0000cf54 0x34 ..\obj\boot.o
.debug_macro 0x0000cf88 0x82 ..\obj\boot.o
.debug_macro 0x0000d00a 0x35 ..\obj\boot.o
.debug_macro 0x0000d03f 0x1c3 ..\obj\irq.o
.debug_macro 0x0000d202 0x1c9 ..\obj\led.o
.debug_macro 0x0000d3cb 0x192 ..\obj\lib\spl\src\stm32f2xx_gpio.o
.debug_macro 0x0000d55d 0x258 ..\obj\lib\spl\src\stm32f2xx_gpio.o
.debug_macro 0x0000d7b5 0x23b ..\obj\lib\spl\src\stm32f2xx_rcc.o
.debug_macro 0x0000d9f0 0x530 ..\obj\lib\spl\src\stm32f2xx_rcc.o
.debug_macro 0x0000df20 0x1aa ..\obj\lib\spl\src\stm32f2xx_usart.o
.debug_macro 0x0000e0ca 0x21b ..\obj\lib\spl\src\stm32f2xx_usart.o
.debug_macro 0x0000e2e5 0x1ab ..\obj\lib\system_stm32f2xx.o
.debug_macro 0x0000e490 0x1c3 ..\obj\main.o
.debug_macro 0x0000e653 0x1c3 ..\obj\timer.o
.debug_macro 0x00000a25 0xb7 ..\obj\boot.o
.debug_macro 0x00000adc 0x4c ..\obj\boot.o
.debug_macro 0x00000b28 0x3a ..\obj\boot.o
.debug_macro 0x00000b62 0x16 ..\obj\boot.o
.debug_macro 0x00000b78 0x44 ..\obj\boot.o
.debug_macro 0x00000bbc 0x209 ..\obj\boot.o
.debug_macro 0x00000dc5 0x18 ..\obj\boot.o
.debug_macro 0x00000ddd 0xb08 ..\obj\boot.o
.debug_macro 0x000018e5 0x7f1c ..\obj\boot.o
.debug_macro 0x00009801 0x44f ..\obj\boot.o
.debug_macro 0x00009c50 0x3cf ..\obj\boot.o
.debug_macro 0x0000a01f 0x111 ..\obj\boot.o
.debug_macro 0x0000a130 0x188 ..\obj\boot.o
.debug_macro 0x0000a2b8 0xb2 ..\obj\boot.o
.debug_macro 0x0000a36a 0x149 ..\obj\boot.o
.debug_macro 0x0000a4b3 0x477 ..\obj\boot.o
.debug_macro 0x0000a92a 0xae ..\obj\boot.o
.debug_macro 0x0000a9d8 0x242 ..\obj\boot.o
.debug_macro 0x0000ac1a 0x279 ..\obj\boot.o
.debug_macro 0x0000ae93 0xb5 ..\obj\boot.o
.debug_macro 0x0000af48 0x25e ..\obj\boot.o
.debug_macro 0x0000b1a6 0x2b3 ..\obj\boot.o
.debug_macro 0x0000b459 0x64 ..\obj\boot.o
.debug_macro 0x0000b4bd 0x88 ..\obj\boot.o
.debug_macro 0x0000b545 0x536 ..\obj\boot.o
.debug_macro 0x0000ba7b 0x40 ..\obj\boot.o
.debug_macro 0x0000babb 0x3f3 ..\obj\boot.o
.debug_macro 0x0000beae 0x342 ..\obj\boot.o
.debug_macro 0x0000c1f0 0x357 ..\obj\boot.o
.debug_macro 0x0000c547 0xe1 ..\obj\boot.o
.debug_macro 0x0000c628 0x73b ..\obj\boot.o
.debug_macro 0x0000cd63 0x221 ..\obj\boot.o
.debug_macro 0x0000cf84 0x34 ..\obj\boot.o
.debug_macro 0x0000cfb8 0x82 ..\obj\boot.o
.debug_macro 0x0000d03a 0x35 ..\obj\boot.o
.debug_macro 0x0000d06f 0x1c3 ..\obj\irq.o
.debug_macro 0x0000d232 0x1c9 ..\obj\led.o
.debug_macro 0x0000d3fb 0x1e8 ..\obj\lib\spl\src\stm32f2xx_can.o
.debug_macro 0x0000d5e3 0x192 ..\obj\lib\spl\src\stm32f2xx_gpio.o
.debug_macro 0x0000d775 0x258 ..\obj\lib\spl\src\stm32f2xx_gpio.o
.debug_macro 0x0000d9cd 0x23b ..\obj\lib\spl\src\stm32f2xx_rcc.o
.debug_macro 0x0000dc08 0x530 ..\obj\lib\spl\src\stm32f2xx_rcc.o
.debug_macro 0x0000e138 0x1aa ..\obj\lib\spl\src\stm32f2xx_usart.o
.debug_macro 0x0000e2e2 0x21b ..\obj\lib\spl\src\stm32f2xx_usart.o
.debug_macro 0x0000e4fd 0x1ab ..\obj\lib\system_stm32f2xx.o
.debug_macro 0x0000e6a8 0x1c3 ..\obj\main.o
.debug_macro 0x0000e86b 0x1c3 ..\obj\timer.o
.debug_line 0x00000000 0x328b
.debug_line 0x00000000 0x54d ..\obj\boot.o
.debug_line 0x0000054d 0x4d7 ..\obj\irq.o
.debug_line 0x00000a24 0x4b3 ..\obj\led.o
.debug_line 0x00000ed7 0x58f ..\obj\lib\spl\src\stm32f2xx_gpio.o
.debug_line 0x00001466 0x7eb ..\obj\lib\spl\src\stm32f2xx_rcc.o
.debug_line 0x00001c51 0x6de ..\obj\lib\spl\src\stm32f2xx_usart.o
.debug_line 0x0000232f 0x4bd ..\obj\lib\system_stm32f2xx.o
.debug_line 0x000027ec 0x4b6 ..\obj\main.o
.debug_line 0x00002ca2 0xd1 ..\obj\startup_stm32f2xx.o
.debug_line 0x00002d73 0x518 ..\obj\timer.o
.debug_line 0x00000000 0x3ad0
.debug_line 0x00000000 0x5d5 ..\obj\boot.o
.debug_line 0x000005d5 0x4d7 ..\obj\irq.o
.debug_line 0x00000aac 0x4b3 ..\obj\led.o
.debug_line 0x00000f5f 0x7bd ..\obj\lib\spl\src\stm32f2xx_can.o
.debug_line 0x0000171c 0x58f ..\obj\lib\spl\src\stm32f2xx_gpio.o
.debug_line 0x00001cab 0x7eb ..\obj\lib\spl\src\stm32f2xx_rcc.o
.debug_line 0x00002496 0x6de ..\obj\lib\spl\src\stm32f2xx_usart.o
.debug_line 0x00002b74 0x4bd ..\obj\lib\system_stm32f2xx.o
.debug_line 0x00003031 0x4b6 ..\obj\main.o
.debug_line 0x000034e7 0xd1 ..\obj\startup_stm32f2xx.o
.debug_line 0x000035b8 0x518 ..\obj\timer.o
.debug_str 0x00000000 0x5600c
.debug_str 0x00000000 0x54767 ..\obj\boot.o
0x5490a (size before relaxing)
.debug_str 0x00054767 0x70 ..\obj\irq.o
0x54594 (size before relaxing)
.debug_str 0x000547d7 0x78 ..\obj\led.o
0x54758 (size before relaxing)
.debug_str 0x0005484f 0x173 ..\obj\lib\spl\src\stm32f2xx_gpio.o
.debug_str 0x00000000 0x56866
.debug_str 0x00000000 0x54b0f ..\obj\boot.o
0x54cbc (size before relaxing)
.debug_str 0x00054b0f 0x70 ..\obj\irq.o
0x54662 (size before relaxing)
.debug_str 0x00054b7f 0x65 ..\obj\led.o
0x54826 (size before relaxing)
.debug_str 0x00054be4 0x4e8 ..\obj\lib\spl\src\stm32f2xx_can.o
0x54a62 (size before relaxing)
.debug_str 0x000550cc 0x169 ..\obj\lib\spl\src\stm32f2xx_gpio.o
0x545db (size before relaxing)
.debug_str 0x000549c2 0xaff ..\obj\lib\spl\src\stm32f2xx_rcc.o
.debug_str 0x00055235 0xae6 ..\obj\lib\spl\src\stm32f2xx_rcc.o
0x54e5c (size before relaxing)
.debug_str 0x000554c1 0x49a ..\obj\lib\spl\src\stm32f2xx_usart.o
.debug_str 0x00055d1b 0x49a ..\obj\lib\spl\src\stm32f2xx_usart.o
0x548eb (size before relaxing)
.debug_str 0x0005595b 0xc4 ..\obj\lib\system_stm32f2xx.o
.debug_str 0x000561b5 0xc4 ..\obj\lib\system_stm32f2xx.o
0x544b8 (size before relaxing)
.debug_str 0x00055a1f 0xf ..\obj\main.o
0x54538 (size before relaxing)
.debug_str 0x00055a2e 0x5de ..\obj\timer.o
0x54bc3 (size before relaxing)
.debug_str 0x00056279 0xf ..\obj\main.o
0x54606 (size before relaxing)
.debug_str 0x00056288 0x5de ..\obj\timer.o
0x54c91 (size before relaxing)
.debug_frame 0x00000000 0xd44
.debug_frame 0x00000000 0xd8 ..\obj\boot.o
.debug_frame 0x000000d8 0x58 ..\obj\irq.o
.debug_frame 0x00000130 0x50 ..\obj\led.o
.debug_frame 0x00000180 0x19c ..\obj\lib\spl\src\stm32f2xx_gpio.o
.debug_frame 0x0000031c 0x4d8 ..\obj\lib\spl\src\stm32f2xx_rcc.o
.debug_frame 0x000007f4 0x344 ..\obj\lib\spl\src\stm32f2xx_usart.o
.debug_frame 0x00000b38 0x64 ..\obj\lib\system_stm32f2xx.o
.debug_frame 0x00000b9c 0x48 ..\obj\main.o
.debug_frame 0x00000be4 0xcc ..\obj\timer.o
.debug_frame 0x00000cb0 0x28 c:/program files (x86)/embitz/0.42/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/4.8.4/../../../../arm-none-eabi/lib/armv7-m\libg_n.a(lib_a-exit.o)
.debug_frame 0x00000cd8 0x2c c:/program files (x86)/embitz/0.42/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/4.8.4/../../../../arm-none-eabi/lib/armv7-m\libg_n.a(lib_a-init.o)
.debug_frame 0x00000d04 0x20 c:/program files (x86)/embitz/0.42/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/4.8.4/../../../../arm-none-eabi/lib/armv7-m\libg_n.a(lib_a-memset.o)
.debug_frame 0x00000d24 0x20 c:/program files (x86)/embitz/0.42/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/4.8.4/../../../../arm-none-eabi/lib/armv7-m\libnosys_s.a(_exit.o)
.debug_frame 0x00000000 0x1074
.debug_frame 0x00000000 0x134 ..\obj\boot.o
.debug_frame 0x00000134 0x58 ..\obj\irq.o
.debug_frame 0x0000018c 0x50 ..\obj\led.o
.debug_frame 0x000001dc 0x2d4 ..\obj\lib\spl\src\stm32f2xx_can.o
.debug_frame 0x000004b0 0x19c ..\obj\lib\spl\src\stm32f2xx_gpio.o
.debug_frame 0x0000064c 0x4d8 ..\obj\lib\spl\src\stm32f2xx_rcc.o
.debug_frame 0x00000b24 0x344 ..\obj\lib\spl\src\stm32f2xx_usart.o
.debug_frame 0x00000e68 0x64 ..\obj\lib\system_stm32f2xx.o
.debug_frame 0x00000ecc 0x48 ..\obj\main.o
.debug_frame 0x00000f14 0xcc ..\obj\timer.o
.debug_frame 0x00000fe0 0x28 c:/program files (x86)/embitz/0.42/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/4.8.4/../../../../arm-none-eabi/lib/armv7-m\libg_n.a(lib_a-exit.o)
.debug_frame 0x00001008 0x2c c:/program files (x86)/embitz/0.42/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/4.8.4/../../../../arm-none-eabi/lib/armv7-m\libg_n.a(lib_a-init.o)
.debug_frame 0x00001034 0x20 c:/program files (x86)/embitz/0.42/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/4.8.4/../../../../arm-none-eabi/lib/armv7-m\libg_n.a(lib_a-memset.o)
.debug_frame 0x00001054 0x20 c:/program files (x86)/embitz/0.42/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/4.8.4/../../../../arm-none-eabi/lib/armv7-m\libnosys_s.a(_exit.o)

View File

@ -1,243 +1,366 @@
S02100002E2E5C62696E5C64656D6F70726F675F73746D3332663230372E7372656342
S3150800800000000220AD8B0008FB8B0008FD8B0008E2
S31508008010FF8B0008018C0008038C00080000000094
S31508008020000000000000000000000000058C0008A9
S31508008030078C000800000000098C0008AD8D0008B8
S315080080400F8C0008118C0008138C0008158C00088A
S31508008050178C0008198C00081B8C00081D8C00085A
S315080080601F8C0008218C0008238C0008258C00082A
S31508008070278C0008298C00082B8C00082D8C0008FA
S315080080802F8C0008318C0008338C0008358C0008CA
S31508008090378C0008398C00083B8C00083D8C00089A
S315080080A03F8C0008418C0008438C0008458C00086A
S315080080B0478C0008498C00084B8C00084D8C00083A
S315080080C04F8C0008518C0008538C0008558C00080A
S315080080D0578C0008598C00085B8C00085D8C0008DA
S315080080E05F8C0008618C0008638C0008658C0008AA
S315080080F0678C0008698C00086B8C00086D8C00087A
S315080081006F8C0008718C0008738C0008758C000849
S31508008110778C0008798C00087B8C00087D8C000819
S315080081207F8C0008818C0008838C0008858C0008E9
S31508008130878C0008898C00088B8C00088D8C0008B9
S315080081408F8C0008918C0008938C0008958C000889
S31508008150978C0008998C00089B8C00089D8C000859
S315080081609F8C0008A18C0008A38C0008A58C000829
S31508008170A78C0008A98C0008AB8C0008AD8C0008F9
S31508008180AF8C0008EE11AA5510B5054C237833B903
S3150800800000000220419300088F930008919300080E
S3150800801093930008959300089793000800000000C2
S31508008020000000000000000000000000999300080E
S315080080309B930008000000009D93000841950008E6
S31508008040A3930008A5930008A7930008A99300081E
S31508008050AB930008AD930008AF930008B1930008EE
S31508008060B3930008B5930008B7930008B9930008BE
S31508008070BB930008BD930008BF930008C19300088E
S31508008080C3930008C5930008C7930008C99300085E
S31508008090CB930008CD930008CF930008D19300082E
S315080080A0D3930008D5930008D7930008D9930008FE
S315080080B0DB930008DD930008DF930008E1930008CE
S315080080C0E3930008E5930008E7930008E99300089E
S315080080D0EB930008ED930008EF930008F19300086E
S315080080E0F3930008F5930008F7930008F99300083E
S315080080F0FB930008FD930008FF930008019400080D
S3150800810003940008059400080794000809940008D9
S315080081100B9400080D9400080F94000811940008A9
S315080081201394000815940008179400081994000879
S315080081301B9400081D9400081F9400082194000849
S315080081402394000825940008279400082994000819
S315080081502B9400082D9400082F94000831940008E9
S3150800816033940008359400083794000839940008B9
S315080081703B9400083D9400083F9400084194000889
S3150800818043940008EE11AA5510B5054C237833B967
S31508008190044B13B10448AFF300800123237010BDCC
S315080081A07C00002000000000708E000808B5064B11
S315080081A07C000020000000002896000808B5064B51
S315080081B01BB106480649AFF300800648036813B1A9
S315080081C0054B03B1984708BD00000000708E0008F3
S315080081C0054B03B1984708BD000000002896000833
S315080081D0800000207C00002000000000154B002BCA
S315080081E008BF134B9D46A3F5803A00218B460F46E0
S315080081F01348144A121A00F021FE0F4B002B00D028
S315080081F01348144A121A01F0EBF90F4B002B00D062
S3150800820098470E4B002B00D0984700200021040009
S315080082100D000D48002802D00C48AFF3008000F08E
S31508008220E7FD2000290000F0ABFC00F0CDFD00BF03
S315080082100D000D48002802D00C48AFF3008001F08D
S31508008220B1F92000290001F075F801F097F900BFAF
S315080082300000080000000220000000000000000006
S315080082407C000020F0000020000000000000000074
S3150800825080B400AFBFF34F8F054A054BDB6803F4C4
S31508008260E061044B0B43D360BFF34F8FFEE700BFBB
S3150800827000ED00E00400FA0580B500AF00F00EF846
S3150800828080BD00BF80B500AF00F058F880BD00BFC4
S3150800829080B500AFFFF7DCFF80BD00BF80B586B0B4
S315080082A000AF4FF48020012100F0B4FA0820012124
S315080082B000F092FA1F480821072200F09DF91D4890
S315080082C00921072200F098F90023BB750123FB75E5
S315080082D002233B754FF480733B6102237B7507F1DC
S315080082E010031448194600F0DDF802233B754FF4D5
S315080082F000733B6107F110030E48194600F0D2F8E7
S315080083004FF461433B600023BB800023FB800023BE
S315080083103B810023BB810C237B813B4606481946DB
S3150800832000F096FA0448012100F04CFB1837BD46C8
S3150800833080BD00BF000C02400048004080B500AF79
S315080083401A4B1B78002B0CD1194800F035F8034658
S31508008350012B2AD1154B01221A70164B00221A70CE
S3150800836023E0144B1B785A1C114B1344184600F093
S3150800837023F80346012B18D10E4B1B780133DAB2CA
S315080083800C4B1A700A4B1A780A4B1B789A420CD176
S31508008390064B00221A70064B5B78FF2B05D1044B5F
S315080083A09B78002B01D1FFF773FF80BD9800002052
S315080083B09C000020E000002080B582B000AF786005
S315080083C00A48202100F02EFB0346012B08D1074856
S315080083D000F018FB0346DAB27B681A70012300E046
S315080083E0002318460837BD4680BD00BF0048004038
S315080083F080B400AF62B6BD465DF8047B704700BF27
S3150800840080B582B000AF2020012100F0E5F94FF4D5
S3150800841080733B600023BB710123FB7102237B71D0
S3150800842001233B713B460648194600F03BF80448D1
S315080084304FF4807100F0D2F80837BD4680BD00BF02
S315080084400014024080B582B000AF00F0A3FC78604B
S31508008450114B1B687A68D31AB3F5FA7F00D217E076
S315080084600E4B1B78002B08D10C4B01221A700C48B6
S315080084704FF4807100F0A4F807E0084B00221A7048
S3150800848007484FF4807100F0A9F8034B7A681A6020
S315080084900837BD4680BD00BFE4000020E800002084
S315080084A00014024080B487B000AF786039600023BA
S315080084B07B6100233B610023FB6000237B6176E040
S315080084C07B69012202FA03F33B613B681A683B6940
S315080084D01340FB60FA683B699A4265D17B681A6863
S315080084E07B695B00032101FA03F3DB431A407B68CF
S315080084F01A607B681A683B681B7919467B695B00BA
S3150800850001FA03F31A437B681A603B681B79012B4F
S3150800851003D03B681B79022B2ED17B689A687B694E
S315080085205B00032101FA03F3DB431A407B689A6078
S315080085307B689A683B685B7919467B695B0001FA38
S3150800854003F31A437B689A607B685A687B699BB217
S31508008550012101FA03F3DB431A407B685A607B6802
S315080085605A683B689B7919467B699BB201FA03F303
S315080085709BB21A437B685A607B68DA687B699BB250
S315080085805B00032101FA03F3DB431A407B68DA60D8
S315080085907B68DA683B68DB7919467B695B0001FA18
S315080085A003F31A437B68DA607B6901337B617B6975
S315080085B00F2B85D91C37BD465DF8047B704700BF75
S315080085C080B483B000AF78600B467B807B687A887E
S315080085D01A830C37BD465DF8047B704780B483B0B8
S315080085E000AF78600B467B807B687A885A830C37A5
S315080085F0BD465DF8047B704780B485B000AF7860EF
S3150800860013460A467A807B700023FB600023BB6012
S315080086107A787B8803F007039B0002FA03F3FB6072
S315080086207B88DB089BB21A467B88DB089BB2194617
S315080086307B68083153F821107B8803F007039B00F9
S315080086400F2000FA03F3DB4319407B68083243F82E
S3150800865022107B88DB089BB21A467B68083253F8DF
S315080086602220FB681343BB607B88DB089BB21A4653
S315080086707B680832B96843F822101437BD465DF89E
S31508008680047B704780B489B000AF78600023BB6173
S3150800869000237B610023FB6102233B610023FB600F
S315080086A00223BB60484B9B6803F00C03BB61BB69A4
S315080086B0042B07D0082B09D0002B3FD17B68434AEF
S315080086C01A603FE07B68424A1A603BE03E4B5B68B3
S315080086D003F480039B0DFB603B4B5B6803F03F0391
S315080086E0BB60FB68002B0DD0394ABB68B2FBF3F2BE
S315080086F0354B596847F6C0730B409B0903FB02F3D9
S31508008700FB610CE0314ABB68B2FBF3F22E4B5968A9
S3150800871047F6C0730B409B0903FB02F3FB612A4B28
S315080087205B6803F440331B0C01335B003B61FA6959
S315080087303B69B2FBF3F27B681A6003E07B68234A65
S315080087401A6000BF204B9B6803F0F003BB61BB694E
S315080087501B09BB611F4ABB6913441B78DBB27B61EB
S315080087607B681A687B69DA407B685A60164B9B6897
S3150800877003F4E053BB61BB699B0ABB61154ABB693D
S3150800878013441B78DBB27B617B685A687B69DA40E5
S315080087907B689A600C4B9B6803F46043BB61BB69BA
S315080087A05B0BBB610B4ABB6913441B78DBB27B616D
S315080087B07B685A687B69DA407B68DA602437BD468D
S315080087C05DF8047B704700BF003802400024F400BF
S315080087D040787D010000002080B483B000AF786047
S315080087E00B46FB70FB78002B06D0094B084A116B29
S315080087F07A680A431A6306E0054B054A116B7A68DC
S31508008800D2430A401A630C37BD465DF8047B7047AD
S315080088100038024080B483B000AF78600B46FB7026
S31508008820FB78002B06D0094B084A116C7A680A4374
S315080088301A6406E0054B054A116C7A68D2430A4069
S315080088401A640C37BD465DF8047B70470038024051
S3150800885080B58AB000AF7860396000237B62002358
S315080088603B620023FB610023BB617B681B8A9BB2CA
S315080088707B627B6A23F440537B623B68DB887A6AB7
S3150800888013437B627B6A9AB27B681A827B689B89F0
S315080088909BB27B627B6A23F4B05323F00C037B62A2
S315080088A03B689A883B681B8913439AB23B685B8985
S315080088B013439BB27A6A13437B627B6A9AB27B68DC
S315080088C09A817B689B8A9BB27B627B6A23F440739E
S315080088D07B623B689B897A6A13437B627B6A9AB29E
S315080088E07B689A8207F108031846FFF7CBFE7A6879
S315080088F0314B9A4203D07A68304B9A4202D17B694F
S315080089003B6201E03B693B627B689B899BB29BB2F9
S315080089101BB2002B0CDA3A6A13469B0013449A00E2
S315080089201A443B681B685B00B2FBF3F3FB610BE080
S315080089303A6A13469B0013449A001A443B681B681C
S315080089409B00B2FBF3F3FB61FA691D4BA3FB021311
S315080089505B091B017B627B6A1B09642202FB03F32A
S31508008960FA69D31ABB617B689B899BB29BB21BB21F
S31508008970002B0DDABB69DB0003F13202104BA3FBB7
S3150800898002135B0903F007037A6A13437B620CE060
S31508008990BB691B0103F13202094BA3FB02135B09F6
S315080089A003F00F037A6A13437B627B6A9AB27B6889
S315080089B01A812837BD4680BD0010014000140140C9
S315080089C01F85EB5180B483B000AF78600B46FB700F
S315080089D0FB78002B08D07B689B899BB243F4005335
S315080089E09AB27B689A8107E07B689B899BB223F4DD
S315080089F000539AB27B689A810C37BD465DF8047BB2
S31508008A00704700BF80B483B000AF78607B689B88EE
S31508008A109BB2C3F308039BB218460C37BD465DF8F4
S31508008A20047B704780B485B000AF78600B467B80C6
S31508008A300023FB737B681B889AB27B8813409BB222
S31508008A40002B02D00123FB7301E00023FB73FB7BA1
S31508008A5018461437BD465DF8047B704780B500AFED
S31508008A600F4B0F4A126842F001021A600C4B0022A3
S31508008A709A600B4A0A4B1B6823F0847323F48033ED
S31508008A801360074B074A5A60054B054A126822F4D9
S31508008A9080221A60024B0022DA6000F005F880BDD9
S31508008AA0003802401030002480B483B000AF0023A1
S31508008AB07B6000233B602F4B2E4A126842F48032BB
S31508008AC01A602C4B1B6803F400333B607B68013348
S31508008AD07B603B68002B03D17B68B3F5C06FF0D190
S31508008AE0244B1B6803F40033002B02D001233B60A0
S31508008AF001E000233B603B68012B36D11D4B1D4A24
S31508008B0092689A601B4B1B4A926842F400429A602C
S31508008B10184B184A926842F4A0529A60154B164AA6
S31508008B205A60144B134A126842F080721A6000BFEA
S31508008B30104B1B6803F00073002BF9D00F4B40F263
S31508008B4003721A600B4B0B4A926822F003029A6072
S31508008B50084B084A926842F002029A6000BF054B29
S31508008B609B6803F00C03082BF9D10C37BD465DF85A
S31508008B70047B704700380240193C4005003C02401F
S31508008B8080B500AF00F008F8FFF776FBFFF75AFC50
S31508008B90FFF778FBFAE700BF80B500AFFFF730FCB8
S31508008BA000F0D6F8FFF724FC80BD00BF07498D46C4
S31508008BB00749084A084B9A42BEBF51F8040B42F8C7
S31508008BC0040BF8E7054880470548004700000220DF
S31508008BD07C8E0008000000207C0000205D8A0008CA
S31508008BE0DD8100083249334A002301E041F8043B9D
S31508008BF09142FBD3FFF7C4FFFEE7FEE7FEE7FEE779
S31508008C00FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE72E
S31508008C10FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE71E
S31508008C20FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE70E
S31508008C30FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE7FE
S31508008C40FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE7EE
S31508008C50FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE7DE
S31508008C60FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE7CE
S31508008C70FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE7BE
S31508008C80FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE7AE
S31508008C90FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE79E
S31508008CA0FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE78E
S31508008CB07C000020F000002080B483B000AF03469B
S31508008CC03960FB7197F90730002B0BDA0D49FB79F0
S31508008CD003F00F03043B3A68D2B21201D2B20B4436
S31508008CE01A7609E0084997F907303A68D2B21201AC
S31508008CF0D2B20B4483F800230C37BD465DF8047BDB
S31508008D00704700BF00ED00E000E100E080B582B0EA
S31508008D1000AF78607B68B3F1807F01D3012311E04F
S31508008D200A4B7A6822F07F42013A5A604FF0FF30C8
S31508008D300F21FFF7C1FF054B00229A60034B07225C
S31508008D401A60002318460837BD4680BD10E000E0CB
S31508008D5080B500AF064B1A68064BA3FB02139B09A6
S31508008D601846FFF7D3FF002000F006F880BD00BFC5
S31508008D7010000020D34D621080B483B000AF786035
S31508008D80034B7A681A600C37BD465DF8047B70475A
S31508008D90EC00002080B400AF034B1B681846BD46A4
S31508008DA05DF8047B704700BFEC00002080B400AF7C
S31508008DB0044B1B685A1C034B1A60BD465DF8047BBE
S31508008DC0704700BFEC00002008B5074B044613B1F6
S31508008DD00021AFF30080054B1868836A03B19847F2
S31508008DE0204600F033F800BF000000006C8E000833
S31508008DF070B50E4B0E4D0024ED1AAD101E46AC4252
S31508008E0004D056F8242090470134F8E700F020F8FB
S31508008E10084D094B0024ED1AAD101E46AC4204D08D
S31508008E2056F8242090470134F8E770BD74000020F6
S31508008E3074000020780000207400002002440346D5
S31508008E40934202D003F8011BFAE77047FEE70000D9
S31508008E50F8B500BFF8BC08BC9E467047F8B500BF19
S31508008E60F8BC08BC9E46704743000000140000206A
S30908008E7000000000F0
S30D08008E7468F3FF7F010000000E
S31508008E7C00000000010203040102030406070809A6
S31508008E8C000E27070000000000000000000000008C
S31508008E9C00000000000000000000000000000000B8
S31508008EAC00000000688E00080000000000000000AA
S31508008EBC0000000000000000000000000000000098
S31508008ECC0000000000000000000000000000000088
S31508008EDC0000000000000000000000000000000078
S31108008EEC00000000AD8100088981000824
S3150800827000ED00E00400FA0580B500AF00F012F842
S3150800828000F01AF980BD00BF80B500AF00F05AF8BB
S3150800829000F08AF980BD00BF80B500AFFFF7D8FFB0
S315080082A080BD00BF80B586B000AF4FF480200121A5
S315080082B000F05CFE0820012100F03AFE1F48082164
S315080082C0072200F045FD1D480921072200F040FD60
S315080082D00023BB750123FB7502233B754FF480739E
S315080082E03B6102237B7507F110031448194600F019
S315080082F085FC02233B754FF400733B6107F11003BD
S315080083000E48194600F07AFC4FF461433B6000239F
S31508008310BB800023FB8000233B810023BB810C2309
S315080083207B813B460648194600F05CFE044801215D
S3150800833000F012FF1837BD4680BD00BF000C024092
S315080083400048004080B500AF1A4B1B78002B0CD1B3
S31508008350194800F035F80346012B2AD1154B01229E
S315080083601A70164B00221A7023E0144B1B785A1CFD
S31508008370114B1344184600F023F80346012B18D175
S315080083800E4B1B780133DAB20C4B1A700A4B1A786B
S315080083900A4B1B789A420CD1064B00221A70064BE0
S315080083A05B78FF2B05D1044B9B78002B01D1FFF797
S315080083B073FF80BD980000209C000020E00000208C
S315080083C080B582B000AF78600A48202100F0F4FE3C
S315080083D00346012B08D1074800F0DEFE0346DAB251
S315080083E07B681A70012300E0002318460837BD464B
S315080083F080BD00BF0048004080B487B000AFB960B8
S315080084007A603B600346FB810023FB7548E0FA89E6
S31508008410F97D284B13F811301946FB7D25485B007A
S3150800842003445B780B44013303FB02F247F23053F3
S3150800843093FBF2F102FB01F29B1A002B2DD1FA896C
S31508008440F97D1C4B13F811301946FB7D19485B0062
S3150800845003445B780B44013303FB02F347F23052C3
S3150800846092FBF3F39AB2BB681A80BB681B88002B91
S3150800847013D0BB681B88B3F5806F0ED8FA7D0D4BF9
S3150800848013F812207B681A70FB7D0A4A5B001344B6
S315080084905A783B681A70012306E0FB7D0133FB75A9
S315080084A0FB7D112BB3D9002318461C37BD465DF852
S315080084B0047B7047FC95000880B58AB000AF02209F
S315080084C0012100F035FD36480821092200F040FC5C
S315080084D033480921092200F03BFC4FF440733B6204
S315080084E0022387F82430022387F82530002387F8EB
S315080084F02630012387F8273007F120032848194634
S3150800850000F07CFB4FF00070012100F02FFD25489C
S3150800851000F0C6F807F11403184600F067FAB91C0C
S315080085207A1C3B464FF4FA70FFF766FF0023BB76CA
S315080085300023FB7600233B7700237B770023BB775A
S315080085400023FB770023BB750023FB757B78013B73
S31508008550DBB23B763B78013BDBB27B767B88BB8222
S3150800856007F114030F48194600F0BCF80023BB7343
S315080085700023FB7301233B740023BB800023FB808D
S3150800858000233B8100237B810023BB8101237B746D
S315080085903B1D184600F078F92837BD4680BD00BF58
S315080085A0000402400064004080B586B000AF0E4863
S315080085B0002100F0FDFA0346002B12D03B1D0A48A5
S315080085C000211A4600F03CFA7A6840F267639A423C
S315080085D007D1FB7BFF2B04D13B7C002B01D1FFF796
S315080085E05BFE1837BD4680BD0064004080B400AF0E
S315080085F062B6BD465DF8047B704700BF80B582B0A1
S3150800860000AF2020012100F093FC4FF480733B60FB
S315080086100023BB710123FB7102237B7101233B718C
S315080086203B460648194600F0E9FA04484FF48071BB
S3150800863000F080FB0837BD4680BD00BF001402402D
S3150800864080B582B000AF00F06FFF7860114B1B68F1
S315080086507A68D31AB3F5FA7F00D217E00E4B1B7867
S31508008660002B08D10C4B01221A700C484FF480716C
S3150800867000F052FB07E0084B00221A7007484FF437
S31508008680807100F057FB034B7A681A600837BD46BD
S3150800869080BD00BFE4000020E8000020001402406E
S315080086A080B582B000AF78607A680D4B9A420AD1DD
S315080086B04FF00070012100F077FC4FF000700021A8
S315080086C000F072FC09E04FF08060012100F06CFCBC
S315080086D04FF08060002100F067FC0837BD4680BD7A
S315080086E00064004080B485B000AF7860396000232C
S315080086F0FB730023BB607B681B6823F002027B6860
S315080087001A607B681B6843F001027B681A6002E006
S31508008710BB680133BB607B685B6803F00103002B11
S3150800872004D1BA684FF6FF739A42F1D17B685B6849
S3150800873003F00103002B02D10023FB739CE03B6886
S315080087409B79012B06D17B681B6843F080027B6806
S315080087501A6005E07B681B6823F080027B681A6054
S315080087603B68DB79012B06D17B681B6843F0400226
S315080087707B681A6005E07B681B6823F040027B680B
S315080087801A603B681B7A012B06D17B681B6843F08D
S3150800879020027B681A6005E07B681B6823F02002CC
S315080087A07B681A603B685B7A012B06D17B681B687D
S315080087B043F010027B681A6005E07B681B6823F0AB
S315080087C010027B681A603B689B7A012B06D17B688E
S315080087D01B6843F008027B681A6005E07B681B6823
S315080087E023F008027B681A603B68DB7A012B06D106
S315080087F07B681B6843F004027B681A6005E07B68A7
S315080088001B6823F004027B681A603B689B789A070A
S315080088103B68DB781B061A433B681B791B041A4323
S315080088203B685B791B051A433B681B88013B1A4367
S315080088307B68DA617B681B6823F001027B681A6033
S315080088400023BB6002E0BB680133BB607B685B68E2
S3150800885003F00103002B04D0BA684FF6FF739A425F
S31508008860F1D17B685B6803F00103002B02D000237B
S31508008870FB7301E00123FB73FB7B18461437BD46E7
S315080088805DF8047B704700BF80B485B000AF7860A0
S315080088900023FB607B689B7A012202FA03F3FB60E4
S315080088A0514B514AD2F8002242F00102C3F8002285
S315080088B04D4B4D4AD2F81C12FA68D2430A40C3F807
S315080088C01C227B681B7B002B21D1474B464AD2F8DA
S315080088D00C12FA68D2430A40C3F80C22424B7A6853
S315080088E0927A7968C98808047968498801434832C0
S315080088F043F832103C497B689B7A7A689288100460
S315080089007A68128802434833DB000B445A607B6856
S315080089101B7B012B20D1344B334AD2F80C12FA6850
S315080089200A43C3F80C22304B7A68927A7968098828
S315080089300804796849880143483243F832102A49BD
S315080089407B689B7A7A68928810047A68D288024390
S315080089504833DB000B445A607B68DB7A002B09D16D
S31508008960214B214AD2F80412FA68D2430A40C3F8C6
S31508008970042207E01C4B1C4AD2F80412FA680A4380
S31508008980C3F804227B681B89002B08D1164B164AAC
S31508008990D2F81412FA68D2430A40C3F814227B6844
S315080089A01B89012B07D1104B0F4AD2F81412FA680B
S315080089B00A43C3F814227B685B7B012B07D10A4B59
S315080089C0094AD2F81C12FA680A43C3F81C22064B55
S315080089D0054AD2F8002222F00102C3F80022143711
S315080089E0BD465DF8047B70470064004080B483B0E0
S315080089F000AF78607B6800229A717B680022DA7182
S31508008A007B6800221A727B6800225A727B680022F1
S31508008A109A727B680022DA727B6800229A707B68F9
S31508008A200022DA707B6803221A717B6802225A7167
S31508008A307B6801221A800C37BD465DF8047B7047B7
S31508008A4080B485B000AFF8600B467A60FB72FB7A9B
S31508008A50FA681B331B0113441B68DBB203F00403DB
S31508008A60DAB27B681A727B681B7A002B09D1FB7A0B
S31508008A70FA681B331B0113441B685A0D7B681A607E
S31508008A8008E0FB7AFA681B331B0113441B68DA08F3
S31508008A907B685A60FB7AFA681B331B0113441B6810
S31508008AA0DBB203F00203DAB27B685A72FB7AFA6821
S31508008AB01B331B0113445B68DBB203F00F03DAB206
S31508008AC07B689A72FB7AFA681B331B0113445B684E
S31508008AD01B0ADAB27B68DA74FB7AFA681B0113445C
S31508008AE003F5DC731B68DAB27B68DA72FB7AFA681C
S31508008AF01B01134403F5DC731B681B0ADAB27B6897
S31508008B001A73FB7AFA681B01134403F5DC731B68B6
S31508008B101B0CDAB27B685A73FB7AFA681B0113449A
S31508008B2003F5DC731B681B0EDAB27B689A73FB7A53
S31508008B30FA681B01134403F5DC735B68DAB27B68D9
S31508008B40DA73FB7AFA681B01134403F5DC735B6876
S31508008B501B0ADAB27B681A74FB7AFA681B0113449B
S31508008B6003F5DC735B681B0CDAB27B685A74FB7A14
S31508008B70FA681B01134403F5DC735B681B0EDAB253
S31508008B807B689A74FB7A002B06D1FB68DB6843F096
S31508008B902002FB68DA6005E0FB681B6943F02002E7
S31508008BA0FB681A611437BD465DF8047B704700BF41
S31508008BB080B485B000AF78600B46FB700023FB736A
S31508008BC0FB78002B06D17B68DB68DBB203F0030376
S31508008BD0FB730BE0FB78012B06D17B681B69DBB2C4
S31508008BE003F00303FB7301E00023FB73FB7B1846CA
S31508008BF01437BD465DF8047B704700BF80B487B064
S31508008C0000AF7860396000237B6100233B61002355
S31508008C10FB6000237B6176E07B69012202FA03F39D
S31508008C203B613B681A683B691340FB60FA683B691D
S31508008C309A4265D17B681A687B695B00032101FA51
S31508008C4003F3DB431A407B681A607B681A683B6843
S31508008C501B7919467B695B0001FA03F31A437B68A3
S31508008C601A603B681B79012B03D03B681B79022BE2
S31508008C702ED17B689A687B695B00032101FA03F3AE
S31508008C80DB431A407B689A607B689A683B685B7925
S31508008C9019467B695B0001FA03F31A437B689A60FD
S31508008CA07B685A687B699BB2012101FA03F3DB43AF
S31508008CB01A407B685A607B685A683B689B791946F4
S31508008CC07B699BB201FA03F39BB21A437B685A602D
S31508008CD07B68DA687B699BB25B00032101FA03F3C0
S31508008CE0DB431A407B68DA607B68DA683B68DB79C5
S31508008CF019467B695B0001FA03F31A437B68DA605D
S31508008D007B6901337B617B690F2B85D91C37BD468F
S31508008D105DF8047B704700BF80B483B000AF78600D
S31508008D200B467B807B687A881A830C37BD465DF8CC
S31508008D30047B704780B483B000AF78600B467B80B5
S31508008D407B687A885A830C37BD465DF8047B704782
S31508008D5080B485B000AF786013460A467A807B7087
S31508008D600023FB600023BB607A787B8803F0070347
S31508008D709B0002FA03F3FB607B88DB089BB21A466A
S31508008D807B88DB089BB219467B68083153F82110AB
S31508008D907B8803F007039B000F2000FA03F3DB43ED
S31508008DA019407B68083243F822107B88DB089BB29F
S31508008DB01A467B68083253F82220FB681343BB60C7
S31508008DC07B88DB089BB21A467B680832B96843F889
S31508008DD022101437BD465DF8047B704780B489B00D
S31508008DE000AF78600023BB6100237B610023FB6131
S31508008DF002233B610023FB600223BB60484B9B6850
S31508008E0003F00C03BB61BB69042B07D0082B09D000
S31508008E10002B3FD17B68434A1A603FE07B68424A91
S31508008E201A603BE03E4B5B6803F480039B0DFB60D6
S31508008E303B4B5B6803F03F03BB60FB68002B0DD020
S31508008E40394ABB68B2FBF3F2354B596847F6C0732B
S31508008E500B409B0903FB02F3FB610CE0314ABB683C
S31508008E60B2FBF3F22E4B596847F6C0730B409B09C9
S31508008E7003FB02F3FB612A4B5B6803F440331B0CCC
S31508008E8001335B003B61FA693B69B2FBF3F27B682D
S31508008E901A6003E07B68234A1A6000BF204B9B6870
S31508008EA003F0F003BB61BB691B09BB611F4ABB69C1
S31508008EB013441B78DBB27B617B681A687B69DA40EE
S31508008EC07B685A60164B9B6803F4E053BB61BB6929
S31508008ED09B0ABB61154ABB6913441B78DBB27B61ED
S31508008EE07B685A687B69DA407B689A600C4B9B689A
S31508008EF003F46043BB61BB695B0BBB610B4ABB698F
S31508008F0013441B78DBB27B617B685A687B69DA405D
S31508008F107B68DA602437BD465DF8047B704700BF7E
S31508008F20003802400024F40040787D01000000204B
S31508008F3080B483B000AF78600B46FB70FB78002BDB
S31508008F4006D0094B084A116B7A680A431A6306E089
S31508008F50054B054A116B7A68D2430A401A630C37E7
S31508008F60BD465DF8047B70470038024080B483B084
S31508008F7000AF78600B46FB70FB78002B06D0094BD8
S31508008F80084A116C7A680A431A6406E0054B054AD2
S31508008F90116C7A68D2430A401A640C37BD465DF8EC
S31508008FA0047B70470038024080B483B000AF786015
S31508008FB00B46FB70FB78002B06D0094B084A116A52
S31508008FC07A680A431A6206E0054B054A116A7A6806
S31508008FD0D2430A401A620C37BD465DF8047B7047D7
S31508008FE00038024080B58AB000AF78603960002347
S31508008FF07B6200233B620023FB610023BB617B6825
S315080090001B8A9BB27B627B6A23F440537B623B6874
S31508009010DB887A6A13437B627B6A9AB27B681A8218
S315080090207B689B899BB27B627B6A23F4B05323F0EF
S315080090300C037B623B689A883B681B8913439AB288
S315080090403B685B8913439BB27A6A13437B627B6AEC
S315080090509AB27B689A817B689B8A9BB27B627B6AA1
S3150800906023F440737B623B689B897A6A13437B626D
S315080090707B6A9AB27B689A8207F108031846FFF75B
S31508009080ADFE7A68314B9A4203D07A68304B9A42E1
S3150800909002D17B693B6201E03B693B627B689B8945
S315080090A09BB29BB21BB2002B0CDA3A6A13469B00A2
S315080090B013449A001A443B681B685B00B2FBF3F33F
S315080090C0FB610BE03A6A13469B0013449A001A4464
S315080090D03B681B689B00B2FBF3F3FB61FA691D4B07
S315080090E0A3FB02135B091B017B627B6A1B096422D3
S315080090F002FB03F3FA69D31ABB617B689B899BB2AF
S315080091009BB21BB2002B0DDABB69DB0003F13202FE
S31508009110104BA3FB02135B0903F007037A6A134398
S315080091207B620CE0BB691B0103F13202094BA3FB0E
S3150800913002135B0903F00F037A6A13437B627B6AA7
S315080091409AB27B681A812837BD4680BD0010014057
S31508009150001401401F85EB5180B483B000AF7860DE
S315080091600B46FB70FB78002B08D07B689B899BB26B
S3150800917043F400539AB27B689A8107E07B689B891F
S315080091809BB223F400539AB27B689A810C37BD468A
S315080091905DF8047B704700BF80B483B000AF786089
S315080091A07B689B889BB2C3F308039BB218460C37AF
S315080091B0BD465DF8047B704780B485B000AF786023
S315080091C00B467B800023FB737B681B889AB27B88DF
S315080091D013409BB2002B02D00123FB7301E000234E
S315080091E0FB73FB7B18461437BD465DF8047B704756
S315080091F080B500AF0F4B0F4A126842F001021A60A1
S315080092000C4B00229A600B4A0A4B1B6823F08473A6
S3150800921023F480331360074B074A5A60054B054A07
S31508009220126822F480221A60024B0022DA6000F0EB
S3150800923005F880BD003802401030002480B483B0A1
S3150800924000AF00237B6000233B602F4B2E4A126839
S3150800925042F480321A602C4B1B6803F400333B60DF
S315080092607B6801337B603B68002B03D17B68B3F5D1
S31508009270C06FF0D1244B1B6803F40033002B02D0D7
S3150800928001233B6001E000233B603B68012B36D19C
S315080092901D4B1D4A92689A601B4B1B4A926842F402
S315080092A000429A60184B184A926842F4A0529A6093
S315080092B0154B164A5A60144B134A126842F08072CC
S315080092C01A6000BF104B1B6803F00073002BF9D01F
S315080092D00F4B40F203721A600B4B0B4A926822F04E
S315080092E003029A60084B084A926842F002029A60A2
S315080092F000BF054B9B6803F00C03082BF9D10C370C
S31508009300BD465DF8047B704700380240193C4005AD
S31508009310003C024080B500AF00F008F8FEF7ACFF4D
S31508009320FFF78EF9FEF7B0FFFAE700BF80B500AF8A
S31508009330FFF764F900F0D6F8FFF758F980BD00BFCB
S3150800934007498D460749084A084B9A42BEBF51F855
S31508009350040B42F8040BF8E7054880470548004720
S315080093600000022034960008000000207C0000203F
S31508009370F1910008DD8100083249334A002301E0F3
S3150800938041F8043B9142FBD3FFF7C4FFFEE7FEE733
S31508009390FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE797
S315080093A0FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE787
S315080093B0FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE777
S315080093C0FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE767
S315080093D0FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE757
S315080093E0FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE747
S315080093F0FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE737
S31508009400FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE726
S31508009410FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE716
S31508009420FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE706
S31508009430FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE7F6
S31508009440FEE7FEE77C000020F000002080B483B031
S3150800945000AF03463960FB7197F90730002B0BDA2A
S315080094600D49FB7903F00F03043B3A68D2B21201A7
S31508009470D2B20B441A7609E0084997F907303A68D8
S31508009480D2B21201D2B20B4483F800230C37BD4680
S315080094905DF8047B704700BF00ED00E000E100E0E6
S315080094A080B582B000AF78607B68B3F1807F01D366
S315080094B0012311E00A4B7A6822F07F42013A5A608A
S315080094C04FF0FF300F21FFF7C1FF054B00229A60CE
S315080094D0034B07221A60002318460837BD4680BD8D
S315080094E010E000E080B500AF064B1A68064BA3FBF8
S315080094F002139B091846FFF7D3FF002000F006F871
S3150800950080BD00BF10000020D34D621080B483B028
S3150800951000AF7860034B7A681A600C37BD465DF871
S31508009520047B7047EC00002080B400AF034B1B6837
S315080095301846BD465DF8047B704700BFEC00002066
S3150800954080B400AF044B1B685A1C034B1A60BD4617
S315080095505DF8047B704700BFEC00002008B5074B98
S31508009560044613B10021AFF30080054B1868836ADF
S3150800957003B19847204600F033F800BF000000000A
S315080095802496000870B50E4B0E4D0024ED1AAD104A
S315080095901E46AC4204D056F8242090470134F8E71A
S315080095A000F020F8084D094B0024ED1AAD101E46B0
S315080095B0AC4204D056F8242090470134F8E770BD31
S315080095C07400002074000020780000207400002039
S315080095D002440346934202D003F8011BFAE7704798
S315080095E0FEE70000F8B500BFF8BC08BC9E46704709
S315080095F0F8B500BFF8BC08BC9E46704705020602CF
S31508009600060307030803090309040A040B040C04E8
S315080096100C050D050E050F050F0610061007100898
S31108009620430000001400002000000000B9
S30D0800962CB0EBFF7F010000000E
S3150800963400000000010203040102030406070809E6
S31508009644000E2707000000000000000000000000CC
S3150800965400000000000000000000000000000000F8
S31508009664000000002096000800000000000000002A
S3150800967400000000000000000000000000000000D8
S3150800968400000000000000000000000000000000C8
S3150800969400000000000000000000000000000000B8
S311080096A400000000AD8100088981000864
S7050800800072

View File

@ -39,6 +39,10 @@
static void BootComUartInit(void);
static void BootComUartCheckActivationRequest(void);
#endif
#if (BOOT_COM_CAN_ENABLE > 0)
static void BootComCanInit(void);
static void BootComCanCheckActivationRequest(void);
#endif
/************************************************************************************//**
** \brief Initializes the communication interface.
@ -50,6 +54,9 @@ void BootComInit(void)
#if (BOOT_COM_UART_ENABLE > 0)
BootComUartInit();
#endif
#if (BOOT_COM_CAN_ENABLE > 0)
BootComCanInit();
#endif
} /*** end of BootComInit ***/
@ -64,6 +71,9 @@ void BootComCheckActivationRequest(void)
#if (BOOT_COM_UART_ENABLE > 0)
BootComUartCheckActivationRequest();
#endif
#if (BOOT_COM_CAN_ENABLE > 0)
BootComCanCheckActivationRequest();
#endif
} /*** end of BootComCheckActivationRequest ***/
@ -205,6 +215,182 @@ static unsigned char UartReceiveByte(unsigned char *data)
#endif /* BOOT_COM_UART_ENABLE > 0 */
#if (BOOT_COM_CAN_ENABLE > 0)
/****************************************************************************************
* C O N T R O L L E R A R E A N E T W O R K I N T E R F A C E
****************************************************************************************/
/****************************************************************************************
* Type definitions
****************************************************************************************/
/** \brief Structure type for grouping CAN bus timing related information. */
typedef struct t_can_bus_timing
{
unsigned char tseg1; /**< CAN time segment 1 */
unsigned char tseg2; /**< CAN time segment 2 */
} tCanBusTiming;
/****************************************************************************************
* Local constant declarations
****************************************************************************************/
/** \brief CAN bittiming table for dynamically calculating the bittiming settings.
* \details According to the CAN protocol 1 bit-time can be made up of between 8..25
* time quanta (TQ). The total TQ in a bit is SYNC + TSEG1 + TSEG2 with SYNC
* always being 1. The sample point is (SYNC + TSEG1) / (SYNC + TSEG1 + SEG2) *
* 100%. This array contains possible and valid time quanta configurations with
* a sample point between 68..78%.
*/
static const tCanBusTiming canTiming[] =
{ /* TQ | TSEG1 | TSEG2 | SP */
/* ------------------------- */
{ 5, 2 }, /* 8 | 5 | 2 | 75% */
{ 6, 2 }, /* 9 | 6 | 2 | 78% */
{ 6, 3 }, /* 10 | 6 | 3 | 70% */
{ 7, 3 }, /* 11 | 7 | 3 | 73% */
{ 8, 3 }, /* 12 | 8 | 3 | 75% */
{ 9, 3 }, /* 13 | 9 | 3 | 77% */
{ 9, 4 }, /* 14 | 9 | 4 | 71% */
{ 10, 4 }, /* 15 | 10 | 4 | 73% */
{ 11, 4 }, /* 16 | 11 | 4 | 75% */
{ 12, 4 }, /* 17 | 12 | 4 | 76% */
{ 12, 5 }, /* 18 | 12 | 5 | 72% */
{ 13, 5 }, /* 19 | 13 | 5 | 74% */
{ 14, 5 }, /* 20 | 14 | 5 | 75% */
{ 15, 5 }, /* 21 | 15 | 5 | 76% */
{ 15, 6 }, /* 22 | 15 | 6 | 73% */
{ 16, 6 }, /* 23 | 16 | 6 | 74% */
{ 16, 7 }, /* 24 | 16 | 7 | 71% */
{ 16, 8 } /* 25 | 16 | 8 | 68% */
};
/************************************************************************************//**
** \brief Search algorithm to match the desired baudrate to a possible bus
** timing configuration.
** \param baud The desired baudrate in kbps. Valid values are 10..1000.
** \param prescaler Pointer to where the value for the prescaler will be stored.
** \param tseg1 Pointer to where the value for TSEG2 will be stored.
** \param tseg2 Pointer to where the value for TSEG2 will be stored.
** \return 1 if the CAN bustiming register values were found, 0 otherwise.
**
****************************************************************************************/
static unsigned char CanGetSpeedConfig(unsigned short baud, unsigned short *prescaler,
unsigned char *tseg1, unsigned char *tseg2)
{
unsigned char cnt;
/* loop through all possible time quanta configurations to find a match */
for (cnt=0; cnt < sizeof(canTiming)/sizeof(canTiming[0]); cnt++)
{
if (((BOOT_CPU_SYSTEM_SPEED_KHZ/4) % (baud*(canTiming[cnt].tseg1+canTiming[cnt].tseg2+1))) == 0)
{
/* compute the prescaler that goes with this TQ configuration */
*prescaler = (BOOT_CPU_SYSTEM_SPEED_KHZ/4)/(baud*(canTiming[cnt].tseg1+canTiming[cnt].tseg2+1));
/* make sure the prescaler is valid */
if ( (*prescaler > 0) && (*prescaler <= 1024) )
{
/* store the bustiming configuration */
*tseg1 = canTiming[cnt].tseg1;
*tseg2 = canTiming[cnt].tseg2;
/* found a good bus timing configuration */
return 1;
}
}
}
/* could not find a good bus timing configuration */
return 0;
} /*** end of CanGetSpeedConfig ***/
/************************************************************************************//**
** \brief Initializes the CAN communication interface.
** \return none.
**
****************************************************************************************/
static void BootComCanInit(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
CAN_InitTypeDef CAN_InitStructure;
CAN_FilterInitTypeDef CAN_FilterInitStructure;
unsigned short prescaler;
unsigned char tseg1, tseg2;
/* enable clocks for CAN1 transmitter and receiver pins */
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);
/* select alternate function for the CAN2 pins */
GPIO_PinAFConfig(GPIOB, GPIO_PinSource8, GPIO_AF_CAN1);
GPIO_PinAFConfig(GPIOB, GPIO_PinSource9, GPIO_AF_CAN1);
/* configure CAN1 RX and TX pins */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(GPIOB, &GPIO_InitStructure);
/* enable CAN clock */
RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE);
/* CAN register init */
CAN_DeInit(CAN1);
CAN_StructInit(&CAN_InitStructure);
/* obtain the bittiming configuration for this baudrate */
CanGetSpeedConfig(BOOT_COM_CAN_BAUDRATE/1000, &prescaler, &tseg1, &tseg2);
/* CAN controller init */
CAN_InitStructure.CAN_TTCM = DISABLE;
CAN_InitStructure.CAN_ABOM = DISABLE;
CAN_InitStructure.CAN_AWUM = DISABLE;
CAN_InitStructure.CAN_NART = DISABLE;
CAN_InitStructure.CAN_RFLM = DISABLE;
CAN_InitStructure.CAN_TXFP = DISABLE;
CAN_InitStructure.CAN_Mode = CAN_Mode_Normal;
/* CAN Baudrate init */
CAN_InitStructure.CAN_SJW = CAN_SJW_1tq;
CAN_InitStructure.CAN_BS1 = tseg1 - 1;
CAN_InitStructure.CAN_BS2 = tseg2 - 1;
CAN_InitStructure.CAN_Prescaler = prescaler;
CAN_Init(CAN1, &CAN_InitStructure);
/* CAN filter init - receive all messages */
CAN_FilterInitStructure.CAN_FilterNumber = 0;
CAN_FilterInitStructure.CAN_FilterMode = CAN_FilterMode_IdMask;
CAN_FilterInitStructure.CAN_FilterScale = CAN_FilterScale_32bit;
CAN_FilterInitStructure.CAN_FilterIdHigh = 0x0000;
CAN_FilterInitStructure.CAN_FilterIdLow = 0x0000;
CAN_FilterInitStructure.CAN_FilterMaskIdHigh = 0x0000;
CAN_FilterInitStructure.CAN_FilterMaskIdLow = 0x0000;
CAN_FilterInitStructure.CAN_FilterFIFOAssignment = 0;
CAN_FilterInitStructure.CAN_FilterActivation = ENABLE;
CAN_FilterInit(&CAN_FilterInitStructure);
} /*** end of BootComCanInit ***/
/************************************************************************************//**
** \brief Receives the CONNECT request from the host, which indicates that the
** bootloader should be activated and, if so, activates it.
** \return none.
**
****************************************************************************************/
static void BootComCanCheckActivationRequest(void)
{
CanRxMsg RxMessage;
/* check if a new message was received */
if (CAN_MessagePending(CAN1, CAN_FIFO0) > 0)
{
/* receive the message */
CAN_Receive(CAN1, CAN_FIFO0, &RxMessage);
if (RxMessage.StdId == BOOT_COM_CAN_RX_MSG_ID)
{
/* check if this was an XCP CONNECT command */
if ((RxMessage.Data[0] == 0xff) && (RxMessage.Data[1] == 0x00))
{
/* connection request received so start the bootloader */
BootActivate();
}
}
}
} /*** end of BootComCanCheckActivationRequest ***/
#endif /* BOOT_COM_CAN_ENABLE > 0 */
/*********************************** end of boot.c *************************************/

View File

@ -807,7 +807,7 @@
1469192680 source:c:\work\software\openblt\target\demo\armcm3_stm32f2_olimex_stm32p207_gcc\boot\startup_stm32f2xx.s
1469278605 source:c:\work\software\openblt\target\demo\armcm3_stm32f2_olimex_stm32p207_gcc\prog\boot.c
1469291235 source:c:\work\software\openblt\target\demo\armcm3_stm32f2_olimex_stm32p207_gcc\prog\boot.c
"header.h"
1469272998 c:\work\software\openblt\target\demo\armcm3_stm32f2_olimex_stm32p207_gcc\prog\header.h
@ -818,7 +818,7 @@
"led.h"
"timer.h"
1469285352 c:\work\software\openblt\target\demo\armcm3_stm32f2_olimex_stm32p207_gcc\boot\blt_conf.h
1469290552 c:\work\software\openblt\target\demo\armcm3_stm32f2_olimex_stm32p207_gcc\boot\blt_conf.h
1469192681 c:\work\software\openblt\target\demo\armcm3_stm32f2_olimex_stm32p207_gcc\prog\lib\stm32f2xx.h
"core_cm3.h"

View File

@ -3,7 +3,7 @@
<ActiveTarget name="Debug" />
<File name="..\boot.c" open="0" top="0" tabpos="9" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="4350" topLine="87" />
<Cursor1 position="15257" topLine="291" />
</Cursor>
</File>
<File name="..\header.h" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
@ -28,7 +28,7 @@
</File>
<File name="..\main.c" open="1" top="1" tabpos="1" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="2662" topLine="22" />
<Cursor1 position="2435" topLine="22" />
</Cursor>
</File>
<File name="..\startup_stm32f2xx.S" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">

View File

@ -0,0 +1,384 @@
/************************************************************************************//**
* \file Source\ARMCM3_STM32F2\can.c
* \brief Bootloader CAN communication interface source file.
* \ingroup Target_ARMCM3_STM32F2
* \internal
*----------------------------------------------------------------------------------------
* C O P Y R I G H T
*----------------------------------------------------------------------------------------
* Copyright (c) 2016 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 "boot.h" /* bootloader generic header */
#if (BOOT_COM_CAN_ENABLE > 0)
/****************************************************************************************
* Type definitions
****************************************************************************************/
/** \brief CAN transmission mailbox layout. */
typedef struct
{
volatile blt_int32u TIR;
volatile blt_int32u TDTR;
volatile blt_int32u TDLR;
volatile blt_int32u TDHR;
} tCanTxMailBox;
/** \brief CAN reception FIFO mailbox layout. */
typedef struct
{
volatile blt_int32u RIR;
volatile blt_int32u RDTR;
volatile blt_int32u RDLR;
volatile blt_int32u RDHR;
} tCanRxFIFOMailBox;
/** \brief CAN filter register layout. */
typedef struct
{
volatile blt_int32u FR1;
volatile blt_int32u FR2;
} tCanFilter;
/** \brief CAN controller register layout. */
typedef struct
{
volatile blt_int32u MCR;
volatile blt_int32u MSR;
volatile blt_int32u TSR;
volatile blt_int32u RF0R;
volatile blt_int32u RF1R;
volatile blt_int32u IER;
volatile blt_int32u ESR;
volatile blt_int32u BTR;
blt_int32u RESERVED0[88];
tCanTxMailBox sTxMailBox[3];
tCanRxFIFOMailBox sFIFOMailBox[2];
blt_int32u RESERVED1[12];
volatile blt_int32u FMR;
volatile blt_int32u FM1R;
blt_int32u RESERVED2;
volatile blt_int32u FS1R;
blt_int32u RESERVED3;
volatile blt_int32u FFA1R;
blt_int32u RESERVED4;
volatile blt_int32u FA1R;
blt_int32u RESERVED5[8];
tCanFilter sFilterRegister[28];
} tCanRegs;
/****************************************************************************************
* Macro definitions
****************************************************************************************/
/** \brief Reset request bit. */
#define CAN_BIT_RESET ((blt_int32u)0x00008000)
/** \brief Initialization request bit. */
#define CAN_BIT_INRQ ((blt_int32u)0x00000001)
/** \brief Initialization acknowledge bit. */
#define CAN_BIT_INAK ((blt_int32u)0x00000001)
/** \brief Sleep mode request bit. */
#define CAN_BIT_SLEEP ((blt_int32u)0x00000002)
/** \brief Filter 0 selection bit. */
#define CAN_BIT_FILTER0 ((blt_int32u)0x00000001)
/** \brief Filter 14 selection bit. */
#define CAN_BIT_FILTER14 ((blt_int32u)0x00004000)
/** \brief Filter init mode bit. */
#define CAN_BIT_FINIT ((blt_int32u)0x00000001)
/** \brief Transmit mailbox 0 empty bit. */
#define CAN_BIT_TME0 ((blt_int32u)0x04000000)
/** \brief Transmit mailbox request bit. */
#define CAN_BIT_TXRQ ((blt_int32u)0x00000001)
/** \brief Release FIFO 0 mailbox bit. */
#define CAN_BIT_RFOM0 ((blt_int32u)0x00000020)
/****************************************************************************************
* Register definitions
****************************************************************************************/
#if (BOOT_COM_CAN_CHANNEL_INDEX == 0)
/** \brief Macro for accessing CAN1 controller registers. */
#define CANx ((tCanRegs *) (blt_int32u)0x40006400)
#else
/** \brief Macro for accessing CAN2 controller registers. */
#define CANx ((tCanRegs *) (blt_int32u)0x40006800)
#endif
/** \brief Macro for accessing CAN1 controller registers. */
#define CAN1 ((tCanRegs *) (blt_int32u)0x40006400)
/****************************************************************************************
* Type definitions
****************************************************************************************/
/** \brief Structure type for grouping CAN bus timing related information. */
typedef struct t_can_bus_timing
{
blt_int8u tseg1; /**< CAN time segment 1 */
blt_int8u tseg2; /**< CAN time segment 2 */
} tCanBusTiming;
/****************************************************************************************
* Local constant declarations
****************************************************************************************/
/** \brief CAN bittiming table for dynamically calculating the bittiming settings.
* \details According to the CAN protocol 1 bit-time can be made up of between 8..25
* time quanta (TQ). The total TQ in a bit is SYNC + TSEG1 + TSEG2 with SYNC
* always being 1. The sample point is (SYNC + TSEG1) / (SYNC + TSEG1 + SEG2) *
* 100%. This array contains possible and valid time quanta configurations with
* a sample point between 68..78%.
*/
static const tCanBusTiming canTiming[] =
{
/* TQ | TSEG1 | TSEG2 | SP */
/* ------------------------- */
{ 5, 2 }, /* 8 | 5 | 2 | 75% */
{ 6, 2 }, /* 9 | 6 | 2 | 78% */
{ 6, 3 }, /* 10 | 6 | 3 | 70% */
{ 7, 3 }, /* 11 | 7 | 3 | 73% */
{ 8, 3 }, /* 12 | 8 | 3 | 75% */
{ 9, 3 }, /* 13 | 9 | 3 | 77% */
{ 9, 4 }, /* 14 | 9 | 4 | 71% */
{ 10, 4 }, /* 15 | 10 | 4 | 73% */
{ 11, 4 }, /* 16 | 11 | 4 | 75% */
{ 12, 4 }, /* 17 | 12 | 4 | 76% */
{ 12, 5 }, /* 18 | 12 | 5 | 72% */
{ 13, 5 }, /* 19 | 13 | 5 | 74% */
{ 14, 5 }, /* 20 | 14 | 5 | 75% */
{ 15, 5 }, /* 21 | 15 | 5 | 76% */
{ 15, 6 }, /* 22 | 15 | 6 | 73% */
{ 16, 6 }, /* 23 | 16 | 6 | 74% */
{ 16, 7 }, /* 24 | 16 | 7 | 71% */
{ 16, 8 } /* 25 | 16 | 8 | 68% */
};
/************************************************************************************//**
** \brief Search algorithm to match the desired baudrate to a possible bus
** timing configuration.
** \param baud The desired baudrate in kbps. Valid values are 10..1000.
** \param prescaler Pointer to where the value for the prescaler will be stored.
** \param tseg1 Pointer to where the value for TSEG2 will be stored.
** \param tseg2 Pointer to where the value for TSEG2 will be stored.
** \return BLT_TRUE if the CAN bustiming register values were found, BLT_FALSE
** otherwise.
**
****************************************************************************************/
static blt_bool CanGetSpeedConfig(blt_int16u baud, blt_int16u *prescaler,
blt_int8u *tseg1, blt_int8u *tseg2)
{
blt_int8u cnt;
/* loop through all possible time quanta configurations to find a match */
for (cnt=0; cnt < sizeof(canTiming)/sizeof(canTiming[0]); cnt++)
{
if (((BOOT_CPU_SYSTEM_SPEED_KHZ/4) % (baud*(canTiming[cnt].tseg1+canTiming[cnt].tseg2+1))) == 0)
{
/* compute the prescaler that goes with this TQ configuration */
*prescaler = (BOOT_CPU_SYSTEM_SPEED_KHZ/4)/(baud*(canTiming[cnt].tseg1+canTiming[cnt].tseg2+1));
/* make sure the prescaler is valid */
if ((*prescaler > 0) && (*prescaler <= 1024))
{
/* store the bustiming configuration */
*tseg1 = canTiming[cnt].tseg1;
*tseg2 = canTiming[cnt].tseg2;
/* found a good bus timing configuration */
return BLT_TRUE;
}
}
}
/* could not find a good bus timing configuration */
return BLT_FALSE;
} /*** end of CanGetSpeedConfig ***/
/************************************************************************************//**
** \brief Initializes the CAN controller and synchronizes it to the CAN bus.
** \return none.
**
****************************************************************************************/
void CanInit(void)
{
blt_int16u prescaler=0;
blt_int8u tseg1=0, tseg2=0;
blt_bool result;
/* the current implementation supports CAN1 and 2. throw an assertion error in case a
* different CAN channel is configured.
*/
ASSERT_CT((BOOT_COM_CAN_CHANNEL_INDEX == 0 || BOOT_COM_CAN_CHANNEL_INDEX == 1));
/* obtain bittiming configuration information */
result = CanGetSpeedConfig(BOOT_COM_CAN_BAUDRATE/1000, &prescaler, &tseg1, &tseg2);
ASSERT_RT(result == BLT_TRUE);
/* disable all can interrupt. this driver works in polling mode */
CANx->IER = (blt_int32u)0;
/* set request to reset the can controller */
CANx->MCR |= CAN_BIT_RESET ;
/* wait for acknowledge that the can controller was reset */
while ((CANx->MCR & CAN_BIT_RESET) != 0)
{
/* keep the watchdog happy */
CopService();
}
/* exit from sleep mode, which is the default mode after reset */
CANx->MCR &= ~CAN_BIT_SLEEP;
/* set request to enter initialisation mode */
CANx->MCR |= CAN_BIT_INRQ ;
/* wait for acknowledge that initialization mode was entered */
while ((CANx->MSR & CAN_BIT_INAK) == 0)
{
/* keep the watchdog happy */
CopService();
}
/* configure the bittming */
CANx->BTR = (blt_int32u)((blt_int32u)(tseg1 - 1) << 16) | \
(blt_int32u)((blt_int32u)(tseg2 - 1) << 20) | \
(blt_int32u)(prescaler - 1);
/* set request to leave initialisation mode */
CANx->MCR &= ~CAN_BIT_INRQ;
/* wait for acknowledge that initialization mode was exited */
while ((CANx->MSR & CAN_BIT_INAK) != 0)
{
/* keep the watchdog happy */
CopService();
}
#if (BOOT_COM_CAN_CHANNEL_INDEX == 0)
/* enter initialisation mode for the acceptance filter */
CAN1->FMR |= CAN_BIT_FINIT;
/* deactivate filter 0 */
CAN1->FA1R &= ~CAN_BIT_FILTER0;
/* 32-bit scale for the filter */
CAN1->FS1R |= CAN_BIT_FILTER0;
/* open up the acceptance filter to receive all messages */
CAN1->sFilterRegister[0].FR1 = 0;
CAN1->sFilterRegister[0].FR2 = 0;
/* select id/mask mode for the filter */
CAN1->FM1R &= ~CAN_BIT_FILTER0;
/* FIFO 0 assignation for the filter */
CAN1->FFA1R &= ~CAN_BIT_FILTER0;
/* filter activation */
CAN1->FA1R |= CAN_BIT_FILTER0;
/* leave initialisation mode for the acceptance filter */
CAN1->FMR &= ~CAN_BIT_FINIT;
#else
/* enter initialisation mode for the acceptance filter */
CAN1->FMR |= CAN_BIT_FINIT;
/* deactivate filter 14 */
CAN1->FA1R &= ~CAN_BIT_FILTER14;
/* 32-bit scale for the filter */
CAN1->FS1R |= CAN_BIT_FILTER14;
/* open up the acceptance filter to receive all messages */
CAN1->sFilterRegister[14].FR1 = 0;
CAN1->sFilterRegister[14].FR2 = 0;
/* select id/mask mode for the filter */
CAN1->FM1R &= ~CAN_BIT_FILTER14;
/* FIFO 0 assignation for the filter */
CAN1->FFA1R &= ~CAN_BIT_FILTER14;
/* filter activation */
CAN1->FA1R |= CAN_BIT_FILTER14;
/* leave initialisation mode for the acceptance filter */
CAN1->FMR &= ~CAN_BIT_FINIT;
#endif
} /*** end of CanInit ***/
/************************************************************************************//**
** \brief Transmits a packet formatted for the communication interface.
** \param data Pointer to byte array with data that it to be transmitted.
** \param len Number of bytes that are to be transmitted.
** \return none.
**
****************************************************************************************/
void CanTransmitPacket(blt_int8u *data, blt_int8u len)
{
/* make sure that transmit mailbox 0 is available */
ASSERT_RT((CANx->TSR&CAN_BIT_TME0) == CAN_BIT_TME0);
/* store the 11-bit message identifier */
CANx->sTxMailBox[0].TIR &= CAN_BIT_TXRQ;
CANx->sTxMailBox[0].TIR |= ((blt_int32u)BOOT_COM_CAN_TX_MSG_ID << 21);
/* store the message date length code (DLC) */
CANx->sTxMailBox[0].TDTR = len;
/* store the message data bytes */
CANx->sTxMailBox[0].TDLR = (((blt_int32u)data[3] << 24) | \
((blt_int32u)data[2] << 16) | \
((blt_int32u)data[1] << 8) | \
((blt_int32u)data[0]));
CANx->sTxMailBox[0].TDHR = (((blt_int32u)data[7] << 24) | \
((blt_int32u)data[6] << 16) | \
((blt_int32u)data[5] << 8) | \
((blt_int32u)data[4]));
/* request the start of message transmission */
CANx->sTxMailBox[0].TIR |= CAN_BIT_TXRQ;
/* wait for transmit completion */
while ((CANx->TSR&CAN_BIT_TME0) == 0)
{
/* keep the watchdog happy */
CopService();
}
} /*** end of CanTransmitPacket ***/
/************************************************************************************//**
** \brief Receives a communication interface packet if one is present.
** \param data Pointer to byte array where the data is to be stored.
** \return BLT_TRUE is a packet was received, BLT_FALSE otherwise.
**
****************************************************************************************/
blt_bool CanReceivePacket(blt_int8u *data)
{
blt_int32u rxMsgId;
blt_bool result = BLT_FALSE;
/* check if a new message was received */
if ((CANx->RF0R&(blt_int32u)0x00000003) > 0)
{
/* read out the message identifier */
rxMsgId = (blt_int32u)0x000007FF & (CANx->sFIFOMailBox[0].RIR >> 21);
/* is this the packet identifier */
if (rxMsgId == BOOT_COM_CAN_RX_MSG_ID)
{
result = BLT_TRUE;
/* store the received packet data */
data[0] = (blt_int8u)0xFF & CANx->sFIFOMailBox[0].RDLR;
data[1] = (blt_int8u)0xFF & (CANx->sFIFOMailBox[0].RDLR >> 8);
data[2] = (blt_int8u)0xFF & (CANx->sFIFOMailBox[0].RDLR >> 16);
data[3] = (blt_int8u)0xFF & (CANx->sFIFOMailBox[0].RDLR >> 24);
data[4] = (blt_int8u)0xFF & CANx->sFIFOMailBox[0].RDHR;
data[5] = (blt_int8u)0xFF & (CANx->sFIFOMailBox[0].RDHR >> 8);
data[6] = (blt_int8u)0xFF & (CANx->sFIFOMailBox[0].RDHR >> 16);
data[7] = (blt_int8u)0xFF & (CANx->sFIFOMailBox[0].RDHR >> 24);
}
/* release FIFO0 */
CANx->RF0R |= CAN_BIT_RFOM0;
}
return result;
} /*** end of CanReceivePacket ***/
#endif /* BOOT_COM_CAN_ENABLE > 0 */
/*********************************** end of can.c **************************************/