реклама на сайте
подробности

 
 
9 страниц V  « < 6 7 8 9 >  
Reply to this topicStart new topic
> Сбылась мечта идиота - приехали программатор и SAM7S256, Теперь нужен ликбез.
aaarrr
сообщение May 15 2010, 18:43
Сообщение #106


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(zheka @ May 15 2010, 22:36) *
Компилятор ругается на функцию pgm_read_byte (оригинальный проект вроде бы под WinAVR). Как вызвать эту функцию в KEIL?

Подумайте сначала, зачем ее вызывать. Поле памяти-то общее.
Go to the top of the page
 
+Quote Post
Genadi Zawidowsk...
сообщение May 15 2010, 18:48
Сообщение #107


Профессионал
*****

Группа: Участник
Сообщений: 1 620
Регистрация: 22-06-07
Из: Санкт-Петербург, Россия
Пользователь №: 28 634



Блин, zheka, ну ведь дал же я образец переноса проекта... скачайте, посмотрите как сделано... Эти все вопросы там сделаны...

Код
typedef uint32_t prog_uint32_t;
typedef char prog_char;
#define PROGMEM /* */
#define pgm_read_byte(val) ((unsigned char) (* (val)))


Сообщение отредактировал Genadi Zawidowski - May 15 2010, 18:56
Go to the top of the page
 
+Quote Post
zheka
сообщение May 15 2010, 19:06
Сообщение #108


Гуру
******

Группа: Участник
Сообщений: 2 072
Регистрация: 14-01-06
Пользователь №: 13 164



Цитата
#define PROGMEM /* */


Это для игнорирования компилятором? Я уже и так все поубирал)))
А вот #define pgm_read_byte(val) ((unsigned char) (* (val))) помогло - в смысле компилятор не ругается. Проверить пока не могу - нет дисплея.
Go to the top of the page
 
+Quote Post
Genadi Zawidowsk...
сообщение May 15 2010, 19:35
Сообщение #109


Профессионал
*****

Группа: Участник
Сообщений: 1 620
Регистрация: 22-06-07
Из: Санкт-Петербург, Россия
Пользователь №: 28 634



Цитата(zheka @ May 15 2010, 17:04) *
Но все равно мне не дает покоя - как одной командой на однородно настроенном порту записать данные в первые 8 бит с замещением их предыдущего состояния, не трогая остальные биты?


Зачем "однородно" настраивать?
Выделите в порту те биты, которые работают шиной - в регистр PIO_OWER запишите единицы в эти биты.
Это сделать при настройке.
А в "быстрой" части программы писать в регистр PIO_ODSR нужное значение.
Битики стробов и адресов дёргать через PIO_SODR и PIO_CODR
Go to the top of the page
 
+Quote Post
zheka
сообщение May 15 2010, 20:00
Сообщение #110


Гуру
******

Группа: Участник
Сообщений: 2 072
Регистрация: 14-01-06
Пользователь №: 13 164



Я так и сделал.

Кстати, слышал я байку, будто бы ногодрыганье на SAM7 возможно на частоте всего 3 МГц, и это якобы меньше чем в АВР. Это правда?
Go to the top of the page
 
+Quote Post
Genadi Zawidowsk...
сообщение May 15 2010, 20:07
Сообщение #111


Профессионал
*****

Группа: Участник
Сообщений: 1 620
Регистрация: 22-06-07
Из: Санкт-Петербург, Россия
Пользователь №: 28 634



Цитата(zheka @ May 16 2010, 00:00) *
Я так и сделал.

Кстати, слышал я байку, будто бы ногодрыганье на SAM7 возможно на частоте всего 3 МГц, и это якобы меньше чем в АВР. Это правда?


в том проекте, на который я ссылаюсь, есть кусочек теста скорости.
Находящийся в ОЗУ (тактовая - 48 МГц, 1WS) кусочек кода переключает состояние выхода. Минимальный интервал между изменениями состояния - около 55 наносекунд. Максимальный побольше (переход в цикле добавляет пару тактов). Частота сигнала на выводе получается 8 с чем-то мегагерц.
Это в процессоре питаемом от 3.3 вольта - атмеги при этом тактовую 8 МГц позволяют. Надо бы конечно и потребление сраавнить. Но мне кажется, удобства программирования (фон-нейман! 32-бита арифметика!) велики.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение May 15 2010, 20:30
Сообщение #112


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(zheka @ May 16 2010, 00:00) *
Кстати, слышал я байку, будто бы ногодрыганье на SAM7 возможно на частоте всего 3 МГц, и это якобы меньше чем в АВР. Это правда?

3 такта на запись в порт, так что теоретический предел - MCK/6.
Go to the top of the page
 
+Quote Post
ViKo
сообщение May 15 2010, 21:58
Сообщение #113


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Для сравнения.
Для STM32F103, чуть-чуть измененный код, по сравнению с тем, что уже приводил (чтобы получить скважность 50%)
Код
  while (1) {
    GPIOB->BSRR = 0x0002;
    __nop(), __nop(), __nop();
    GPIOB->BRR = 0x0002;

Лично видел осциллографом на ноге частоту 6.0 MHz. Т.е., 12 тактов. А в симуляторе было 10. На записи в порт приходилось по 2 такта, на переход 3 такта, nop'ы по 1 такту. И два такта добавились при чтении команды из flash.
Go to the top of the page
 
+Quote Post
sonycman
сообщение May 16 2010, 11:53
Сообщение #114


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Цитата(ViKo @ May 16 2010, 01:58) *
Для сравнения.
Для 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 бит.
Go to the top of the page
 
+Quote Post
ViKo
сообщение May 16 2010, 12:29
Сообщение #115


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(sonycman @ May 16 2010, 14:53) *
Хе, на LPC1768 на 100 МГц ногодрыжством организован 8 битный CPU интерфейс для LCD.
Макс. частота строба получается около 9 МГц - за 17 миллисекунд производится заливка 320*240 пикселей 16 бит.

Пропорция примерно та же - 11,11. Потому что архитектура близкая. А 100 MHz тактовой частоты - конечно лучше, кто ж спорит.
К тому же, у меня есть еще 3 nop'а. Я просто показал, на что можно рассчитывать с этим процессором.
upd. А на MCO я вывел все 36 MHz smile.gif
Go to the top of the page
 
+Quote Post
zheka
сообщение May 18 2010, 10:15
Сообщение #116


Гуру
******

Группа: Участник
Сообщений: 2 072
Регистрация: 14-01-06
Пользователь №: 13 164



Таки делаю успехи - уже получается выводить на экран дисплея от 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;
}
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение May 18 2010, 10:57
Сообщение #117


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(zheka @ May 18 2010, 13:15) *
Скажите, одинаковы ли по количеству тактов два этих варианта или нет?

1. ...SODR=(1<<4);
2. ... SODR=0x10;
Абсолютно. При том, что компилятор превращает константное выражение (1<<4) в 0x10, а потом он же или ассемблер может задействовать сдвигатель и превратить 0x10 обратно в сдвиг 1 на 4 разряда.
P.S. А скомпилировать оба варианта и в листинг посмотреть?


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
ViKo
сообщение May 18 2010, 11:15
Сообщение #118


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(Сергей Борщ @ May 18 2010, 13:57) *
P.S. А скомпилировать оба варианта и в листинг посмотреть?

Лучше в симулятор
Go to the top of the page
 
+Quote Post
zheka
сообщение May 18 2010, 11:23
Сообщение #119


Гуру
******

Группа: Участник
Сообщений: 2 072
Регистрация: 14-01-06
Пользователь №: 13 164



эээ... понимаете... сижу я на работе. Работы сегодня нет. Отладочная плата дома. Фантазирую. ДОма конечно же посмотрю в листинг.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение May 18 2010, 11:24
Сообщение #120


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(ViKo @ May 18 2010, 14:15) *
Лучше в симулятор
Да там и в листинге будут видны две идентичные команды.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post

9 страниц V  « < 6 7 8 9 >
Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 10:03
Рейтинг@Mail.ru


Страница сгенерированна за 0.01519 секунд с 7
ELECTRONIX ©2004-2016