(mostly) assembly timings

This commit is contained in:
Attila BODY 2018-12-15 10:32:53 +01:00
parent b59a086a82
commit 61bd8c7632
6 changed files with 275 additions and 186 deletions

View file

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml version="1.0" encoding="UTF-8"?>
<?fileVersion 4.0.0?><cproject storage_type_id="org.eclipse.cdt.core.XmlProjectDescriptionStorage">
<storageModule moduleId="org.eclipse.cdt.core.settings">
<cconfiguration id="fr.ac6.managedbuild.config.gnu.cross.exe.debug.2038470026">
@ -40,18 +40,18 @@
</option>
<option id="gnu.c.compiler.option.preprocessor.def.symbols.1257536459" name="Defined symbols (-D)" superClass="gnu.c.compiler.option.preprocessor.def.symbols" useByScannerDiscovery="false" valueType="definedSymbols">
<listOptionValue builtIn="false" value="USE_FULL_LL_DRIVER" />
<listOptionValue builtIn="false" value="HSE_VALUE=8000000"/>
<listOptionValue builtIn="false" value="HSE_STARTUP_TIMEOUT=100"/>
<listOptionValue builtIn="false" value="LSE_STARTUP_TIMEOUT=5000"/>
<listOptionValue builtIn="false" value="LSE_VALUE=32768"/>
<listOptionValue builtIn="false" value="HSI_VALUE=8000000"/>
<listOptionValue builtIn="false" value="LSI_VALUE=40000"/>
<listOptionValue builtIn="false" value="VDD_VALUE=3300"/>
<listOptionValue builtIn="false" value="PREFETCH_ENABLE=1"/>
<listOptionValue builtIn="false" value="__weak=&quot;__attribute__((weak))&quot;" />
<listOptionValue builtIn="false" value="__packed=&quot;__attribute__((__packed__))&quot;" />
<listOptionValue builtIn="false" value="STM32F103xB" />
</option>
<listOptionValue builtIn="false" value="HSE_VALUE=8000000" /><listOptionValue builtIn="false" value="HSE_STARTUP_TIMEOUT=100" /><listOptionValue builtIn="false" value="LSE_STARTUP_TIMEOUT=5000" /><listOptionValue builtIn="false" value="LSE_VALUE=32768" /><listOptionValue builtIn="false" value="HSI_VALUE=8000000" /><listOptionValue builtIn="false" value="LSI_VALUE=40000" /><listOptionValue builtIn="false" value="VDD_VALUE=3300" /><listOptionValue builtIn="false" value="PREFETCH_ENABLE=1" /></option>
<option id="fr.ac6.managedbuild.gnu.c.compiler.option.misc.other.739745364" superClass="fr.ac6.managedbuild.gnu.c.compiler.option.misc.other" useByScannerDiscovery="false" value="-fmessage-length=0" valueType="string" />
<inputType id="fr.ac6.managedbuild.tool.gnu.cross.c.compiler.input.c.62084941" superClass="fr.ac6.managedbuild.tool.gnu.cross.c.compiler.input.c" />
<inputType id="fr.ac6.managedbuild.tool.gnu.cross.c.compiler.input.s.1618358280" superClass="fr.ac6.managedbuild.tool.gnu.cross.c.compiler.input.s" />
@ -67,18 +67,18 @@
</option>
<option id="gnu.cpp.compiler.option.preprocessor.def.1921587770" name="Defined symbols (-D)" superClass="gnu.cpp.compiler.option.preprocessor.def" useByScannerDiscovery="false" valueType="definedSymbols">
<listOptionValue builtIn="false" value="USE_FULL_LL_DRIVER" />
<listOptionValue builtIn="false" value="HSE_VALUE=8000000"/>
<listOptionValue builtIn="false" value="HSE_STARTUP_TIMEOUT=100"/>
<listOptionValue builtIn="false" value="LSE_STARTUP_TIMEOUT=5000"/>
<listOptionValue builtIn="false" value="LSE_VALUE=32768"/>
<listOptionValue builtIn="false" value="HSI_VALUE=8000000"/>
<listOptionValue builtIn="false" value="LSI_VALUE=40000"/>
<listOptionValue builtIn="false" value="VDD_VALUE=3300"/>
<listOptionValue builtIn="false" value="PREFETCH_ENABLE=1"/>
<listOptionValue builtIn="false" value="__weak=&quot;__attribute__((weak))&quot;" />
<listOptionValue builtIn="false" value="__packed=&quot;__attribute__((__packed__))&quot;" />
<listOptionValue builtIn="false" value="STM32F103xB" />
</option>
<listOptionValue builtIn="false" value="HSE_VALUE=8000000" /><listOptionValue builtIn="false" value="HSE_STARTUP_TIMEOUT=100" /><listOptionValue builtIn="false" value="LSE_STARTUP_TIMEOUT=5000" /><listOptionValue builtIn="false" value="LSE_VALUE=32768" /><listOptionValue builtIn="false" value="HSI_VALUE=8000000" /><listOptionValue builtIn="false" value="LSI_VALUE=40000" /><listOptionValue builtIn="false" value="VDD_VALUE=3300" /><listOptionValue builtIn="false" value="PREFETCH_ENABLE=1" /></option>
<option id="fr.ac6.managedbuild.gnu.cpp.compiler.option.misc.other.652027465" name="Other flags" superClass="fr.ac6.managedbuild.gnu.cpp.compiler.option.misc.other" useByScannerDiscovery="false" value="-fmessage-length=0" valueType="string" />
<inputType id="fr.ac6.managedbuild.tool.gnu.cross.cpp.compiler.input.cpp.1264884591" superClass="fr.ac6.managedbuild.tool.gnu.cross.cpp.compiler.input.cpp" />
<inputType id="fr.ac6.managedbuild.tool.gnu.cross.cpp.compiler.input.s.1687591499" superClass="fr.ac6.managedbuild.tool.gnu.cross.cpp.compiler.input.s" />
@ -160,18 +160,18 @@
</option>
<option id="gnu.c.compiler.option.preprocessor.def.symbols.1257536459" name="Defined symbols (-D)" superClass="gnu.c.compiler.option.preprocessor.def.symbols" useByScannerDiscovery="false" valueType="definedSymbols">
<listOptionValue builtIn="false" value="USE_FULL_LL_DRIVER" />
<listOptionValue builtIn="false" value="HSE_VALUE=8000000"/>
<listOptionValue builtIn="false" value="HSE_STARTUP_TIMEOUT=100"/>
<listOptionValue builtIn="false" value="LSE_STARTUP_TIMEOUT=5000"/>
<listOptionValue builtIn="false" value="LSE_VALUE=32768"/>
<listOptionValue builtIn="false" value="HSI_VALUE=8000000"/>
<listOptionValue builtIn="false" value="LSI_VALUE=40000"/>
<listOptionValue builtIn="false" value="VDD_VALUE=3300"/>
<listOptionValue builtIn="false" value="PREFETCH_ENABLE=1"/>
<listOptionValue builtIn="false" value="__weak=&quot;__attribute__((weak))&quot;" />
<listOptionValue builtIn="false" value="__packed=&quot;__attribute__((__packed__))&quot;" />
<listOptionValue builtIn="false" value="STM32F103xB" />
</option>
<listOptionValue builtIn="false" value="HSE_VALUE=8000000" /><listOptionValue builtIn="false" value="HSE_STARTUP_TIMEOUT=100" /><listOptionValue builtIn="false" value="LSE_STARTUP_TIMEOUT=5000" /><listOptionValue builtIn="false" value="LSE_VALUE=32768" /><listOptionValue builtIn="false" value="HSI_VALUE=8000000" /><listOptionValue builtIn="false" value="LSI_VALUE=40000" /><listOptionValue builtIn="false" value="VDD_VALUE=3300" /><listOptionValue builtIn="false" value="PREFETCH_ENABLE=1" /></option>
<option id="fr.ac6.managedbuild.gnu.c.compiler.option.misc.other.739745364" superClass="fr.ac6.managedbuild.gnu.c.compiler.option.misc.other" useByScannerDiscovery="false" value="-fmessage-length=0" valueType="string" />
<inputType id="fr.ac6.managedbuild.tool.gnu.cross.c.compiler.input.c.62084941" superClass="fr.ac6.managedbuild.tool.gnu.cross.c.compiler.input.c" />
<inputType id="fr.ac6.managedbuild.tool.gnu.cross.c.compiler.input.s.1618358280" superClass="fr.ac6.managedbuild.tool.gnu.cross.c.compiler.input.s" />
@ -187,18 +187,18 @@
</option>
<option id="gnu.cpp.compiler.option.preprocessor.def.symbols.2073291198" name="Defined symbols (-D)" superClass="gnu.cpp.compiler.option.preprocessor.def.symbols" useByScannerDiscovery="false" valueType="definedSymbols">
<listOptionValue builtIn="false" value="USE_FULL_LL_DRIVER" />
<listOptionValue builtIn="false" value="HSE_VALUE=8000000"/>
<listOptionValue builtIn="false" value="HSE_STARTUP_TIMEOUT=100"/>
<listOptionValue builtIn="false" value="LSE_STARTUP_TIMEOUT=5000"/>
<listOptionValue builtIn="false" value="LSE_VALUE=32768"/>
<listOptionValue builtIn="false" value="HSI_VALUE=8000000"/>
<listOptionValue builtIn="false" value="LSI_VALUE=40000"/>
<listOptionValue builtIn="false" value="VDD_VALUE=3300"/>
<listOptionValue builtIn="false" value="PREFETCH_ENABLE=1"/>
<listOptionValue builtIn="false" value="__weak=&quot;__attribute__((weak))&quot;" />
<listOptionValue builtIn="false" value="__packed=&quot;__attribute__((__packed__))&quot;" />
<listOptionValue builtIn="false" value="STM32F103xB" />
</option>
<listOptionValue builtIn="false" value="HSE_VALUE=8000000" /><listOptionValue builtIn="false" value="HSE_STARTUP_TIMEOUT=100" /><listOptionValue builtIn="false" value="LSE_STARTUP_TIMEOUT=5000" /><listOptionValue builtIn="false" value="LSE_VALUE=32768" /><listOptionValue builtIn="false" value="HSI_VALUE=8000000" /><listOptionValue builtIn="false" value="LSI_VALUE=40000" /><listOptionValue builtIn="false" value="VDD_VALUE=3300" /><listOptionValue builtIn="false" value="PREFETCH_ENABLE=1" /></option>
<option id="fr.ac6.managedbuild.gnu.cpp.compiler.option.misc.other.652027465" name="Other flags" superClass="fr.ac6.managedbuild.gnu.cpp.compiler.option.misc.other" useByScannerDiscovery="false" value="-fmessage-length=0" valueType="string" />
<inputType id="fr.ac6.managedbuild.tool.gnu.cross.cpp.compiler.input.cpp.1264884591" superClass="fr.ac6.managedbuild.tool.gnu.cross.cpp.compiler.input.cpp" />
<inputType id="fr.ac6.managedbuild.tool.gnu.cross.cpp.compiler.input.s.1687591499" superClass="fr.ac6.managedbuild.tool.gnu.cross.cpp.compiler.input.s" />

View file

@ -1,8 +1,8 @@
[PreviousGenFiles]
HeaderPath=/home/abody/work/private/NeoPixelF103MVP/Inc
HeaderFiles=gpio.h;stm32f1xx_it.h;stm32_assert.h;stm32f1xx_hal_conf.h;main.h;
HeaderFiles=gpio.h;stm32f1xx_it.h;stm32_assert.h;stm32f1xx_hal_conf.h;main.h;spi.h;
SourcePath=/home/abody/work/private/NeoPixelF103MVP/Src
SourceFiles=gpio.c;stm32f1xx_it.c;main.c;
SourceFiles=gpio.c;stm32f1xx_it.c;main.c;spi.c;stm32f1xx_hal_msp.c;
[PreviousLibFiles]
LibFiles=Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_ll_gpio.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_ll_pwr.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_ll_system.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_ll_exti.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_ll_bus.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_ll_cortex.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_ll_rcc.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_ll_utils.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_ll_dma.h;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_ll_gpio.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_ll_pwr.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_ll_exti.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_ll_rcc.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_ll_utils.c;Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f103xb.h;Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f1xx.h;Drivers/CMSIS/Device/ST/STM32F1xx/Include/system_stm32f1xx.h;Drivers/CMSIS/Device/ST/STM32F1xx/Source/Templates/system_stm32f1xx.c;Drivers/CMSIS/Include/arm_common_tables.h;Drivers/CMSIS/Include/arm_const_structs.h;Drivers/CMSIS/Include/arm_math.h;Drivers/CMSIS/Include/cmsis_armcc.h;Drivers/CMSIS/Include/cmsis_armcc_V6.h;Drivers/CMSIS/Include/cmsis_gcc.h;Drivers/CMSIS/Include/core_cm0.h;Drivers/CMSIS/Include/core_cm0plus.h;Drivers/CMSIS/Include/core_cm3.h;Drivers/CMSIS/Include/core_cm4.h;Drivers/CMSIS/Include/core_cm7.h;Drivers/CMSIS/Include/core_cmFunc.h;Drivers/CMSIS/Include/core_cmInstr.h;Drivers/CMSIS/Include/core_cmSimd.h;Drivers/CMSIS/Include/core_sc000.h;Drivers/CMSIS/Include/core_sc300.h;

View file

@ -0,0 +1,28 @@
# This is an NeoPixelF103MVP board with a single STM32F103C8Tx chip
#
# Generated by System Workbench for STM32
# Take care that such file, as generated, may be overridden without any early notice. Please have a look to debug launch configuration setup(s)
source [find interface/stlink.cfg]
set WORKAREASIZE 0x5000
transport select "hla_swd"
set CHIPNAME STM32F103C8Tx
set BOARDNAME NeoPixelF103MVP
# Enable debug when in low power modes
set ENABLE_LOW_POWER 1
# Stop Watchdog counters when halt
set STOP_WATCHDOG 1
# STlink Debug clock frequency
set CLOCK_FREQ 4000
# use software system reset
reset_config none
set CONNECT_UNDER_RESET 0
source [find target/stm32f1x.cfg]

View file

@ -37,7 +37,10 @@ PA13.Mode=Serial_Wire
PA13.Signal=SYS_JTMS-SWDIO
PA14.Mode=Serial_Wire
PA14.Signal=SYS_JTCK-SWCLK
PB11.GPIOParameters=GPIO_Speed,PinState
PB11.GPIO_Speed=GPIO_SPEED_FREQ_HIGH
PB11.Locked=true
PB11.PinState=GPIO_PIN_RESET
PB11.Signal=GPIO_Output
PC13-TAMPER-RTC.Locked=true
PC13-TAMPER-RTC.Signal=GPIO_Output

View file

@ -84,7 +84,7 @@ void MX_GPIO_Init(void)
/**/
GPIO_InitStruct.Pin = LL_GPIO_PIN_11;
GPIO_InitStruct.Mode = LL_GPIO_MODE_OUTPUT;
GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_LOW;
GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_HIGH;
GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
LL_GPIO_Init(GPIOB, &GPIO_InitStruct);

View file

@ -99,42 +99,100 @@ int main(void)
/* Infinite loop */
/* USER CODE BEGIN WHILE */
asm volatile(
" movs r3, #1000 \n\t"
"1: subs r3, #1 \n\t"
" bne 1b \n\t"
: : : "r3", "cc"
);
asm volatile("\tmovs r3, #1000\n1:\tsubs r3, #1\n\tbne 1b\n\t" : : : "r3", "cc");
GPIOB->ODR = 0;
volatile uint32_t v;
uint8_t ledbytes[] = {0x0f, 0xf0, 0};
uint8_t ledbytes[] = {0, 0xff, 0, 0xff, 0x55, 0xaa};
__disable_irq();
#define W_1f 5
#define W_0f 0
#define W_0s 3
#define W_1af
#define W_1as ++v; ++v
#define W_0af ++v; ++v
#define W_0as ++v; ++v
/*
#define SHIFTBIT(x) \
if(b&(1<<x)) { \
GPIOB->BSRR = (1 << 11); \
for( v=W_1f; v != 0; --v); \
W_1af; \
GPIOB->BSRR = (1 << (16+11)); \
W_1as; \
} else { \
GPIOB->BSRR = (1 << 11); \
for( v=W_0f; v != 0; --v); \
W_0af; \
GPIOB->BSRR = (1 << (16+11)); \
for( v=W_0s; v != 0; --v); \
W_0as; \
}
*/
#define SHIFTBIT(x) \
if(b&(1<<x)) { \
GPIOB->BSRR = (1 << 11); \
asm volatile("\tmov r3, #10\n1:\tsubs r3, #1\n\tbne 1b\n\t" : : : "r3", "cc"); \
GPIOB->BSRR = (1 << (16+11)); \
asm volatile("\tmov r3, #03\n1:\tsubs r3, #1\n\tbne 1b\n\t" : : : "r3", "cc"); \
} else { \
GPIOB->BSRR = (1 << 11); \
asm volatile("\tmov r3, #03\n1:\tsubs r3, #1\n\tbne 1b\n\t" : : : "r3", "cc"); \
GPIOB->BSRR = (1 << (16+11)); \
asm volatile("\tmov r3, #10\n1:\tsubs r3, #1\n\tbne 1b\n\t" : : : "r3", "cc"); \
}
__disable_irq();
while(1)
{
uint32_t *bitPtr = BITBAND_RAM(ledbytes, 0);
uint32_t cnt = sizeof(ledbytes)*8 + 1;
uint8_t *bufPtr = ledbytes;
uint32_t cnt = sizeof(ledbytes) + 1;
while(--cnt) {
uint32_t b = *bufPtr++;
SHIFTBIT(7);
SHIFTBIT(6);
SHIFTBIT(5);
SHIFTBIT(4);
SHIFTBIT(3);
SHIFTBIT(2);
SHIFTBIT(1);
if(*bitPtr++) {
GPIOB->BSRR = 1 << 11; //set
for( v=5; v != 0; --v); //long
GPIOB->BSRR = 1 << (16+11); //clear
++v; ++v; //short
if(b&1) {
GPIOB->BSRR = 1 << 11;
for( v=W_1f; v != 0; --v);
W_1af;
GPIOB->BSRR = 1 << (16+11);
W_1as;
} else {
GPIOB->BSRR = 1 << 11; //set
for( v=0; v != 0; --v); //short
++v;++v;
GPIOB->BSRR = 1 << (16+11); //clear
for( v=3; v != 0; --v); //long
++v; ++v;
GPIOB->BSRR = 1 << 11;
for( v=W_0f; v != 0; --v);
W_0af;
GPIOB->BSRR = 1 << (16+11);
for( v=W_0s; v != 0; --v);
++v; v=0;
}
}
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
for( v=400; v != 0; --v); //long
for( v=100; v != 0; --v); //long
}
/* USER CODE END 3 */
}
}
static void LL_Init(void)
{