1 / 1 / 0
Регистрация: 05.10.2016
Сообщений: 51
|
||||||
1 | ||||||
Обращение к 16 -ричным регистрам ATmega 32819.05.2017, 17:54. Показов 1137. Ответов 5
Метки нет (Все метки)
Смутно помню, что на asm к I/O регистрам (с "большими адресами) можно было обращаться через хитрые команды типа sts и т.д. А вот где посмотреть как это делается на C++ че то не знаю.
Короче надо в OCR1(A-B) добавлять или вычитать единичку что то типа
#define ADCL (*(unsigned char *) 0x78) #define ADCH (*(unsigned char *) 0x79) #define ADCW (*(unsigned int *) 0x78) // 16 bit access и с ADCW творят что хотят..... я туда же #define OCR1AL (*(unsigned char *) 0x88) #define OCR1AH (*(unsigned char *) 0x89) #define OCR1AW (*(unsigned int *) 0x88) // 16 bit access а не работает в OCR1AL все пишется, а в OCR1AH хрен. Почитал букваря там (правда на младших моделях) вообще пишут OCR1A+1, у меня тоже не прокатило. Вроде в 16 ричные все через двойную буферизаию , опять же для OCRxN ее нет. В общем как туда че то записать где посмотреть пример и почитать?
0
|
19.05.2017, 17:54 | |
Ответы с готовыми решениями:
5
Atmega 328 + кварц NX3225SA-16.000000MHZ-T1 WDT таймер срабатывает без задержки ATmega 328 Раздельное питание цифровой и аналоговой части ATmega 328 Таймер в Atmega 328 не хочет считать до ICR1 (Toggle OC1A) Как правильно размещать таблицу прерываний (в ATmega 328 в частности)? |
484 / 331 / 32
Регистрация: 15.08.2011
Сообщений: 1,071
|
|
19.05.2017, 20:57 | 2 |
0
|
1 / 1 / 0
Регистрация: 05.10.2016
Сообщений: 51
|
||||||
20.05.2017, 06:19 [ТС] | 3 | |||||
на такое определение компилятор сразу ругается, типа не определен символ
В С++ такие проблемы вроде должны решаться на раз два.... неужто придется делать ассемблерную вставку чтобы работать с РВВ. Добавлено через 1 час 22 минуты Кажется как то победил....типа если в даташите написано : "двойная буферизация" надо все понимать буквально - сначала читаем младший байт затем старший, а записываем наоборот. А фенечки типаOCR1AL = OCR1AL -1; OCR1AH = OCR1AH -1; не прокатывают так как какой байт стоит первым сразу и читается и записывается первым, а надо что бы кто читается первым записывался последним.
0
|
484 / 331 / 32
Регистрация: 15.08.2011
Сообщений: 1,071
|
||||||
20.05.2017, 10:59 | 4 | |||||
А, ну тогда так:
ps vasiaFPV, тот способ которым вы победили, сложный и громоздкий. Но главная проблема не в этом. Без квалификатора volatile вас ждут сюрпризы в будущем. Хотя может сейчас это и работает. Но в обработчике прерывания уже может не сработать. Сперва вы правильным путем пошли, только про волатайл забыли.
0
|
1 / 1 / 0
Регистрация: 05.10.2016
Сообщений: 51
|
|
20.05.2017, 14:44 [ТС] | 5 |
0
|
484 / 331 / 32
Регистрация: 15.08.2011
Сообщений: 1,071
|
|
20.05.2017, 15:16 | 6 |
Ааа, так у вас CodeVision оказывается! Ну так он вообще стандарта С++ не придерживается. Это с-подобный язык фактически, и без плюсов кроме того. WinAVR поддерживает оба - C и C++. Если хотите свое что то творчески создавать лучше переходить на нормальный C/C++ компилятор.
1
|
20.05.2017, 15:16 | |
20.05.2017, 15:16 | |
Помогаю со студенческими работами здесь
6
Обращение к регистрам через адреса (ASM, AVR Studio) Логическая операция над 16-ричным числом. Вывод в Memo строки char 16-ричным кодом Макетная плата для Atmega 32?atmega 8 Проверить, является ли число 16-ричным, и вывести сумму введенных цифр Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |