mirror of
https://github.com/cesanta/mongoose.git
synced 2025-01-16 12:12:59 +08:00
mgos_nsleep100 impl for ARM-based platforms
startup cleanup on CC3220 CL: none PUBLISHED_FROM=0998fad82fbcdbde30dca42833f2e48d148592bf
This commit is contained in:
parent
1299d6118f
commit
d949c19c7e
34
src/common/platforms/arm/arm_nsleep100.c
Normal file
34
src/common/platforms/arm/arm_nsleep100.c
Normal file
@ -0,0 +1,34 @@
|
||||
/*
|
||||
* Copyright (c) 2014-2018 Cesanta Software Limited
|
||||
* All rights reserved
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the ""License"");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an ""AS IS"" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#include <math.h>
|
||||
|
||||
#include "mgos.h"
|
||||
#include "mgos_system.h"
|
||||
|
||||
void (*mgos_nsleep100)(uint32_t n);
|
||||
uint32_t mgos_nsleep100_loop_count = 0;
|
||||
/* Provided by arm_nsleep100_{m4,m7}.S for M4 and M7 respectively. */
|
||||
extern void mgos_nsleep100_impl(uint32_t n);
|
||||
|
||||
void mgos_nsleep100_cal(void) {
|
||||
uint32_t cpu_freq = mgos_get_cpu_freq();
|
||||
/* # of instruction cycles per 100 ns */
|
||||
mgos_nsleep100_loop_count =
|
||||
roundf((100.0f / 1000000000.0f) / (1.0f / cpu_freq));
|
||||
mgos_nsleep100 = mgos_nsleep100_impl;
|
||||
}
|
46
src/common/platforms/arm/arm_nsleep100_m4.S
Normal file
46
src/common/platforms/arm/arm_nsleep100_m4.S
Normal file
@ -0,0 +1,46 @@
|
||||
/*
|
||||
* Copyright (c) 2014-2018 Cesanta Software Limited
|
||||
* All rights reserved
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the ""License"");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an ""AS IS"" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
.arch armv7e-m
|
||||
.syntax unified
|
||||
.thumb
|
||||
|
||||
/* These are required to satisfy TI linker. */
|
||||
.eabi_attribute Tag_ABI_align_needed, 1
|
||||
.eabi_attribute Tag_ABI_align_preserved, 1
|
||||
|
||||
.global mgos_nsleep100_impl
|
||||
.global mgos_nsleep100_loop_count
|
||||
|
||||
.section .iram.mgos_nsleep100_impl
|
||||
.type mgos_nsleep100_impl, %function
|
||||
.align 4
|
||||
|
||||
mgos_nsleep100_impl:
|
||||
ldr r3, =mgos_nsleep100_loop_count
|
||||
ldr r3, [r3]
|
||||
mul r0, r3
|
||||
mov r1, #6
|
||||
udiv r0, r0, r1
|
||||
cbz r0, xxx
|
||||
lxx:
|
||||
subs r0, #1
|
||||
bne lxx
|
||||
xxx:
|
||||
bx lr
|
||||
.align 4
|
||||
.size mgos_nsleep100_impl, . - mgos_nsleep100_impl
|
45
src/common/platforms/arm/arm_nsleep100_m7.S
Normal file
45
src/common/platforms/arm/arm_nsleep100_m7.S
Normal file
@ -0,0 +1,45 @@
|
||||
/*
|
||||
* Copyright (c) 2014-2018 Cesanta Software Limited
|
||||
* All rights reserved
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the ""License"");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an ""AS IS"" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
.arch armv7e-m
|
||||
.syntax unified
|
||||
.thumb
|
||||
|
||||
/* These are required to satisfy TI linker. */
|
||||
.eabi_attribute Tag_ABI_align_needed, 1
|
||||
.eabi_attribute Tag_ABI_align_preserved, 1
|
||||
|
||||
.global mgos_nsleep100_impl
|
||||
.global mgos_nsleep100_loop_count
|
||||
|
||||
.section .iram.mgos_nsleep100_impl
|
||||
.type mgos_nsleep100_impl, %function
|
||||
.align 4
|
||||
|
||||
mgos_nsleep100_impl:
|
||||
ldr r3, =mgos_nsleep100_loop_count
|
||||
ldr r3, [r3]
|
||||
/* Because of speculative fetch, the core loop only takes 1 cycle. */
|
||||
muls r0, r3
|
||||
cbz r0, xxx
|
||||
lxx:
|
||||
subs r0, #1
|
||||
bne lxx
|
||||
xxx:
|
||||
bx lr
|
||||
.align 4
|
||||
.size mgos_nsleep100_impl, . - mgos_nsleep100_impl
|
Loading…
x
Reference in New Issue
Block a user