Например TDA7294

Форум РадиоКот • Просмотр темы - Attiny 1-й серии как работать с регистрами напрямую?
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Сб дек 13, 2025 05:43:42

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 56 ]    , 2,  
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: Attiny 1-й серии как работать с регистрами напрямую?
СообщениеДобавлено: Ср дек 25, 2024 22:33:17 
Мучитель микросхем

Карма: 1
Рейтинг сообщений: 48
Зарегистрирован: Вт окт 01, 2024 15:22:33
Сообщений: 475
Рейтинг сообщения: 0
PORTA^=1<<PB2 - это чтение PORTA, модификация значения и запись обратно, а раз так, то, как я уже говорил, в середине может вклиниться прерывание.
PORTA.TGL = PORTA.OUT ^ 0x07 & 0x0F; -> PORTA.TGL = 0x02; - это одна атомарная операция, ей ничего помешать не может. Она меняет свои 4 бита не затрагивая остальные.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Attiny 1-й серии как работать с регистрами напрямую?
СообщениеДобавлено: Чт дек 26, 2024 00:05:34 
Прорезались зубы

Зарегистрирован: Чт дек 07, 2017 13:48:44
Сообщений: 201
Рейтинг сообщения: 0
Продолжая изучение...
Вот скажите мне! По какой накурке можно было такое написать в даташите???

Изображение

Здесь в пункте 2 приведен пример кода дабы перевести таймер TCA0 в режим "Normal mode".
Код этот выглядит так:
TCA0.SINGLE.CTRLB = TCA_SINGLE_WGMODE_NORMAL_gc;
Сук.. как это вообще ассоциируется с регистром CTRLB, названия битов которого приведены там же???
Как, Карл??
Как, читая даташит я должен понять и написать код??

Видя название регистра CTRLB и название его битов WGMODE [0:2], а так же ниже таблицу соответствия состояния этих битов режимам таймера - то я, следуя логике и предыдущим стандартам AVR, должен написать:

CTRLB&=~ (1<<WGMODE0|1<<WGMODE1|1<<WGMODE2);
А точнее - вообще ничего не писать в эти биты, ибо для режима "Normal mode" все биты WGMODE должны быть в "0".

Но следуя даташиту я должен написать:
TCA0.SINGLE.CTRLB = TCA_SINGLE_WGMODE_NORMAL_gc;

Как, как это вообще сопоставить? Зачем это?

Сук.. ловите наркоманов! :facepalm:

Добавлено after 6 minutes 25 seconds:
PORTA^=1<<PB2 - это чтение PORTA, модификация значения и запись обратно, а раз так, то, как я уже говорил, в середине может вклиниться прерывание.
PORTA.TGL = PORTA.OUT ^ 0x07 & 0x0F; -> PORTA.TGL = 0x02; - это одна атомарная операция, ей ничего помешать не может. Она меняет свои 4 бита не затрагивая остальные.


И для этого нужно убрать регистр DDR? Переименоваить остальные все регистры и наделать кучу масок??

Добавлено after 3 minutes 10 seconds:
Сукк.а... пойду застрелюсь в туалете!

Добавлено after 1 hour 5 minutes 7 seconds:
Акуеть... а еще нужно сбрасывать ПРОГРАММНО флаг прерывания в обработчике прерываний....

Изображение


ISR(TCA0_OVF_vect){

PORTA.OUTTGL = PIN0_bm;

TCA0.SINGLE.INTFLAGS = TCA_SINGLE_OVF_bm;

}


То есть вместо:

ISR(TCA0_OVF_vect) {

PORTA^= 1<<PB0;

}


.......
Фсё... ну нах. Думал быстренько новый МК попробую, мол это вам не STM-ы всякие и ESP заново учить после AVR...
Ан нет! Учи считай новый даташит, методы, векторы, регистры, вызовы...
Кончилось время бородатых дядек и ассемблера... Чувствуется веяние современных пиздюков без оглядки на прошлое, совместимость, оптимизацию....
Нынче в тренде тучи мусорного кода на мощном железе чем оптимизированные решения... Arduino-мир победил...
Дайте яда!

"Пластмассовый мир победил
Макет оказался сильней
Последний кораблик остыл
Последний фонарик устал,
а в горле сопят комья воспоминаний" ©
И.Ф. Летов


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Attiny 1-й серии как работать с регистрами напрямую?
СообщениеДобавлено: Чт дек 26, 2024 09:46:23 
Мучитель микросхем

Карма: 1
Рейтинг сообщений: 48
Зарегистрирован: Вт окт 01, 2024 15:22:33
Сообщений: 475
Рейтинг сообщения: 0
Режимы таймера аля NORMAL, CTC и т. д. в AVR всегда выставлялись отдельными битами и это никак не связано с названиями регистров и что они как то могут пересекаться.
Например режим CTC mode в Attiny85:

TCCR1 = 1<<CTC1;

Что мешало сделать в Attiny212 так же?? Религия? Тем более регистры и биты ведь такие же... :dont_know:

Это не те режимы... Normal и Split влияют как на количество используемых регистров, так и на их поля. Например, в режиме Normal младшие 3 бита CTRLB - это WGMODE, а в режиме Slit там уже 3 отдельных бита LCMP0EN/LCMP1EN/LCMP2EN.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Attiny 1-й серии как работать с регистрами напрямую?
СообщениеДобавлено: Пн дек 30, 2024 00:17:24 
Прорезались зубы

Зарегистрирован: Чт дек 07, 2017 13:48:44
Сообщений: 201
Рейтинг сообщения: 0
Плятьь....Я застрелился в пустую голову!

И пока там свистал ветер - решил хоть как то, на этом чудном говнокамне, попробовать накидать простую прошивку на пару ШИМ каналов...
И естественно уперся в тактирование!

По сложившейся уже говно-Mscrochip-ской традиции, ПОУМОЛЧАНИЮ, в тактировании основной шины стоит делитель на 6!!
Ну да ладно, можно ж выставить фьюзы, какие проблемы подумал я?... Угу...
Поправить фьюзы через AVRDude_v8, поправить так и не вышло.. Адекватные технические инструкции так и не нашел...
Фьюзы прочитал, в даташите описано одно, а читаетсо - другое!! Ну это, я так понял уже норм для этой конторы...

В итоге решил в юзеровском ПО поправить CLK_CPU PLL... угу...

За прескаллер отвечает регистр MCLKCTRLB ))))) 9 букв, Карл!)))
И естественно. как же без маски то! Что бы обратится к нему нужно написать CLKCTRL_MCLKCTRLB ......сукккааа!!

Но и это еще не всё!
Чтобы отключить делитель - нужно выставить бит "PEN" в "0" в этом регистре.
Есссеественно с помощью говномаски: CLKCTRL_MCLKCTRLB&=~CLKCTRL_PEN_bm;

Иии... И нихрена! :facepalm: :kill: :o :shock: :(

А почему?? Да потому, что говно-Microchip решил придумать систему защиты записи в критически важные (по их мнению) регистры "CCP"!
И теперь, что бы убрать делитель частоты (который цуко по умолчанию на 6) нужно еще записать соответствующий ключ, ссцука, в регистр CPP.......

В итоге, что бы отключить делитель чатоты пришлось курить 20 листов даташита и написать вот ЭТО:

CPU_CCP=0xD8;
CLKCTRL_MCLKCTRLB&=~CLKCTRL_PEN_bm;

ЭТО уже не AVR....

РАССТРЕЛЯТЬ ЭТИХ ПЛАНОКУРОВ!! :kill: :kill: :kill:


Вернуться наверх
 
Эиком - электронные компоненты и радиодетали
Не в сети
 Заголовок сообщения: Re: Attiny 1-й серии как работать с регистрами напрямую?
СообщениеДобавлено: Пн дек 30, 2024 06:33:24 
Мучитель микросхем
Аватар пользователя

Карма: 1
Рейтинг сообщений: 39
Зарегистрирован: Ср янв 11, 2012 18:20:26
Сообщений: 473
Рейтинг сообщения: 0
dds7sdd писал(а):
По сложившейся уже говно-Mscrochip-ской традиции, ПОУМОЛЧАНИЮ, в тактировании основной шины стоит делитель на 6!!
Ну как бы по дефолту делитель на 8 много где стоит и стоял, ещё до микрочипа..
dds7sdd писал(а):
Поправить фьюзы через AVRDude_v8, поправить так и не вышло.. Адекватные технические инструкции так и не нашел...
Это проблема исключительно AvrDude))
dds7sdd писал(а):
В итоге, что бы отключить делитель чатоты пришлось курить 20 листов даташита
:dont_know:
Могу только что-нибудь позабористее предложить.. Например китайского курнуть))

А так.. неочевидная подача информации сплошь и рядом :dont_know: так же как и ошибки в даташитах.. Это уже норма и не стОит эмоций))

Добавлено after 16 minutes 16 seconds:
PS: Просто немногим раньше изучать было проще. Ассортимент чипов был меньше, а энтузиастов, размещающих статьи в интернете, больше. Поэтому в ДШ заглядывали не часто. Сейчас уже не те мотивации для энтузиазма))


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Attiny 1-й серии как работать с регистрами напрямую?
СообщениеДобавлено: Пн дек 30, 2024 07:05:26 
Друг Кота
Аватар пользователя

Карма: 139
Рейтинг сообщений: 2918
Зарегистрирован: Чт янв 10, 2008 22:01:02
Сообщений: 24609
Откуда: Московская область, Фрязино
Рейтинг сообщения: 0
ЭТО уже не AVR....
А никто и не обещал старый AVR. Потому и нет уже давно Atmel-а, что пытался масштабировать старые нравы в новые времена.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Attiny 1-й серии как работать с регистрами напрямую?
СообщениеДобавлено: Пн дек 30, 2024 09:46:03 
Мучитель микросхем

Карма: 1
Рейтинг сообщений: 48
Зарегистрирован: Вт окт 01, 2024 15:22:33
Сообщений: 475
Рейтинг сообщения: 0
Код:
   PORTA.DIR = PIN1_bm | PIN2_bm | PIN3_bm;
   PORTA.DIR &= ~(PIN7_bm | PIN6_bm);

   PORTA.OUT = PIN0_bm | PIN6_bm | PIN7_bm;   
   PORTA.OUT &= ~(PIN1_bm | PIN2_bm | PIN3_bm);

Вместо этого, кстати, лучше писать так:
Код:
PORTA.DIRSET = PIN1_bm | PIN2_bm | PIN3_bm;
PORTA.DIRCLR = PIN7_bm | PIN6_bm;

PORTA.OUTSET = PIN0_bm | PIN6_bm | PIN7_bm;
PORTA.OUTCLR = PIN1_bm | PIN2_bm | PIN3_bm;


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Attiny 1-й серии как работать с регистрами напрямую?
СообщениеДобавлено: Пн дек 30, 2024 10:36:15 
Это не хвост, это антенна

Карма: 12
Рейтинг сообщений: 136
Зарегистрирован: Вт июн 07, 2011 08:03:18
Сообщений: 1306
Рейтинг сообщения: 0
dds7sdd, а что тебе мешает завести свой io.h, в котором сделать описания нужных тебе портов/регистров/бит как тебе нравится). Не?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Attiny 1-й серии как работать с регистрами напрямую?
СообщениеДобавлено: Пн дек 30, 2024 12:30:03 
Прорезались зубы

Зарегистрирован: Чт дек 07, 2017 13:48:44
Сообщений: 201
Рейтинг сообщения: 0
dds7sdd, а что тебе мешает завести свой io.h, в котором сделать описания нужных тебе портов/регистров/бит как тебе нравится). Не?


Память, время и религия...

И потом писать для каждой серии свой io с toolchain? Для таких страданий есть Arduino.h со всеми вытекающими..

Добавлено after 20 minutes 6 seconds:
А никто и не обещал старый AVR. Потому и нет уже давно Atmel-а, что пытался масштабировать старые нравы в новые времена.


Ммм, как бы тебе объяснить? Вот представь если бы с выходом нового стандарта USB 3.0 (например) небыло бы обратной поддержки USB 2.0. И тебе пришлось бы менять все устройства, провода, программы, драйвера и т. д.
Представил?
Точно такое и происходит с ATmel после поглощения Microchip-ом! То что я годами учил в ходе разработки, накопил наработки в собственных проектах и могу при необходимости быстро набросать прошивку на пару килобайт за час-полтора... Теперь выходит нужно всё забыть нахрен и учить даташиты заново, раздупляться как инициализировать, тактировать, читать, работать с векторами, таймерами и т. д. и т. п.
Но даже если и углубляться то из-за таких длинючих и запутанных битовых говномасок в головеи ничего не остается - ты банально не можешь это запомнить... И ты постоянно должен лезть в даташит... но и это не помогает ибо в даташите описаны названия регистров и битов, но напрямую ты к ним обратиться не можешь - только через говномаски битовые, для которы не описаны в даташите, а разбросаны по техническим примерам использования той или иной переферии в виде отдельных технических описаний.... плять как такое гг можно было придумать??


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Attiny 1-й серии как работать с регистрами напрямую?
СообщениеДобавлено: Пн дек 30, 2024 12:39:44 
Друг Кота
Аватар пользователя

Карма: 139
Рейтинг сообщений: 2918
Зарегистрирован: Чт янв 10, 2008 22:01:02
Сообщений: 24609
Откуда: Московская область, Фрязино
Рейтинг сообщения: 0
Представил?
Точно такое и происходит с ATmel после поглощения Microchip-ом! То что я годами учил в ходе разработки, накопил наработки в собственных проектах и могу при необходимости быстро набросать прошивку на пару килобайт за час-полтора... Теперь выходит нужно всё забыть нахрен и учить даташиты заново

Да именно так.
Даташиты правда учить не нужно. Ими нужно просто пользоваться.
А так, да, сейчас Микрочип в товарных количествах ограниченно доступен настолько, что все приходится переписывать на ARM в лице Artery. И там все по другому. Другая периферия, другие маски, другие правила работы с ядром.
В этом и состоит работа эмбеддера.
В отличии от USB, контроллеры не являются стандартными изделиями. И в новых поколениях, прежде всего, изменяется периферия.
Если у тебя это вызывает такой баттхерт, значит ты что то делаешь не так.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Attiny 1-й серии как работать с регистрами напрямую?
СообщениеДобавлено: Пн дек 30, 2024 12:48:14 
Прорезались зубы

Зарегистрирован: Чт дек 07, 2017 13:48:44
Сообщений: 201
Рейтинг сообщения: 0
Та без проблем, можно заниматься херней годами по кругу переписывая переписанное чисто для переписывания...
У меня же подгорело не из-за технической сложнасти, а из-за того что сделали через жопу! Какой жаль... Ну значит будем посмотреть в другую сторону.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Attiny 1-й серии как работать с регистрами напрямую?
СообщениеДобавлено: Пн дек 30, 2024 12:50:15 
Мудрый кот

Карма: 25
Рейтинг сообщений: 485
Зарегистрирован: Сб май 05, 2012 20:24:52
Сообщений: 1786
Откуда: KN34PC, Болгария
Рейтинг сообщения: 0
Либо делаете, либо нет. Выберите путь, по которому идти. Старые типы AVR существуют и производятся. Программы для прогр. кода к ним не перестали работать.

А в остальном по цене ATtiny13A (оригинал, от официальных представителей) получаете в 2 раза больше Flash и SRAM, DAC, 3 + 1 16/12 bit таймера, VREF, 2 аппаратных I2c и т.д. функциях.

Всех что-то возмущает (в сфере МК). Но рано или поздно (или никогда) к этому привыкаешь. Потом при 10-100-1000 ... программах/устройства/теста становится легко. И с улыбкой вспоминаете "простых МК и их окружение".


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Attiny 1-й серии как работать с регистрами напрямую?
СообщениеДобавлено: Пн дек 30, 2024 13:08:22 
Прорезались зубы

Зарегистрирован: Чт дек 07, 2017 13:48:44
Сообщений: 201
Рейтинг сообщения: 0
Та причем тут AVR путь? Есть же здравый смысл!
Если у тебя в даташите описан ADC регистр ADCSRA с битами ADEN, ADIF и т. д. то это значит что ты можешь обратиться к нему так как он описан в даташите ADCSRA= 1<<DEN|1<<ADIF;

Здесь же, например, ты видишь в даташите название регистра конфигурации таймера CTRLB и названия его битов WGMODE [0:2].
Но ты не можешь написать CTRLB&=~ (1<<WGMODE0|1<<WGMODE1|1<<WGMODE2); НЕТ!
Ты должен написать: TCA0.SINGLE.CTRLB = TCA_SINGLE_WGMODE_NORMAL_gc;
И это не описано в даташите! Это нужно нарыть в заголовочном io файле и отдельных примерах по использованию переферии...
Именно из-за этого у меня бомбит!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Attiny 1-й серии как работать с регистрами напрямую?
СообщениеДобавлено: Пн дек 30, 2024 13:16:10 
Мучитель микросхем
Аватар пользователя

Карма: 1
Рейтинг сообщений: 39
Зарегистрирован: Ср янв 11, 2012 18:20:26
Сообщений: 473
Рейтинг сообщения: 0
dds7sdd писал(а):
И это не описано в даташите! Это нужно нарыть в заголовочном io файле и отдельных примерах по использованию переферии...
Заголовочный файл тоже от микрочипа?

Добавлено after 1 minute 50 seconds:
Но вам уже ответили:
OKF писал(а):
dds7sdd, а что тебе мешает завести свой io.h, в котором сделать описания нужных тебе портов/регистров/бит как тебе нравится). Не?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Attiny 1-й серии как работать с регистрами напрямую?
СообщениеДобавлено: Пн дек 30, 2024 13:20:13 
Прорезались зубы

Зарегистрирован: Чт дек 07, 2017 13:48:44
Сообщений: 201
Рейтинг сообщения: 0
А от кого? WinAVR.

Вам тоже ответили:
dds7sdd, а что тебе мешает завести свой io.h, в котором сделать описания нужных тебе портов/регистров/бит как тебе нравится). Не?


Память, время и религия...

И потом писать для каждой серии свой io с toolchain? Для таких страданий есть Arduino.h со всеми вытекающими..


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Attiny 1-й серии как работать с регистрами напрямую?
СообщениеДобавлено: Пн дек 30, 2024 13:20:46 
Мудрый кот

Карма: 25
Рейтинг сообщений: 485
Зарегистрирован: Сб май 05, 2012 20:24:52
Сообщений: 1786
Откуда: KN34PC, Болгария
Рейтинг сообщения: 0
Да, удалил строка о ADC как оффтоп. И код чужой.
Попробуйте изучить документацию современного МК. Напр. 1258 страниц :). Если им можно пользоваться годами - то да. Но часто на 3-30-100-й день его меняешь. Даташит: вначале, затем: при необходимости.


Последний раз редактировалось veso74 Пн дек 30, 2024 13:21:13, всего редактировалось 1 раз.

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Attiny 1-й серии как работать с регистрами напрямую?
СообщениеДобавлено: Пн дек 30, 2024 13:20:55 
Мучитель микросхем

Карма: 1
Рейтинг сообщений: 48
Зарегистрирован: Вт окт 01, 2024 15:22:33
Сообщений: 475
Рейтинг сообщения: 0
Ты должен написать: TCA0.SINGLE.CTRLB = TCA_SINGLE_WGMODE_NORMAL_gc;
И это не описано в даташите! Это нужно нарыть в заголовочном io файле и отдельных примерах по использованию переферии...
Именно из-за этого у меня бомбит!

Таймер у которого два режима работы с разными наборами регистров - это исключение. В большинстве случаев будет:
Код:
TCA0.CTRLB = TCA_WGMODE_NORMAL_gc;

И чтобы такое написать достаточно знать как регистр и поле называется. Или у тебя IDE даже автодополнение не умеет?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Attiny 1-й серии как работать с регистрами напрямую?
СообщениеДобавлено: Пн дек 30, 2024 13:23:34 
Прорезались зубы

Зарегистрирован: Чт дек 07, 2017 13:48:44
Сообщений: 201
Рейтинг сообщения: 0
Зачем???? Это не очевидно!
Зачем тогда писать в даташите названия регистров? Тогда надо было делать описани с масками уже... Или и то и другое...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Attiny 1-й серии как работать с регистрами напрямую?
СообщениеДобавлено: Пн дек 30, 2024 13:29:09 
Друг Кота
Аватар пользователя

Карма: 96
Рейтинг сообщений: 1493
Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 15285
Откуда: ДОНЕЦК
Рейтинг сообщения: 0
Нужно проще смотреть на эти вопросы.
Есть базовое ядро МК - судя по системе команд оно не изменилось.
Есть набор аппаратной периферии - эта часть может в любое время "взбрыкнуть" - особо ежли объявлено новое семейство. Тут уж без проработки даташитов и еррат не обойтись.
АВРки не 51е, где стандартный минимум ядра прописан (хотя и там "поползновения" на ядро были даже у атмела - да эволюционно отмерли) ...
При подходе к МК как к микропроцессора с набором периферии всё на свои места станет - как пример
есть сам микропроцессор, схема тактироавния и интерфейс с памятью программ/данных - основное ядро.
Оно постоянно (редко в тактирование могут изменения вносить)
А есть периферия - таймеры, порты ввода/вывода, контроллеры доступа к внешним запоминающимся устройствам и прочие приятности.
Это в МК они по большей части уже внутри, но раньше на каждый такой кристалл своя документация была (и весьма не маленькая). Плюс изменения/модификации там много чаще происходили.
Для многих уже те времена равны археологическим раскопкам.
8)
:beer:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Attiny 1-й серии как работать с регистрами напрямую?
СообщениеДобавлено: Пн дек 30, 2024 13:29:50 
Прорезались зубы

Зарегистрирован: Чт дек 07, 2017 13:48:44
Сообщений: 201
Рейтинг сообщения: 0
Да, удалил строка о ADC как оффтоп. И код чужой.
Попробуйте изучить документацию современного МК. Напр. 1258 страниц :). Если им можно пользоваться годами - то да. Но часто на 3-30-100-й день его меняешь. Даташит: вначале, затем: при необходимости.


Так я и не говорю здесь про 32-64 бит МК. Речь идет о мелкой 8 битной блохе за 1 дол., для которой нужно за час написать прошивку, залить и закинуть в какю нить железку и на МК 0-серии так и было. Но вот в новой 1-серии нужно прочитать мануал на 500+ страниц дабы сделать тоже самое. Зачем? Производитель тот же, среда разработки та же, железо и архитектура прежние... Но нет... надо все переделать.


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 56 ]    , 2,  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 19


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

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y