Прикошачиваем генератор к UART (Help!)

Подключаем наши девайсы к компьютеру. Обсуждаются: порты, протоколы, драйвера, языки программирования и т.д.
Ответить
Первый раз сказал Мяу!
Сообщения: 31
Зарегистрирован: Ср окт 20, 2010 18:41:27

Сообщение MrHowl22 »

Ну, эмулятор пишет , [AVR MEMORY] PC=0x06FQ. Attempted to read external RAM when not enabled.

А вот, в каком нюансе правильный ход мыслей дает сбой...
Реклама
Первый раз сказал Мяу!
Сообщения: 31
Зарегистрирован: Ср окт 20, 2010 18:41:27

Сообщение MrHowl22 »

Остановился на таком варианте.

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

void static inline Signal_OUT2(const uint8_t *signal2, uint8_t aD2, uint8_t aD1, uint8_t aD0)
{
asm volatile( "eor r18, r18 ;r18<-0" "\n\t"
"eor r19, r19 ;r19<-0" "\n\t"
"2:" "\n\t"
"add r18, %0 ;1 cycle" "\n\t"
"adc r19, %1 ;1 cycle" "\n\t" 
"adc %A3, %2 ;1 cycle" "\n\t"
"ld R0,z ;3 cycles" "\n\t" // Загрузка в R0 происходит из ригистра z (ну, я, по крайней мере, на это надеюсь). Перед ReD стоит ограничитель "е", указывающий на адресный ригистр. могу предположить, что подразумевается, что в R0 загружается переменная из массива, на который указывает *ReD. Могу предположить, что требуется так же инкремент адреса. Иначе, это действие лишино смысла.... Наверно. плохо понимаю, как это работает. 
"out %4, __tmp_reg__ ;1 cycle" "\n\t"
"sbis %5, 2 ;1 cycle if no skip" "\n\t"
"rjmp 2b ;2 cycles. Total 10 cycles" "\n\t"
:
:"r" (aD0),"r" (aD1),"r" (aD2),"z" (signal2),"I" (_SFR_IO_ADDR(PORTA)), "I" (_SFR_IO_ADDR(SPCR))
:"r18", "r19" 
);
}
Частота меняется, сигнал выдается. Но, явно не тот, который в массиве. Изначально там синус, а выдается синус умноженный на ломаную. К тому же, через UART массив должен меняться, а это безумие назагрузку новых переменных ни как не реагирует.
Реклама
Друг Кота
Аватара пользователя
Сообщения: 6332
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Сообщение Jack_A »

YS писал(а):
Почему LPM такой одинокий. и т.п.
Потому, что он не требует операндов. Он сам по себе кладет содержимое, адресованное регистром Z (ZH:ZL <=> ) в R0.
Это верно только для давних моделей AVR. Более продвинутые понимают и LPM Rd,Z и LPM Rd,Z+
Первый раз сказал Мяу!
Сообщения: 31
Зарегистрирован: Ср окт 20, 2010 18:41:27

Сообщение MrHowl22 »

Часть сигнала воспроизводится верно. (примерно,половина) а остальное - сикось-накось. Видимо,ошщибка с адресацией, либо с выделением памяти.

А можно как-то (через makefile) или еще как задавать для переменных области с определенным адресом?
Реклама
Эиком - электронные компоненты и радиодетали
Первый раз сказал Мяу!
Сообщения: 31
Зарегистрирован: Ср окт 20, 2010 18:41:27

Сообщение MrHowl22 »

Как бы меня не убеждали, что вся проблема именно в эмуляторе, и если пересесть на железо, все станет норм, но, ничего не изменилось. Только программировать и запускать стало дольше. UART по-прежнему вместо адекватных значений принимает 0 или 128.

Ну, на счет адресации и вывода - не могу проверить. Нет осциллографа.
Реклама
Первый раз сказал Мяу!
Сообщения: 31
Зарегистрирован: Ср окт 20, 2010 18:41:27

Сообщение MrHowl22 »

UART настроил. Для полного счастья осталась только система выводав массива переменных.
Реклама
Друг Кота
Аватара пользователя
Сообщения: 6332
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Сообщение Jack_A »

MrHowl22 писал(а):UART настроил. Для полного счастья осталась только система выводав массива переменных.
Напряг всю свою фантазию -- так и не смог увидеть тут проблему.
Инициализировал UART, указатель на начало массива, запулил байт в UDR, дождался готовности - следующий и так до конца. По выставленному TxC - передача закончена.
Первый раз сказал Мяу!
Сообщения: 31
Зарегистрирован: Ср окт 20, 2010 18:41:27

Сообщение MrHowl22 »

Все так просто звучит. Но, что-то на шло. Неверно принималось. Да и если погуглить, - довольно частая проблема, когда,вроде, настроил, а или не инициализируется, или принимает не корректно. И часто такие темы заканчиваются фразой, "спасибо, все заработало, правда, не понял почему. Вроде, ничего не менял". :lol:
Первый раз сказал Мяу!
Сообщения: 31
Зарегистрирован: Ср окт 20, 2010 18:41:27

Сообщение MrHowl22 »

А можно как-то задать, в какие ячейки ОЗУ должна объявляться переменная, чтоб она там висела и не рыпалась?
YS
Друг Кота
Аватара пользователя
Сообщения: 7518
Зарегистрирован: Вс мар 29, 2009 22:09:05

Сообщение YS »

чтоб она там висела и не рыпалась?
Я так понял, интересует доступ к переменным из ассемблера... Это делается немного по-другому. См. тут: http://we.easyelectronics.ru/AVR/avr-gc ... oekte.html
Разница между теорией и практикой на практике гораздо больше, чем в теории.
Контактная информация:
Ответить

Вернуться в «Интеграция с ПК»