Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Инженерный раздел > Микроконтроллеры, робототехника, схемотехника, 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
Сообщений: 20
Репутация: 63
По умолчанию

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

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

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

Цитата:
Сообщение от 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
Сообщений: 20
Репутация: 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


23:53.


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

RusProfile.ru


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