ps2 read and write working

This commit is contained in:
dekunukem
2021-10-24 02:11:53 +01:00
parent 003712e5cd
commit 525b7d884f
25 changed files with 1263 additions and 437 deletions

View File

Binary file not shown.

View File

@@ -1,5 +1,5 @@
#ifndef __DELAY_US_H
#define __DELAY_US_H
#ifndef __DELAYUS_H
#define __DELAYUS_H
#ifdef __cplusplus
extern "C" {

View File

@@ -1,5 +1,5 @@
#ifndef __HELPERS_H
#define __HELPERS_H
#ifndef __PS2KB_H
#define __PS2KB_H
#ifdef __cplusplus
extern "C" {
@@ -7,9 +7,16 @@
#include "stm32f0xx_hal.h"
#define PS2_BUS_IDLE 3
#define PS2_BUS_INHIBIT 2
#define PS2_BUS_REQ_TO_SEND 1
#define PS2_BUS_UNKNOWN 0
void ps2kb_init(GPIO_TypeDef* clk_port, uint16_t clk_pin, GPIO_TypeDef* data_port, uint16_t data_pin);
uint8_t ps2kb_get_bus_status(void);
uint8_t ps2kb_read(uint8_t* result, uint8_t timeout_ms);
uint8_t ps2kb_write(uint8_t data, uint8_t timeout_ms);
void keyboard_reply(uint8_t cmd, uint8_t *leds);
#ifdef __cplusplus
}

View File

@@ -1,5 +1,5 @@
#ifndef __shared_H
#define __shared_H
#ifndef __SHARED_H
#define __SHARED_H
#include "stm32f0xx_hal.h"
#include "main.h"

View File

File diff suppressed because one or more lines are too long

View File

Binary file not shown.

View File

Binary file not shown.

View File

Binary file not shown.

View File

Binary file not shown.

View File

Binary file not shown.

View File

@@ -35,3 +35,4 @@ test\main.o: ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_uart_ex.h
test\main.o: ../Inc/shared.h
test\main.o: ../Inc/helpers.h
test\main.o: ../Inc/delay_us.h
test\main.o: ../Inc/ps2kb.h

View File

Binary file not shown.

View File

Binary file not shown.

View File

@@ -36,3 +36,5 @@ test\ps2kb.o: ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_tim_ex.h
test\ps2kb.o: ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_uart.h
test\ps2kb.o: ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_uart_ex.h
test\ps2kb.o: ../Inc/shared.h
test\ps2kb.o: ../Inc/ps2kb.h
test\ps2kb.o: ../Inc/delay_us.h

View File

Binary file not shown.

View File

Binary file not shown.

View File

@@ -27,34 +27,9 @@ Project File Date: 10/23/2021
<h2>Output:</h2>
*** Using Compiler 'V5.06 update 6 (build 750)', folder: 'C:\Keil_v5\ARM\ARMCC\Bin'
Build target 'test'
assembling startup_stm32f030x6.s...
compiling stm32f0xx_hal_uart_ex.c...
compiling stm32f0xx_hal_spi_ex.c...
compiling stm32f0xx_hal.c...
compiling stm32f0xx_hal_rcc_ex.c...
compiling stm32f0xx_hal_i2c_ex.c...
compiling stm32f0xx_hal_tim_ex.c...
compiling stm32f0xx_hal_rcc.c...
compiling stm32f0xx_hal_uart.c...
compiling stm32f0xx_hal_spi.c...
compiling stm32f0xx_hal_i2c.c...
compiling stm32f0xx_hal_tim.c...
compiling stm32f0xx_hal_cortex.c...
compiling stm32f0xx_hal_pwr_ex.c...
compiling stm32f0xx_hal_pwr.c...
compiling stm32f0xx_hal_dma.c...
compiling stm32f0xx_hal_gpio.c...
compiling delay_us.c...
compiling stm32f0xx_hal_flash.c...
compiling stm32f0xx_hal_flash_ex.c...
compiling helpers.c...
compiling ps2kb.c...
compiling main.c...
compiling stm32f0xx_it.c...
compiling stm32f0xx_hal_msp.c...
compiling system_stm32f0xx.c...
linking...
Program Size: Code=8344 RO-data=232 RW-data=24 ZI-data=1400
Program Size: Code=9168 RO-data=232 RW-data=40 ZI-data=1400
"test\test.axf" - 0 Error(s), 0 Warning(s).
<h2>Software Packages used:</h2>
@@ -78,7 +53,7 @@ Package Vendor: Keil
<h2>Collection of Component Files used:</h2>
* Component: ARM::CMSIS:CORE:5.3.0
Build Time Elapsed: 00:00:03
Build Time Elapsed: 00:00:00
</pre>
</body>
</html>

View File

@@ -3,9 +3,9 @@
<title>Static Call Graph - [test\test.axf]</title></head>
<body><HR>
<H1>Static Call Graph for image test\test.axf</H1><HR>
<BR><P>#&#060CALLGRAPH&#062# ARM Linker, 5060750: Last Updated: Sat Oct 23 22:59:42 2021
<BR><P>#&#060CALLGRAPH&#062# ARM Linker, 5060750: Last Updated: Sun Oct 24 02:10:39 2021
<BR><P>
<H3>Maximum Stack Usage = 196 bytes + Unknown(Cycles, Untraceable Function Pointers)</H3><H3>
<H3>Maximum Stack Usage = 204 bytes + Unknown(Cycles, Untraceable Function Pointers)</H3><H3>
Call chain for Maximum Stack Depth:</H3>
main &rArr; SystemClock_Config &rArr; HAL_RCC_ClockConfig &rArr; HAL_RCC_GetSysClockFreq &rArr; __aeabi_uidivmod
<P>
@@ -65,7 +65,7 @@ Global Symbols
<P><STRONG><a name="[1c]"></a>__main</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry.o(.ARM.Collect$$$$00000000))
<BR>[Address Reference Count : 1]<UL><LI> startup_stm32f030x6.o(.text)
</UL>
<P><STRONG><a name="[6f]"></a>_main_stk</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry2.o(.ARM.Collect$$$$00000001))
<P><STRONG><a name="[76]"></a>_main_stk</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry2.o(.ARM.Collect$$$$00000001))
<P><STRONG><a name="[23]"></a>_main_scatterload</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry5.o(.ARM.Collect$$$$00000004))
<BR><BR>[Calls]<UL><LI><a href="#[24]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__scatterload
@@ -75,15 +75,15 @@ Global Symbols
<BR><BR>[Called By]<UL><LI><a href="#[24]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__scatterload
</UL>
<P><STRONG><a name="[70]"></a>_main_clock</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry7b.o(.ARM.Collect$$$$00000008))
<P><STRONG><a name="[77]"></a>_main_clock</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry7b.o(.ARM.Collect$$$$00000008))
<P><STRONG><a name="[71]"></a>_main_cpp_init</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry8b.o(.ARM.Collect$$$$0000000A))
<P><STRONG><a name="[78]"></a>_main_cpp_init</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry8b.o(.ARM.Collect$$$$0000000A))
<P><STRONG><a name="[72]"></a>_main_init</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry9a.o(.ARM.Collect$$$$0000000B))
<P><STRONG><a name="[79]"></a>_main_init</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry9a.o(.ARM.Collect$$$$0000000B))
<P><STRONG><a name="[73]"></a>__rt_final_cpp</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry10a.o(.ARM.Collect$$$$0000000D))
<P><STRONG><a name="[7a]"></a>__rt_final_cpp</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry10a.o(.ARM.Collect$$$$0000000D))
<P><STRONG><a name="[74]"></a>__rt_final_exit</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry11a.o(.ARM.Collect$$$$0000000F))
<P><STRONG><a name="[7b]"></a>__rt_final_exit</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry11a.o(.ARM.Collect$$$$0000000F))
<P><STRONG><a name="[0]"></a>Reset_Handler</STRONG> (Thumb, 8 bytes, Stack size 0 bytes, startup_stm32f030x6.o(.text))
<BR>[Address Reference Count : 1]<UL><LI> startup_stm32f030x6.o(RESET)
@@ -146,7 +146,7 @@ Global Symbols
<P><STRONG><a name="[6]"></a>WWDG_IRQHandler</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f030x6.o(.text))
<BR>[Address Reference Count : 1]<UL><LI> startup_stm32f030x6.o(RESET)
</UL>
<P><STRONG><a name="[75]"></a>__aeabi_uidiv</STRONG> (Thumb, 0 bytes, Stack size 12 bytes, uidiv.o(.text), UNUSED)
<P><STRONG><a name="[7c]"></a>__aeabi_uidiv</STRONG> (Thumb, 0 bytes, Stack size 12 bytes, uidiv.o(.text), UNUSED)
<P><STRONG><a name="[2b]"></a>__aeabi_uidivmod</STRONG> (Thumb, 44 bytes, Stack size 12 bytes, uidiv.o(.text))
<BR><BR>[Stack]<UL><LI>Max Depth = 12<LI>Call Chain = __aeabi_uidivmod
@@ -162,11 +162,11 @@ Global Symbols
<BR><BR>[Called By]<UL><LI><a href="#[25]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_uldivmod
</UL>
<P><STRONG><a name="[76]"></a>_ll_ushift_r</STRONG> (Thumb, 0 bytes, Stack size 8 bytes, llushr.o(.text), UNUSED)
<P><STRONG><a name="[7d]"></a>_ll_ushift_r</STRONG> (Thumb, 0 bytes, Stack size 8 bytes, llushr.o(.text), UNUSED)
<P><STRONG><a name="[25]"></a>__aeabi_uldivmod</STRONG> (Thumb, 96 bytes, Stack size 48 bytes, uldiv.o(.text), UNUSED)
<BR><BR>[Calls]<UL><LI><a href="#[26]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_llsr
<LI><a href="#[27]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_llsl
<BR><BR>[Calls]<UL><LI><a href="#[27]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_llsl
<LI><a href="#[26]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_llsr
</UL>
<BR>[Called By]<UL><LI><a href="#[66]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_core
</UL>
@@ -177,13 +177,13 @@ Global Symbols
<BR>[Called By]<UL><LI><a href="#[23]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_main_scatterload
</UL>
<P><STRONG><a name="[77]"></a>__scatterload_rt2</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, init.o(.text), UNUSED)
<P><STRONG><a name="[7e]"></a>__scatterload_rt2</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, init.o(.text), UNUSED)
<P><STRONG><a name="[27]"></a>__aeabi_llsl</STRONG> (Thumb, 32 bytes, Stack size 8 bytes, llshl.o(.text), UNUSED)
<BR><BR>[Called By]<UL><LI><a href="#[25]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_uldivmod
</UL>
<P><STRONG><a name="[78]"></a>_ll_shift_l</STRONG> (Thumb, 0 bytes, Stack size 8 bytes, llshl.o(.text), UNUSED)
<P><STRONG><a name="[7f]"></a>_ll_shift_l</STRONG> (Thumb, 0 bytes, Stack size 8 bytes, llshl.o(.text), UNUSED)
<P><STRONG><a name="[e]"></a>DMA1_Channel2_3_IRQHandler</STRONG> (Thumb, 10 bytes, Stack size 8 bytes, stm32f0xx_it.o(i.DMA1_Channel2_3_IRQHandler))
<BR><BR>[Stack]<UL><LI>Max Depth = 24<LI>Call Chain = DMA1_Channel2_3_IRQHandler &rArr; HAL_DMA_IRQHandler
@@ -223,16 +223,17 @@ Global Symbols
<LI><a href="#[1a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main
</UL>
<P><STRONG><a name="[6d]"></a>HAL_GPIO_ReadPin</STRONG> (Thumb, 10 bytes, Stack size 0 bytes, stm32f0xx_hal_gpio.o(i.HAL_GPIO_ReadPin))
<P><STRONG><a name="[74]"></a>HAL_GPIO_ReadPin</STRONG> (Thumb, 10 bytes, Stack size 0 bytes, stm32f0xx_hal_gpio.o(i.HAL_GPIO_ReadPin))
<BR><BR>[Called By]<UL><LI><a href="#[1a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main
<LI><a href="#[70]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2kb_read
<LI><a href="#[75]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2kb_get_bus_status
</UL>
<P><STRONG><a name="[6e]"></a>HAL_GPIO_TogglePin</STRONG> (Thumb, 8 bytes, Stack size 0 bytes, stm32f0xx_hal_gpio.o(i.HAL_GPIO_TogglePin))
<BR><BR>[Called By]<UL><LI><a href="#[1a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main
</UL>
<P><STRONG><a name="[6b]"></a>HAL_GPIO_WritePin</STRONG> (Thumb, 12 bytes, Stack size 0 bytes, stm32f0xx_hal_gpio.o(i.HAL_GPIO_WritePin))
<P><STRONG><a name="[71]"></a>HAL_GPIO_WritePin</STRONG> (Thumb, 12 bytes, Stack size 0 bytes, stm32f0xx_hal_gpio.o(i.HAL_GPIO_WritePin))
<BR><BR>[Called By]<UL><LI><a href="#[1a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main
<LI><a href="#[6f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2kb_write
<LI><a href="#[70]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2kb_read
<LI><a href="#[73]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2kb_init
</UL>
<P><STRONG><a name="[37]"></a>HAL_GetTick</STRONG> (Thumb, 6 bytes, Stack size 0 bytes, stm32f0xx_hal.o(i.HAL_GetTick))
@@ -245,6 +246,8 @@ Global Symbols
<LI><a href="#[38]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_RCC_ClockConfig
<LI><a href="#[56]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;UART_WaitOnFlagUntilTimeout
<LI><a href="#[55]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_UART_Transmit
<LI><a href="#[6f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2kb_write
<LI><a href="#[70]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2kb_read
</UL>
<P><STRONG><a name="[61]"></a>HAL_IncTick</STRONG> (Thumb, 10 bytes, Stack size 0 bytes, stm32f0xx_hal.o(i.HAL_IncTick))
@@ -454,8 +457,8 @@ Global Symbols
<BR>[Called By]<UL><LI><a href="#[44]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_TIM_Base_Init
</UL>
<P><STRONG><a name="[6a]"></a>HAL_TIM_Base_Start_IT</STRONG> (Thumb, 22 bytes, Stack size 0 bytes, stm32f0xx_hal_tim.o(i.HAL_TIM_Base_Start_IT))
<BR><BR>[Called By]<UL><LI><a href="#[69]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;delay_us_init
<P><STRONG><a name="[6c]"></a>HAL_TIM_Base_Start_IT</STRONG> (Thumb, 22 bytes, Stack size 0 bytes, stm32f0xx_hal_tim.o(i.HAL_TIM_Base_Start_IT))
<BR><BR>[Called By]<UL><LI><a href="#[6b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;delay_us_init
</UL>
<P><STRONG><a name="[49]"></a>HAL_TIM_IC_CaptureCallback</STRONG> (Thumb, 2 bytes, Stack size 0 bytes, stm32f0xx_hal_tim.o(i.HAL_TIM_IC_CaptureCallback))
@@ -553,8 +556,8 @@ Global Symbols
<LI><a href="#[3a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_RCC_OscConfig
<LI><a href="#[32]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_RCC_GetHCLKFreq
<LI><a href="#[38]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_RCC_ClockConfig
<LI><a href="#[2b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_uidivmod
<LI><a href="#[63]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_SYSTICK_CLKSourceConfig
<LI><a href="#[2b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_uidivmod
</UL>
<BR>[Called By]<UL><LI><a href="#[1a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main
</UL>
@@ -614,24 +617,39 @@ Global Symbols
<BR><BR>[Calls]<UL><LI><a href="#[66]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_core
</UL>
<P><STRONG><a name="[79]"></a>__1printf$8</STRONG> (Thumb, 0 bytes, Stack size 24 bytes, printf8.o(i.__0printf$8), UNUSED)
<P><STRONG><a name="[80]"></a>__1printf$8</STRONG> (Thumb, 0 bytes, Stack size 24 bytes, printf8.o(i.__0printf$8), UNUSED)
<P><STRONG><a name="[6c]"></a>__2printf</STRONG> (Thumb, 0 bytes, Stack size 24 bytes, printf8.o(i.__0printf$8))
<P><STRONG><a name="[72]"></a>__2printf</STRONG> (Thumb, 0 bytes, Stack size 24 bytes, printf8.o(i.__0printf$8))
<BR><BR>[Stack]<UL><LI>Max Depth = 24<LI>Call Chain = __2printf
</UL>
<BR>[Called By]<UL><LI><a href="#[1a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main
</UL>
<P><STRONG><a name="[7a]"></a>__scatterload_copy</STRONG> (Thumb, 14 bytes, Stack size unknown bytes, handlers.o(i.__scatterload_copy), UNUSED)
<P><STRONG><a name="[6e]"></a>__ARM_common_switch8</STRONG> (Thumb, 26 bytes, Stack size 8 bytes, stm32f0xx_hal_tim.o(i.__ARM_common_switch8))
<BR><BR>[Stack]<UL><LI>Max Depth = 8<LI>Call Chain = __ARM_common_switch8
</UL>
<BR>[Called By]<UL><LI><a href="#[6d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;keyboard_reply
</UL>
<P><STRONG><a name="[7b]"></a>__scatterload_null</STRONG> (Thumb, 2 bytes, Stack size unknown bytes, handlers.o(i.__scatterload_null), UNUSED)
<P><STRONG><a name="[81]"></a>__scatterload_copy</STRONG> (Thumb, 14 bytes, Stack size unknown bytes, handlers.o(i.__scatterload_copy), UNUSED)
<P><STRONG><a name="[7c]"></a>__scatterload_zeroinit</STRONG> (Thumb, 14 bytes, Stack size unknown bytes, handlers.o(i.__scatterload_zeroinit), UNUSED)
<P><STRONG><a name="[82]"></a>__scatterload_null</STRONG> (Thumb, 2 bytes, Stack size unknown bytes, handlers.o(i.__scatterload_null), UNUSED)
<P><STRONG><a name="[69]"></a>delay_us_init</STRONG> (Thumb, 12 bytes, Stack size 8 bytes, delay_us.o(i.delay_us_init))
<P><STRONG><a name="[83]"></a>__scatterload_zeroinit</STRONG> (Thumb, 14 bytes, Stack size unknown bytes, handlers.o(i.__scatterload_zeroinit), UNUSED)
<P><STRONG><a name="[69]"></a>delay_us</STRONG> (Thumb, 20 bytes, Stack size 4 bytes, delay_us.o(i.delay_us))
<BR><BR>[Stack]<UL><LI>Max Depth = 4<LI>Call Chain = delay_us
</UL>
<BR>[Calls]<UL><LI><a href="#[6a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;micros
</UL>
<BR>[Called By]<UL><LI><a href="#[6f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2kb_write
<LI><a href="#[70]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2kb_read
</UL>
<P><STRONG><a name="[6b]"></a>delay_us_init</STRONG> (Thumb, 12 bytes, Stack size 8 bytes, delay_us.o(i.delay_us_init))
<BR><BR>[Stack]<UL><LI>Max Depth = 8<LI>Call Chain = delay_us_init
</UL>
<BR>[Calls]<UL><LI><a href="#[6a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_TIM_Base_Start_IT
<BR>[Calls]<UL><LI><a href="#[6c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_TIM_Base_Start_IT
</UL>
<BR>[Called By]<UL><LI><a href="#[1a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main
</UL>
@@ -643,13 +661,22 @@ Global Symbols
</UL>
<BR>[Address Reference Count : 1]<UL><LI> printf8.o(i.__0printf$8)
</UL>
<P><STRONG><a name="[1a]"></a>main</STRONG> (Thumb, 218 bytes, Stack size 24 bytes, main.o(i.main))
<BR><BR>[Stack]<UL><LI>Max Depth = 196<LI>Call Chain = main &rArr; SystemClock_Config &rArr; HAL_RCC_ClockConfig &rArr; HAL_RCC_GetSysClockFreq &rArr; __aeabi_uidivmod
<P><STRONG><a name="[6d]"></a>keyboard_reply</STRONG> (Thumb, 120 bytes, Stack size 16 bytes, ps2kb.o(i.keyboard_reply))
<BR><BR>[Stack]<UL><LI>Max Depth = 56<LI>Call Chain = keyboard_reply &rArr; ps2kb_read &rArr; ps2kb_get_bus_status
</UL>
<BR>[Calls]<UL><LI><a href="#[6e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__ARM_common_switch8
<LI><a href="#[6f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2kb_write
<LI><a href="#[70]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2kb_read
</UL>
<BR>[Called By]<UL><LI><a href="#[1a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main
</UL>
<P><STRONG><a name="[1a]"></a>main</STRONG> (Thumb, 228 bytes, Stack size 32 bytes, main.o(i.main))
<BR><BR>[Stack]<UL><LI>Max Depth = 204<LI>Call Chain = main &rArr; SystemClock_Config &rArr; HAL_RCC_ClockConfig &rArr; HAL_RCC_GetSysClockFreq &rArr; __aeabi_uidivmod
</UL>
<BR>[Calls]<UL><LI><a href="#[3f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_SPI_Receive_DMA
<LI><a href="#[6b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_GPIO_WritePin
<LI><a href="#[6e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_GPIO_TogglePin
<LI><a href="#[6d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_GPIO_ReadPin
<LI><a href="#[71]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_GPIO_WritePin
<LI><a href="#[74]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_GPIO_ReadPin
<LI><a href="#[34]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_NVIC_SetPriority
<LI><a href="#[2f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_Init
<LI><a href="#[3d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_GPIO_Init
@@ -657,12 +684,62 @@ Global Symbols
<LI><a href="#[62]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SystemClock_Config
<LI><a href="#[58]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;MX_USART1_UART_Init
<LI><a href="#[57]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;MX_SPI1_Init
<LI><a href="#[69]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;delay_us_init
<LI><a href="#[70]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2kb_read
<LI><a href="#[73]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2kb_init
<LI><a href="#[75]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2kb_get_bus_status
<LI><a href="#[6d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;keyboard_reply
<LI><a href="#[6b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;delay_us_init
<LI><a href="#[47]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_NVIC_EnableIRQ
<LI><a href="#[6c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__2printf
<LI><a href="#[72]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__2printf
</UL>
<BR>[Address Reference Count : 1]<UL><LI> entry9a.o(.ARM.Collect$$$$0000000B)
</UL><P>
</UL>
<P><STRONG><a name="[6a]"></a>micros</STRONG> (Thumb, 18 bytes, Stack size 0 bytes, delay_us.o(i.micros))
<BR><BR>[Called By]<UL><LI><a href="#[69]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;delay_us
</UL>
<P><STRONG><a name="[75]"></a>ps2kb_get_bus_status</STRONG> (Thumb, 92 bytes, Stack size 8 bytes, ps2kb.o(i.ps2kb_get_bus_status))
<BR><BR>[Stack]<UL><LI>Max Depth = 8<LI>Call Chain = ps2kb_get_bus_status
</UL>
<BR>[Calls]<UL><LI><a href="#[74]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_GPIO_ReadPin
</UL>
<BR>[Called By]<UL><LI><a href="#[1a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main
<LI><a href="#[6f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2kb_write
<LI><a href="#[70]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2kb_read
</UL>
<P><STRONG><a name="[73]"></a>ps2kb_init</STRONG> (Thumb, 30 bytes, Stack size 8 bytes, ps2kb.o(i.ps2kb_init))
<BR><BR>[Stack]<UL><LI>Max Depth = 8<LI>Call Chain = ps2kb_init
</UL>
<BR>[Calls]<UL><LI><a href="#[71]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_GPIO_WritePin
</UL>
<BR>[Called By]<UL><LI><a href="#[1a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main
</UL>
<P><STRONG><a name="[70]"></a>ps2kb_read</STRONG> (Thumb, 210 bytes, Stack size 32 bytes, ps2kb.o(i.ps2kb_read))
<BR><BR>[Stack]<UL><LI>Max Depth = 40<LI>Call Chain = ps2kb_read &rArr; ps2kb_get_bus_status
</UL>
<BR>[Calls]<UL><LI><a href="#[37]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_GetTick
<LI><a href="#[71]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_GPIO_WritePin
<LI><a href="#[74]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_GPIO_ReadPin
<LI><a href="#[75]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2kb_get_bus_status
<LI><a href="#[69]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;delay_us
</UL>
<BR>[Called By]<UL><LI><a href="#[1a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main
<LI><a href="#[6d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;keyboard_reply
</UL>
<P><STRONG><a name="[6f]"></a>ps2kb_write</STRONG> (Thumb, 284 bytes, Stack size 24 bytes, ps2kb.o(i.ps2kb_write))
<BR><BR>[Stack]<UL><LI>Max Depth = 32<LI>Call Chain = ps2kb_write &rArr; ps2kb_get_bus_status
</UL>
<BR>[Calls]<UL><LI><a href="#[37]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_GetTick
<LI><a href="#[71]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_GPIO_WritePin
<LI><a href="#[75]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2kb_get_bus_status
<LI><a href="#[69]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;delay_us
</UL>
<BR>[Called By]<UL><LI><a href="#[6d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;keyboard_reply
</UL>
<P>
<H3>
Local Symbols
</H3>

View File

@@ -619,7 +619,24 @@ Section Cross References
delay_us.o(i.delay_us_init) refers to stm32f0xx_hal_tim.o(i.HAL_TIM_Base_Start_IT) for HAL_TIM_Base_Start_IT
delay_us.o(i.delay_us_init) refers to delay_us.o(.data) for .data
delay_us.o(i.micros) refers to delay_us.o(.data) for .data
ps2kb.o(i.keyboard_reply) refers to stm32f0xx_hal_tim.o(i.__ARM_common_switch8) for __ARM_common_switch8
ps2kb.o(i.keyboard_reply) refers to ps2kb.o(i.ps2kb_write) for ps2kb_write
ps2kb.o(i.keyboard_reply) refers to ps2kb.o(i.ps2kb_read) for ps2kb_read
ps2kb.o(i.ps2kb_get_bus_status) refers to stm32f0xx_hal_gpio.o(i.HAL_GPIO_ReadPin) for HAL_GPIO_ReadPin
ps2kb.o(i.ps2kb_get_bus_status) refers to ps2kb.o(.data) for .data
ps2kb.o(i.ps2kb_init) refers to stm32f0xx_hal_gpio.o(i.HAL_GPIO_WritePin) for HAL_GPIO_WritePin
ps2kb.o(i.ps2kb_init) refers to ps2kb.o(.data) for .data
ps2kb.o(i.ps2kb_read) refers to stm32f0xx_hal.o(i.HAL_GetTick) for HAL_GetTick
ps2kb.o(i.ps2kb_read) refers to ps2kb.o(i.ps2kb_get_bus_status) for ps2kb_get_bus_status
ps2kb.o(i.ps2kb_read) refers to delay_us.o(i.delay_us) for delay_us
ps2kb.o(i.ps2kb_read) refers to stm32f0xx_hal_gpio.o(i.HAL_GPIO_WritePin) for HAL_GPIO_WritePin
ps2kb.o(i.ps2kb_read) refers to stm32f0xx_hal_gpio.o(i.HAL_GPIO_ReadPin) for HAL_GPIO_ReadPin
ps2kb.o(i.ps2kb_read) refers to ps2kb.o(.data) for .data
ps2kb.o(i.ps2kb_write) refers to stm32f0xx_hal.o(i.HAL_GetTick) for HAL_GetTick
ps2kb.o(i.ps2kb_write) refers to ps2kb.o(i.ps2kb_get_bus_status) for ps2kb_get_bus_status
ps2kb.o(i.ps2kb_write) refers to delay_us.o(i.delay_us) for delay_us
ps2kb.o(i.ps2kb_write) refers to stm32f0xx_hal_gpio.o(i.HAL_GPIO_WritePin) for HAL_GPIO_WritePin
ps2kb.o(i.ps2kb_write) refers to ps2kb.o(.data) for .data
main.o(i.HAL_SPI_RxCpltCallback) refers to stm32f0xx_hal_spi.o(i.HAL_SPI_Receive_DMA) for HAL_SPI_Receive_DMA
main.o(i.HAL_SPI_RxCpltCallback) refers to main.o(.data) for .data
main.o(i.HAL_SPI_RxCpltCallback) refers to helpers.o(.bss) for spi_recv_buf
@@ -649,12 +666,15 @@ Section Cross References
main.o(i.main) refers to main.o(i.MX_SPI1_Init) for MX_SPI1_Init
main.o(i.main) refers to delay_us.o(i.delay_us_init) for delay_us_init
main.o(i.main) refers to printf8.o(i.__0printf$8) for __2printf
main.o(i.main) refers to ps2kb.o(i.ps2kb_init) for ps2kb_init
main.o(i.main) refers to stm32f0xx_hal_gpio.o(i.HAL_GPIO_ReadPin) for HAL_GPIO_ReadPin
main.o(i.main) refers to stm32f0xx_hal_spi.o(i.HAL_SPI_Receive_DMA) for HAL_SPI_Receive_DMA
main.o(i.main) refers to stm32f0xx_hal_gpio.o(i.HAL_GPIO_TogglePin) for HAL_GPIO_TogglePin
main.o(i.main) refers to ps2kb.o(i.ps2kb_get_bus_status) for ps2kb_get_bus_status
main.o(i.main) refers to ps2kb.o(i.ps2kb_read) for ps2kb_read
main.o(i.main) refers to ps2kb.o(i.keyboard_reply) for keyboard_reply
main.o(i.main) refers to main.o(.bss) for .bss
main.o(i.main) refers to helpers.o(.bss) for spi_recv_buf
main.o(i.main) refers to main.o(.data) for .data
main.o(i.main) refers to helpers.o(.bss) for spi_recv_buf
stm32f0xx_it.o(i.DMA1_Channel2_3_IRQHandler) refers to stm32f0xx_hal_dma.o(i.HAL_DMA_IRQHandler) for HAL_DMA_IRQHandler
stm32f0xx_it.o(i.DMA1_Channel2_3_IRQHandler) refers to main.o(.bss) for hdma_spi1_rx
stm32f0xx_it.o(i.SysTick_Handler) refers to stm32f0xx_hal.o(i.HAL_IncTick) for HAL_IncTick
@@ -1303,6 +1323,7 @@ Removing Unused input sections from the image.
Removing stm32f0xx_hal_gpio.o(i.HAL_GPIO_EXTI_Callback), (2 bytes).
Removing stm32f0xx_hal_gpio.o(i.HAL_GPIO_EXTI_IRQHandler), (24 bytes).
Removing stm32f0xx_hal_gpio.o(i.HAL_GPIO_LockPin), (36 bytes).
Removing stm32f0xx_hal_gpio.o(i.HAL_GPIO_TogglePin), (8 bytes).
Removing stm32f0xx_hal_dma.o(.rev16_text), (4 bytes).
Removing stm32f0xx_hal_dma.o(.revsh_text), (4 bytes).
Removing stm32f0xx_hal_dma.o(i.HAL_DMA_Abort), (44 bytes).
@@ -1369,14 +1390,10 @@ Removing Unused input sections from the image.
Removing stm32f0xx_hal_flash_ex.o(i.HAL_FLASHEx_OBProgram), (316 bytes).
Removing delay_us.o(.rev16_text), (4 bytes).
Removing delay_us.o(.revsh_text), (4 bytes).
Removing delay_us.o(i.delay_us), (20 bytes).
Removing delay_us.o(i.micros), (24 bytes).
Removing helpers.o(.rev16_text), (4 bytes).
Removing helpers.o(.revsh_text), (4 bytes).
Removing ps2kb.o(.rev16_text), (4 bytes).
Removing ps2kb.o(.revsh_text), (4 bytes).
Removing ps2kb.o(i.ps2kb_init), (20 bytes).
Removing ps2kb.o(.data), (12 bytes).
Removing main.o(.rev16_text), (4 bytes).
Removing main.o(.revsh_text), (4 bytes).
Removing stm32f0xx_it.o(.rev16_text), (4 bytes).
@@ -1395,10 +1412,9 @@ Removing Unused input sections from the image.
Removing dfixul.o(.text), (64 bytes).
Removing cdrcmple.o(.text), (40 bytes).
Removing depilogue.o(.text), (190 bytes).
Removing stm32f0xx_hal_tim.o(i.__ARM_common_switch8), (26 bytes).
Removing depilogue.o(i.__ARM_clz), (46 bytes).
452 unused section(s) (total 33014 bytes) removed from the image.
448 unused section(s) (total 32920 bytes) removed from the image.
==============================================================================
@@ -1430,35 +1446,35 @@ Image Symbol Table
../Src/main.c 0x00000000 Number 0 main.o ABSOLUTE
../Src/stm32f0xx_hal_msp.c 0x00000000 Number 0 stm32f0xx_hal_msp.o ABSOLUTE
../Src/stm32f0xx_it.c 0x00000000 Number 0 stm32f0xx_it.o ABSOLUTE
../clib/microlib/division.c 0x00000000 Number 0 uidiv.o ABSOLUTE
../clib/microlib/division.c 0x00000000 Number 0 uldiv.o ABSOLUTE
../clib/microlib/init/entry.s 0x00000000 Number 0 entry2.o ABSOLUTE
../clib/microlib/init/entry.s 0x00000000 Number 0 entry8a.o ABSOLUTE
../clib/microlib/init/entry.s 0x00000000 Number 0 entry5.o ABSOLUTE
../clib/microlib/init/entry.s 0x00000000 Number 0 entry7a.o ABSOLUTE
../clib/microlib/init/entry.s 0x00000000 Number 0 entry7b.o ABSOLUTE
../clib/microlib/init/entry.s 0x00000000 Number 0 entry9b.o ABSOLUTE
../clib/microlib/division.c 0x00000000 Number 0 uidiv.o ABSOLUTE
../clib/microlib/init/entry.s 0x00000000 Number 0 entry.o ABSOLUTE
../clib/microlib/init/entry.s 0x00000000 Number 0 entry9a.o ABSOLUTE
../clib/microlib/init/entry.s 0x00000000 Number 0 entry8b.o ABSOLUTE
../clib/microlib/init/entry.s 0x00000000 Number 0 entry9a.o ABSOLUTE
../clib/microlib/init/entry.s 0x00000000 Number 0 entry2.o ABSOLUTE
../clib/microlib/init/entry.s 0x00000000 Number 0 entry5.o ABSOLUTE
../clib/microlib/init/entry.s 0x00000000 Number 0 entry8a.o ABSOLUTE
../clib/microlib/init/entry.s 0x00000000 Number 0 entry7a.o ABSOLUTE
../clib/microlib/init/entry.s 0x00000000 Number 0 entry11b.o ABSOLUTE
../clib/microlib/init/entry.s 0x00000000 Number 0 entry7b.o ABSOLUTE
../clib/microlib/init/entry.s 0x00000000 Number 0 entry11a.o ABSOLUTE
../clib/microlib/init/entry.s 0x00000000 Number 0 entry10b.o ABSOLUTE
../clib/microlib/init/entry.s 0x00000000 Number 0 entry10a.o ABSOLUTE
../clib/microlib/init/entry.s 0x00000000 Number 0 entry9b.o ABSOLUTE
../clib/microlib/longlong.c 0x00000000 Number 0 llsshr.o ABSOLUTE
../clib/microlib/longlong.c 0x00000000 Number 0 llushr.o ABSOLUTE
../clib/microlib/longlong.c 0x00000000 Number 0 llshl.o ABSOLUTE
../clib/microlib/longlong.c 0x00000000 Number 0 llushr.o ABSOLUTE
../clib/microlib/printf/printf.c 0x00000000 Number 0 printf3.o ABSOLUTE
../clib/microlib/printf/printf.c 0x00000000 Number 0 printf0.o ABSOLUTE
../clib/microlib/printf/printf.c 0x00000000 Number 0 printfb.o ABSOLUTE
../clib/microlib/printf/printf.c 0x00000000 Number 0 printf2.o ABSOLUTE
../clib/microlib/printf/printf.c 0x00000000 Number 0 printf1.o ABSOLUTE
../clib/microlib/printf/printf.c 0x00000000 Number 0 printfa.o ABSOLUTE
../clib/microlib/printf/printf.c 0x00000000 Number 0 printf8.o ABSOLUTE
../clib/microlib/printf/printf.c 0x00000000 Number 0 printf7.o ABSOLUTE
../clib/microlib/printf/printf.c 0x00000000 Number 0 printf6.o ABSOLUTE
../clib/microlib/printf/printf.c 0x00000000 Number 0 printf5.o ABSOLUTE
../clib/microlib/printf/printf.c 0x00000000 Number 0 printf4.o ABSOLUTE
../clib/microlib/printf/printf.c 0x00000000 Number 0 printf3.o ABSOLUTE
../clib/microlib/printf/printf.c 0x00000000 Number 0 printf2.o ABSOLUTE
../clib/microlib/printf/printf.c 0x00000000 Number 0 printf1.o ABSOLUTE
../clib/microlib/printf/printf.c 0x00000000 Number 0 printfb.o ABSOLUTE
../clib/microlib/printf/printf.c 0x00000000 Number 0 printf0.o ABSOLUTE
../clib/microlib/printf/printf.c 0x00000000 Number 0 printfa.o ABSOLUTE
../clib/microlib/printf/stubs.s 0x00000000 Number 0 stubs.o ABSOLUTE
../clib/microlib/stdio/streams.c 0x00000000 Number 0 stdout.o ABSOLUTE
../clib/microlib/stubs.s 0x00000000 Number 0 iusefp.o ABSOLUTE
@@ -1527,110 +1543,118 @@ Image Symbol Table
i.HAL_DMA_Start_IT 0x08000324 Section 0 stm32f0xx_hal_dma.o(i.HAL_DMA_Start_IT)
i.HAL_GPIO_Init 0x08000390 Section 0 stm32f0xx_hal_gpio.o(i.HAL_GPIO_Init)
i.HAL_GPIO_ReadPin 0x080004d8 Section 0 stm32f0xx_hal_gpio.o(i.HAL_GPIO_ReadPin)
i.HAL_GPIO_TogglePin 0x080004e2 Section 0 stm32f0xx_hal_gpio.o(i.HAL_GPIO_TogglePin)
i.HAL_GPIO_WritePin 0x080004ea Section 0 stm32f0xx_hal_gpio.o(i.HAL_GPIO_WritePin)
i.HAL_GetTick 0x080004f8 Section 0 stm32f0xx_hal.o(i.HAL_GetTick)
i.HAL_IncTick 0x08000504 Section 0 stm32f0xx_hal.o(i.HAL_IncTick)
i.HAL_Init 0x08000514 Section 0 stm32f0xx_hal.o(i.HAL_Init)
i.HAL_InitTick 0x08000534 Section 0 stm32f0xx_hal.o(i.HAL_InitTick)
i.HAL_MspInit 0x08000558 Section 0 stm32f0xx_hal_msp.o(i.HAL_MspInit)
i.HAL_NVIC_EnableIRQ 0x0800059c Section 0 stm32f0xx_hal_cortex.o(i.HAL_NVIC_EnableIRQ)
i.HAL_NVIC_SetPriority 0x080005b0 Section 0 stm32f0xx_hal_cortex.o(i.HAL_NVIC_SetPriority)
i.HAL_RCCEx_PeriphCLKConfig 0x080005b8 Section 0 stm32f0xx_hal_rcc_ex.o(i.HAL_RCCEx_PeriphCLKConfig)
i.HAL_RCC_ClockConfig 0x080006a4 Section 0 stm32f0xx_hal_rcc.o(i.HAL_RCC_ClockConfig)
i.HAL_RCC_GetHCLKFreq 0x080007d0 Section 0 stm32f0xx_hal_rcc.o(i.HAL_RCC_GetHCLKFreq)
i.HAL_RCC_GetPCLK1Freq 0x080007dc Section 0 stm32f0xx_hal_rcc.o(i.HAL_RCC_GetPCLK1Freq)
i.HAL_RCC_GetSysClockFreq 0x080007fc Section 0 stm32f0xx_hal_rcc.o(i.HAL_RCC_GetSysClockFreq)
i.HAL_RCC_OscConfig 0x08000878 Section 0 stm32f0xx_hal_rcc.o(i.HAL_RCC_OscConfig)
i.HAL_SPI_ErrorCallback 0x08000bcc Section 0 stm32f0xx_hal_spi.o(i.HAL_SPI_ErrorCallback)
i.HAL_SPI_Init 0x08000bce Section 0 stm32f0xx_hal_spi.o(i.HAL_SPI_Init)
i.HAL_SPI_MspInit 0x08000c88 Section 0 stm32f0xx_hal_msp.o(i.HAL_SPI_MspInit)
i.HAL_SPI_Receive_DMA 0x08000d20 Section 0 stm32f0xx_hal_spi.o(i.HAL_SPI_Receive_DMA)
i.HAL_SPI_RxCpltCallback 0x08000e5c Section 0 main.o(i.HAL_SPI_RxCpltCallback)
i.HAL_SPI_RxHalfCpltCallback 0x08000e7c Section 0 stm32f0xx_hal_spi.o(i.HAL_SPI_RxHalfCpltCallback)
i.HAL_SPI_TransmitReceive_DMA 0x08000e80 Section 0 stm32f0xx_hal_spi.o(i.HAL_SPI_TransmitReceive_DMA)
i.HAL_SPI_TxRxCpltCallback 0x08001030 Section 0 stm32f0xx_hal_spi.o(i.HAL_SPI_TxRxCpltCallback)
i.HAL_SPI_TxRxHalfCpltCallback 0x08001032 Section 0 stm32f0xx_hal_spi.o(i.HAL_SPI_TxRxHalfCpltCallback)
i.HAL_SYSTICK_CLKSourceConfig 0x08001034 Section 0 stm32f0xx_hal_cortex.o(i.HAL_SYSTICK_CLKSourceConfig)
i.HAL_SYSTICK_Callback 0x0800104c Section 0 stm32f0xx_hal_cortex.o(i.HAL_SYSTICK_Callback)
i.HAL_SYSTICK_Config 0x08001050 Section 0 stm32f0xx_hal_cortex.o(i.HAL_SYSTICK_Config)
i.HAL_SYSTICK_IRQHandler 0x08001080 Section 0 stm32f0xx_hal_cortex.o(i.HAL_SYSTICK_IRQHandler)
i.HAL_TIMEx_BreakCallback 0x08001088 Section 0 stm32f0xx_hal_tim_ex.o(i.HAL_TIMEx_BreakCallback)
i.HAL_TIMEx_CommutationCallback 0x0800108a Section 0 stm32f0xx_hal_tim_ex.o(i.HAL_TIMEx_CommutationCallback)
i.HAL_TIM_Base_Init 0x0800108c Section 0 stm32f0xx_hal_tim.o(i.HAL_TIM_Base_Init)
i.HAL_TIM_Base_MspInit 0x080010c0 Section 0 stm32f0xx_hal_msp.o(i.HAL_TIM_Base_MspInit)
i.HAL_TIM_Base_Start_IT 0x080010f4 Section 0 stm32f0xx_hal_tim.o(i.HAL_TIM_Base_Start_IT)
i.HAL_TIM_IC_CaptureCallback 0x0800110a Section 0 stm32f0xx_hal_tim.o(i.HAL_TIM_IC_CaptureCallback)
i.HAL_TIM_IRQHandler 0x0800110c Section 0 stm32f0xx_hal_tim.o(i.HAL_TIM_IRQHandler)
i.HAL_TIM_OC_DelayElapsedCallback 0x0800126e Section 0 stm32f0xx_hal_tim.o(i.HAL_TIM_OC_DelayElapsedCallback)
i.HAL_TIM_PWM_PulseFinishedCallback 0x08001270 Section 0 stm32f0xx_hal_tim.o(i.HAL_TIM_PWM_PulseFinishedCallback)
i.HAL_TIM_PeriodElapsedCallback 0x08001274 Section 0 delay_us.o(i.HAL_TIM_PeriodElapsedCallback)
i.HAL_TIM_TriggerCallback 0x08001284 Section 0 stm32f0xx_hal_tim.o(i.HAL_TIM_TriggerCallback)
i.HAL_UART_Init 0x08001286 Section 0 stm32f0xx_hal_uart.o(i.HAL_UART_Init)
i.HAL_UART_MspInit 0x080012f4 Section 0 stm32f0xx_hal_msp.o(i.HAL_UART_MspInit)
i.HAL_UART_Transmit 0x08001340 Section 0 stm32f0xx_hal_uart.o(i.HAL_UART_Transmit)
i.HardFault_Handler 0x08001408 Section 0 stm32f0xx_it.o(i.HardFault_Handler)
i.MX_SPI1_Init 0x0800140c Section 0 main.o(i.MX_SPI1_Init)
MX_SPI1_Init 0x0800140d Thumb Code 52 main.o(i.MX_SPI1_Init)
i.MX_USART1_UART_Init 0x08001448 Section 0 main.o(i.MX_USART1_UART_Init)
MX_USART1_UART_Init 0x08001449 Thumb Code 46 main.o(i.MX_USART1_UART_Init)
i.NMI_Handler 0x08001480 Section 0 stm32f0xx_it.o(i.NMI_Handler)
i.NVIC_SetPriority 0x08001484 Section 0 stm32f0xx_hal_cortex.o(i.NVIC_SetPriority)
NVIC_SetPriority 0x08001485 Thumb Code 60 stm32f0xx_hal_cortex.o(i.NVIC_SetPriority)
i.PendSV_Handler 0x080014c8 Section 0 stm32f0xx_it.o(i.PendSV_Handler)
i.SPI_DMAError 0x080014ca Section 0 stm32f0xx_hal_spi.o(i.SPI_DMAError)
SPI_DMAError 0x080014cb Thumb Code 34 stm32f0xx_hal_spi.o(i.SPI_DMAError)
i.SPI_DMAHalfReceiveCplt 0x080014ec Section 0 stm32f0xx_hal_spi.o(i.SPI_DMAHalfReceiveCplt)
SPI_DMAHalfReceiveCplt 0x080014ed Thumb Code 10 stm32f0xx_hal_spi.o(i.SPI_DMAHalfReceiveCplt)
i.SPI_DMAHalfTransmitReceiveCplt 0x080014f6 Section 0 stm32f0xx_hal_spi.o(i.SPI_DMAHalfTransmitReceiveCplt)
SPI_DMAHalfTransmitReceiveCplt 0x080014f7 Thumb Code 10 stm32f0xx_hal_spi.o(i.SPI_DMAHalfTransmitReceiveCplt)
i.SPI_DMAReceiveCplt 0x08001500 Section 0 stm32f0xx_hal_spi.o(i.SPI_DMAReceiveCplt)
SPI_DMAReceiveCplt 0x08001501 Thumb Code 88 stm32f0xx_hal_spi.o(i.SPI_DMAReceiveCplt)
i.SPI_DMATransmitReceiveCplt 0x08001558 Section 0 stm32f0xx_hal_spi.o(i.SPI_DMATransmitReceiveCplt)
SPI_DMATransmitReceiveCplt 0x08001559 Thumb Code 94 stm32f0xx_hal_spi.o(i.SPI_DMATransmitReceiveCplt)
i.SPI_EndRxTransaction 0x080015b6 Section 0 stm32f0xx_hal_spi.o(i.SPI_EndRxTransaction)
SPI_EndRxTransaction 0x080015b7 Thumb Code 120 stm32f0xx_hal_spi.o(i.SPI_EndRxTransaction)
i.SPI_EndRxTxTransaction 0x0800162e Section 0 stm32f0xx_hal_spi.o(i.SPI_EndRxTxTransaction)
SPI_EndRxTxTransaction 0x0800162f Thumb Code 76 stm32f0xx_hal_spi.o(i.SPI_EndRxTxTransaction)
i.SPI_WaitFifoStateUntilTimeout 0x0800167a Section 0 stm32f0xx_hal_spi.o(i.SPI_WaitFifoStateUntilTimeout)
SPI_WaitFifoStateUntilTimeout 0x0800167b Thumb Code 150 stm32f0xx_hal_spi.o(i.SPI_WaitFifoStateUntilTimeout)
i.SPI_WaitFlagStateUntilTimeout 0x08001710 Section 0 stm32f0xx_hal_spi.o(i.SPI_WaitFlagStateUntilTimeout)
SPI_WaitFlagStateUntilTimeout 0x08001711 Thumb Code 140 stm32f0xx_hal_spi.o(i.SPI_WaitFlagStateUntilTimeout)
i.SVC_Handler 0x0800179c Section 0 stm32f0xx_it.o(i.SVC_Handler)
i.SysTick_Handler 0x0800179e Section 0 stm32f0xx_it.o(i.SysTick_Handler)
i.SystemClock_Config 0x080017aa Section 0 main.o(i.SystemClock_Config)
i.SystemInit 0x08001820 Section 0 system_stm32f0xx.o(i.SystemInit)
i.TIM14_IRQHandler 0x0800187c Section 0 stm32f0xx_it.o(i.TIM14_IRQHandler)
i.TIM_Base_SetConfig 0x0800188c Section 0 stm32f0xx_hal_tim.o(i.TIM_Base_SetConfig)
i.UART_AdvFeatureConfig 0x08001908 Section 0 stm32f0xx_hal_uart.o(i.UART_AdvFeatureConfig)
i.UART_CheckIdleState 0x080019d2 Section 0 stm32f0xx_hal_uart.o(i.UART_CheckIdleState)
i.UART_SetConfig 0x080019e4 Section 0 stm32f0xx_hal_uart.o(i.UART_SetConfig)
i.UART_WaitOnFlagUntilTimeout 0x08001af8 Section 0 stm32f0xx_hal_uart.o(i.UART_WaitOnFlagUntilTimeout)
i._Error_Handler 0x08001b58 Section 0 main.o(i._Error_Handler)
i.__0printf$8 0x08001b5c Section 0 printf8.o(i.__0printf$8)
i.__scatterload_copy 0x08001b7c Section 14 handlers.o(i.__scatterload_copy)
i.__scatterload_null 0x08001b8a Section 2 handlers.o(i.__scatterload_null)
i.__scatterload_zeroinit 0x08001b8c Section 14 handlers.o(i.__scatterload_zeroinit)
i._printf_core 0x08001b9c Section 0 printf8.o(i._printf_core)
_printf_core 0x08001b9d Thumb Code 1020 printf8.o(i._printf_core)
i._printf_post_padding 0x08001fc4 Section 0 printf8.o(i._printf_post_padding)
_printf_post_padding 0x08001fc5 Thumb Code 32 printf8.o(i._printf_post_padding)
i._printf_pre_padding 0x08001fe4 Section 0 printf8.o(i._printf_pre_padding)
_printf_pre_padding 0x08001fe5 Thumb Code 44 printf8.o(i._printf_pre_padding)
i.delay_us_init 0x08002010 Section 0 delay_us.o(i.delay_us_init)
i.fputc 0x08002020 Section 0 main.o(i.fputc)
i.main 0x08002038 Section 0 main.o(i.main)
.constdata 0x08002148 Section 16 system_stm32f0xx.o(.constdata)
.constdata 0x08002158 Section 8 system_stm32f0xx.o(.constdata)
i.HAL_GPIO_WritePin 0x080004e2 Section 0 stm32f0xx_hal_gpio.o(i.HAL_GPIO_WritePin)
i.HAL_GetTick 0x080004f0 Section 0 stm32f0xx_hal.o(i.HAL_GetTick)
i.HAL_IncTick 0x080004fc Section 0 stm32f0xx_hal.o(i.HAL_IncTick)
i.HAL_Init 0x0800050c Section 0 stm32f0xx_hal.o(i.HAL_Init)
i.HAL_InitTick 0x0800052c Section 0 stm32f0xx_hal.o(i.HAL_InitTick)
i.HAL_MspInit 0x08000550 Section 0 stm32f0xx_hal_msp.o(i.HAL_MspInit)
i.HAL_NVIC_EnableIRQ 0x08000594 Section 0 stm32f0xx_hal_cortex.o(i.HAL_NVIC_EnableIRQ)
i.HAL_NVIC_SetPriority 0x080005a8 Section 0 stm32f0xx_hal_cortex.o(i.HAL_NVIC_SetPriority)
i.HAL_RCCEx_PeriphCLKConfig 0x080005b0 Section 0 stm32f0xx_hal_rcc_ex.o(i.HAL_RCCEx_PeriphCLKConfig)
i.HAL_RCC_ClockConfig 0x0800069c Section 0 stm32f0xx_hal_rcc.o(i.HAL_RCC_ClockConfig)
i.HAL_RCC_GetHCLKFreq 0x080007c8 Section 0 stm32f0xx_hal_rcc.o(i.HAL_RCC_GetHCLKFreq)
i.HAL_RCC_GetPCLK1Freq 0x080007d4 Section 0 stm32f0xx_hal_rcc.o(i.HAL_RCC_GetPCLK1Freq)
i.HAL_RCC_GetSysClockFreq 0x080007f4 Section 0 stm32f0xx_hal_rcc.o(i.HAL_RCC_GetSysClockFreq)
i.HAL_RCC_OscConfig 0x08000870 Section 0 stm32f0xx_hal_rcc.o(i.HAL_RCC_OscConfig)
i.HAL_SPI_ErrorCallback 0x08000bc4 Section 0 stm32f0xx_hal_spi.o(i.HAL_SPI_ErrorCallback)
i.HAL_SPI_Init 0x08000bc6 Section 0 stm32f0xx_hal_spi.o(i.HAL_SPI_Init)
i.HAL_SPI_MspInit 0x08000c80 Section 0 stm32f0xx_hal_msp.o(i.HAL_SPI_MspInit)
i.HAL_SPI_Receive_DMA 0x08000d18 Section 0 stm32f0xx_hal_spi.o(i.HAL_SPI_Receive_DMA)
i.HAL_SPI_RxCpltCallback 0x08000e54 Section 0 main.o(i.HAL_SPI_RxCpltCallback)
i.HAL_SPI_RxHalfCpltCallback 0x08000e74 Section 0 stm32f0xx_hal_spi.o(i.HAL_SPI_RxHalfCpltCallback)
i.HAL_SPI_TransmitReceive_DMA 0x08000e78 Section 0 stm32f0xx_hal_spi.o(i.HAL_SPI_TransmitReceive_DMA)
i.HAL_SPI_TxRxCpltCallback 0x08001028 Section 0 stm32f0xx_hal_spi.o(i.HAL_SPI_TxRxCpltCallback)
i.HAL_SPI_TxRxHalfCpltCallback 0x0800102a Section 0 stm32f0xx_hal_spi.o(i.HAL_SPI_TxRxHalfCpltCallback)
i.HAL_SYSTICK_CLKSourceConfig 0x0800102c Section 0 stm32f0xx_hal_cortex.o(i.HAL_SYSTICK_CLKSourceConfig)
i.HAL_SYSTICK_Callback 0x08001044 Section 0 stm32f0xx_hal_cortex.o(i.HAL_SYSTICK_Callback)
i.HAL_SYSTICK_Config 0x08001048 Section 0 stm32f0xx_hal_cortex.o(i.HAL_SYSTICK_Config)
i.HAL_SYSTICK_IRQHandler 0x08001078 Section 0 stm32f0xx_hal_cortex.o(i.HAL_SYSTICK_IRQHandler)
i.HAL_TIMEx_BreakCallback 0x08001080 Section 0 stm32f0xx_hal_tim_ex.o(i.HAL_TIMEx_BreakCallback)
i.HAL_TIMEx_CommutationCallback 0x08001082 Section 0 stm32f0xx_hal_tim_ex.o(i.HAL_TIMEx_CommutationCallback)
i.HAL_TIM_Base_Init 0x08001084 Section 0 stm32f0xx_hal_tim.o(i.HAL_TIM_Base_Init)
i.HAL_TIM_Base_MspInit 0x080010b8 Section 0 stm32f0xx_hal_msp.o(i.HAL_TIM_Base_MspInit)
i.HAL_TIM_Base_Start_IT 0x080010ec Section 0 stm32f0xx_hal_tim.o(i.HAL_TIM_Base_Start_IT)
i.HAL_TIM_IC_CaptureCallback 0x08001102 Section 0 stm32f0xx_hal_tim.o(i.HAL_TIM_IC_CaptureCallback)
i.HAL_TIM_IRQHandler 0x08001104 Section 0 stm32f0xx_hal_tim.o(i.HAL_TIM_IRQHandler)
i.HAL_TIM_OC_DelayElapsedCallback 0x08001266 Section 0 stm32f0xx_hal_tim.o(i.HAL_TIM_OC_DelayElapsedCallback)
i.HAL_TIM_PWM_PulseFinishedCallback 0x08001268 Section 0 stm32f0xx_hal_tim.o(i.HAL_TIM_PWM_PulseFinishedCallback)
i.HAL_TIM_PeriodElapsedCallback 0x0800126c Section 0 delay_us.o(i.HAL_TIM_PeriodElapsedCallback)
i.HAL_TIM_TriggerCallback 0x0800127c Section 0 stm32f0xx_hal_tim.o(i.HAL_TIM_TriggerCallback)
i.HAL_UART_Init 0x0800127e Section 0 stm32f0xx_hal_uart.o(i.HAL_UART_Init)
i.HAL_UART_MspInit 0x080012ec Section 0 stm32f0xx_hal_msp.o(i.HAL_UART_MspInit)
i.HAL_UART_Transmit 0x08001338 Section 0 stm32f0xx_hal_uart.o(i.HAL_UART_Transmit)
i.HardFault_Handler 0x08001400 Section 0 stm32f0xx_it.o(i.HardFault_Handler)
i.MX_SPI1_Init 0x08001404 Section 0 main.o(i.MX_SPI1_Init)
MX_SPI1_Init 0x08001405 Thumb Code 52 main.o(i.MX_SPI1_Init)
i.MX_USART1_UART_Init 0x08001440 Section 0 main.o(i.MX_USART1_UART_Init)
MX_USART1_UART_Init 0x08001441 Thumb Code 46 main.o(i.MX_USART1_UART_Init)
i.NMI_Handler 0x08001478 Section 0 stm32f0xx_it.o(i.NMI_Handler)
i.NVIC_SetPriority 0x0800147c Section 0 stm32f0xx_hal_cortex.o(i.NVIC_SetPriority)
NVIC_SetPriority 0x0800147d Thumb Code 60 stm32f0xx_hal_cortex.o(i.NVIC_SetPriority)
i.PendSV_Handler 0x080014c0 Section 0 stm32f0xx_it.o(i.PendSV_Handler)
i.SPI_DMAError 0x080014c2 Section 0 stm32f0xx_hal_spi.o(i.SPI_DMAError)
SPI_DMAError 0x080014c3 Thumb Code 34 stm32f0xx_hal_spi.o(i.SPI_DMAError)
i.SPI_DMAHalfReceiveCplt 0x080014e4 Section 0 stm32f0xx_hal_spi.o(i.SPI_DMAHalfReceiveCplt)
SPI_DMAHalfReceiveCplt 0x080014e5 Thumb Code 10 stm32f0xx_hal_spi.o(i.SPI_DMAHalfReceiveCplt)
i.SPI_DMAHalfTransmitReceiveCplt 0x080014ee Section 0 stm32f0xx_hal_spi.o(i.SPI_DMAHalfTransmitReceiveCplt)
SPI_DMAHalfTransmitReceiveCplt 0x080014ef Thumb Code 10 stm32f0xx_hal_spi.o(i.SPI_DMAHalfTransmitReceiveCplt)
i.SPI_DMAReceiveCplt 0x080014f8 Section 0 stm32f0xx_hal_spi.o(i.SPI_DMAReceiveCplt)
SPI_DMAReceiveCplt 0x080014f9 Thumb Code 88 stm32f0xx_hal_spi.o(i.SPI_DMAReceiveCplt)
i.SPI_DMATransmitReceiveCplt 0x08001550 Section 0 stm32f0xx_hal_spi.o(i.SPI_DMATransmitReceiveCplt)
SPI_DMATransmitReceiveCplt 0x08001551 Thumb Code 94 stm32f0xx_hal_spi.o(i.SPI_DMATransmitReceiveCplt)
i.SPI_EndRxTransaction 0x080015ae Section 0 stm32f0xx_hal_spi.o(i.SPI_EndRxTransaction)
SPI_EndRxTransaction 0x080015af Thumb Code 120 stm32f0xx_hal_spi.o(i.SPI_EndRxTransaction)
i.SPI_EndRxTxTransaction 0x08001626 Section 0 stm32f0xx_hal_spi.o(i.SPI_EndRxTxTransaction)
SPI_EndRxTxTransaction 0x08001627 Thumb Code 76 stm32f0xx_hal_spi.o(i.SPI_EndRxTxTransaction)
i.SPI_WaitFifoStateUntilTimeout 0x08001672 Section 0 stm32f0xx_hal_spi.o(i.SPI_WaitFifoStateUntilTimeout)
SPI_WaitFifoStateUntilTimeout 0x08001673 Thumb Code 150 stm32f0xx_hal_spi.o(i.SPI_WaitFifoStateUntilTimeout)
i.SPI_WaitFlagStateUntilTimeout 0x08001708 Section 0 stm32f0xx_hal_spi.o(i.SPI_WaitFlagStateUntilTimeout)
SPI_WaitFlagStateUntilTimeout 0x08001709 Thumb Code 140 stm32f0xx_hal_spi.o(i.SPI_WaitFlagStateUntilTimeout)
i.SVC_Handler 0x08001794 Section 0 stm32f0xx_it.o(i.SVC_Handler)
i.SysTick_Handler 0x08001796 Section 0 stm32f0xx_it.o(i.SysTick_Handler)
i.SystemClock_Config 0x080017a2 Section 0 main.o(i.SystemClock_Config)
i.SystemInit 0x08001818 Section 0 system_stm32f0xx.o(i.SystemInit)
i.TIM14_IRQHandler 0x08001874 Section 0 stm32f0xx_it.o(i.TIM14_IRQHandler)
i.TIM_Base_SetConfig 0x08001884 Section 0 stm32f0xx_hal_tim.o(i.TIM_Base_SetConfig)
i.UART_AdvFeatureConfig 0x08001900 Section 0 stm32f0xx_hal_uart.o(i.UART_AdvFeatureConfig)
i.UART_CheckIdleState 0x080019ca Section 0 stm32f0xx_hal_uart.o(i.UART_CheckIdleState)
i.UART_SetConfig 0x080019dc Section 0 stm32f0xx_hal_uart.o(i.UART_SetConfig)
i.UART_WaitOnFlagUntilTimeout 0x08001af0 Section 0 stm32f0xx_hal_uart.o(i.UART_WaitOnFlagUntilTimeout)
i._Error_Handler 0x08001b50 Section 0 main.o(i._Error_Handler)
i.__0printf$8 0x08001b54 Section 0 printf8.o(i.__0printf$8)
i.__ARM_common_switch8 0x08001b74 Section 0 stm32f0xx_hal_tim.o(i.__ARM_common_switch8)
i.__scatterload_copy 0x08001b8e Section 14 handlers.o(i.__scatterload_copy)
i.__scatterload_null 0x08001b9c Section 2 handlers.o(i.__scatterload_null)
i.__scatterload_zeroinit 0x08001b9e Section 14 handlers.o(i.__scatterload_zeroinit)
i._printf_core 0x08001bac Section 0 printf8.o(i._printf_core)
_printf_core 0x08001bad Thumb Code 1020 printf8.o(i._printf_core)
i._printf_post_padding 0x08001fd4 Section 0 printf8.o(i._printf_post_padding)
_printf_post_padding 0x08001fd5 Thumb Code 32 printf8.o(i._printf_post_padding)
i._printf_pre_padding 0x08001ff4 Section 0 printf8.o(i._printf_pre_padding)
_printf_pre_padding 0x08001ff5 Thumb Code 44 printf8.o(i._printf_pre_padding)
i.delay_us 0x08002020 Section 0 delay_us.o(i.delay_us)
i.delay_us_init 0x08002034 Section 0 delay_us.o(i.delay_us_init)
i.fputc 0x08002044 Section 0 main.o(i.fputc)
i.keyboard_reply 0x0800205c Section 0 ps2kb.o(i.keyboard_reply)
i.main 0x080020d4 Section 0 main.o(i.main)
i.micros 0x080021e8 Section 0 delay_us.o(i.micros)
i.ps2kb_get_bus_status 0x08002200 Section 0 ps2kb.o(i.ps2kb_get_bus_status)
i.ps2kb_init 0x08002260 Section 0 ps2kb.o(i.ps2kb_init)
i.ps2kb_read 0x08002284 Section 0 ps2kb.o(i.ps2kb_read)
i.ps2kb_write 0x0800235c Section 0 ps2kb.o(i.ps2kb_write)
.constdata 0x08002480 Section 16 system_stm32f0xx.o(.constdata)
.constdata 0x08002490 Section 8 system_stm32f0xx.o(.constdata)
.data 0x20000000 Section 4 stm32f0xx_hal.o(.data)
.data 0x20000004 Section 8 delay_us.o(.data)
.data 0x2000000c Section 1 main.o(.data)
.data 0x20000010 Section 4 system_stm32f0xx.o(.data)
.data 0x20000014 Section 4 stdout.o(.data)
.bss 0x20000018 Section 32 helpers.o(.bss)
.bss 0x20000038 Section 276 main.o(.bss)
.bss 0x2000014c Section 68 main.o(.bss)
STACK 0x20000190 Section 1024 startup_stm32f030x6.o(STACK)
.data 0x2000000c Section 16 ps2kb.o(.data)
.data 0x2000001c Section 1 main.o(.data)
.data 0x20000020 Section 4 system_stm32f0xx.o(.data)
.data 0x20000024 Section 4 stdout.o(.data)
.bss 0x20000028 Section 32 helpers.o(.bss)
.bss 0x20000048 Section 276 main.o(.bss)
.bss 0x2000015c Section 68 main.o(.bss)
STACK 0x200001a0 Section 1024 startup_stm32f030x6.o(STACK)
Global Symbols
@@ -1730,87 +1754,99 @@ Image Symbol Table
HAL_DMA_Start_IT 0x08000325 Thumb Code 106 stm32f0xx_hal_dma.o(i.HAL_DMA_Start_IT)
HAL_GPIO_Init 0x08000391 Thumb Code 302 stm32f0xx_hal_gpio.o(i.HAL_GPIO_Init)
HAL_GPIO_ReadPin 0x080004d9 Thumb Code 10 stm32f0xx_hal_gpio.o(i.HAL_GPIO_ReadPin)
HAL_GPIO_TogglePin 0x080004e3 Thumb Code 8 stm32f0xx_hal_gpio.o(i.HAL_GPIO_TogglePin)
HAL_GPIO_WritePin 0x080004eb Thumb Code 12 stm32f0xx_hal_gpio.o(i.HAL_GPIO_WritePin)
HAL_GetTick 0x080004f9 Thumb Code 6 stm32f0xx_hal.o(i.HAL_GetTick)
HAL_IncTick 0x08000505 Thumb Code 10 stm32f0xx_hal.o(i.HAL_IncTick)
HAL_Init 0x08000515 Thumb Code 26 stm32f0xx_hal.o(i.HAL_Init)
HAL_InitTick 0x08000535 Thumb Code 34 stm32f0xx_hal.o(i.HAL_InitTick)
HAL_MspInit 0x08000559 Thumb Code 64 stm32f0xx_hal_msp.o(i.HAL_MspInit)
HAL_NVIC_EnableIRQ 0x0800059d Thumb Code 14 stm32f0xx_hal_cortex.o(i.HAL_NVIC_EnableIRQ)
HAL_NVIC_SetPriority 0x080005b1 Thumb Code 8 stm32f0xx_hal_cortex.o(i.HAL_NVIC_SetPriority)
HAL_RCCEx_PeriphCLKConfig 0x080005b9 Thumb Code 222 stm32f0xx_hal_rcc_ex.o(i.HAL_RCCEx_PeriphCLKConfig)
HAL_RCC_ClockConfig 0x080006a5 Thumb Code 280 stm32f0xx_hal_rcc.o(i.HAL_RCC_ClockConfig)
HAL_RCC_GetHCLKFreq 0x080007d1 Thumb Code 6 stm32f0xx_hal_rcc.o(i.HAL_RCC_GetHCLKFreq)
HAL_RCC_GetPCLK1Freq 0x080007dd Thumb Code 20 stm32f0xx_hal_rcc.o(i.HAL_RCC_GetPCLK1Freq)
HAL_RCC_GetSysClockFreq 0x080007fd Thumb Code 78 stm32f0xx_hal_rcc.o(i.HAL_RCC_GetSysClockFreq)
HAL_RCC_OscConfig 0x08000879 Thumb Code 838 stm32f0xx_hal_rcc.o(i.HAL_RCC_OscConfig)
HAL_SPI_ErrorCallback 0x08000bcd Thumb Code 2 stm32f0xx_hal_spi.o(i.HAL_SPI_ErrorCallback)
HAL_SPI_Init 0x08000bcf Thumb Code 184 stm32f0xx_hal_spi.o(i.HAL_SPI_Init)
HAL_SPI_MspInit 0x08000c89 Thumb Code 108 stm32f0xx_hal_msp.o(i.HAL_SPI_MspInit)
HAL_SPI_Receive_DMA 0x08000d21 Thumb Code 304 stm32f0xx_hal_spi.o(i.HAL_SPI_Receive_DMA)
HAL_SPI_RxCpltCallback 0x08000e5d Thumb Code 20 main.o(i.HAL_SPI_RxCpltCallback)
HAL_SPI_RxHalfCpltCallback 0x08000e7d Thumb Code 2 stm32f0xx_hal_spi.o(i.HAL_SPI_RxHalfCpltCallback)
HAL_SPI_TransmitReceive_DMA 0x08000e81 Thumb Code 402 stm32f0xx_hal_spi.o(i.HAL_SPI_TransmitReceive_DMA)
HAL_SPI_TxRxCpltCallback 0x08001031 Thumb Code 2 stm32f0xx_hal_spi.o(i.HAL_SPI_TxRxCpltCallback)
HAL_SPI_TxRxHalfCpltCallback 0x08001033 Thumb Code 2 stm32f0xx_hal_spi.o(i.HAL_SPI_TxRxHalfCpltCallback)
HAL_SYSTICK_CLKSourceConfig 0x08001035 Thumb Code 20 stm32f0xx_hal_cortex.o(i.HAL_SYSTICK_CLKSourceConfig)
HAL_SYSTICK_Callback 0x0800104d Thumb Code 2 stm32f0xx_hal_cortex.o(i.HAL_SYSTICK_Callback)
HAL_SYSTICK_Config 0x08001051 Thumb Code 38 stm32f0xx_hal_cortex.o(i.HAL_SYSTICK_Config)
HAL_SYSTICK_IRQHandler 0x08001081 Thumb Code 8 stm32f0xx_hal_cortex.o(i.HAL_SYSTICK_IRQHandler)
HAL_TIMEx_BreakCallback 0x08001089 Thumb Code 2 stm32f0xx_hal_tim_ex.o(i.HAL_TIMEx_BreakCallback)
HAL_TIMEx_CommutationCallback 0x0800108b Thumb Code 2 stm32f0xx_hal_tim_ex.o(i.HAL_TIMEx_CommutationCallback)
HAL_TIM_Base_Init 0x0800108d Thumb Code 52 stm32f0xx_hal_tim.o(i.HAL_TIM_Base_Init)
HAL_TIM_Base_MspInit 0x080010c1 Thumb Code 44 stm32f0xx_hal_msp.o(i.HAL_TIM_Base_MspInit)
HAL_TIM_Base_Start_IT 0x080010f5 Thumb Code 22 stm32f0xx_hal_tim.o(i.HAL_TIM_Base_Start_IT)
HAL_TIM_IC_CaptureCallback 0x0800110b Thumb Code 2 stm32f0xx_hal_tim.o(i.HAL_TIM_IC_CaptureCallback)
HAL_TIM_IRQHandler 0x0800110d Thumb Code 354 stm32f0xx_hal_tim.o(i.HAL_TIM_IRQHandler)
HAL_TIM_OC_DelayElapsedCallback 0x0800126f Thumb Code 2 stm32f0xx_hal_tim.o(i.HAL_TIM_OC_DelayElapsedCallback)
HAL_TIM_PWM_PulseFinishedCallback 0x08001271 Thumb Code 2 stm32f0xx_hal_tim.o(i.HAL_TIM_PWM_PulseFinishedCallback)
HAL_TIM_PeriodElapsedCallback 0x08001275 Thumb Code 10 delay_us.o(i.HAL_TIM_PeriodElapsedCallback)
HAL_TIM_TriggerCallback 0x08001285 Thumb Code 2 stm32f0xx_hal_tim.o(i.HAL_TIM_TriggerCallback)
HAL_UART_Init 0x08001287 Thumb Code 108 stm32f0xx_hal_uart.o(i.HAL_UART_Init)
HAL_UART_MspInit 0x080012f5 Thumb Code 66 stm32f0xx_hal_msp.o(i.HAL_UART_MspInit)
HAL_UART_Transmit 0x08001341 Thumb Code 200 stm32f0xx_hal_uart.o(i.HAL_UART_Transmit)
HardFault_Handler 0x08001409 Thumb Code 2 stm32f0xx_it.o(i.HardFault_Handler)
NMI_Handler 0x08001481 Thumb Code 2 stm32f0xx_it.o(i.NMI_Handler)
PendSV_Handler 0x080014c9 Thumb Code 2 stm32f0xx_it.o(i.PendSV_Handler)
SVC_Handler 0x0800179d Thumb Code 2 stm32f0xx_it.o(i.SVC_Handler)
SysTick_Handler 0x0800179f Thumb Code 12 stm32f0xx_it.o(i.SysTick_Handler)
SystemClock_Config 0x080017ab Thumb Code 118 main.o(i.SystemClock_Config)
SystemInit 0x08001821 Thumb Code 78 system_stm32f0xx.o(i.SystemInit)
TIM14_IRQHandler 0x0800187d Thumb Code 10 stm32f0xx_it.o(i.TIM14_IRQHandler)
TIM_Base_SetConfig 0x0800188d Thumb Code 102 stm32f0xx_hal_tim.o(i.TIM_Base_SetConfig)
UART_AdvFeatureConfig 0x08001909 Thumb Code 202 stm32f0xx_hal_uart.o(i.UART_AdvFeatureConfig)
UART_CheckIdleState 0x080019d3 Thumb Code 18 stm32f0xx_hal_uart.o(i.UART_CheckIdleState)
UART_SetConfig 0x080019e5 Thumb Code 258 stm32f0xx_hal_uart.o(i.UART_SetConfig)
UART_WaitOnFlagUntilTimeout 0x08001af9 Thumb Code 96 stm32f0xx_hal_uart.o(i.UART_WaitOnFlagUntilTimeout)
_Error_Handler 0x08001b59 Thumb Code 2 main.o(i._Error_Handler)
__0printf$8 0x08001b5d Thumb Code 24 printf8.o(i.__0printf$8)
__1printf$8 0x08001b5d Thumb Code 0 printf8.o(i.__0printf$8)
__2printf 0x08001b5d Thumb Code 0 printf8.o(i.__0printf$8)
__scatterload_copy 0x08001b7d Thumb Code 14 handlers.o(i.__scatterload_copy)
__scatterload_null 0x08001b8b Thumb Code 2 handlers.o(i.__scatterload_null)
__scatterload_zeroinit 0x08001b8d Thumb Code 14 handlers.o(i.__scatterload_zeroinit)
delay_us_init 0x08002011 Thumb Code 12 delay_us.o(i.delay_us_init)
fputc 0x08002021 Thumb Code 18 main.o(i.fputc)
main 0x08002039 Thumb Code 218 main.o(i.main)
AHBPrescTable 0x08002148 Data 16 system_stm32f0xx.o(.constdata)
APBPrescTable 0x08002158 Data 8 system_stm32f0xx.o(.constdata)
Region$$Table$$Base 0x08002160 Number 0 anon$$obj.o(Region$$Table)
Region$$Table$$Limit 0x08002180 Number 0 anon$$obj.o(Region$$Table)
HAL_GPIO_WritePin 0x080004e3 Thumb Code 12 stm32f0xx_hal_gpio.o(i.HAL_GPIO_WritePin)
HAL_GetTick 0x080004f1 Thumb Code 6 stm32f0xx_hal.o(i.HAL_GetTick)
HAL_IncTick 0x080004fd Thumb Code 10 stm32f0xx_hal.o(i.HAL_IncTick)
HAL_Init 0x0800050d Thumb Code 26 stm32f0xx_hal.o(i.HAL_Init)
HAL_InitTick 0x0800052d Thumb Code 34 stm32f0xx_hal.o(i.HAL_InitTick)
HAL_MspInit 0x08000551 Thumb Code 64 stm32f0xx_hal_msp.o(i.HAL_MspInit)
HAL_NVIC_EnableIRQ 0x08000595 Thumb Code 14 stm32f0xx_hal_cortex.o(i.HAL_NVIC_EnableIRQ)
HAL_NVIC_SetPriority 0x080005a9 Thumb Code 8 stm32f0xx_hal_cortex.o(i.HAL_NVIC_SetPriority)
HAL_RCCEx_PeriphCLKConfig 0x080005b1 Thumb Code 222 stm32f0xx_hal_rcc_ex.o(i.HAL_RCCEx_PeriphCLKConfig)
HAL_RCC_ClockConfig 0x0800069d Thumb Code 280 stm32f0xx_hal_rcc.o(i.HAL_RCC_ClockConfig)
HAL_RCC_GetHCLKFreq 0x080007c9 Thumb Code 6 stm32f0xx_hal_rcc.o(i.HAL_RCC_GetHCLKFreq)
HAL_RCC_GetPCLK1Freq 0x080007d5 Thumb Code 20 stm32f0xx_hal_rcc.o(i.HAL_RCC_GetPCLK1Freq)
HAL_RCC_GetSysClockFreq 0x080007f5 Thumb Code 78 stm32f0xx_hal_rcc.o(i.HAL_RCC_GetSysClockFreq)
HAL_RCC_OscConfig 0x08000871 Thumb Code 838 stm32f0xx_hal_rcc.o(i.HAL_RCC_OscConfig)
HAL_SPI_ErrorCallback 0x08000bc5 Thumb Code 2 stm32f0xx_hal_spi.o(i.HAL_SPI_ErrorCallback)
HAL_SPI_Init 0x08000bc7 Thumb Code 184 stm32f0xx_hal_spi.o(i.HAL_SPI_Init)
HAL_SPI_MspInit 0x08000c81 Thumb Code 108 stm32f0xx_hal_msp.o(i.HAL_SPI_MspInit)
HAL_SPI_Receive_DMA 0x08000d19 Thumb Code 304 stm32f0xx_hal_spi.o(i.HAL_SPI_Receive_DMA)
HAL_SPI_RxCpltCallback 0x08000e55 Thumb Code 20 main.o(i.HAL_SPI_RxCpltCallback)
HAL_SPI_RxHalfCpltCallback 0x08000e75 Thumb Code 2 stm32f0xx_hal_spi.o(i.HAL_SPI_RxHalfCpltCallback)
HAL_SPI_TransmitReceive_DMA 0x08000e79 Thumb Code 402 stm32f0xx_hal_spi.o(i.HAL_SPI_TransmitReceive_DMA)
HAL_SPI_TxRxCpltCallback 0x08001029 Thumb Code 2 stm32f0xx_hal_spi.o(i.HAL_SPI_TxRxCpltCallback)
HAL_SPI_TxRxHalfCpltCallback 0x0800102b Thumb Code 2 stm32f0xx_hal_spi.o(i.HAL_SPI_TxRxHalfCpltCallback)
HAL_SYSTICK_CLKSourceConfig 0x0800102d Thumb Code 20 stm32f0xx_hal_cortex.o(i.HAL_SYSTICK_CLKSourceConfig)
HAL_SYSTICK_Callback 0x08001045 Thumb Code 2 stm32f0xx_hal_cortex.o(i.HAL_SYSTICK_Callback)
HAL_SYSTICK_Config 0x08001049 Thumb Code 38 stm32f0xx_hal_cortex.o(i.HAL_SYSTICK_Config)
HAL_SYSTICK_IRQHandler 0x08001079 Thumb Code 8 stm32f0xx_hal_cortex.o(i.HAL_SYSTICK_IRQHandler)
HAL_TIMEx_BreakCallback 0x08001081 Thumb Code 2 stm32f0xx_hal_tim_ex.o(i.HAL_TIMEx_BreakCallback)
HAL_TIMEx_CommutationCallback 0x08001083 Thumb Code 2 stm32f0xx_hal_tim_ex.o(i.HAL_TIMEx_CommutationCallback)
HAL_TIM_Base_Init 0x08001085 Thumb Code 52 stm32f0xx_hal_tim.o(i.HAL_TIM_Base_Init)
HAL_TIM_Base_MspInit 0x080010b9 Thumb Code 44 stm32f0xx_hal_msp.o(i.HAL_TIM_Base_MspInit)
HAL_TIM_Base_Start_IT 0x080010ed Thumb Code 22 stm32f0xx_hal_tim.o(i.HAL_TIM_Base_Start_IT)
HAL_TIM_IC_CaptureCallback 0x08001103 Thumb Code 2 stm32f0xx_hal_tim.o(i.HAL_TIM_IC_CaptureCallback)
HAL_TIM_IRQHandler 0x08001105 Thumb Code 354 stm32f0xx_hal_tim.o(i.HAL_TIM_IRQHandler)
HAL_TIM_OC_DelayElapsedCallback 0x08001267 Thumb Code 2 stm32f0xx_hal_tim.o(i.HAL_TIM_OC_DelayElapsedCallback)
HAL_TIM_PWM_PulseFinishedCallback 0x08001269 Thumb Code 2 stm32f0xx_hal_tim.o(i.HAL_TIM_PWM_PulseFinishedCallback)
HAL_TIM_PeriodElapsedCallback 0x0800126d Thumb Code 10 delay_us.o(i.HAL_TIM_PeriodElapsedCallback)
HAL_TIM_TriggerCallback 0x0800127d Thumb Code 2 stm32f0xx_hal_tim.o(i.HAL_TIM_TriggerCallback)
HAL_UART_Init 0x0800127f Thumb Code 108 stm32f0xx_hal_uart.o(i.HAL_UART_Init)
HAL_UART_MspInit 0x080012ed Thumb Code 66 stm32f0xx_hal_msp.o(i.HAL_UART_MspInit)
HAL_UART_Transmit 0x08001339 Thumb Code 200 stm32f0xx_hal_uart.o(i.HAL_UART_Transmit)
HardFault_Handler 0x08001401 Thumb Code 2 stm32f0xx_it.o(i.HardFault_Handler)
NMI_Handler 0x08001479 Thumb Code 2 stm32f0xx_it.o(i.NMI_Handler)
PendSV_Handler 0x080014c1 Thumb Code 2 stm32f0xx_it.o(i.PendSV_Handler)
SVC_Handler 0x08001795 Thumb Code 2 stm32f0xx_it.o(i.SVC_Handler)
SysTick_Handler 0x08001797 Thumb Code 12 stm32f0xx_it.o(i.SysTick_Handler)
SystemClock_Config 0x080017a3 Thumb Code 118 main.o(i.SystemClock_Config)
SystemInit 0x08001819 Thumb Code 78 system_stm32f0xx.o(i.SystemInit)
TIM14_IRQHandler 0x08001875 Thumb Code 10 stm32f0xx_it.o(i.TIM14_IRQHandler)
TIM_Base_SetConfig 0x08001885 Thumb Code 102 stm32f0xx_hal_tim.o(i.TIM_Base_SetConfig)
UART_AdvFeatureConfig 0x08001901 Thumb Code 202 stm32f0xx_hal_uart.o(i.UART_AdvFeatureConfig)
UART_CheckIdleState 0x080019cb Thumb Code 18 stm32f0xx_hal_uart.o(i.UART_CheckIdleState)
UART_SetConfig 0x080019dd Thumb Code 258 stm32f0xx_hal_uart.o(i.UART_SetConfig)
UART_WaitOnFlagUntilTimeout 0x08001af1 Thumb Code 96 stm32f0xx_hal_uart.o(i.UART_WaitOnFlagUntilTimeout)
_Error_Handler 0x08001b51 Thumb Code 2 main.o(i._Error_Handler)
__0printf$8 0x08001b55 Thumb Code 24 printf8.o(i.__0printf$8)
__1printf$8 0x08001b55 Thumb Code 0 printf8.o(i.__0printf$8)
__2printf 0x08001b55 Thumb Code 0 printf8.o(i.__0printf$8)
__ARM_common_switch8 0x08001b75 Thumb Code 26 stm32f0xx_hal_tim.o(i.__ARM_common_switch8)
__scatterload_copy 0x08001b8f Thumb Code 14 handlers.o(i.__scatterload_copy)
__scatterload_null 0x08001b9d Thumb Code 2 handlers.o(i.__scatterload_null)
__scatterload_zeroinit 0x08001b9f Thumb Code 14 handlers.o(i.__scatterload_zeroinit)
delay_us 0x08002021 Thumb Code 20 delay_us.o(i.delay_us)
delay_us_init 0x08002035 Thumb Code 12 delay_us.o(i.delay_us_init)
fputc 0x08002045 Thumb Code 18 main.o(i.fputc)
keyboard_reply 0x0800205d Thumb Code 120 ps2kb.o(i.keyboard_reply)
main 0x080020d5 Thumb Code 228 main.o(i.main)
micros 0x080021e9 Thumb Code 18 delay_us.o(i.micros)
ps2kb_get_bus_status 0x08002201 Thumb Code 92 ps2kb.o(i.ps2kb_get_bus_status)
ps2kb_init 0x08002261 Thumb Code 30 ps2kb.o(i.ps2kb_init)
ps2kb_read 0x08002285 Thumb Code 210 ps2kb.o(i.ps2kb_read)
ps2kb_write 0x0800235d Thumb Code 284 ps2kb.o(i.ps2kb_write)
AHBPrescTable 0x08002480 Data 16 system_stm32f0xx.o(.constdata)
APBPrescTable 0x08002490 Data 8 system_stm32f0xx.o(.constdata)
Region$$Table$$Base 0x08002498 Number 0 anon$$obj.o(Region$$Table)
Region$$Table$$Limit 0x080024b8 Number 0 anon$$obj.o(Region$$Table)
uwTick 0x20000000 Data 4 stm32f0xx_hal.o(.data)
us_timer 0x20000004 Data 4 delay_us.o(.data)
upper16 0x20000008 Data 4 delay_us.o(.data)
spi_data_available 0x2000000c Data 1 main.o(.data)
SystemCoreClock 0x20000010 Data 4 system_stm32f0xx.o(.data)
__stdout 0x20000014 Data 4 stdout.o(.data)
spi_recv_buf 0x20000018 Data 32 helpers.o(.bss)
hspi1 0x20000038 Data 100 main.o(.bss)
htim14 0x2000009c Data 64 main.o(.bss)
huart1 0x200000dc Data 112 main.o(.bss)
hdma_spi1_rx 0x2000014c Data 68 main.o(.bss)
__initial_sp 0x20000590 Data 0 startup_stm32f030x6.o(STACK)
ps2kb_clk_pin 0x2000000c Data 2 ps2kb.o(.data)
ps2kb_data_pin 0x2000000e Data 2 ps2kb.o(.data)
ps2kb_clk_port 0x20000010 Data 4 ps2kb.o(.data)
ps2kb_data_port 0x20000014 Data 4 ps2kb.o(.data)
ps2kb_wait_start 0x20000018 Data 4 ps2kb.o(.data)
spi_data_available 0x2000001c Data 1 main.o(.data)
SystemCoreClock 0x20000020 Data 4 system_stm32f0xx.o(.data)
__stdout 0x20000024 Data 4 stdout.o(.data)
spi_recv_buf 0x20000028 Data 32 helpers.o(.bss)
hspi1 0x20000048 Data 100 main.o(.bss)
htim14 0x200000ac Data 64 main.o(.bss)
huart1 0x200000ec Data 112 main.o(.bss)
hdma_spi1_rx 0x2000015c Data 68 main.o(.bss)
__initial_sp 0x200005a0 Data 0 startup_stm32f030x6.o(STACK)
@@ -1820,30 +1856,30 @@ Memory Map of the image
Image Entry point : 0x080000b1
Load Region LR_IROM1 (Base: 0x08000000, Size: 0x00002198, Max: 0x00004000, ABSOLUTE)
Load Region LR_IROM1 (Base: 0x08000000, Size: 0x000024e0, Max: 0x00004000, ABSOLUTE)
Execution Region ER_IROM1 (Exec base: 0x08000000, Load base: 0x08000000, Size: 0x00002180, Max: 0x00004000, ABSOLUTE)
Execution Region ER_IROM1 (Exec base: 0x08000000, Load base: 0x08000000, Size: 0x000024b8, Max: 0x00004000, ABSOLUTE)
Exec Addr Load Addr Size Type Attr Idx E Section Name Object
0x08000000 0x08000000 0x000000b0 Data RO 3 RESET startup_stm32f030x6.o
0x080000b0 0x080000b0 0x00000000 Code RO 3250 * .ARM.Collect$$$$00000000 mc_p.l(entry.o)
0x080000b0 0x080000b0 0x00000004 Code RO 3518 .ARM.Collect$$$$00000001 mc_p.l(entry2.o)
0x080000b4 0x080000b4 0x00000004 Code RO 3521 .ARM.Collect$$$$00000004 mc_p.l(entry5.o)
0x080000b8 0x080000b8 0x00000000 Code RO 3523 .ARM.Collect$$$$00000008 mc_p.l(entry7b.o)
0x080000b8 0x080000b8 0x00000000 Code RO 3525 .ARM.Collect$$$$0000000A mc_p.l(entry8b.o)
0x080000b8 0x080000b8 0x00000008 Code RO 3526 .ARM.Collect$$$$0000000B mc_p.l(entry9a.o)
0x080000c0 0x080000c0 0x00000000 Code RO 3528 .ARM.Collect$$$$0000000D mc_p.l(entry10a.o)
0x080000c0 0x080000c0 0x00000000 Code RO 3530 .ARM.Collect$$$$0000000F mc_p.l(entry11a.o)
0x080000c0 0x080000c0 0x00000004 Code RO 3519 .ARM.Collect$$$$00002712 mc_p.l(entry2.o)
0x080000b0 0x080000b0 0x00000000 Code RO 3277 * .ARM.Collect$$$$00000000 mc_p.l(entry.o)
0x080000b0 0x080000b0 0x00000004 Code RO 3545 .ARM.Collect$$$$00000001 mc_p.l(entry2.o)
0x080000b4 0x080000b4 0x00000004 Code RO 3548 .ARM.Collect$$$$00000004 mc_p.l(entry5.o)
0x080000b8 0x080000b8 0x00000000 Code RO 3550 .ARM.Collect$$$$00000008 mc_p.l(entry7b.o)
0x080000b8 0x080000b8 0x00000000 Code RO 3552 .ARM.Collect$$$$0000000A mc_p.l(entry8b.o)
0x080000b8 0x080000b8 0x00000008 Code RO 3553 .ARM.Collect$$$$0000000B mc_p.l(entry9a.o)
0x080000c0 0x080000c0 0x00000000 Code RO 3555 .ARM.Collect$$$$0000000D mc_p.l(entry10a.o)
0x080000c0 0x080000c0 0x00000000 Code RO 3557 .ARM.Collect$$$$0000000F mc_p.l(entry11a.o)
0x080000c0 0x080000c0 0x00000004 Code RO 3546 .ARM.Collect$$$$00002712 mc_p.l(entry2.o)
0x080000c4 0x080000c4 0x0000001c Code RO 4 .text startup_stm32f030x6.o
0x080000e0 0x080000e0 0x0000002c Code RO 3253 .text mc_p.l(uidiv.o)
0x0800010c 0x0800010c 0x00000022 Code RO 3255 .text mc_p.l(llushr.o)
0x0800012e 0x0800012e 0x00000060 Code RO 3533 .text mc_p.l(uldiv.o)
0x080000e0 0x080000e0 0x0000002c Code RO 3280 .text mc_p.l(uidiv.o)
0x0800010c 0x0800010c 0x00000022 Code RO 3282 .text mc_p.l(llushr.o)
0x0800012e 0x0800012e 0x00000060 Code RO 3560 .text mc_p.l(uldiv.o)
0x0800018e 0x0800018e 0x00000002 PAD
0x08000190 0x08000190 0x00000024 Code RO 3546 .text mc_p.l(init.o)
0x080001b4 0x080001b4 0x00000020 Code RO 3548 .text mc_p.l(llshl.o)
0x080001d4 0x080001d4 0x00000010 Code RO 3101 i.DMA1_Channel2_3_IRQHandler stm32f0xx_it.o
0x08000190 0x08000190 0x00000024 Code RO 3573 .text mc_p.l(init.o)
0x080001b4 0x080001b4 0x00000020 Code RO 3575 .text mc_p.l(llshl.o)
0x080001d4 0x080001d4 0x00000010 Code RO 3128 i.DMA1_Channel2_3_IRQHandler stm32f0xx_it.o
0x080001e4 0x080001e4 0x00000024 Code RO 2478 i.DMA_CalcBaseAndBitshift stm32f0xx_hal_dma.o
0x08000208 0x08000208 0x00000028 Code RO 2479 i.DMA_SetConfig stm32f0xx_hal_dma.o
0x08000230 0x08000230 0x0000009c Code RO 2485 i.HAL_DMA_IRQHandler stm32f0xx_hal_dma.o
@@ -1852,114 +1888,121 @@ Memory Map of the image
0x0800038e 0x0800038e 0x00000002 PAD
0x08000390 0x08000390 0x00000148 Code RO 2419 i.HAL_GPIO_Init stm32f0xx_hal_gpio.o
0x080004d8 0x080004d8 0x0000000a Code RO 2421 i.HAL_GPIO_ReadPin stm32f0xx_hal_gpio.o
0x080004e2 0x080004e2 0x00000008 Code RO 2422 i.HAL_GPIO_TogglePin stm32f0xx_hal_gpio.o
0x080004ea 0x080004ea 0x0000000c Code RO 2423 i.HAL_GPIO_WritePin stm32f0xx_hal_gpio.o
0x080004f6 0x080004f6 0x00000002 PAD
0x080004f8 0x080004f8 0x0000000c Code RO 1826 i.HAL_GetTick stm32f0xx_hal.o
0x08000504 0x08000504 0x00000010 Code RO 1830 i.HAL_IncTick stm32f0xx_hal.o
0x08000514 0x08000514 0x00000020 Code RO 1831 i.HAL_Init stm32f0xx_hal.o
0x08000534 0x08000534 0x00000022 Code RO 1832 i.HAL_InitTick stm32f0xx_hal.o
0x08000556 0x08000556 0x00000002 PAD
0x08000558 0x08000558 0x00000044 Code RO 3161 i.HAL_MspInit stm32f0xx_hal_msp.o
0x0800059c 0x0800059c 0x00000014 Code RO 2576 i.HAL_NVIC_EnableIRQ stm32f0xx_hal_cortex.o
0x080005b0 0x080005b0 0x00000008 Code RO 2580 i.HAL_NVIC_SetPriority stm32f0xx_hal_cortex.o
0x080005b8 0x080005b8 0x000000ec Code RO 1787 i.HAL_RCCEx_PeriphCLKConfig stm32f0xx_hal_rcc_ex.o
0x080006a4 0x080006a4 0x0000012c Code RO 1694 i.HAL_RCC_ClockConfig stm32f0xx_hal_rcc.o
0x080007d0 0x080007d0 0x0000000c Code RO 1699 i.HAL_RCC_GetHCLKFreq stm32f0xx_hal_rcc.o
0x080007dc 0x080007dc 0x00000020 Code RO 1701 i.HAL_RCC_GetPCLK1Freq stm32f0xx_hal_rcc.o
0x080007fc 0x080007fc 0x0000007c Code RO 1702 i.HAL_RCC_GetSysClockFreq stm32f0xx_hal_rcc.o
0x08000878 0x08000878 0x00000354 Code RO 1705 i.HAL_RCC_OscConfig stm32f0xx_hal_rcc.o
0x08000bcc 0x08000bcc 0x00000002 Code RO 19 i.HAL_SPI_ErrorCallback stm32f0xx_hal_spi.o
0x08000bce 0x08000bce 0x000000b8 Code RO 23 i.HAL_SPI_Init stm32f0xx_hal_spi.o
0x08000c86 0x08000c86 0x00000002 PAD
0x08000c88 0x08000c88 0x00000098 Code RO 3163 i.HAL_SPI_MspInit stm32f0xx_hal_msp.o
0x08000d20 0x08000d20 0x0000013c Code RO 27 i.HAL_SPI_Receive_DMA stm32f0xx_hal_spi.o
0x08000e5c 0x08000e5c 0x00000020 Code RO 3039 i.HAL_SPI_RxCpltCallback main.o
0x08000e7c 0x08000e7c 0x00000002 Code RO 30 i.HAL_SPI_RxHalfCpltCallback stm32f0xx_hal_spi.o
0x08000e7e 0x08000e7e 0x00000002 PAD
0x08000e80 0x08000e80 0x000001b0 Code RO 33 i.HAL_SPI_TransmitReceive_DMA stm32f0xx_hal_spi.o
0x08001030 0x08001030 0x00000002 Code RO 39 i.HAL_SPI_TxRxCpltCallback stm32f0xx_hal_spi.o
0x08001032 0x08001032 0x00000002 Code RO 40 i.HAL_SPI_TxRxHalfCpltCallback stm32f0xx_hal_spi.o
0x08001034 0x08001034 0x00000018 Code RO 2582 i.HAL_SYSTICK_CLKSourceConfig stm32f0xx_hal_cortex.o
0x0800104c 0x0800104c 0x00000002 Code RO 2583 i.HAL_SYSTICK_Callback stm32f0xx_hal_cortex.o
0x0800104e 0x0800104e 0x00000002 PAD
0x08001050 0x08001050 0x00000030 Code RO 2584 i.HAL_SYSTICK_Config stm32f0xx_hal_cortex.o
0x08001080 0x08001080 0x00000008 Code RO 2585 i.HAL_SYSTICK_IRQHandler stm32f0xx_hal_cortex.o
0x08001088 0x08001088 0x00000002 Code RO 1095 i.HAL_TIMEx_BreakCallback stm32f0xx_hal_tim_ex.o
0x0800108a 0x0800108a 0x00000002 Code RO 1096 i.HAL_TIMEx_CommutationCallback stm32f0xx_hal_tim_ex.o
0x0800108c 0x0800108c 0x00000034 Code RO 456 i.HAL_TIM_Base_Init stm32f0xx_hal_tim.o
0x080010c0 0x080010c0 0x00000034 Code RO 3165 i.HAL_TIM_Base_MspInit stm32f0xx_hal_msp.o
0x080010f4 0x080010f4 0x00000016 Code RO 461 i.HAL_TIM_Base_Start_IT stm32f0xx_hal_tim.o
0x0800110a 0x0800110a 0x00000002 Code RO 487 i.HAL_TIM_IC_CaptureCallback stm32f0xx_hal_tim.o
0x0800110c 0x0800110c 0x00000162 Code RO 500 i.HAL_TIM_IRQHandler stm32f0xx_hal_tim.o
0x0800126e 0x0800126e 0x00000002 Code RO 503 i.HAL_TIM_OC_DelayElapsedCallback stm32f0xx_hal_tim.o
0x08001270 0x08001270 0x00000002 Code RO 530 i.HAL_TIM_PWM_PulseFinishedCallback stm32f0xx_hal_tim.o
0x08001272 0x08001272 0x00000002 PAD
0x08001274 0x08001274 0x00000010 Code RO 2938 i.HAL_TIM_PeriodElapsedCallback delay_us.o
0x08001284 0x08001284 0x00000002 Code RO 541 i.HAL_TIM_TriggerCallback stm32f0xx_hal_tim.o
0x08001286 0x08001286 0x0000006c Code RO 1354 i.HAL_UART_Init stm32f0xx_hal_uart.o
0x080012f2 0x080012f2 0x00000002 PAD
0x080012f4 0x080012f4 0x0000004c Code RO 3167 i.HAL_UART_MspInit stm32f0xx_hal_msp.o
0x08001340 0x08001340 0x000000c8 Code RO 1362 i.HAL_UART_Transmit stm32f0xx_hal_uart.o
0x08001408 0x08001408 0x00000002 Code RO 3102 i.HardFault_Handler stm32f0xx_it.o
0x0800140a 0x0800140a 0x00000002 PAD
0x0800140c 0x0800140c 0x0000003c Code RO 3040 i.MX_SPI1_Init main.o
0x08001448 0x08001448 0x00000038 Code RO 3041 i.MX_USART1_UART_Init main.o
0x08001480 0x08001480 0x00000002 Code RO 3103 i.NMI_Handler stm32f0xx_it.o
0x08001482 0x08001482 0x00000002 PAD
0x08001484 0x08001484 0x00000044 Code RO 2586 i.NVIC_SetPriority stm32f0xx_hal_cortex.o
0x080014c8 0x080014c8 0x00000002 Code RO 3104 i.PendSV_Handler stm32f0xx_it.o
0x080014ca 0x080014ca 0x00000022 Code RO 51 i.SPI_DMAError stm32f0xx_hal_spi.o
0x080014ec 0x080014ec 0x0000000a Code RO 52 i.SPI_DMAHalfReceiveCplt stm32f0xx_hal_spi.o
0x080014f6 0x080014f6 0x0000000a Code RO 54 i.SPI_DMAHalfTransmitReceiveCplt stm32f0xx_hal_spi.o
0x08001500 0x08001500 0x00000058 Code RO 55 i.SPI_DMAReceiveCplt stm32f0xx_hal_spi.o
0x08001558 0x08001558 0x0000005e Code RO 58 i.SPI_DMATransmitReceiveCplt stm32f0xx_hal_spi.o
0x080015b6 0x080015b6 0x00000078 Code RO 60 i.SPI_EndRxTransaction stm32f0xx_hal_spi.o
0x0800162e 0x0800162e 0x0000004c Code RO 61 i.SPI_EndRxTxTransaction stm32f0xx_hal_spi.o
0x0800167a 0x0800167a 0x00000096 Code RO 66 i.SPI_WaitFifoStateUntilTimeout stm32f0xx_hal_spi.o
0x08001710 0x08001710 0x0000008c Code RO 67 i.SPI_WaitFlagStateUntilTimeout stm32f0xx_hal_spi.o
0x0800179c 0x0800179c 0x00000002 Code RO 3105 i.SVC_Handler stm32f0xx_it.o
0x0800179e 0x0800179e 0x0000000c Code RO 3106 i.SysTick_Handler stm32f0xx_it.o
0x080017aa 0x080017aa 0x00000076 Code RO 3042 i.SystemClock_Config main.o
0x08001820 0x08001820 0x0000005c Code RO 3219 i.SystemInit system_stm32f0xx.o
0x0800187c 0x0800187c 0x00000010 Code RO 3107 i.TIM14_IRQHandler stm32f0xx_it.o
0x0800188c 0x0800188c 0x0000007c Code RO 542 i.TIM_Base_SetConfig stm32f0xx_hal_tim.o
0x08001908 0x08001908 0x000000ca Code RO 1367 i.UART_AdvFeatureConfig stm32f0xx_hal_uart.o
0x080019d2 0x080019d2 0x00000012 Code RO 1368 i.UART_CheckIdleState stm32f0xx_hal_uart.o
0x080019e4 0x080019e4 0x00000114 Code RO 1383 i.UART_SetConfig stm32f0xx_hal_uart.o
0x08001af8 0x08001af8 0x00000060 Code RO 1385 i.UART_WaitOnFlagUntilTimeout stm32f0xx_hal_uart.o
0x08001b58 0x08001b58 0x00000002 Code RO 3043 i._Error_Handler main.o
0x08001b5a 0x08001b5a 0x00000002 PAD
0x08001b5c 0x08001b5c 0x00000020 Code RO 3464 i.__0printf$8 mc_p.l(printf8.o)
0x08001b7c 0x08001b7c 0x0000000e Code RO 3558 i.__scatterload_copy mc_p.l(handlers.o)
0x08001b8a 0x08001b8a 0x00000002 Code RO 3559 i.__scatterload_null mc_p.l(handlers.o)
0x08001b8c 0x08001b8c 0x0000000e Code RO 3560 i.__scatterload_zeroinit mc_p.l(handlers.o)
0x08001b9a 0x08001b9a 0x00000002 PAD
0x08001b9c 0x08001b9c 0x00000428 Code RO 3471 i._printf_core mc_p.l(printf8.o)
0x08001fc4 0x08001fc4 0x00000020 Code RO 3472 i._printf_post_padding mc_p.l(printf8.o)
0x08001fe4 0x08001fe4 0x0000002c Code RO 3473 i._printf_pre_padding mc_p.l(printf8.o)
0x08002010 0x08002010 0x00000010 Code RO 2940 i.delay_us_init delay_us.o
0x08002020 0x08002020 0x00000018 Code RO 3044 i.fputc main.o
0x08002038 0x08002038 0x00000110 Code RO 3045 i.main main.o
0x08002148 0x08002148 0x00000010 Data RO 3220 .constdata system_stm32f0xx.o
0x08002158 0x08002158 0x00000008 Data RO 3221 .constdata system_stm32f0xx.o
0x08002160 0x08002160 0x00000020 Data RO 3556 Region$$Table anon$$obj.o
0x080004e2 0x080004e2 0x0000000c Code RO 2423 i.HAL_GPIO_WritePin stm32f0xx_hal_gpio.o
0x080004ee 0x080004ee 0x00000002 PAD
0x080004f0 0x080004f0 0x0000000c Code RO 1826 i.HAL_GetTick stm32f0xx_hal.o
0x080004fc 0x080004fc 0x00000010 Code RO 1830 i.HAL_IncTick stm32f0xx_hal.o
0x0800050c 0x0800050c 0x00000020 Code RO 1831 i.HAL_Init stm32f0xx_hal.o
0x0800052c 0x0800052c 0x00000022 Code RO 1832 i.HAL_InitTick stm32f0xx_hal.o
0x0800054e 0x0800054e 0x00000002 PAD
0x08000550 0x08000550 0x00000044 Code RO 3188 i.HAL_MspInit stm32f0xx_hal_msp.o
0x08000594 0x08000594 0x00000014 Code RO 2576 i.HAL_NVIC_EnableIRQ stm32f0xx_hal_cortex.o
0x080005a8 0x080005a8 0x00000008 Code RO 2580 i.HAL_NVIC_SetPriority stm32f0xx_hal_cortex.o
0x080005b0 0x080005b0 0x000000ec Code RO 1787 i.HAL_RCCEx_PeriphCLKConfig stm32f0xx_hal_rcc_ex.o
0x0800069c 0x0800069c 0x0000012c Code RO 1694 i.HAL_RCC_ClockConfig stm32f0xx_hal_rcc.o
0x080007c8 0x080007c8 0x0000000c Code RO 1699 i.HAL_RCC_GetHCLKFreq stm32f0xx_hal_rcc.o
0x080007d4 0x080007d4 0x00000020 Code RO 1701 i.HAL_RCC_GetPCLK1Freq stm32f0xx_hal_rcc.o
0x080007f4 0x080007f4 0x0000007c Code RO 1702 i.HAL_RCC_GetSysClockFreq stm32f0xx_hal_rcc.o
0x08000870 0x08000870 0x00000354 Code RO 1705 i.HAL_RCC_OscConfig stm32f0xx_hal_rcc.o
0x08000bc4 0x08000bc4 0x00000002 Code RO 19 i.HAL_SPI_ErrorCallback stm32f0xx_hal_spi.o
0x08000bc6 0x08000bc6 0x000000b8 Code RO 23 i.HAL_SPI_Init stm32f0xx_hal_spi.o
0x08000c7e 0x08000c7e 0x00000002 PAD
0x08000c80 0x08000c80 0x00000098 Code RO 3190 i.HAL_SPI_MspInit stm32f0xx_hal_msp.o
0x08000d18 0x08000d18 0x0000013c Code RO 27 i.HAL_SPI_Receive_DMA stm32f0xx_hal_spi.o
0x08000e54 0x08000e54 0x00000020 Code RO 3066 i.HAL_SPI_RxCpltCallback main.o
0x08000e74 0x08000e74 0x00000002 Code RO 30 i.HAL_SPI_RxHalfCpltCallback stm32f0xx_hal_spi.o
0x08000e76 0x08000e76 0x00000002 PAD
0x08000e78 0x08000e78 0x000001b0 Code RO 33 i.HAL_SPI_TransmitReceive_DMA stm32f0xx_hal_spi.o
0x08001028 0x08001028 0x00000002 Code RO 39 i.HAL_SPI_TxRxCpltCallback stm32f0xx_hal_spi.o
0x0800102a 0x0800102a 0x00000002 Code RO 40 i.HAL_SPI_TxRxHalfCpltCallback stm32f0xx_hal_spi.o
0x0800102c 0x0800102c 0x00000018 Code RO 2582 i.HAL_SYSTICK_CLKSourceConfig stm32f0xx_hal_cortex.o
0x08001044 0x08001044 0x00000002 Code RO 2583 i.HAL_SYSTICK_Callback stm32f0xx_hal_cortex.o
0x08001046 0x08001046 0x00000002 PAD
0x08001048 0x08001048 0x00000030 Code RO 2584 i.HAL_SYSTICK_Config stm32f0xx_hal_cortex.o
0x08001078 0x08001078 0x00000008 Code RO 2585 i.HAL_SYSTICK_IRQHandler stm32f0xx_hal_cortex.o
0x08001080 0x08001080 0x00000002 Code RO 1095 i.HAL_TIMEx_BreakCallback stm32f0xx_hal_tim_ex.o
0x08001082 0x08001082 0x00000002 Code RO 1096 i.HAL_TIMEx_CommutationCallback stm32f0xx_hal_tim_ex.o
0x08001084 0x08001084 0x00000034 Code RO 456 i.HAL_TIM_Base_Init stm32f0xx_hal_tim.o
0x080010b8 0x080010b8 0x00000034 Code RO 3192 i.HAL_TIM_Base_MspInit stm32f0xx_hal_msp.o
0x080010ec 0x080010ec 0x00000016 Code RO 461 i.HAL_TIM_Base_Start_IT stm32f0xx_hal_tim.o
0x08001102 0x08001102 0x00000002 Code RO 487 i.HAL_TIM_IC_CaptureCallback stm32f0xx_hal_tim.o
0x08001104 0x08001104 0x00000162 Code RO 500 i.HAL_TIM_IRQHandler stm32f0xx_hal_tim.o
0x08001266 0x08001266 0x00000002 Code RO 503 i.HAL_TIM_OC_DelayElapsedCallback stm32f0xx_hal_tim.o
0x08001268 0x08001268 0x00000002 Code RO 530 i.HAL_TIM_PWM_PulseFinishedCallback stm32f0xx_hal_tim.o
0x0800126a 0x0800126a 0x00000002 PAD
0x0800126c 0x0800126c 0x00000010 Code RO 2938 i.HAL_TIM_PeriodElapsedCallback delay_us.o
0x0800127c 0x0800127c 0x00000002 Code RO 541 i.HAL_TIM_TriggerCallback stm32f0xx_hal_tim.o
0x0800127e 0x0800127e 0x0000006c Code RO 1354 i.HAL_UART_Init stm32f0xx_hal_uart.o
0x080012ea 0x080012ea 0x00000002 PAD
0x080012ec 0x080012ec 0x0000004c Code RO 3194 i.HAL_UART_MspInit stm32f0xx_hal_msp.o
0x08001338 0x08001338 0x000000c8 Code RO 1362 i.HAL_UART_Transmit stm32f0xx_hal_uart.o
0x08001400 0x08001400 0x00000002 Code RO 3129 i.HardFault_Handler stm32f0xx_it.o
0x08001402 0x08001402 0x00000002 PAD
0x08001404 0x08001404 0x0000003c Code RO 3067 i.MX_SPI1_Init main.o
0x08001440 0x08001440 0x00000038 Code RO 3068 i.MX_USART1_UART_Init main.o
0x08001478 0x08001478 0x00000002 Code RO 3130 i.NMI_Handler stm32f0xx_it.o
0x0800147a 0x0800147a 0x00000002 PAD
0x0800147c 0x0800147c 0x00000044 Code RO 2586 i.NVIC_SetPriority stm32f0xx_hal_cortex.o
0x080014c0 0x080014c0 0x00000002 Code RO 3131 i.PendSV_Handler stm32f0xx_it.o
0x080014c2 0x080014c2 0x00000022 Code RO 51 i.SPI_DMAError stm32f0xx_hal_spi.o
0x080014e4 0x080014e4 0x0000000a Code RO 52 i.SPI_DMAHalfReceiveCplt stm32f0xx_hal_spi.o
0x080014ee 0x080014ee 0x0000000a Code RO 54 i.SPI_DMAHalfTransmitReceiveCplt stm32f0xx_hal_spi.o
0x080014f8 0x080014f8 0x00000058 Code RO 55 i.SPI_DMAReceiveCplt stm32f0xx_hal_spi.o
0x08001550 0x08001550 0x0000005e Code RO 58 i.SPI_DMATransmitReceiveCplt stm32f0xx_hal_spi.o
0x080015ae 0x080015ae 0x00000078 Code RO 60 i.SPI_EndRxTransaction stm32f0xx_hal_spi.o
0x08001626 0x08001626 0x0000004c Code RO 61 i.SPI_EndRxTxTransaction stm32f0xx_hal_spi.o
0x08001672 0x08001672 0x00000096 Code RO 66 i.SPI_WaitFifoStateUntilTimeout stm32f0xx_hal_spi.o
0x08001708 0x08001708 0x0000008c Code RO 67 i.SPI_WaitFlagStateUntilTimeout stm32f0xx_hal_spi.o
0x08001794 0x08001794 0x00000002 Code RO 3132 i.SVC_Handler stm32f0xx_it.o
0x08001796 0x08001796 0x0000000c Code RO 3133 i.SysTick_Handler stm32f0xx_it.o
0x080017a2 0x080017a2 0x00000076 Code RO 3069 i.SystemClock_Config main.o
0x08001818 0x08001818 0x0000005c Code RO 3246 i.SystemInit system_stm32f0xx.o
0x08001874 0x08001874 0x00000010 Code RO 3134 i.TIM14_IRQHandler stm32f0xx_it.o
0x08001884 0x08001884 0x0000007c Code RO 542 i.TIM_Base_SetConfig stm32f0xx_hal_tim.o
0x08001900 0x08001900 0x000000ca Code RO 1367 i.UART_AdvFeatureConfig stm32f0xx_hal_uart.o
0x080019ca 0x080019ca 0x00000012 Code RO 1368 i.UART_CheckIdleState stm32f0xx_hal_uart.o
0x080019dc 0x080019dc 0x00000114 Code RO 1383 i.UART_SetConfig stm32f0xx_hal_uart.o
0x08001af0 0x08001af0 0x00000060 Code RO 1385 i.UART_WaitOnFlagUntilTimeout stm32f0xx_hal_uart.o
0x08001b50 0x08001b50 0x00000002 Code RO 3070 i._Error_Handler main.o
0x08001b52 0x08001b52 0x00000002 PAD
0x08001b54 0x08001b54 0x00000020 Code RO 3491 i.__0printf$8 mc_p.l(printf8.o)
0x08001b74 0x08001b74 0x0000001a Code RO 1087 i.__ARM_common_switch8 stm32f0xx_hal_tim.o
0x08001b8e 0x08001b8e 0x0000000e Code RO 3585 i.__scatterload_copy mc_p.l(handlers.o)
0x08001b9c 0x08001b9c 0x00000002 Code RO 3586 i.__scatterload_null mc_p.l(handlers.o)
0x08001b9e 0x08001b9e 0x0000000e Code RO 3587 i.__scatterload_zeroinit mc_p.l(handlers.o)
0x08001bac 0x08001bac 0x00000428 Code RO 3498 i._printf_core mc_p.l(printf8.o)
0x08001fd4 0x08001fd4 0x00000020 Code RO 3499 i._printf_post_padding mc_p.l(printf8.o)
0x08001ff4 0x08001ff4 0x0000002c Code RO 3500 i._printf_pre_padding mc_p.l(printf8.o)
0x08002020 0x08002020 0x00000014 Code RO 2939 i.delay_us delay_us.o
0x08002034 0x08002034 0x00000010 Code RO 2940 i.delay_us_init delay_us.o
0x08002044 0x08002044 0x00000018 Code RO 3071 i.fputc main.o
0x0800205c 0x0800205c 0x00000078 Code RO 3012 i.keyboard_reply ps2kb.o
0x080020d4 0x080020d4 0x00000114 Code RO 3072 i.main main.o
0x080021e8 0x080021e8 0x00000018 Code RO 2941 i.micros delay_us.o
0x08002200 0x08002200 0x00000060 Code RO 3013 i.ps2kb_get_bus_status ps2kb.o
0x08002260 0x08002260 0x00000024 Code RO 3014 i.ps2kb_init ps2kb.o
0x08002284 0x08002284 0x000000d8 Code RO 3015 i.ps2kb_read ps2kb.o
0x0800235c 0x0800235c 0x00000124 Code RO 3016 i.ps2kb_write ps2kb.o
0x08002480 0x08002480 0x00000010 Data RO 3247 .constdata system_stm32f0xx.o
0x08002490 0x08002490 0x00000008 Data RO 3248 .constdata system_stm32f0xx.o
0x08002498 0x08002498 0x00000020 Data RO 3583 Region$$Table anon$$obj.o
Execution Region RW_IRAM1 (Exec base: 0x20000000, Load base: 0x08002180, Size: 0x00000590, Max: 0x00001000, ABSOLUTE)
Execution Region RW_IRAM1 (Exec base: 0x20000000, Load base: 0x080024b8, Size: 0x000005a0, Max: 0x00001000, ABSOLUTE)
Exec Addr Load Addr Size Type Attr Idx E Section Name Object
0x20000000 0x08002180 0x00000004 Data RW 1837 .data stm32f0xx_hal.o
0x20000004 0x08002184 0x00000008 Data RW 2942 .data delay_us.o
0x2000000c 0x0800218c 0x00000001 Data RW 3048 .data main.o
0x2000000d 0x0800218d 0x00000003 PAD
0x20000010 0x08002190 0x00000004 Data RW 3222 .data system_stm32f0xx.o
0x20000014 0x08002194 0x00000004 Data RW 3532 .data mc_p.l(stdout.o)
0x20000018 - 0x00000020 Zero RW 2982 .bss helpers.o
0x20000038 - 0x00000114 Zero RW 3046 .bss main.o
0x2000014c - 0x00000044 Zero RW 3047 .bss main.o
0x20000190 - 0x00000400 Zero RW 1 STACK startup_stm32f030x6.o
0x20000000 0x080024b8 0x00000004 Data RW 1837 .data stm32f0xx_hal.o
0x20000004 0x080024bc 0x00000008 Data RW 2942 .data delay_us.o
0x2000000c 0x080024c4 0x00000010 Data RW 3017 .data ps2kb.o
0x2000001c 0x080024d4 0x00000001 Data RW 3075 .data main.o
0x2000001d 0x080024d5 0x00000003 PAD
0x20000020 0x080024d8 0x00000004 Data RW 3249 .data system_stm32f0xx.o
0x20000024 0x080024dc 0x00000004 Data RW 3559 .data mc_p.l(stdout.o)
0x20000028 - 0x00000020 Zero RW 2982 .bss helpers.o
0x20000048 - 0x00000114 Zero RW 3073 .bss main.o
0x2000015c - 0x00000044 Zero RW 3074 .bss main.o
0x200001a0 - 0x00000400 Zero RW 1 STACK startup_stm32f030x6.o
==============================================================================
@@ -1969,26 +2012,27 @@ Image component sizes
Code (inc. data) RO Data RW Data ZI Data Debug Object Name
32 10 0 8 0 1612 delay_us.o
76 16 0 8 0 2479 delay_us.o
0 0 0 0 32 607 helpers.o
564 90 0 1 344 4780 main.o
568 84 0 1 344 4752 main.o
760 46 0 16 0 4871 ps2kb.o
28 8 176 0 1024 632 startup_stm32f030x6.o
94 18 0 4 0 3079 stm32f0xx_hal.o
178 28 0 0 0 10559 stm32f0xx_hal_cortex.o
426 16 0 0 0 4159 stm32f0xx_hal_dma.o
358 26 0 0 0 3560 stm32f0xx_hal_gpio.o
350 26 0 0 0 2987 stm32f0xx_hal_gpio.o
348 66 0 0 0 2797 stm32f0xx_hal_msp.o
1320 98 0 0 0 5029 stm32f0xx_hal_rcc.o
236 14 0 0 0 1420 stm32f0xx_hal_rcc_ex.o
1662 42 0 0 0 278142 stm32f0xx_hal_spi.o
560 22 0 0 0 6337 stm32f0xx_hal_tim.o
586 22 0 0 0 6409 stm32f0xx_hal_tim.o
4 0 0 0 0 1606 stm32f0xx_hal_tim_ex.o
900 18 0 0 0 5817 stm32f0xx_hal_uart.o
52 12 0 0 0 3019 stm32f0xx_it.o
92 14 24 4 0 1147 system_stm32f0xx.o
----------------------------------------------------------------------
6876 482 232 20 1400 334302 Object Totals
7702 528 232 36 1400 339511 Object Totals
0 0 32 0 0 0 (incl. Generated)
22 0 0 3 0 0 (incl. Padding)
@@ -2014,8 +2058,8 @@ Image component sizes
96 0 0 0 0 84 uldiv.o
----------------------------------------------------------------------
1468 68 0 4 0 684 Library Totals
4 0 0 0 0 0 (incl. Padding)
1466 68 0 4 0 684 Library Totals
2 0 0 0 0 0 (incl. Padding)
----------------------------------------------------------------------
@@ -2024,7 +2068,7 @@ Image component sizes
1464 68 0 4 0 684 mc_p.l
----------------------------------------------------------------------
1468 68 0 4 0 684 Library Totals
1466 68 0 4 0 684 Library Totals
----------------------------------------------------------------------
@@ -2033,15 +2077,15 @@ Image component sizes
Code (inc. data) RO Data RW Data ZI Data Debug
8344 550 232 24 1400 331574 Grand Totals
8344 550 232 24 1400 331574 ELF Image Totals
8344 550 232 24 0 0 ROM Totals
9168 596 232 40 1400 336519 Grand Totals
9168 596 232 40 1400 336519 ELF Image Totals
9168 596 232 40 0 0 ROM Totals
==============================================================================
Total RO Size (Code + RO Data) 8576 ( 8.38kB)
Total RW Size (RW Data + ZI Data) 1424 ( 1.39kB)
Total ROM Size (Code + RO Data + RW Data) 8600 ( 8.40kB)
Total RO Size (Code + RO Data) 9400 ( 9.18kB)
Total RW Size (RW Data + ZI Data) 1440 ( 1.41kB)
Total ROM Size (Code + RO Data + RW Data) 9440 ( 9.22kB)
==============================================================================

View File

@@ -595,7 +595,7 @@ I (../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_tim.h)(0x5DFA0893)
I (../Drivers/CMSIS/Include/core_cmFunc.h)(0x5DFA0892)
I (../Drivers/CMSIS/Device/ST/STM32F0xx/Include/system_stm32f0xx.h)(0x5DFA0880)
I (C:\Keil_v5\ARM\ARMCC\include\stdio.h)(0x5D9B429A)
I (../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_rcc_ex.h)(0x5DFA0893)
I (../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_rcc_ex.h)(0x5DFA0893)
I (../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_gpio.h)(0x5DFA0893)
I (../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_gpio_ex.h)(0x5DFA0893)
I (../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_dma.h)(0x5DFA0893)
@@ -629,7 +629,7 @@ I (../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_tim.h)(0x5DFA0893)
I (../Inc/main.h)(0x617485C6)
I (../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_rcc.h)(0x5DFA0893)
I (../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_def.h)(0x5DFA0893)
I (../Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f0xx.h)(0x5DFA0880)
I (../Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f0xx.h)(0x5DFA0880)
I (../Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f030x6.h)(0x5DFA0880)
I (../Drivers/CMSIS/Include/core_cm0.h)(0x5DFA0892)
I (C:\Keil_v5\ARM\ARMCC\include\stdint.h)(0x5D9B4298)
@@ -666,11 +666,11 @@ I (../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_tim.h)(0x5DFA0893)
-D__UVISION_VERSION="529" -D_RTE_ -DSTM32F030x6 -DUSE_HAL_DRIVER -DSTM32F030x6
-o test\stm32f0xx_hal_pwr_ex.o --omf_browse test\stm32f0xx_hal_pwr_ex.crf --depend test\stm32f0xx_hal_pwr_ex.d)
-o test\stm32f0xx_hal_pwr_ex.o --omf_browse test\stm32f0xx_hal_pwr_ex.crf --depend test\stm32f0xx_hal_pwr_ex.d)
I (../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal.h)(0x5DFA0893)
I (../Inc/stm32f0xx_hal_conf.h)(0x617485C5)
I (../Inc/main.h)(0x617485C6)
I (../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_rcc.h)(0x5DFA0893)
I (../Inc/stm32f0xx_hal_conf.h)(0x617485C5)
I (../Inc/main.h)(0x617485C6)
I (../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_rcc.h)(0x5DFA0893)
I (../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_def.h)(0x5DFA0893)
I (../Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f0xx.h)(0x5DFA0880)
I (../Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f030x6.h)(0x5DFA0880)
@@ -706,8 +706,10 @@ I (../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_tim.h)(0x5DFA0893)
-IC:\Users\allen\AppData\Local\Arm\Packs\ARM\CMSIS\5.6.0\CMSIS\Core\Include
-IC:\Users\allen\AppData\Local\Arm\Packs\Keil\STM32F0xx_DFP\2.0.0\Drivers\CMSIS\Device\ST\STM32F0xx\Include
-D__UVISION_VERSION="529" -D_RTE_ -DSTM32F030x6 -DUSE_HAL_DRIVER -DSTM32F030x6
-D__UVISION_VERSION="529" -D_RTE_ -DSTM32F030x6 -DUSE_HAL_DRIVER -DSTM32F030x6
-o test\stm32f0xx_hal_flash.o --omf_browse test\stm32f0xx_hal_flash.crf --depend test\stm32f0xx_hal_flash.d)
I (../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal.h)(0x5DFA0893)
I (../Inc/stm32f0xx_hal_conf.h)(0x617485C5)
I (../Inc/main.h)(0x617485C6)
@@ -740,9 +742,10 @@ I (../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_tim.h)(0x5DFA0893)
I (../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_tim_ex.h)(0x5DFA0893)
I (../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_uart.h)(0x5DFA0893)
I (../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_uart_ex.h)(0x5DFA0893)
I (../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_uart.h)(0x5DFA0893)
F (../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.c)(0x5DFA0893)(--c99 -c --cpu Cortex-M0 -D__MICROLIB -g -O2 --apcs=interwork --split_sections -I ../Inc -I ../Drivers/STM32F0xx_HAL_Driver/Inc -I ../Drivers/STM32F0xx_HAL_Driver/Inc/Legacy -I ../Drivers/CMSIS/Device/ST/STM32F0xx/Include -I ../Drivers/CMSIS/Include
F (../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.c)(0x5DFA0893)(--c99 -c --cpu Cortex-M0 -D__MICROLIB -g -O2 --apcs=interwork --split_sections -I ../Inc -I ../Drivers/STM32F0xx_HAL_Driver/Inc -I ../Drivers/STM32F0xx_HAL_Driver/Inc/Legacy -I ../Drivers/CMSIS/Device/ST/STM32F0xx/Include -I ../Drivers/CMSIS/Include
-I.\RTE\_test
-IC:\Users\allen\AppData\Local\Arm\Packs\ARM\CMSIS\5.6.0\CMSIS\Core\Include
-IC:\Users\allen\AppData\Local\Arm\Packs\Keil\STM32F0xx_DFP\2.0.0\Drivers\CMSIS\Device\ST\STM32F0xx\Include

View File

@@ -44,6 +44,8 @@
#include "shared.h"
#include "helpers.h"
#include "delay_us.h"
#include "ps2kb.h"
/* USER CODE END Includes */
/* Private variables ---------------------------------------------------------*/
@@ -87,7 +89,6 @@ void HAL_SPI_RxCpltCallback(SPI_HandleTypeDef *hspi)
HAL_SPI_Receive_DMA(&hspi1, spi_recv_buf, SPI_BUF_SIZE);
}
/* USER CODE END 0 */
/**
@@ -131,6 +132,9 @@ int main(void)
/* USER CODE BEGIN WHILE */
delay_us_init(&htim14);
printf("hello world\n");
ps2kb_init(PS2KB_CLK_GPIO_Port, PS2KB_CLK_Pin, PS2KB_DATA_GPIO_Port, PS2KB_DATA_Pin);
uint8_t temp, leds;
while (1)
{
@@ -143,14 +147,19 @@ int main(void)
if(spi_data_available)
{
HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_1);
for (int i = 0; i < SPI_BUF_SIZE; ++i)
printf("0x%02x ", spi_recv_buf[i]);
printf("\n");
// for (int i = 0; i < SPI_BUF_SIZE; ++i)
// printf("0x%02x ", spi_recv_buf[i]);
// printf("\n");
spi_data_available = 0;
}
if(ps2kb_get_bus_status() == PS2_BUS_REQ_TO_SEND)
{
ps2kb_read(&temp, 10);
keyboard_reply(temp, &leds);
printf("0x%02x\n", temp);
}
}
/* USER CODE END 3 */

View File

@@ -3,12 +3,31 @@
#include <stdlib.h>
#include "helpers.h"
#include "shared.h"
#include "ps2kb.h"
#include "delay_us.h"
#define CLKHALF 18
#define CLKFULL 36
#define BYTEWAIT 750
#define PS2KB_BUS_TIMEOUT_MS 30
GPIO_TypeDef* ps2kb_clk_port;
uint16_t ps2kb_clk_pin;
GPIO_TypeDef* ps2kb_data_port;
uint16_t ps2kb_data_pin;
uint32_t ps2kb_wait_start;
#define PS2KB_CLK_HI() HAL_GPIO_WritePin(ps2kb_clk_port, ps2kb_clk_pin, GPIO_PIN_SET)
#define PS2KB_CLK_LOW() HAL_GPIO_WritePin(ps2kb_clk_port, ps2kb_clk_pin, GPIO_PIN_RESET)
#define PS2KB_DATA_HI() HAL_GPIO_WritePin(ps2kb_data_port, ps2kb_data_pin, GPIO_PIN_SET)
#define PS2KB_DATA_LOW() HAL_GPIO_WritePin(ps2kb_data_port, ps2kb_data_pin, GPIO_PIN_RESET)
#define PS2KB_READ_DATA_PIN() HAL_GPIO_ReadPin(ps2kb_data_port, ps2kb_data_pin)
#define PS2KB_READ_CLK_PIN() HAL_GPIO_ReadPin(ps2kb_clk_port, ps2kb_clk_pin)
#define PS2KB_SENDACK() ps2kb_write(0xFA, 10)
void ps2kb_init(GPIO_TypeDef* clk_port, uint16_t clk_pin, GPIO_TypeDef* data_port, uint16_t data_pin)
{
@@ -16,5 +35,178 @@ void ps2kb_init(GPIO_TypeDef* clk_port, uint16_t clk_pin, GPIO_TypeDef* data_por
ps2kb_clk_pin = clk_pin;
ps2kb_data_port = data_port;
ps2kb_data_pin = data_pin;
PS2KB_CLK_HI();
PS2KB_DATA_HI();
}
uint8_t ps2kb_get_bus_status(void)
{
if(PS2KB_READ_DATA_PIN() == GPIO_PIN_SET && PS2KB_READ_CLK_PIN() == GPIO_PIN_SET)
return PS2_BUS_IDLE;
if(PS2KB_READ_DATA_PIN() == GPIO_PIN_SET && PS2KB_READ_CLK_PIN() == GPIO_PIN_RESET)
return PS2_BUS_INHIBIT;
if(PS2KB_READ_DATA_PIN() == GPIO_PIN_RESET && PS2KB_READ_CLK_PIN() == GPIO_PIN_SET)
return PS2_BUS_REQ_TO_SEND;
return PS2_BUS_UNKNOWN;
}
uint8_t ps2kb_read(uint8_t* result, uint8_t timeout_ms)
{
uint16_t data = 0x00;
uint16_t bit = 0x01;
ps2kb_wait_start = HAL_GetTick();
while(ps2kb_get_bus_status() != PS2_BUS_REQ_TO_SEND)
{
if(HAL_GetTick() - ps2kb_wait_start >= timeout_ms)
return 1;
}
delay_us(CLKHALF);
PS2KB_CLK_LOW();
delay_us(CLKFULL);
PS2KB_CLK_HI();
delay_us(CLKHALF);
while (bit < 0x0100)
{
if (PS2KB_READ_DATA_PIN() == GPIO_PIN_SET)
data = data | bit;
bit = bit << 1;
delay_us(CLKHALF);
PS2KB_CLK_LOW();
delay_us(CLKFULL);
PS2KB_CLK_HI();
delay_us(CLKHALF);
}
// stop bit
delay_us(CLKHALF);
PS2KB_CLK_LOW();
delay_us(CLKFULL);
PS2KB_CLK_HI();
delay_us(CLKHALF);
delay_us(CLKHALF);
PS2KB_DATA_LOW();
PS2KB_CLK_LOW();
delay_us(CLKFULL);
PS2KB_CLK_HI();
delay_us(CLKHALF);
PS2KB_DATA_HI();
*result = data & 0x00FF;
return 0;
}
uint8_t ps2kb_write(uint8_t data, uint8_t timeout_ms)
{
uint8_t i;
uint8_t parity = 1;
ps2kb_wait_start = HAL_GetTick();
while(ps2kb_get_bus_status() != PS2_BUS_IDLE)
{
if(HAL_GetTick() - ps2kb_wait_start >= timeout_ms)
return 1;
}
delay_us(BYTEWAIT);
PS2KB_DATA_LOW();
delay_us(CLKHALF);
// device sends on falling clock
PS2KB_CLK_LOW(); // start bit
delay_us(CLKFULL);
PS2KB_CLK_HI();
delay_us(CLKHALF);
for (i=0; i < 8; i++)
{
if (data & 0x01)
PS2KB_DATA_HI();
else
PS2KB_DATA_LOW();
delay_us(CLKHALF);
PS2KB_CLK_LOW();
delay_us(CLKFULL);
PS2KB_CLK_HI();
delay_us(CLKHALF);
parity = parity ^ (data & 0x01);
data = data >> 1;
}
// parity bit
if (parity)
PS2KB_DATA_HI();
else
PS2KB_DATA_LOW();
delay_us(CLKHALF);
PS2KB_CLK_LOW();
delay_us(CLKFULL);
PS2KB_CLK_HI();
delay_us(CLKHALF);
// stop bit
PS2KB_DATA_HI();
delay_us(CLKHALF);
PS2KB_CLK_LOW();
delay_us(CLKFULL);
PS2KB_CLK_HI();
delay_us(CLKHALF);
delay_us(BYTEWAIT);
return 0;
}
void keyboard_reply(uint8_t cmd, uint8_t *leds)
{
uint8_t received;
switch (cmd)
{
case 0xFF: //reset
PS2KB_SENDACK();
ps2kb_write(0xAA, 250);
break;
case 0xFE: //resend
PS2KB_SENDACK();
break;
case 0xF6: //set defaults
//enter stream mode
PS2KB_SENDACK();
break;
case 0xF5: //disable data reporting
PS2KB_SENDACK();
break;
case 0xF4: //enable data reporting
PS2KB_SENDACK();
break;
case 0xF3: //set typematic rate
PS2KB_SENDACK();
if(ps2kb_read(&received, 30) == 0)
PS2KB_SENDACK(); //do nothing with the rate
break;
case 0xF2: //get device id
PS2KB_SENDACK();
ps2kb_write(0xAB, 30);
ps2kb_write(0x83, 30);
break;
case 0xF0: //set scan code set
PS2KB_SENDACK();
if(ps2kb_read(&received, 30) == 0)
PS2KB_SENDACK();
break;
case 0xEE: //echo
ps2kb_write(0xEE, 30);
break;
case 0xED: // set/reset LEDs
PS2KB_SENDACK();
if(ps2kb_read(leds, 30) == 0)
PS2KB_SENDACK();
break;
}
}

View File

@@ -1,3 +1,11 @@
printf("waiting for host request...\n");
// wait for data line to go low and clock line to go high (request to send)
while(!(PS2KB_READ_DATA_PIN() == GPIO_PIN_RESET && PS2KB_READ_CLK_PIN() == GPIO_PIN_SET))
;
printf("host request!\n");
// return 0;
// if(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_4) == GPIO_PIN_SET)
// HAL_SPI_Receive_DMA(&hspi1, spi_recv_buf, SPI_BUF_SIZE);
if(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_4) == GPIO_PIN_RESET)
@@ -6,4 +14,85 @@
// HAL_Delay(200);
// printf("got!\n");
HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_1);
HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_1);
#define PS2_BUS_IDLE 0
#define PS2_BUS_INHIBIT 1
#define PS2_BUS_REQ_TO_SEND 2
#define PS2_BUS_UNKNOWN 3
uint8_t get_bus_status()
{
}
// HAS PARAITY CHECK
uint8_t ps2kb_read(uint8_t* result)
{
uint16_t data = 0x00;
uint16_t bit = 0x01;
uint8_t calculated_parity = 1;
uint8_t received_parity = 0;
printf("waiting for host request...\n");
// wait for data line to go low and clock line to go high (request to send)
while(!(PS2KB_READ_DATA_PIN() == GPIO_PIN_RESET && PS2KB_READ_CLK_PIN() == GPIO_PIN_SET))
;
printf("host request!\n");
// return 0;
delay_us(CLKHALF);
PS2KB_CLK_LOW();
delay_us(CLKFULL);
PS2KB_CLK_HI();
delay_us(CLKHALF);
while (bit < 0x0100)
{
if (PS2KB_READ_DATA_PIN() == GPIO_PIN_SET)
{
data = data | bit;
calculated_parity = calculated_parity ^ 1;
}
else
{
calculated_parity = calculated_parity ^ 0;
}
bit = bit << 1;
delay_us(CLKHALF);
PS2KB_CLK_LOW();
delay_us(CLKFULL);
PS2KB_CLK_HI();
delay_us(CLKHALF);
}
// we do the delay at the end of the loop, so at this point we have
// already done the delay for the parity bit
// parity bit
if (PS2KB_READ_DATA_PIN() == GPIO_PIN_SET)
received_parity = 1;
// stop bit
delay_us(CLKHALF);
PS2KB_CLK_LOW();
delay_us(CLKFULL);
PS2KB_CLK_HI();
delay_us(CLKHALF);
delay_us(CLKHALF);
PS2KB_DATA_LOW();
PS2KB_CLK_LOW();
delay_us(CLKFULL);
PS2KB_CLK_HI();
delay_us(CLKHALF);
PS2KB_DATA_HI();
*result = data & 0x00FF;
printf("0x%02x\n", *result);
return 0;
}

View File

@@ -21,3 +21,12 @@ on lichee 3.5ms
libevdev is SUPER SLOW! 20ms delay in parsing keyboard events. might write about it or do some more testing.
hand parse raw dev/input: 470us on pi3, 1ms on lichee
black PS2 extension cable both male:
purple clk
black data
brown GND
ps2 driver based on https://github.com/Harvie/ps2dev
no parity check for speed

409
resources/ps2dev.cpp Normal file
View File

@@ -0,0 +1,409 @@
/*
* ps2dev.cpp - an interface library for ps2 host.
* limitations:
* we do not handle parity errors.
* The timing constants are hard coded from the spec. Data rate is
* not impressive.
* probably lots of room for optimization.
*/
#include "ps2dev.h"
//Enable serial debug mode?
//#define _PS2DBG Serial
//since for the device side we are going to be in charge of the clock,
//the two defines below are how long each _phase_ of the clock cycle is
#define CLKFULL 40
// we make changes in the middle of a phase, this how long from the
// start of phase to the when we drive the data line
#define CLKHALF 20
// Delay between bytes
// I've found i need at least 400us to get this working at all,
// but even more is needed for reliability, so i've put 1000us
#define BYTEWAIT 1000
// Timeout if computer not sending for 30ms
#define TIMEOUT 30
/*
* the clock and data pins can be wired directly to the clk and data pins
* of the PS2 connector. No external parts are needed.
*/
PS2dev::PS2dev(int clk, int data)
{
_ps2clk = clk;
_ps2data = data;
gohi(_ps2clk);
gohi(_ps2data);
}
/*
* according to some code I saw, these functions will
* correctly set the clock and data pins for
* various conditions. It's done this way so you don't need
* pullup resistors.
*/
void
PS2dev::gohi(int pin)
{
pinMode(pin, INPUT);
digitalWrite(pin, HIGH);
}
void
PS2dev::golo(int pin)
{
digitalWrite(pin, LOW);
pinMode(pin, OUTPUT);
}
int PS2dev::write(unsigned char data)
{
delayMicroseconds(BYTEWAIT);
unsigned char i;
unsigned char parity = 1;
#ifdef _PS2DBG
_PS2DBG.print(F("sending "));
_PS2DBG.println(data,HEX);
#endif
if (digitalRead(_ps2clk) == LOW) {
return -1;
}
if (digitalRead(_ps2data) == LOW) {
return -2;
}
golo(_ps2data);
delayMicroseconds(CLKHALF);
// device sends on falling clock
golo(_ps2clk); // start bit
delayMicroseconds(CLKFULL);
gohi(_ps2clk);
delayMicroseconds(CLKHALF);
for (i=0; i < 8; i++)
{
if (data & 0x01)
{
gohi(_ps2data);
} else {
golo(_ps2data);
}
delayMicroseconds(CLKHALF);
golo(_ps2clk);
delayMicroseconds(CLKFULL);
gohi(_ps2clk);
delayMicroseconds(CLKHALF);
parity = parity ^ (data & 0x01);
data = data >> 1;
}
// parity bit
if (parity)
{
gohi(_ps2data);
} else {
golo(_ps2data);
}
delayMicroseconds(CLKHALF);
golo(_ps2clk);
delayMicroseconds(CLKFULL);
gohi(_ps2clk);
delayMicroseconds(CLKHALF);
// stop bit
gohi(_ps2data);
delayMicroseconds(CLKHALF);
golo(_ps2clk);
delayMicroseconds(CLKFULL);
gohi(_ps2clk);
delayMicroseconds(CLKHALF);
delayMicroseconds(BYTEWAIT);
#ifdef _PS2DBG
_PS2DBG.print(F("sent "));
_PS2DBG.println(data,HEX);
#endif
return 0;
}
int PS2dev::available() {
//delayMicroseconds(BYTEWAIT);
return ( (digitalRead(_ps2data) == LOW) || (digitalRead(_ps2clk) == LOW) );
}
int PS2dev::read(unsigned char * value)
{
unsigned int data = 0x00;
unsigned int bit = 0x01;
unsigned char calculated_parity = 1;
unsigned char received_parity = 0;
//wait for data line to go low and clock line to go high (or timeout)
unsigned long waiting_since = millis();
while((digitalRead(_ps2data) != LOW) || (digitalRead(_ps2clk) != HIGH)) {
if((millis() - waiting_since) > TIMEOUT) return -1;
}
delayMicroseconds(CLKHALF);
golo(_ps2clk);
delayMicroseconds(CLKFULL);
gohi(_ps2clk);
delayMicroseconds(CLKHALF);
while (bit < 0x0100) {
if (digitalRead(_ps2data) == HIGH)
{
data = data | bit;
calculated_parity = calculated_parity ^ 1;
} else {
calculated_parity = calculated_parity ^ 0;
}
bit = bit << 1;
delayMicroseconds(CLKHALF);
golo(_ps2clk);
delayMicroseconds(CLKFULL);
gohi(_ps2clk);
delayMicroseconds(CLKHALF);
}
// we do the delay at the end of the loop, so at this point we have
// already done the delay for the parity bit
// parity bit
if (digitalRead(_ps2data) == HIGH)
{
received_parity = 1;
}
// stop bit
delayMicroseconds(CLKHALF);
golo(_ps2clk);
delayMicroseconds(CLKFULL);
gohi(_ps2clk);
delayMicroseconds(CLKHALF);
delayMicroseconds(CLKHALF);
golo(_ps2data);
golo(_ps2clk);
delayMicroseconds(CLKFULL);
gohi(_ps2clk);
delayMicroseconds(CLKHALF);
gohi(_ps2data);
*value = data & 0x00FF;
#ifdef _PS2DBG
_PS2DBG.print(F("received data "));
_PS2DBG.println(*value,HEX);
_PS2DBG.print(F("received parity "));
_PS2DBG.print(received_parity,BIN);
_PS2DBG.print(F(" calculated parity "));
_PS2DBG.println(received_parity,BIN);
#endif
if (received_parity == calculated_parity) {
return 0;
} else {
return -2;
}
}
void PS2dev::keyboard_init()
{
while(write(0xAA)!=0);
delay(10);
return;
}
void PS2dev::ack()
{
while(write(0xFA));
return;
}
int PS2dev::keyboard_reply(unsigned char cmd, unsigned char *leds)
{
unsigned char val;
unsigned char enabled;
switch (cmd)
{
case 0xFF: //reset
ack();
//the while loop lets us wait for the host to be ready
while(write(0xAA)!=0);
break;
case 0xFE: //resend
ack();
break;
case 0xF6: //set defaults
//enter stream mode
ack();
break;
case 0xF5: //disable data reporting
//FM
enabled = 0;
ack();
break;
case 0xF4: //enable data reporting
//FM
enabled = 1;
ack();
break;
case 0xF3: //set typematic rate
ack();
if(!read(&val)) ack(); //do nothing with the rate
break;
case 0xF2: //get device id
ack();
write(0xAB);
write(0x83);
break;
case 0xF0: //set scan code set
ack();
if(!read(&val)) ack(); //do nothing with the rate
break;
case 0xEE: //echo
//ack();
write(0xEE);
break;
case 0xED: //set/reset LEDs
ack();
if(!read(leds)) ack(); //do nothing with the rate
#ifdef _PS2DBG
_PS2DBG.print("LEDs: ");
_PS2DBG.println(*leds, HEX);
//digitalWrite(LED_BUILTIN, *leds);
#endif
return 1;
break;
}
return 0;
}
int PS2dev::keyboard_handle(unsigned char *leds) {
unsigned char c; //char stores data recieved from computer for KBD
if(available())
{
if(!read(&c)) return keyboard_reply(c, leds);
}
return 0;
}
// Presses then releases one of the non-special characters
int PS2dev::keyboard_mkbrk(unsigned char code)
{
write(code);
write(0xF0);
write(code);
return 0;
}
// Presses one of the non-special characters
int PS2dev::keyboard_press(unsigned char code)
{
return write(code);
}
// Releases one of the non-special characters
int PS2dev::keyboard_release(unsigned char code)
{
write(0xf0);
write(code);
return 0;
}
// Presses one of the special characters
int PS2dev::keyboard_press_special(unsigned char code)
{
write(0xe0);
write(code);
return 0;
}
// Releases one of the special characters
int PS2dev::keyboard_release_special(unsigned char code)
{
write(0xe0);
write(0xf0);
write(code);
return 0;
}
// Presses then releases one of the special characters
int PS2dev::keyboard_special_mkbrk(unsigned char code)
{
write(0xe0);
write(code);
write(0xe0);
write(0xf0);
write(code);
return 0;
}
// Presses Printscreen
int PS2dev::keyboard_press_printscreen()
{
write(0xe0);
write(0x12);
write(0xe0);
write(0x7c);
return 0;
}
// Releases Printscreen
int PS2dev::keyboard_release_printscreen()
{
write(0xe0);
write(0xf0);
write(0x7c);
write(0xe0);
write(0xf0);
write(0x12);
return 0;
}
// Presses then releases Printscreen
int PS2dev::keyboard_mkbrk_printscreen()
{
keyboard_press_printscreen();
keyboard_release_printscreen();
return 0;
}
// Presses/Releases Pause/Break
int PS2dev::keyboard_pausebreak()
{
write(0xe1);
write(0x14);
write(0x77);
write(0xe1);
write(0xf0);
write(0x14);
write(0xe0);
write(0x77);
return 0;
}