| Форум РадиоКот https://radiokot.ru/forum/ |
|
| stm32f407 RCC SysTick Keil ASM https://radiokot.ru/forum/viewtopic.php?f=59&t=181325 |
Страница 1 из 1 |
| Автор: | danone78 [ Ср фев 16, 2022 23:58:12 ] |
| Заголовок сообщения: | stm32f407 RCC SysTick Keil ASM |
Черт меня дернул на лыжах покататься. Решил я попробовать после Atmega328p освоить Cortex. По моему разработчики явно перемудрили. Таких сложностей я не ожидал. Пробую разогнать stm32f407 на китайской плате, используя Keil ассемблер. Видимо я слишком дотошный, если есть возможность вникнуть в детали, меня сразу тянет туда как магнитом. Вот текст: AREA A0 RCC_AHB1ENR DCD 0x40023830 RCC_CR DCD 0x40023800 RCC_PLLCFGR DCD 0x40023804 RCC_CFGR DCD 0x40023808 HSE_ON DCD 0x42000000+(0x23800*0x20)+4*16 HSI_ON DCD 0x42000000+(0x23800*0x20) PLL_SRC DCD 0x42000000+(0x23804*0x20)+4*22 PLL_ON DCD 0x42000000+(0x23800*0x20)+4*24 GPIOA_MODER DCD 0x40020000 GPIOA_ODR DCD 0x40020014 ODR_bit6 DCD 0x42000000+(0x20014*0x20)+4*6 GPIOA_BSRR DCD 0x40020018 RCC_AHB1ENR_BB DCD 0x42000000+(0x23830*0x20) STK_CTRL DCD 0xE000E010 STK_LOAD DCD 0xE000E014 AREA A1, CODE LDR.W R0,HSE_ON ; RCCconfigBegin MOVS R1,#1 STRB R1,[R0] ADD R0,#4 NOHSE LDR R1,[R0] CBNZ R1,HSE_STABLE B NOHSE HSE_STABLE LDR.W r0,PLL_SRC MOVS R1,#1 STRB R1,[R0] LDR.W r0,RCC_PLLCFGR MOV R1,#0X1008 ; PLLP=0(/2) PLLN=64 PLLM=8 STRH R1,[R0] ; Fsys=8*(64/8/2)=32MHz LDR.W R0,PLL_ON MOVS R1,#1 STRB R1,[R0] ADD R0,#4 NOPLL LDR R1,[R0] CBNZ R1,PLL_STABLE B NOPLL PLL_STABLE LDR.W r0,RCC_CFGR MOVS r1,#2 STR r1,[r0] ; RCCconfigEnd LDR.W R0,RCC_AHB1ENR_BB MOVS r1,#1 STRB r1,[r0] LDR.W r0,GPIOA_MODER MOV R1,#0x5000 STRH R1,[R0] LDR.W R0,STK_LOAD MVN r1,#0xFF000000 ; Bits 23:0 RELOAD value STR r1,[r0] LDR R0,STK_CTRL MOVS r1,#7 ; Bit2 CLKSOURCE|Bit1 TICKINT|Bit0 ENABLE STRB r1,[r0] loop wfe B loop Tick LDR r0,ODR_bit6 LDRB r1,[r0] CBZ r1,setA6 MOVS r1,#0 ; 0 STRB r1,[r0] ADD r0,#4 MOVS R1,#1 STRB R1,[R0] B clrA6 setA6 MOVS r1,#1 STRB r1,[r0] ADD r0,#4 MOVS R1,#0 ; 0 STRB R1,[R0] clrA6 BX LR END Тут нет только таблицы векторов. И так эта штучка смогла выдать 32 МГц. По моему неплохо, но в даташите 168 указано. Сначала включил внешний резонатор. Контроллер еще продолжает работать от внутреннего. Затем настраиваю модуль ФАПЧ(PLL). Источник синхронизации для ФАПЧ, множитель и два делителя. Теперь можно выбрать источник системной частоты, я выбрал PLL. В общем чтобы покороче, я взял минимальное значение множителя и уменьшал делитель на сколько это возможно. Частоту замерял секундомером по миганию светодиодов. Таймер генерирует исключение каждые 65536*256 циклов. Каждую секунду два исключения (два переключения светодиодов). что соответствует 32МГц. Удавалось кому ни-будь выжать 64? |
|
| Автор: | VladislavS [ Чт фев 17, 2022 12:13:51 ] |
| Заголовок сообщения: | Re: stm32f407 RCC SysTick Keil ASM |
Штатную частоту контроллера 168 МГц не надо "выжимать", а можно просто включить. Откройте в CubeMX вкладку с тактовыми частотами, установите конфигурацию в наглядном графическом виде и перенесите значение всех делителей в программу. Где же вы такую траву берёте то? Зачем тут ассемблер? Почему документацию не читаете? И еще много разных вопросов... Добавлено after 5 hours 31 minute 29 seconds: |
|
| Автор: | danone78 [ Сб фев 19, 2022 09:35:50 ] |
| Заголовок сообщения: | Re: stm32f407 RCC SysTick Keil ASM |
спасибо, удобная программа. Добавлено after 7 hours 56 minutes 4 seconds: мяу-мяу, что-то я недопопнимау, опытным путем выяснил что мне не преодолеть барьер в 42мГц. Это максимум для APB1. В регистр RCC_CFGR загрузил 0xfc02 что соответствует делению для частоты для APB1 и APB2 на 16. Но оно ни фу-фу. В толмуте к этому регистру таинственная надпись: Access: 0 ≤ wait state ≤ 2, word, half-word and byte access 1 or 2 wait states inserted only if the access occurs during a clock source switch. Это я должен запрограммировать два такта ожидания или контроллер ждет два такта при переключении источника синхронизации? Попробую через отладчик глянуть что происходит с этим регистром.
|
|
| Автор: | VladislavS [ Сб фев 19, 2022 10:01:37 ] |
| Заголовок сообщения: | Re: stm32f407 RCC SysTick Keil ASM |
В регистр RCC_CFGR загрузил 0xfc02 Стоп! Перестаньте это делать. Во-первых, вы думаете сейчас все кинутся читать RM на ваш чип, чтобы это расшифровать? Да ну на, у меня более интересные дела найдутся. Во-вторых, вы сами на первом же регистре накосячите. Так что, берём заголовочный файл микроконтроллера и с первой строки кода все имена регистров и бит берём из него. Так и только так!
|
|
| Автор: | Reflector [ Сб фев 19, 2022 10:03:49 ] |
| Заголовок сообщения: | Re: stm32f407 RCC SysTick Keil ASM |
мяу-мяу, что-то я недопопнимау, опытным путем выяснил что мне не преодолеть барьер в 42мГц. Надеюсь латентность флеша увеличил? (FLASH->ACR) |
|
| Автор: | VladislavS [ Сб фев 19, 2022 10:12:04 ] |
| Заголовок сообщения: | Re: stm32f407 RCC SysTick Keil ASM |
Рановато подcёк |
|
| Автор: | danone78 [ Сб фев 19, 2022 11:32:58 ] |
| Заголовок сообщения: | Re: stm32f407 RCC SysTick Keil ASM |
После записи в RCC_CFGR 0xfc02 пробую обратно считать содержимое RCC_CFGR, на этом шаге дебагер пишет без остановки :Cannot Acces Memory. Рою дальше... Добавлено after 1 hour 4 minutes 23 seconds: Спасибо все получилось, выставил частоту на 128мгц с латентностью FLASH_ACR_LATENCY[2:0]=2. В этом же регистре можно задействовать кэш, но это уже другая история.
|
|
| Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|


