12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- /*
- * Copyright (C) 2023 Daniele Lacamera <root@danielinux.net>
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
- #include <stdint.h>
- #include "system.h"
- extern uint32_t SystemCoreClock;
- extern uint32_t _start_heap;
- static void flash_set_waitstates(int waitstates)
- {
- FLASH_ACR |= waitstates | FLASH_ACR_ENABLE_DATA_CACHE | FLASH_ACR_ENABLE_INST_CACHE;
- }
- void clock_pll_off(void)
- {
- uint32_t reg32;
- /* Enable internal high-speed oscillator. */
- RCC_CR |= RCC_CR_HSION;
- DMB();
- while ((RCC_CR & RCC_CR_HSIRDY) == 0) {};
- /* Select HSI as SYSCLK source. */
- reg32 = RCC_CFGR;
- reg32 &= ~((1 << 1) | (1 << 0));
- RCC_CFGR = (reg32 | RCC_CFGR_SW_HSI);
- DMB();
- /* Turn off PLL */
- RCC_CR &= ~RCC_CR_PLLON;
- DMB();
- }
- #include <string.h>
- /*
- size_t strlen(const char *s)
- {
- int i = 0;
- while (s[i] != 0)
- i++;
- return i;
- }
- */
- void * _sbrk(unsigned int incr)
- {
- static unsigned char *heap = (unsigned char *)&_start_heap;
- void *old_heap = heap;
- if (((incr >> 2) << 2) != incr)
- incr = ((incr >> 2) + 1) << 2;
- if (heap == NULL)
- heap = (unsigned char *)&_start_heap;
- else
- heap += incr;
- return old_heap;
- }
|