mirror of
https://github.com/cesanta/mongoose.git
synced 2025-06-08 01:42:52 +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…
Reference in New Issue
Block a user