Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.
Внимание! Некоторое время письма не доходят до аккаунтов MAIL RU GROUP, не доходят на все почтовые ящики mail.ru, inbox.ru, bk.ru. Пишите им жалобы, чтобы быстрее восстановили получение писем, регистрируйтесь через яндекс почту и gmail, туда письма с активизацией доходят.

Вернуться   Форум программистов > Инженерный раздел > Микроконтроллеры, робототехника, схемотехника, 3D принтеры
Регистрация

Восстановить пароль
Повторная активизация e-mail

Ответ
 
Опции темы
Старый 12.07.2017, 16:05   #1
Aoizora
Заблокирован
 
Регистрация: 11.11.2016
Сообщений: 262
Репутация: 109
По умолчанию Работа с периферией ARM F100RBT6B без библиотеки CMSIS

После чтения этой статьи загорелся желанием написать программу для микроконтроллера ARM F100RBT6B (на плате STM32VL Discovery) с минимальным количеством вспомогательных библиотек, даже без CMSIS. То есть хочу писать напрямую в порты и чтобы при этом программа работала.

В распоряжении имеется файл stm32f100xb.h с определениями констант:

Код:

#define FLASH_BASE            0x08000000U /*!< FLASH base address in the alias region */
#define FLASH_BANK1_END       0x0801FFFFU /*!< FLASH END address of bank1 */
#define SRAM_BASE             0x20000000U /*!< SRAM base address in the alias region */
#define PERIPH_BASE           0x40000000U /*!< Peripheral base address in the alias region */

#define SRAM_BB_BASE          0x22000000U /*!< SRAM base address in the bit-band region */
#define PERIPH_BB_BASE        0x42000000U /*!< Peripheral base address in the bit-band region */

/*!< Peripheral memory map */
#define APB1PERIPH_BASE       PERIPH_BASE
#define APB2PERIPH_BASE       (PERIPH_BASE + 0x00010000U)
#define AHBPERIPH_BASE        (PERIPH_BASE + 0x00020000U)

#define GPIOA_BASE            (APB2PERIPH_BASE + 0x00000800U)
#define GPIOB_BASE            (APB2PERIPH_BASE + 0x00000C00U)
#define GPIOC_BASE            (APB2PERIPH_BASE + 0x00001000U)
#define GPIOD_BASE            (APB2PERIPH_BASE + 0x00001400U)
#define GPIOE_BASE            (APB2PERIPH_BASE + 0x00001800U)

#define GPIOA               ((GPIO_TypeDef *)GPIOA_BASE)
#define GPIOB               ((GPIO_TypeDef *)GPIOB_BASE)
#define GPIOC               ((GPIO_TypeDef *)GPIOC_BASE)
#define GPIOD               ((GPIO_TypeDef *)GPIOD_BASE)
#define GPIOE               ((GPIO_TypeDef *)GPIOE_BASE)

Пример хелловорлда в статье такой:

Код:

#if defined(__ARM_ARCH_6M__)

/* Cortex-M0 это ARMv6-M, код для LPC1114 */

#define GPIO_DIR_REG  0x50018000  /* GPIO1DIR  задает направление для блока GPIO 1 */
#define GPIO_REG_VAL  0x50013FFC  /* GPIO1DATA задает значение для блока GPIO 1 */
#define GPIO_PIN_NO   (1<<8)      /* 8-й бит отвечает за 8-й пин */

#elif defined(__ARM_ARCH_7M__)

/* Иначе просто считаем что это LPC1768 */

#define GPIO_DIR_REG  0x2009C020  /* FIO1DIR задает направление для блока GPIO 1 */
#define GPIO_REG_VAL  0x2009C034  /* FIO1PIN задает значение для блока GPIO 1 */
#define GPIO_PIN_NO   (1<<18)     /* 18-й бит отвечает за 18-й пин */

#else

#error Unknown architecture

#endif

void wait()
{
  volatile int i=0x20000;
  while(i>0) {
    --i;
  }
}

void main()
{
  *((volatile unsigned int *)GPIO_DIR_REG) = GPIO_PIN_NO;

  while(1) {
    *((volatile unsigned int *)GPIO_REG_VAL) = GPIO_PIN_NO;
    wait();
    *((volatile unsigned int *)GPIO_REG_VAL) = 0;
    wait();
  }

  /* main() *никогда* не должен вернуться! */
}

Имея информацию об адресах портов, можно ли написать аналогичную программу под мой МК или перед тем, как писать в порты периферии нельзя обойтись без запуска тактирования этой периферии?

Хочу обойтись без библиотеки CMSIS для познания дзена.
Aoizora вне форума   Ответить с цитированием
Старый 13.07.2017, 13:16   #2
pbt
Пользователь
 
Регистрация: 15.08.2012
Сообщений: 21
Репутация: 63
По умолчанию

Цитата:
Сообщение от Aoizora Посмотреть сообщение
Имея информацию об адресах портов, можно ли написать аналогичную программу под мой МК
Можно. Открывайте даташит и смотрите по каким адресам находится нужная периферия, как ее правильно конфигурировать и т. д.

Цитата:
Сообщение от Aoizora Посмотреть сообщение
нельзя обойтись без запуска тактирования этой периферии?
Нельзя.

Приведенного кода мало. Нужно еще описать все векторы прерываний, точку входа в программу (вектор Reset_Handler) и добавить код начальной инициализации и настройки тактирования.
pbt вне форума   Ответить с цитированием
Старый 13.07.2017, 13:45   #3
Pavia
Лис
Профессионал
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 1,618
Репутация: 1708
По умолчанию

Цитата:
Сообщение от Aoizora Посмотреть сообщение
Имея информацию об адресах портов, можно ли написать аналогичную программу под мой МК или перед тем,
Да.

Цитата:
Сообщение от Aoizora Посмотреть сообщение
или перед тем, как писать в порты периферии нельзя обойтись без запуска тактирования этой периферии?
Да. 99% периферии являются синхронными схемами.
А что ваша периферия не получает тактирования после падания напряжения?
__________________
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .
Pavia вне форума   Ответить с цитированием
Старый 13.07.2017, 14:57   #4
Aoizora
Заблокирован
 
Регистрация: 11.11.2016
Сообщений: 262
Репутация: 109
По умолчанию

Цитата:
Сообщение от pbt Посмотреть сообщение
Приведенного кода мало. Нужно еще описать все векторы прерываний, точку входа в программу (вектор Reset_Handler) и добавить код начальной инициализации и настройки тактирования.
Первые два вектора прерывания я описал в boot.s. Автор статьи говорит, что этого хватит и достаточно даже просто указать main.
Aoizora вне форума   Ответить с цитированием
Старый 18.07.2017, 23:47   #5
pbt
Пользователь
 
Регистрация: 15.08.2012
Сообщений: 21
Репутация: 63
По умолчанию

Цитата:
Сообщение от Pavia Посмотреть сообщение
Да. 99% периферии являются синхронными схемами.
Вы точно знакомы с STM32?
Перед работой с периферией ее тактирование нужно включать. После начала работы МК тактирование большинства периферии выключено.
pbt вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
asm и arm(stm32) evilboy Помощь студентам 0 03.06.2012 20:42
компиляция под arm tiger() Qt и кроссплатформенное программирование С/С++ 3 07.04.2012 14:32
Работа с txt файлами, библиотеки, заголовочные файлы (C++) Alendorff Помощь студентам 1 29.02.2012 20:05
Задание по символам!Если можно то без библиотеки string.h PainkilleRRR Общие вопросы C/C++ 10 28.02.2011 10:15
Assembler для ARM Natali2003 Assembler 5 29.01.2009 15:25


10:28.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru