Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.53/19: Рейтинг темы: голосов - 19, средняя оценка - 4.53
1 / 1 / 0
Регистрация: 20.02.2019
Сообщений: 50

Зажечь светодиод используя bit banding

18.03.2022, 16:44. Показов 4849. Ответов 58
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет, хочу обратиться за помощью. Изучаю Assembler на МК STM32F100RBT6 и пытаюсь зажечь светодиод используя bit banding. Вроде адреса рассчитал правильно, возможно в регистры что-то не так записал. Хочу зажечь светодиод подключенный к порту PA0. Подключение такое: порт PA1->резистор 100 оМ->светодиод->GND.
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
     GET stm32f100RBT6.asm
Stack_Size      EQU     0x100                   
top_of_stack    EQU     0x20000000 + Stack_Size
XTAL_CLK    equ    8000
 
    PRESERVE8 
    THUMB 
        
    AREA RESET, DATA, READONLY
    
     DCD   top_of_stack  ;Top of Stack
     DCD   Start
        
     AREA  |.text|, CODE, READONLY 
         
     ENTRY 
 
Start    PROC 
    
    MOV R0, #0
    MOV R1, #1
    LDR     R2, =(PERIPH_BB_BASE + (RCC_APB2ENR - PERIPH_BASE) * 32 + RCC_APB2ENR_IOPCEN_N * 4)
    STR     R1, [R2]
    LDR     R2, =(PERIPH_BB_BASE + (GPIOA_CRL - PERIPH_BASE) * 32 + GPIO_CRL_MODE1_0_N * 4)
    STR     R1, [R2]
    ;LDR     R2, =(PERIPH_BB_BASE + (GPIOA_ODR - PERIPH_BASE) * 32 + GPIO_ODR_ODR1_N * 4)
    ;STR     R0, [R2]
loop
  B loop
    
    ENDP
    ALIGN
    END
Файл stm32f100RBT6.asm
Assembler
1
2
3
4
5
6
7
8
9
10
11
PERIPH_BB_BASE  EQU 0x42000000
PERIPH_BASE     EQU 0x40000000
 
RCC_APB2ENR     EQU 0x40021018
GPIOA_CRL       EQU 0x40010800
GPIOA_ODR       EQU 0x4001080C
 
RCC_APB2ENR_IOPCEN_N    EQU    2
GPIO_CRL_MODE1_0_N      EQU    4
GPIO_ODR_ODR1_N         EQU    1
  END
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
18.03.2022, 16:44
Ответы с готовыми решениями:

STM32L15x + DMA + Bit Banding
Случайно обнаружил, что для регистров DMA не работает bit bomding (для другой периферии вроде всё нормально). Почему это может быть? Может...

Atmel Studio, Proteus, atm16. Зажечь светодиод, используя Virtual Terminal
У менять есть atm16, Virtual Terminal и светодиод. Введя в консоль символ (в моём случае нужно число кратное 3), то светодиод загорается....

Программирование управления портами К1986ВЕ92 с использованием Bit Banding в Keil
УВАЖАЕМЫЕ УЧАСТНИКИ КОНФЕРЕНЦИИ! Возникли сложности при написании программы на Keil для микроконтроллера К1986BE92QI. Хочу помигать...

58
75 / 66 / 12
Регистрация: 09.02.2016
Сообщений: 940
Записей в блоге: 17
23.03.2022, 13:14
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
При чем здесь Си?
и действительно !! и причем он здесь ?

так глядишь еще через пару дней переписки и дойдем до вопроса который ТС задавал ! :-) то есть правильно ли он использует битбандинг как функциональность mcu... :-)

прогресс !!
0
 Аватар для COKPOWEHEU
4143 / 2721 / 433
Регистрация: 09.09.2017
Сообщений: 12,055
23.03.2022, 17:11
Цитата Сообщение от ВитГо Посмотреть сообщение
При чем здесь Си?
и действительно !! и причем он здесь ?
Так может, все же просветите, зачем вы приплели Си к bitband'у?
0
75 / 66 / 12
Регистрация: 09.02.2016
Сообщений: 940
Записей в блоге: 17
23.03.2022, 19:43
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Так может, все же просветите, зачем вы приплели Си к bitband'у?
а зачем вы приплели си к ассемблеру ? - по желаю своей левой пятки (чесалась она у меня)..

а если серьездно - даже вот на вскидку и не помню чтобы кто то на СИ использовал битбандинг... может где нить в написании ОС есть.. но вообще не видел нигде...
возможно мало видел...
0
 Аватар для COKPOWEHEU
4143 / 2721 / 433
Регистрация: 09.09.2017
Сообщений: 12,055
23.03.2022, 19:52
Цитата Сообщение от ВитГо Посмотреть сообщение
а зачем вы приплели си к ассемблеру ?
Цитату в студию!
А то нафантазировали себе непонятно что, а ответов от меня ждете.
Цитата Сообщение от ВитГо Посмотреть сообщение
а если серьездно - даже вот на вскидку и не помню чтобы кто то на СИ использовал битбандинг... может где нить в написании ОС есть.. но вообще не видел нигде...
возможно мало видел...
А чтобы компилятор в bitband разворачивал высокоуровневый код? Что-то мне подсказывает, что тоже нет.
Выходит, не такая уж это полезная штука...
0
75 / 66 / 12
Регистрация: 09.02.2016
Сообщений: 940
Записей в блоге: 17
23.03.2022, 20:00
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
А чтобы компилятор в bitband разворачивал высокоуровневый код? Что-то мне подсказывает, что тоже нет.
Выходит, не такая уж это полезная штука...
опять вы сваливаетесь в какую то виртуальную полезность...

битбандинг это один из типов адресации бит в микроконтроллере..
все. на этом точка

использовать это или нет, это скорее выбор конкретного разработчика, его предпочтений, видения способа решения задач..

чем вас напрягает такое управление линиями дисплея в драйвере ?
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
     @ управление линией CS - - - - - - - - - - - - - - - - - - - - - - -
LCD_CS0:
                         LDR         R2, = ( PERIPH_BB_BASE + ( pCS_GPIO_BASE + GPIO_ODR ) * 32 + pCS * 4 )
                         STR         R0, [ R2 ]
                         BX          LR
 
LCD_CS1:
                         LDR         R2, = ( PERIPH_BB_BASE + ( pCS_GPIO_BASE + GPIO_ODR ) * 32 + pCS * 4 )
                         STR         R1, [ R2 ]
                         BX          LR
 
     @ управление линией DC - - - - - - - - - - - - - - - - - - - - - - - -
LCD_DC0:
                         LDR         R2, = ( PERIPH_BB_BASE + ( pDC_GPIO_BASE + GPIO_ODR ) * 32 + pDC * 4 )
                         STR         R0, [ R2 ]
                         BX          LR
 
LCD_DC1:
                         LDR         R2, = ( PERIPH_BB_BASE + ( pDC_GPIO_BASE + GPIO_ODR ) * 32 + pDC * 4 )
                         STR         R1, [ R2 ]
                         BX          LR
 
     @ управление линией RST - - - - - - - - - - - - - - - - - - - - - - -
LCD_RST0:
                         LDR         R2, = ( PERIPH_BB_BASE + ( pRst_GPIO_BASE + GPIO_ODR ) * 32 + pRST * 4 )
                         STR         R0, [ R2 ]
                         BX          LR
 
LCD_RST1:
                         LDR         R2, = ( PERIPH_BB_BASE + ( pRst_GPIO_BASE + GPIO_ODR ) * 32 + pRST * 4 )
                         STR         R1, [ R2 ]
                         BX          LR
вы хотите переписать на ЧМЗ ?!! точно ? да мне лень даже просто набирать будет (хотя понятно что тут больше копирования чем написания)

причем этот код еще не хило оптимизируется.. но это пример... усложнять дальше не стал...
0
75 / 66 / 12
Регистрация: 09.02.2016
Сообщений: 940
Записей в блоге: 17
23.03.2022, 20:10
COKPOWEHEU,

кстати а я не с вами по среде ассемблера спорил года 2 назад ? :-) помню мы такой знатный срач устроили... по поводу функций иде и подсветки.... хоть я считал что подсветка это нифига не главное, но все таки в итоге это реализовал, причем в нормальном виде (с проверкой параметров, но правда получилось не все - допустимость регистров не проверяется еще и значения константных значений)
Миниатюры
Зажечь светодиод используя bit banding  
0
75 / 66 / 12
Регистрация: 09.02.2016
Сообщений: 940
Записей в блоге: 17
23.03.2022, 20:39
про BFI - смотрите описание инструкции

то есть должна быть указана позиция поля, а не адрес как у вас

Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
@.ITEM     GPIO_CRL
.EQU  GPIO_CRL_RSTVALUE  , 0x44444444              @ значение регистра по умолчанию
.EQU  GPIO_CRL_MODE0_N   , 0                       @ 0:1  Pin 0 Port mode bits
.EQU  GPIO_CRL_MODE1_N   , 4                       @ 4:5  Pin 1 Port mode bits
.EQU  GPIO_CRL_MODE2_N   , 8                       @ 8:9  Pin 2 Port mode bits
.EQU  GPIO_CRL_MODE3_N   , 12                      @ 12:13  Pin 3 Port mode bits
.EQU  GPIO_CRL_MODE4_N   , 16                      @ 16:17  Pin 4 Port mode bits
.EQU  GPIO_CRL_MODE5_N   , 20                      @ 20:21  Pin 5 Port mode bits
.EQU  GPIO_CRL_MODE6_N   , 24                      @ 24:25  Pin 6 Port mode bits
.EQU  GPIO_CRL_MODE7_N   , 28                      @ 28:29  Pin 7 Port mode bits
.EQU  GPIO_CRL_CNF0_N    , 2                       @ 2:3  Pin 0 Port configuration bits
.EQU  GPIO_CRL_CNF1_N    , 6                       @ 6:7  Pin 1 Port configuration bits
.EQU  GPIO_CRL_CNF2_N    , 10                      @ 10:11  Pin 2 Port configuration bits
.EQU  GPIO_CRL_CNF3_N    , 14                      @ 14:15  Pin 3 Port configuration bits
.EQU  GPIO_CRL_CNF4_N    , 18                      @ 18:19  Pin 4 Port configuration bits
.EQU  GPIO_CRL_CNF5_N    , 22                      @ 22:23  Pin 5 Port configuration bits
.EQU  GPIO_CRL_CNF6_N    , 26                      @ 26:27  Pin 6 Port configuration bits
.EQU  GPIO_CRL_CNF7_N    , 30                      @ 30:31  Pin 7 Port configuration bits
Миниатюры
Зажечь светодиод используя bit banding  
0
Эксперт .NET
 Аватар для Rius
13388 / 7839 / 1699
Регистрация: 25.05.2015
Сообщений: 23,844
Записей в блоге: 14
23.03.2022, 20:40
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Ну то есть "бла-бла" без аргументов.
Судя по теме про консольки, нет абсолютно никакого толку что-либо приводить (читайте ссылку, там всё уже написано) и объяснять. Да и здесь это тоже всем видно. Вы и сами теперь знаете, похоже, зачем он нужен, но продолжаете спорить из принципа:
  • Это надо мне, значит оно надо всем.
  • А это мне не надо, поэтому оно не надо никому.

Добавлено через 1 минуту
Цитата Сообщение от ВитГо Посмотреть сообщение
помню мы такой знатный срач устроили... по поводу функций иде и подсветки.... хоть я считал что подсветка это нифига не главное, но все таки в итоге это реализовал, причем в нормальном виде (с проверкой параметров, но правда получилось не все - допустимость регистров не проверяется еще и значения константных значений)
Миниатюры
Помню такой срач. Автор редактора упирался , что подсветкой синтаксиса только идиоты пользуются, а потом запилил. Но вроде тот автор проги другой форумчанин был.
Ах да, это вы со мной спорили
0
75 / 66 / 12
Регистрация: 09.02.2016
Сообщений: 940
Записей в блоге: 17
23.03.2022, 20:53
Цитата Сообщение от Rius Посмотреть сообщение
Помню такой срач. Автор редактора упирался , что подсветкой синтаксиса только идиоты пользуются, а потом запилил. Но вроде тот автор проги другой форумчанин был.
Ах да, это вы со мной спорили
это я

неее, я спорил на тему что так как подсветка реализована в действующих редакторах - она бесполезна для программиста, и сделана для блондинок ) потом, из за вас пришлось сделать то как я ее вижу получилось очень похоже на то что я говорил.. хотя конечно еще надо кое что дописывать, но это уже во второй версии редактора....

Добавлено через 5 минут
вот что в итоге получилось https://habr.com/ru/post/542420/
Миниатюры
Зажечь светодиод используя bit banding  
1
Эксперт .NET
 Аватар для Rius
13388 / 7839 / 1699
Регистрация: 25.05.2015
Сообщений: 23,844
Записей в блоге: 14
23.03.2022, 20:56
Да неплохо получилось же!
Понятно, что в асме разнообразия не много. Но хоть немного облегчает чтение.
0
75 / 66 / 12
Регистрация: 09.02.2016
Сообщений: 940
Записей в блоге: 17
23.03.2022, 20:57
Цитата Сообщение от Rius Посмотреть сообщение
Но хоть немного облегчает чтение.
да честно говоря чтение не особо - я пробовал инструкции раскрашивать (это все позволяет делать настройка), но получается такая радуга !! что нафиг выкинул..
а вот проверка вводимых инструкций очень и очень удобна - видишь чушь еще до компиляции...
0
1 / 1 / 0
Регистрация: 20.02.2019
Сообщений: 50
23.03.2022, 21:19  [ТС]
Попробовал сделать все по примеру, вроде от ошибок избавился, а светодиод не горит.
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
Stack_Size            EQU     0x100                   
top_of_stack          EQU     0x20000000 + Stack_Size
    
PERIPH_BB_BASE        EQU 0x42000000
PERIPH_BASE           EQU 0x40000000
APB2PERIPH_BASE       EQU (PERIPH_BASE + 0x10000)
AHBPERIPH_BASE        EQU (PERIPH_BASE + 0x20000)    
RCC_BASE              EQU (AHBPERIPH_BASE + 0x1000)
RCC_APB2ENR           EQU 0x40021018
RCC_APB2ENR_IOPAEN_N  EQU 0x00000004
GPIOA_BASE            EQU (APB2PERIPH_BASE + 0x0800)
GPIO_CRL              EQU 0x00
GPIO_CRL_MODE1_N      EQU 0x40010820
GPIO_ODR              EQU 0x0C  
XTAL_CLK              EQU    8000
 
    PRESERVE8 
    THUMB 
         
    AREA RESET, DATA, READONLY
    
     DCD   top_of_stack  ;Top of Stack
     DCD   Start
        
     AREA  |.text|, CODE, READONLY 
         
     ENTRY 
 
Start    PROC 
        ; включение тактирования GPIOA
       LDR          R0, = PERIPH_BASE + PERIPH_BB_BASE + ( RCC_BASE + RCC_APB2ENR ) * 32 + RCC_APB2ENR_IOPAEN_N * 4
       MOV          R1, 1
       STR          R1, [ R0 ]
        ; Настройка 1 пина на выход  
       LDR          R0, = PERIPH_BASE + GPIOA_BASE
       LDR          R1, [ R0, GPIO_CRL ]
       ;MOV          R2, #GPIO_MODE_OUT50
       BFI          R1, R2, #4, #4
       STR          R1, [ R0, GPIO_CRL ]
        ;зажгем светодиод
       MOV          R1, 1 << 1
       STR          R1, [ R0, GPIO_ODR ]
loop
  B loop
    
    ENDP
    ALIGN
    END
0
75 / 66 / 12
Регистрация: 09.02.2016
Сообщений: 940
Записей в блоге: 17
23.03.2022, 21:43
Цитата Сообщение от Boris2288 Посмотреть сообщение
вроде от ошибок избавился, а светодиод не горит.
конечно, у вас же не установлено значение R2 - точка с запятой это комментирование в кейл ? то есть вы непонятно какой MODER установили для пина...

Assembler
1
2
3
4
5
6
  ; Настройка 1 пина на выход  
       LDR          R0, = PERIPH_BASE + GPIOA_BASE
       LDR          R1, [ R0, GPIO_CRL ]
       ;MOV          R2, #GPIO_MODE_OUT50   --- вот эта строка закомментирована !!!! :-) редактор вас рубит и не подсвечивает комментарии ?
       BFI          R1, R2, #4, #4
       STR          R1, [ R0, GPIO_CRL ]
Добавлено через 2 минуты
и у вас соответственно (если R2=0) то

Assembler
1
2
@.ITEM     GPIO_CRH GPIO_CRL
.EQU  GPIO_MODE_INPUT    , 0                       @ Input mode (reset state
а должен быть какой то из этих
Assembler
1
2
3
.EQU  GPIO_MODE_OUT10    , 1                       @ Output mode speed 10 MHz
.EQU  GPIO_MODE_OUT2     , 2                       @ Output mode speed 2 MHz
.EQU  GPIO_MODE_OUT50    , 3       @ 50 mhz
Добавлено через 6 минут
Цитата Сообщение от Boris2288 Посмотреть сообщение
Попробовал сделать все по примеру, вроде от ошибок избавился, а светодиод не горит
кстати, а у кейла же есть отладка
вы не умеете ее пользоваться ? по идее выбрать отладку где нить в меню и по шагам смотреть какое значение и куда записывается...
я к сожалению по кейлу не советчик :-( но то что там отладка есть - это 100 пудов...

да не сочтет админ за рекламу - вы бы скачали мой редактор, и в нем попробовали.. там правда если у вас stm32f1 VL Disco нужно будет маленькое изменение драйвера сделать для ST-Link (там версия V1), но потом сможете пользоваться отладчиком... и смотреть какие значения прямо в регистрах микроконтроллера получились и в регистрах периферии...

вид на отладчик в ArmAsmEdit

или посмотрите в интернете как выглядит отладка в кейл...

без отладки на ассемблере будет тяжко, особенно в первое время.. да и потом с усложнением алгоритмов - все равно тяжко :-)
1
1 / 1 / 0
Регистрация: 20.02.2019
Сообщений: 50
23.03.2022, 21:49  [ТС]
Тогда я запутался. Вот ваш пример. Есть GPIO_MODE_OUT50 и GPIO_CRH_MODE9_N. GPIO_MODE_OUT50 нам делает выход 50 МГц, а GPIO_CRH_MODE9_N что нам показывает.
Assembler
1
2
3
4
5
6
@ Настройка пина 9 GPIO C на выход с частотой 50 мгц
                         LDR          R0, = PERIPH_BASE + GPIOC_BASE
                         LDR          R1, [ R0, GPIO_CRH ]
                         MOV          R2, GPIO_MODE_OUT50
                         BFI          R1, R2, GPIO_CRH_MODE9_N, 4
                         STR          R1, [ R0, GPIO_CRH ]
Я так понял чтобы мне зажечь светодиод на первой ножке, мне нужно записать 1 в четвертый бит регистра GPIO_CRL. И тогда у меня ножка автоматом встанет на выход с частотой 10 МГц.
Миниатюры
Зажечь светодиод используя bit banding  
0
75 / 66 / 12
Регистрация: 09.02.2016
Сообщений: 940
Записей в блоге: 17
23.03.2022, 22:31
Цитата Сообщение от Boris2288 Посмотреть сообщение
Тогда я запутался. Вот ваш пример. Есть GPIO_MODE_OUT50 и GPIO_CRH_MODE9_N. GPIO_MODE_OUT50 нам делает выход 50 МГц, а GPIO_CRH_MODE9_N что нам показывает.
Assembler
1
2
3
4
5
6
7
.EQU  GPIO_CRH_MODE9_N   , 4                       @ 4:5  
 
@.ITEM     GPIO_CRH GPIO_CRL
.EQU  GPIO_MODE_INPUT    , 0                       @ Input mode (reset state)
.EQU  GPIO_MODE_OUT10    , 1                       @ Output mode speed 10 MHz
.EQU  GPIO_MODE_OUT2     , 2                       @ Output mode speed 2 MHz
.EQU  GPIO_MODE_OUT50    , 3                       @ Output mode speed 50 MH
GPIO_CRH_MODE9_N это позиция в которую нужно поместить поле

GPIO_MODE_OUT10 - это режим ноги - то есть значение которое нужно поместить...

дальше смотрите скрин BFI

BFI <значение для изменения>, <что положить>, <с какой битовой позиции>, <сколько бит>

то есть

Assembler
1
2
3
4
5
6
7
8
9
          LDR          R0, = PERIPH_BASE + GPIOC_BASE
         
          LDR          R1, [ R0, GPIO_CRH ]  - это изменяемое значение
 
          MOV          R2, GPIO_MODE_OUT50 - это режим пина
 
          BFI          R1, R2, <куда положить GPIO_CRH_MODE9_N>, <сколько бит 4>
 
                         STR          R1, [ R0, GPIO_CRH ]
по идее должно быть
Assembler
1
2
3
         
 BFI     R1, R2, GPIO_CRH_MODE9_N, 2 --- двойка в конце, потому что поле MODER 2 бита, но я еще обнуляю 
                                                                следующие 2 бита настройки (CNF), поэтому поставил 4
CNF выставляется 0 - если посмотреть определение то это push-pull выход...
Assembler
1
2
3
4
.EQU  GPIO_CNF_OUT_PP    , 0                       @ Output mode: output Push-pull
.EQU  GPIO_CNF_OUT_OD    , 1                       @ Output mode: output Open Drain
.EQU  GPIO_CNF_OUT_AFPP  , 2                       @ Output mode: Alternate function output Push-pull
.EQU  GPIO_CNF_OUT_AFOD  , 3
Добавлено через 4 минуты
если у вас второй вывод (ну то есть с номером 1 :-) если считать с нуля) то по идее должно быть
Assembler
1
2
3
4
@.ITEM     GPIO_CRL
.EQU  GPIO_CRL_RSTVALUE  , 0x44444444              @ значение регистра по умолчанию
.EQU  GPIO_CRL_MODE0_N   , 0                       @ 0:1  Pin 0 Port mode bits
.EQU  GPIO_CRL_MODE1_N   , 4                       @ 4:5  Pin
значение тоже 4 но читаемость кода выше.. (у меня разделены значения чтобы просто читая код было понятно что и куда записываем, а то с универсальными пробовал - но мне нифига не наглядно через неделю другую)

и кстати, для второго вывода чтение запись нужно делать в GPIO_CRL а не GPIO_CRH
Assembler
1
2
3
4
5
6
7
8
9
LDR          R0, = PERIPH_BASE + GPIOC_BASE
         
          LDR          R1, [ R0, GPIO_CRL ]  - это изменяемое значение
 
          MOV          R2, GPIO_MODE_OUT50 - это режим пина
 
          BFI          R1, R2, <куда положить GPIO_CRL_MODE1_N>, <сколько бит 4>
 
                         STR          R1, [ R0, GPIO_CRL ]
Добавлено через 1 минуту
Цитата Сообщение от Boris2288 Посмотреть сообщение
Я так понял чтобы мне зажечь светодиод на первой ножке, мне нужно записать 1 в четвертый бит регистра GPIO_CRL.
точно !! видите и без меня разобрались !!! так и затянитесь в тему

Добавлено через 21 минуту
гм.. опять не зажглось ? :-(
давайте вашу программу сюда тогда полностью со всеми правками.. завтра достану VL Discovery и посмотрю что не так... хотя вроде уже все обсудили...

Добавлено через 2 минуты
кстати, еще замечание, вот эта строчка меня немного напрягает... вектор старта должен быть увеличен на единицу вроде как, там младший бит указывает на Thumb режим исполнения
Цитата Сообщение от Boris2288 Посмотреть сообщение
DCD   Start
у меня таблица прерываний выглядит так:

Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
GNU AS
@.CharSet=CP1251
 
.syntax unified     @ синтаксис исходного кода
.thumb               @ тип используемых инструкций Thumb
.CPU       cortex-m3 @ процессор
 
 
.section .vectors
 
@ таблица векторов прерываний
     .word     0x20000200             @ 0x0000 Вершина стека
     .word     Start+1                  @ 0x0004 RESET
 
@ Внимание !!
@ Это минимальная таблица прерываний ! Все остальные прерывания не
@ обрабатываются и их возникнование приведет к фатальному нарушению
@ работы программы
читать здесь про адреса векторов (там где то про RESET будет как раз разобрано почему именно так)
0
1 / 1 / 0
Регистрация: 20.02.2019
Сообщений: 50
23.03.2022, 22:37  [ТС]
Так вот код, который выше.
0
75 / 66 / 12
Регистрация: 09.02.2016
Сообщений: 940
Записей в блоге: 17
23.03.2022, 23:00
Цитата Сообщение от Boris2288 Посмотреть сообщение
Так вот код, который выше.
нет, приведите, я выше вам про Start написал, это важно !!!

Добавлено через 18 минут
блин, еще одну ошибку я просмотрел... привык к своим определениям
вы определяете константы базы адресов периферии

Assembler
1
2
PERIPH_BB_BASE        EQU 0x42000000
PERIPH_BASE           EQU 0x40000000
и потом при настройке их складываете !!! это капец как не верно

Assembler
1
2
       ; включение тактирования GPIOA
       LDR          R0, = <<< PERIPH_BASE + PERIPH_BB_BASE >>> + ( RCC_BASE + RCC_APB2ENR ) * 32 + RCC_APB2ENR_IOPAEN_N * 4
по идее по вашим определениям должно быть
Assembler
1
2
       ; включение тактирования GPIOA
       LDR          R0, = PERIPH_BB_BASE + ( RCC_BASE + RCC_APB2ENR ) * 32 + RCC_APB2ENR_IOPAEN_N * 4
Добавлено через 3 минуты
вообще вам бы найти какие нить файлы определений хотя бы относительно проверенные.. а то сами понимаете -ошибка в адресе записи - это считай не записать вовсе :-(

и нужен все таки отладчик, да, я понимаю что уже который раз это пишу, но вы бы сразу увидели и Start без +1 и адрес битбанда не верный (0х82..... вместо 0x42.....)
0
23.03.2022, 23:00

Не по теме:

Почему любитель асма не написал редактор на асме? Это было бы круто и супер оптимально так же как для ARM!
На гите паскаль! Что совсем не тру!

0
75 / 66 / 12
Регистрация: 09.02.2016
Сообщений: 940
Записей в блоге: 17
23.03.2022, 23:02
Цитата Сообщение от locm Посмотреть сообщение
Почему любитель асма не писал редактор на асме? На гите паскаль! Что совсем не тру!
каждой задаче свой язык... когда то под досом писал и на асме... но это было черти знает когда...
0
75 / 66 / 12
Регистрация: 09.02.2016
Сообщений: 940
Записей в блоге: 17
23.03.2022, 23:05
Boris2288

посмотрите мои файлы определений, там по идее символ комментария @ на точку с запятой поменять... ну и может еще что по мелочи...
проверено не все конечно (сами делали по даташиту для f1)... но по крайней мере будет от чего отталкиваться

инклудами их будете добавлять в проект и не парится.. правда надо посмотреть синтаксис кейла но думаю это не сложно...
Вложения
Тип файла: zip 1.zip (61.9 Кб, 3 просмотров)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
23.03.2022, 23:05

Зажечь светодиод по кнопке на ATMega8515
Есть микроконтроллер ATMEGA 8515. Требуется считывать порты В (0 и 1 пина). И при обнаружении 1 на одном из пине, выдавать логическую 1 на...

По нажатию кнопки зажечь светодиод (STM32L152)
здравствуйте. прошу прощения за глупый вопрос. начал изучать STM32l но не как не получается выполнить условие чтобы при нажатие кнопки...

AS-sam3X. Зажечь светодиод через веб-интерфейс
Здравствуйте. Нужно зажечь и потушить светодиод на плате AS-sam3X через веб-интерфейс, подключив плату к компу через Ethernet. Нашёл...

Как зажечь светодиод?
Добрый день. Решил заняться электроникой, а конкретно - с простого светодиода. Начал с того что собрал наипростейшую цепь в протеусе. С...

Зажечь светодиод по таймеру
Всем привет! Есть диод, кнопка и **duino Mega2560. Задача состоит в том, чтобы подрубленный диод по таймеру горел, к примеру, 2...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Доктрина интенционального знания - Доктрина для портала "Срез".
Hrethgir 25.07.2026
Может найдётся кто захочет оценить доктрину. . . Написания правил участия для меня роскошь, требующая лимита времени, поэтому все сообщения не прошедшие модерацию будут видны только участникам портала,. . .
сукцессия 44. Решил подать на припринт в межународные сервисы препринтов. Но нужно одобрение от ученых
anaschu 25.07.2026
Английский вариант. Пока кто то не одобрит мою личность, мне не получиться это опубликовать на препринте. Но заявку на публикацию статьи я сегодня подам.
сукцессия 43. Вторая научная статья за месяц- прайминг и гатгил
anaschu 25.07.2026
две стороны одной монеты
Более приземисто - Эстафету хвоста в .cdl (деревья эстафеты в сад).
Hrethgir 24.07.2026
В будущем, после написания блока инверсии обхода дерева (эстафеты хвоста), я планирую вернуться к нашему прошлому разговору о том, обладают ли знания целеполаганием. Тогда я пришел к выводу, что. . .
Вот представьте что вам дали бессмертие.
kumehtar 24.07.2026
Вот представьте что вам дали бессмертие, ничего более не меняя. Вообще ничего, только бессмертие в нынешнем виде. Рады были бы? Что бы вы тут делали всё это время? Никакой пенсии. Никакого нового. . .
сукцессия 41
anaschu 24.07.2026
Численная верификация бифуркации в агентной модели лесной сукцессии: от одного параметра к ансамблю Автор: пользователь @Shumilov_AS | Раздел: Прикладная математика / Численные методы Кратко. . .
сукцессия 40. Ансамблевая кластерная параметризаци, часть 1.
anaschu 24.07.2026
Пр# Сопровождение научной статьи ИИ-ассистентом: подготовка публикации и калибровка агентно-ориентированной модели сукцессии микоризных систем **Полевые заметки о двухнедельной совместной работе**. . .
Теория всего 12. ВГК на планете в стратегической игре "терра"
anaschu 21.07.2026
### Главные семантические изменения и дешифровка новой физики 1. **`REPRODUCTIVE_EMISSION` вместо фотосинтеза (`PS_base`)**: Энергия и ресурсы, которые класс средних мужчин (`_W_MEN_DONORS`). . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru