aaarrr 69 15 мая, 2010 Опубликовано 15 мая, 2010 · Жалоба Компилятор ругается на функцию pgm_read_byte (оригинальный проект вроде бы под WinAVR). Как вызвать эту функцию в KEIL? Подумайте сначала, зачем ее вызывать. Поле памяти-то общее. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 15 мая, 2010 Опубликовано 15 мая, 2010 (изменено) · Жалоба Блин, zheka, ну ведь дал же я образец переноса проекта... скачайте, посмотрите как сделано... Эти все вопросы там сделаны... typedef uint32_t prog_uint32_t; typedef char prog_char; #define PROGMEM /* */ #define pgm_read_byte(val) ((unsigned char) (* (val))) Изменено 15 мая, 2010 пользователем Genadi Zawidowski Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zheka 1 15 мая, 2010 Опубликовано 15 мая, 2010 · Жалоба #define PROGMEM /* */ Это для игнорирования компилятором? Я уже и так все поубирал))) А вот #define pgm_read_byte(val) ((unsigned char) (* (val))) помогло - в смысле компилятор не ругается. Проверить пока не могу - нет дисплея. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 15 мая, 2010 Опубликовано 15 мая, 2010 · Жалоба Но все равно мне не дает покоя - как одной командой на однородно настроенном порту записать данные в первые 8 бит с замещением их предыдущего состояния, не трогая остальные биты? Зачем "однородно" настраивать? Выделите в порту те биты, которые работают шиной - в регистр PIO_OWER запишите единицы в эти биты. Это сделать при настройке. А в "быстрой" части программы писать в регистр PIO_ODSR нужное значение. Битики стробов и адресов дёргать через PIO_SODR и PIO_CODR Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zheka 1 15 мая, 2010 Опубликовано 15 мая, 2010 · Жалоба Я так и сделал. Кстати, слышал я байку, будто бы ногодрыганье на SAM7 возможно на частоте всего 3 МГц, и это якобы меньше чем в АВР. Это правда? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 15 мая, 2010 Опубликовано 15 мая, 2010 · Жалоба Я так и сделал. Кстати, слышал я байку, будто бы ногодрыганье на SAM7 возможно на частоте всего 3 МГц, и это якобы меньше чем в АВР. Это правда? в том проекте, на который я ссылаюсь, есть кусочек теста скорости. Находящийся в ОЗУ (тактовая - 48 МГц, 1WS) кусочек кода переключает состояние выхода. Минимальный интервал между изменениями состояния - около 55 наносекунд. Максимальный побольше (переход в цикле добавляет пару тактов). Частота сигнала на выводе получается 8 с чем-то мегагерц. Это в процессоре питаемом от 3.3 вольта - атмеги при этом тактовую 8 МГц позволяют. Надо бы конечно и потребление сраавнить. Но мне кажется, удобства программирования (фон-нейман! 32-бита арифметика!) велики. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 15 мая, 2010 Опубликовано 15 мая, 2010 · Жалоба Кстати, слышал я байку, будто бы ногодрыганье на SAM7 возможно на частоте всего 3 МГц, и это якобы меньше чем в АВР. Это правда? 3 такта на запись в порт, так что теоретический предел - MCK/6. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 15 мая, 2010 Опубликовано 15 мая, 2010 · Жалоба Для сравнения. Для STM32F103, чуть-чуть измененный код, по сравнению с тем, что уже приводил (чтобы получить скважность 50%) while (1) { GPIOB->BSRR = 0x0002; __nop(), __nop(), __nop(); GPIOB->BRR = 0x0002; Лично видел осциллографом на ноге частоту 6.0 MHz. Т.е., 12 тактов. А в симуляторе было 10. На записи в порт приходилось по 2 такта, на переход 3 такта, nop'ы по 1 такту. И два такта добавились при чтении команды из flash. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sonycman 0 16 мая, 2010 Опубликовано 16 мая, 2010 · Жалоба Для сравнения. Для STM32F103, чуть-чуть измененный код, по сравнению с тем, что уже приводил (чтобы получить скважность 50%) while (1) { GPIOB->BSRR = 0x0002; __nop(), __nop(), __nop(); GPIOB->BRR = 0x0002; Лично видел осциллографом на ноге частоту 6.0 MHz. Т.е., 12 тактов. А в симуляторе было 10. На записи в порт приходилось по 2 такта, на переход 3 такта, nop'ы по 1 такту. И два такта добавились при чтении команды из flash. Хе, на LPC1768 на 100 МГц ногодрыжством организован 8 битный CPU интерфейс для LCD. Макс. частота строба получается около 9 МГц - за 17 миллисекунд производится заливка 320*240 пикселей 16 бит. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 16 мая, 2010 Опубликовано 16 мая, 2010 · Жалоба Хе, на LPC1768 на 100 МГц ногодрыжством организован 8 битный CPU интерфейс для LCD. Макс. частота строба получается около 9 МГц - за 17 миллисекунд производится заливка 320*240 пикселей 16 бит. Пропорция примерно та же - 11,11. Потому что архитектура близкая. А 100 MHz тактовой частоты - конечно лучше, кто ж спорит. К тому же, у меня есть еще 3 nop'а. Я просто показал, на что можно рассчитывать с этим процессором. upd. А на MCO я вывел все 36 MHz :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zheka 1 18 мая, 2010 Опубликовано 18 мая, 2010 · Жалоба Таки делаю успехи - уже получается выводить на экран дисплея от NOKIA 6280 (QVGA 320x240) текст. Правда медленно как-то получается. Скажите, одинаковы ли по количеству тактов два этих варианта или нет? 1. ...SODR=(1<<4); 2. ... SODR=0x10; При условии что эти операции прописаны в #define. Короче вот так: // первый вариант #define CS_ON AT91C_BASE_PIOA->PIO_SODR=(1<<4); int void main() { CS_ON; } // второй вариант #define CS_ON AT91C_BASE_PIOA->PIO_SODR=0x10; int void main() { CS_ON; } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 134 18 мая, 2010 Опубликовано 18 мая, 2010 · Жалоба Скажите, одинаковы ли по количеству тактов два этих варианта или нет? 1. ...SODR=(1<<4); 2. ... SODR=0x10; Абсолютно. При том, что компилятор превращает константное выражение (1<<4) в 0x10, а потом он же или ассемблер может задействовать сдвигатель и превратить 0x10 обратно в сдвиг 1 на 4 разряда. P.S. А скомпилировать оба варианта и в листинг посмотреть? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 18 мая, 2010 Опубликовано 18 мая, 2010 · Жалоба P.S. А скомпилировать оба варианта и в листинг посмотреть? Лучше в симулятор Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zheka 1 18 мая, 2010 Опубликовано 18 мая, 2010 · Жалоба эээ... понимаете... сижу я на работе. Работы сегодня нет. Отладочная плата дома. Фантазирую. ДОма конечно же посмотрю в листинг. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 134 18 мая, 2010 Опубликовано 18 мая, 2010 · Жалоба Лучше в симуляторДа там и в листинге будут видны две идентичные команды. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться