С Новым годом! Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.68/19: Рейтинг темы: голосов - 19, средняя оценка - 4.68
4 / 4 / 1
Регистрация: 20.04.2011
Сообщений: 141
1

Как еще можно пользоваться регистрами микроконтроллеров?

24.11.2014, 15:27. Показов 3507. Ответов 51
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Обычно обращение к регистрам МК проходит так:

C++
1
2
#define REG_1 *((uword volatile far *)(0xBEEFFF))
REG_1 = 0x12345678;
У меня 4 физически разных канала одного и того же ИФ (скажем, UART), у всех четырех каналов набор регистров одинаковый, но адреса разные.
Нужно составить обращение к регистрам разных модулей в компактной форме, то есть в функции по номеру канала уметь найти адрес нужного регистра и запрограммировать его.

Вопрос: возможно ли это сделать с помощью такой схемы: зная глобальное смещение адресов регистров каждого модуля в отдельности прямо в выражении рассчитывать адрес конкретного регистра?
C++
1
2
3
4
5
#define CHANNEL_0_offset 0xBEEF00
#define CHANNEL_1_offset 0xFACE00
#define REG_1            0x0000AB
*((uword volatile far *)(CHANNEL_0_offset+REG_1)) = 0x12345678;
*((uword volatile far *)(CHANNEL_1_offset+REG_1)) = 0x87654321;
?????
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.11.2014, 15:27
Ответы с готовыми решениями:

Без понятия как регистрами пользоваться
Всем здравствуйте. Без понятия как пользоваться регистрами. Вот задание: "Составить линейную...

Как можно пользоваться Mathcad 15 на Windows 10
Как можно пользоваться Mathcad 15 на Windows 10, потому что так запуская и программа сразу...

как можно пользоваться методами одного класса в другом?
Программированием занимаюсь недавно.Подскажите пожалуйста,как можно пользоваться методами одного...

как пользоваться программатором для Whirlpool, раздобыл программатор, а как им пользоваться я не знаю
подскажите плиз

Как объявить массив чтобы им можно было пользоваться в любом методе?
string lines = File.ReadAllLines("C:/input.txt"); int A = new int.Split('...

51
4 / 4 / 1
Регистрация: 20.04.2011
Сообщений: 141
24.11.2014, 17:29  [ТС] 21
Author24 — интернет-сервис помощи студентам
Цитата Сообщение от ValeryS Посмотреть сообщение
в поддержке кода
Хм.
Возможно.
Дело в том, что при переходе на другой камень нет гарантии что там регистры будут в таком же порядке располагаться => нужно будет править структуру. А тут править смещения регистров. По сути работа одна и та же.
0
Модератор
Эксперт по электронике
8950 / 6716 / 921
Регистрация: 14.02.2011
Сообщений: 23,708
24.11.2014, 17:30 22
Цитата Сообщение от tiger() Посмотреть сообщение
XC2000 серия (C166 ядро)
в кеиле в какой ветке лежит?
попробую сейчас симулировать?
1
4 / 4 / 1
Регистрация: 20.04.2011
Сообщений: 141
24.11.2014, 17:32  [ТС] 23
Цитата Сообщение от ValeryS Посмотреть сообщение
в кеиле в какой ветке лежит?
попробую сейчас симулировать?
Случайно спасибо нажал.
Что симулировать?
Keil при создании проекта файл с регистрами автоматом создает, добавляет хидер.
0
Модератор
Эксперт по электронике
8950 / 6716 / 921
Регистрация: 14.02.2011
Сообщений: 23,708
24.11.2014, 17:34 24
Цитата Сообщение от tiger() Посмотреть сообщение
Что симулировать?
проект попробую создать и посмотреть
камень в какой ветке лежит?
Цитата Сообщение от tiger() Посмотреть сообщение
Случайно спасибо нажал.
напиши модератору снимет
0
4 / 4 / 1
Регистрация: 20.04.2011
Сообщений: 141
24.11.2014, 17:36  [ТС] 25
Цитата Сообщение от ValeryS Посмотреть сообщение
проект попробую создать и посмотреть
камень в какой ветке лежит?
Ну, Infineon/XC2765X

Цитата Сообщение от ValeryS Посмотреть сообщение
напиши модератору снимет
Да ладно, не жалко)
0
Модератор
Эксперт по электронике
8950 / 6716 / 921
Регистрация: 14.02.2011
Сообщений: 23,708
24.11.2014, 17:41 26
еще один "подводный камень" в адресной арифметике
если твой базовый адрес приведется к int* то
смещение будет не 0x0000AB а 0x0000AB*sizeof(int)
следовательно сначала нужно приводить к char* а потом полученный адрес к int*(или что там)
оно тебе надо?

Добавлено через 3 минуты
Цитата Сообщение от tiger() Посмотреть сообщение
Infineon/XC2765X
в моем почему то нет
Цитата Сообщение от tiger() Посмотреть сообщение
добавляет хидер.
можешь сюда скинуть?
0
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
24.11.2014, 17:45 27
Цитата Сообщение от tiger() Посмотреть сообщение
Есть отличие в работе с такой структурой, когда она уже готова и тем, чтобы самостоятельно такую структуру бадяжить.
Я уже делал такие структуры для загрузки заголовков bmp-файлов. Так вот, в программировании вообще нет ничего проще.
0
4 / 4 / 1
Регистрация: 20.04.2011
Сообщений: 141
24.11.2014, 17:48  [ТС] 28
Сам хидер только?
Вложения
Тип файла: zip XC27xxXREGS.zip (66.3 Кб, 8 просмотров)
0
Модератор
Эксперт по электронике
8950 / 6716 / 921
Регистрация: 14.02.2011
Сообщений: 23,708
24.11.2014, 22:52 29
Цитата Сообщение от tiger() Посмотреть сообщение
Infineon/XC2765X
мдя
мало информации в инете
какой то засекреченый камень
единственное что нашел стоящего это на сайте производителя что то типа сдк
http://www.infineon.com/cms/en... c3e1195238
файл XC2000-Easy-Kit-DVD-3.0.zip
весит 2.7 гектара, по понятным причинам выложить сюда не могу
посмотри папку Examples там в заголовочных файлах куча макросов, может поможет
1
Витальич
24.11.2014, 23:01
  #30

Не по теме:

Цитата Сообщение от ValeryS Посмотреть сообщение
какой то засекреченый камень
Они все такие, кто каким то боком к автопрому отношение имеет.

0
4 / 4 / 1
Регистрация: 20.04.2011
Сообщений: 141
25.11.2014, 10:26  [ТС] 31
Цитата Сообщение от ValeryS Посмотреть сообщение
единственное что нашел стоящего это на сайте производителя что то типа сдк
посмотри папку Examples там в заголовочных файлах куча макросов, может поможет
Черт, я столько не скачаю.
У меня есть папка Examples для этого проца в Keil-е, но там нет заголовочных и макросов.
0
Модератор
Эксперт по электронике
8950 / 6716 / 921
Регистрация: 14.02.2011
Сообщений: 23,708
25.11.2014, 10:33 32
если ты один раз будешь програмить, то можно пойти твоим путем, но следи за адресной арифметикой
а если серьезные разработки, то советую все таки посмотреть в сторону структур
потом окупится, особенно если будешь портировать

Добавлено через 3 минуты
Цитата Сообщение от tiger() Посмотреть сообщение
но там нет заголовочных и макросов.
сейчас попытаюсь скинуть несколько штук
но я в них не разбирался
1
Модератор
Эксперт по электронике
8950 / 6716 / 921
Регистрация: 14.02.2011
Сообщений: 23,708
25.11.2014, 10:43 33
что то не вкладывается
попробую еще раз
вот парочка
вечером еще сархивирую
Вложения
Тип файла: rar Hello World.rar (415.5 Кб, 8 просмотров)
Тип файла: rar XC22xxU_XC23xxS_XC27x2X.rar (7.56 Мб, 9 просмотров)
0
4 / 4 / 1
Регистрация: 20.04.2011
Сообщений: 141
25.11.2014, 10:53  [ТС] 34
Цитата Сообщение от ValeryS Посмотреть сообщение
если ты один раз будешь програмить, то можно пойти твоим путем, но следи за адресной арифметикой
а если серьезные разработки, то советую все таки посмотреть в сторону структур
потом окупится, особенно если будешь портировать

Добавлено через 3 минуты
Наверное, действительно, лучше так.
Попробую структуру все-таки сделать пограмотнее.
Скинь пару штук, если не сложно, гляну мож что интересное есть.

Добавлено через 8 минут
Цитата Сообщение от ValeryS Посмотреть сообщение
что то не вкладывается
попробую еще раз
вот парочка
вечером еще сархивирую
Спасибо.
Там регистры точно так же как у меня в виде списка алиасов и их адресов.
Почему если путь структуры "общепринятый" и самый удобный, Infineon в упор этого не делает. Из-за лени? Или может оно только так работает?
Кстати при переходе на другой проц имхо нужно просто заменить файл адресов регистров. А в случае с моей структурой нудо будет исправлять в ней порядок и размер полей. Мне кажется это более ацко.
0
Модератор
Эксперт по электронике
8950 / 6716 / 921
Регистрация: 14.02.2011
Сообщений: 23,708
25.11.2014, 10:57 35
вот примеры из папки XC22xxL_XC23xxD_XC27x3X
Вложения
Тип файла: rar ADC.rar (1.16 Мб, 7 просмотров)
Тип файла: rar CAPCOM2.rar (1.18 Мб, 4 просмотров)
Тип файла: rar CCU60.rar (1.73 Мб, 4 просмотров)
Тип файла: rar GPT12.rar (1.74 Мб, 4 просмотров)
Тип файла: rar WWD.rar (626.7 Кб, 4 просмотров)
0
Модератор
Эксперт по электронике
8950 / 6716 / 921
Регистрация: 14.02.2011
Сообщений: 23,708
25.11.2014, 11:00 36
вот документация
Вложения
Тип файла: pdf ADC.pdf (1.91 Мб, 4 просмотров)
Тип файла: pdf CAPCOM2.pdf (3.04 Мб, 4 просмотров)
Тип файла: pdf CCU6.pdf (2.77 Мб, 4 просмотров)
Тип файла: pdf GPT12.pdf (3.16 Мб, 4 просмотров)
Тип файла: pdf WWD.pdf (706.4 Кб, 4 просмотров)
0
Модератор
Эксперт по электронике
8950 / 6716 / 921
Регистрация: 14.02.2011
Сообщений: 23,708
25.11.2014, 11:02 37
Цитата Сообщение от tiger() Посмотреть сообщение
Кстати при переходе на другой проц имхо нужно просто заменить файл адресов регистров.
если имена будут совпадать
Цитата Сообщение от tiger() Посмотреть сообщение
А в случае с моей структурой нудо будет исправлять в ней порядок и размер полей.
ну это смотря какой процессор
например у stm "все уже украдено до нас"
0
1280 / 1185 / 175
Регистрация: 02.12.2013
Сообщений: 4,883
25.11.2014, 11:23 38
Цитата Сообщение от tiger() Посмотреть сообщение
Почему если путь структуры "общепринятый" и самый удобный, Infineon в упор этого не делает
У меня в "нормальном" виде только для XMC1XXX и XMC4XXX в IAR 7.30 присутствует.
Миниатюры
Как еще можно пользоваться регистрами микроконтроллеров?  
0
4 / 4 / 1
Регистрация: 20.04.2011
Сообщений: 141
25.11.2014, 14:33  [ТС] 39
Цитата Сообщение от Витальич Посмотреть сообщение
У меня в "нормальном" виде только для XMC1XXX и XMC4XXX в IAR 7.30 присутствует.
А кстати куда здесь потом volatile писать? В объявлении переменной структуры, например так?

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
typedef struct
{
  __IO uint16_t SR;
  uint16_t  RESERVED0;
  __IO uint16_t DR;
  uint16_t  RESERVED1;
  __IO uint16_t BRR;
  uint16_t  RESERVED2;
  __IO uint16_t CR1;
  uint16_t  RESERVED3;
  __IO uint16_t CR2;
  uint16_t  RESERVED4;
  __IO uint16_t CR3;
  uint16_t  RESERVED5;
  __IO uint16_t GTPR;
  uint16_t  RESERVED6;
} myType;
 
volatile myType far * REGS = 0x200000;
 
REGS->SR = 0x0;
Добавлено через 3 часа 1 минуту
Объявляю структуру так:
C
1
volatile myType far* REGS = (volatile myType far*)(0x200000);
Работает, но QtCreator не подсказывает поля структуры.
А если так (без far в правой части):
C
1
volatile myType far* REGS = (volatile myType*)(0x200000);
То подсказывает..
0
1280 / 1185 / 175
Регистрация: 02.12.2013
Сообщений: 4,883
25.11.2014, 14:44 40
С МК Infineon не работал, поэтому вопрос, а зачем модификатор far Вы используете?
far - дальний указатель (указатель на ячейку памяти в другом сегменте)
0
25.11.2014, 14:44
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.11.2014, 14:44
Помогаю со студенческими работами здесь

Какими ещё способами можно ещё сделать?
Задание: Известно, что: 1 в третей степени будет=1 2 в третей степени будет=3+5 3 в третей...

Можно ли при работающем макросе как то пользоваться другими excel? Открывать, изменять, закрывать?
Собственно вопрос в заголовке И возможно ли использовать application.screenupdating и...

Как еще можно достучаться до БД?
Можно ли использовать другие модели доступа к БД, кроме как через ADO, ADO.NET. Только меня...

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

как создать передаточную функцию звена, чтобы ей можно дальше пользоваться?(заменить элемент p, умножить. и т д)?
(5*p + 2)/(p^2+9*p+1)


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru