R16...R31 в памяти XMEGA

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
mackerel
Открыл глаза
Сообщения: 70
Зарегистрирован: Пт янв 30, 2009 18:02:40

R16...R31 в памяти XMEGA

Сообщение mackerel »

Братцы! Очень срочно понадобились адреса регистров в ATxmega128A1.
Работаю под IAR. Почему-то в ATxmega128A1.h нашёл только первые 15 из них (GPIO0...15). А где же R16...R31???
Или я чего-то не понимаю.
Помогите!
mackerel
Открыл глаза
Сообщения: 70
Зарегистрирован: Пт янв 30, 2009 18:02:40

Re: R16...R31 в памяти XMEGA

Сообщение mackerel »

Неужели никто не знает???
Аватара пользователя
avreal
Опытный кот
Сообщения: 842
Зарегистрирован: Чт дек 31, 2009 19:27:45
Откуда: Бровари, Україна
Контактная информация:

Re: R16...R31 в памяти XMEGA

Сообщение avreal »

Всё, забудьте. R0..R31 в Xmega не адресуются как память, как это было у остальных AVR.
А GPIO -- это другое. Таких регистров по одному-два-три и у свежих "обычных" AVR-ок есть, доступны для in/out и, что приятно, для размещения глобальных битовых флагов под sbi/cbi/sbis/sbic, так как с байтами в ОЗУ AVR8 такого не умеют.
Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.
mackerel
Открыл глаза
Сообщения: 70
Зарегистрирован: Пт янв 30, 2009 18:02:40

Re: R16...R31 в памяти XMEGA

Сообщение mackerel »

avreal писал(а):Всё, забудьте. R0..R31 в Xmega не адресуются как память, как это было у остальных AVR.
А GPIO -- это другое. Таких регистров по одному-два-три и у свежих "обычных" AVR-ок есть, доступны для in/out и, что приятно, для размещения глобальных битовых флагов под sbi/cbi/sbis/sbic, так как с байтами в ОЗУ AVR8 такого не умеют.

Пипец, до чего дошли... :(
А как тогда быть при использовании ассемблерной функции, возвращающей что-нибудь? (Если байт, то он возвращается в R16). Ну, нет, в принципе, понятно, всё будет работать, но компилятор ругнётся, если чисто формально не написать что-то вроде return XXX; где XXX - это тот самый R16, или его содержимое, перенесённое в память... Возня, однако...
mackerel
Открыл глаза
Сообщения: 70
Зарегистрирован: Пт янв 30, 2009 18:02:40

Re: R16...R31 в памяти XMEGA

Сообщение mackerel »

Братцы, ещё просьба...
Чтобы новую тему не создавать, здесь отпишу:
Никто не может подарить файлик для IAR - ATxmega128A1.h посвежее? А то лажа какая-то, в частности, с ADC - структура в заголовочном не соответствует приведенной в описании (калибровочные байты - точно, может, и ещё чего). Задолбался сегодня, такой бред намеряется. Вообще этот ADC, по отзывам, не подарок, а тут ещё, блин, это. И деваться некуда, в срок до позавчера нужно изделие сдавать.
Аватара пользователя
avreal
Опытный кот
Сообщения: 842
Зарегистрирован: Чт дек 31, 2009 19:27:45
Откуда: Бровари, Україна
Контактная информация:

Re: R16...R31 в памяти XMEGA

Сообщение avreal »

Я с IAR практически не работаю, у меня какой-то kick-start живёт.
В нём

Код: Выделить всё

/*
 ----------
 --             - ATxmega128A1.h -
 --
 --     This file declares the internal register addresses for ATxmega128A1.
 --
 --     Used with IAR System's iccAVR and aAVR.
 --
 --     Copyright Atmel Corporation 2008. All rights reserved.
 --
 ----------
*/

...

/** @addtogroup adc Analog/Digital Converter
 *  @{
 */

/// ADC Channel
typedef struct ADC_CH_struct {
   register8_t CTRL; ///< Control Register
   register8_t MUXCTRL; ///< MUX Control
   register8_t INTCTRL; ///< Channel Interrupt Control
   register8_t INTFLAGS; ///< Interrupt Flags
   WORDREGISTER(RES); ///< Channel Result
   register8_t reserved_0x6; ///< reserved
   register8_t reserved_0x7; ///< reserved
} ADC_CH_t;   

/// Analog-to-Digital Converter
typedef struct ADC_struct {
   register8_t CTRLA; ///< Control Register A
   register8_t CTRLB; ///< Control Register B
   register8_t REFCTRL; ///< Reference Control
   register8_t EVCTRL; ///< Event Control
   register8_t PRESCALER; ///< Clock Prescaler
   register8_t reserved_0x05; ///< reserved
   register8_t INTFLAGS; ///< Interrupt Flags
   register8_t TEMP; ///< Temporary register
   register8_t reserved_0x08; ///< reserved
   register8_t reserved_0x09; ///< reserved
   register8_t reserved_0x0A; ///< reserved
   register8_t reserved_0x0B; ///< reserved
   WORDREGISTER(CAL); ///< Calibration Value
   register8_t reserved_0x0E; ///< reserved
   register8_t reserved_0x0F; ///< reserved
   WORDREGISTER(CH0RES); ///< Channel 0 Result
   WORDREGISTER(CH1RES); ///< Channel 1 Result
   WORDREGISTER(CH2RES); ///< Channel 2 Result
   WORDREGISTER(CH3RES); ///< Channel 3 Result
   WORDREGISTER(CMP); ///< Compare Value
   register8_t reserved_0x1A; ///< reserved
   register8_t reserved_0x1B; ///< reserved
   register8_t reserved_0x1C; ///< reserved
   register8_t reserved_0x1D; ///< reserved
   register8_t reserved_0x1E; ///< reserved
   register8_t reserved_0x1F; ///< reserved
   ADC_CH_t CH0; ///< ADC Channel 0
   ADC_CH_t CH1; ///< ADC Channel 1
   ADC_CH_t CH2; ///< ADC Channel 2
   ADC_CH_t CH3; ///< ADC Channel 3
} ADC_t;   

/** @} */
С документацией вроде бы совпадает.
Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.
mackerel
Открыл глаза
Сообщения: 70
Зарегистрирован: Пт янв 30, 2009 18:02:40

Re: R16...R31 в памяти XMEGA

Сообщение mackerel »

Спасибо огромное!!!


Уф...
Всё получилось.
Именно в калибровке было дело, с правильной структурой заработало (сам её подправил, а потом убедился в своей правоте благодаря приведенному фрагменту).
Хотя, сам ADC - та ещё пакость. В режиме несимметричного входа вблизи опорного напряжения очень паршиво работает. Перевёл в дифференциальный - вроде, лучше.

Ещё раз спасибо!
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»