А вот, в каком нюансе правильный ход мыслей дает сбой...
Прикошачиваем генератор к UART (Help!)
- Сообщения: 31
- Зарегистрирован: Ср окт 20, 2010 18:41:27
Ну, эмулятор пишет , [AVR MEMORY] PC=0x06FQ. Attempted to read external RAM when not enabled.
А вот, в каком нюансе правильный ход мыслей дает сбой...
А вот, в каком нюансе правильный ход мыслей дает сбой...
- Реклама
- Сообщения: 31
- Зарегистрирован: Ср окт 20, 2010 18:41:27
Остановился на таком варианте.
Частота меняется, сигнал выдается. Но, явно не тот, который в массиве. Изначально там синус, а выдается синус умноженный на ломаную. К тому же, через UART массив должен меняться, а это безумие назагрузку новых переменных ни как не реагирует.
Код: Выделить всё
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"
);
}Это верно только для давних моделей AVR. Более продвинутые понимают и LPM Rd,Z и LPM Rd,Z+YS писал(а):Потому, что он не требует операндов. Он сам по себе кладет содержимое, адресованное регистром Z (ZH:ZL <=> ) в R0.Почему LPM такой одинокий. и т.п.
- Сообщения: 31
- Зарегистрирован: Ср окт 20, 2010 18:41:27
Часть сигнала воспроизводится верно. (примерно,половина) а остальное - сикось-накось. Видимо,ошщибка с адресацией, либо с выделением памяти.
А можно как-то (через makefile) или еще как задавать для переменных области с определенным адресом?
А можно как-то (через makefile) или еще как задавать для переменных области с определенным адресом?
- Сообщения: 31
- Зарегистрирован: Ср окт 20, 2010 18:41:27
Как бы меня не убеждали, что вся проблема именно в эмуляторе, и если пересесть на железо, все станет норм, но, ничего не изменилось. Только программировать и запускать стало дольше. UART по-прежнему вместо адекватных значений принимает 0 или 128.
Ну, на счет адресации и вывода - не могу проверить. Нет осциллографа.
Ну, на счет адресации и вывода - не могу проверить. Нет осциллографа.
- Реклама
- Сообщения: 31
- Зарегистрирован: Ср окт 20, 2010 18:41:27
UART настроил. Для полного счастья осталась только система выводав массива переменных.
Напряг всю свою фантазию -- так и не смог увидеть тут проблему.MrHowl22 писал(а):UART настроил. Для полного счастья осталась только система выводав массива переменных.
Инициализировал UART, указатель на начало массива, запулил байт в UDR, дождался готовности - следующий и так до конца. По выставленному TxC - передача закончена.
- Сообщения: 31
- Зарегистрирован: Ср окт 20, 2010 18:41:27
Все так просто звучит. Но, что-то на шло. Неверно принималось. Да и если погуглить, - довольно частая проблема, когда,вроде, настроил, а или не инициализируется, или принимает не корректно. И часто такие темы заканчиваются фразой, "спасибо, все заработало, правда, не понял почему. Вроде, ничего не менял". 
- Сообщения: 31
- Зарегистрирован: Ср окт 20, 2010 18:41:27
А можно как-то задать, в какие ячейки ОЗУ должна объявляться переменная, чтоб она там висела и не рыпалась?
- Сообщения: 7518
- Зарегистрирован: Вс мар 29, 2009 22:09:05
Я так понял, интересует доступ к переменным из ассемблера... Это делается немного по-другому. См. тут: http://we.easyelectronics.ru/AVR/avr-gc ... oekte.htmlчтоб она там висела и не рыпалась?
Разница между теорией и практикой на практике гораздо больше, чем в теории.


