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

 
 
3 страниц V  < 1 2 3 >  
Reply to this topicStart new topic
> xmega128a1 + sdram
bekor
сообщение Jan 14 2011, 09:00
Сообщение #16


Участник
*

Группа: Участник
Сообщений: 66
Регистрация: 28-06-09
Пользователь №: 50 704



Подключил SDRAM (16M x 8) заработало сразу! rolleyes.gif

но есть две проблемы:

1. компилятор видит только первые 64КБ.
2. если поднести руку к микросхеме памяти уже на расстоянии 1см, контроллер сбросывается.

p.s. керамический кондер 100n у памяти между Vdd и Vss присутствует,
неиспользуемый полубайт а так же все остальные неиспользованные ноги оставил в воздухе,
может от этого происходит сброс ???

Сообщение отредактировал bekor - Jan 14 2011, 09:03


--------------------
1 километр = 1024 метр
Go to the top of the page
 
+Quote Post
prottoss
сообщение Jan 14 2011, 09:23
Сообщение #17


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(bekor @ Jan 14 2011, 19:00) *
Подключил SDRAM (16M x 8) заработало сразу! rolleyes.gif

но есть две проблемы:

1. компилятор видит только первые 64КБ.
2. если поднести руку к микросхеме памяти уже на расстоянии 1см, контроллер сбросывается.

p.s. керамический кондер 100n у памяти между Vdd и Vss присутствует,
неиспользуемый полубайт а так же все остальные неиспользованные ноги оставил в воздухе,
может от этого происходит сброс ???

1. В настройках проекта разрешите внешнюю шину памяти и укажите ее количество.
2. Конечно же нужно было подтянуть неиспользуемые линии данных к напряжению питания. Так же поступить и с остальными не используемыми входами... Очень может влиять разводка платы на помехоустойчивость.


--------------------
Go to the top of the page
 
+Quote Post
bekor
сообщение Jan 14 2011, 09:43
Сообщение #18


Участник
*

Группа: Участник
Сообщений: 66
Регистрация: 28-06-09
Пользователь №: 50 704



Цитата(prottoss @ Jan 14 2011, 15:23) *
1. В настройках проекта разрешите внешнюю шину памяти и укажите ее количество.

это я и делаю но компилер грит типа немогу исползовать больше 64КБ памяти потомучто у меня указатели 16 битные.


Цитата(prottoss @ Jan 14 2011, 15:23) *
2. Конечно же нужно было подтянуть неиспользуемые линии данных к напряжению питания. Так же поступить и с остальными не используемыми входами... Очень может влиять разводка платы на помехоустойчивость.


эту проблему я тоьк что решил,
надо было CS заземлить rolleyes.gif

Прикрепленное изображение


--------------------
1 километр = 1024 метр
Go to the top of the page
 
+Quote Post
prottoss
сообщение Jan 14 2011, 09:50
Сообщение #19


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(bekor @ Jan 14 2011, 19:33) *
это я и делаю но компилер грит типа немогу исползовать больше 64КБ памяти потомучто у меня указатели 16 битные.
Модель LARGE или HUGE нуна сделать

Код
#pragma location = 0x0100000
__no_init char membase[1024];

void main(void)
{    
      int i = 0;
    while(1)
          membase[i] = (char)(i++);
}

Компилируется без проблем (IAR 5.30)

Цитата(bekor @ Jan 14 2011, 19:43) *
Я же говорю - у Вас модель памяти - SMALL


--------------------
Go to the top of the page
 
+Quote Post
bekor
сообщение Jan 14 2011, 10:00
Сообщение #20


Участник
*

Группа: Участник
Сообщений: 66
Регистрация: 28-06-09
Пользователь №: 50 704



Цитата(prottoss @ Jan 14 2011, 15:50) *
Модель LARGE или HUGE нуна сделать


сделал LARGE но не помогло 05.gif


--------------------
1 километр = 1024 метр
Go to the top of the page
 
+Quote Post
KKV2003
сообщение Jan 14 2011, 10:05
Сообщение #21


Участник
*

Группа: Участник
Сообщений: 30
Регистрация: 11-02-08
Пользователь №: 34 931



А как насчет Huge-модели? Может пример от Atmel-а скомпилять? Они там все под эту модель.

Хотя у меня лично были очень большие проблемы с Huge-моделью памяти. Пока не отказался от нее, не работали простейшие вещи ( передача параметров в процедуру, циклы )... smile3046.gif
Go to the top of the page
 
+Quote Post
bekor
сообщение Jan 14 2011, 10:12
Сообщение #22


Участник
*

Группа: Участник
Сообщений: 66
Регистрация: 28-06-09
Пользователь №: 50 704



huge модели там нету
там только small, medium и large

уауууууу нашел заводской пример для SDRAM в папке с компилятором yeah.gif
ща попробую разобраться...


--------------------
1 километр = 1024 метр
Go to the top of the page
 
+Quote Post
bekor
сообщение Jan 14 2011, 12:16
Сообщение #23


Участник
*

Группа: Участник
Сообщений: 66
Регистрация: 28-06-09
Пользователь №: 50 704



разобрался rolleyes.gif
Код
/* External memory >64k write function */
void mem_write(unsigned long addr, unsigned char data)
{
unsigned char s,r;
s=SREG;
#asm("cli")
r=RAMPX;
RAMPX=((unsigned char *) &addr)[2];
*((unsigned char*) addr)=data;
RAMPX=r;
SREG=s;
}

/* External memory >64k read function */
unsigned char mem_read(unsigned long addr)
{
unsigned char s,r,data;
s=SREG;
#asm("cli")
r=RAMPX;
RAMPX=((unsigned char *) &addr)[2];
data=*((unsigned char*) addr);
RAMPX=r;
SREG=s;
return data;
}

работает !

но скорость чтения и записи не очень радует.
максимальная скорость получаеться примерно 100КБ/с при минимальных задержках в настройках EBI

это нормально или можно добиться большей скорости ?

Сообщение отредактировал bekor - Jan 14 2011, 12:19


--------------------
1 километр = 1024 метр
Go to the top of the page
 
+Quote Post
KKV2003
сообщение Jan 17 2011, 04:01
Сообщение #24


Участник
*

Группа: Участник
Сообщений: 30
Регистрация: 11-02-08
Пользователь №: 34 931



Цитата(bekor @ Jan 14 2011, 18:16) *
разобрался rolleyes.gif
Код
/* External memory >64k write function */

}

работает !

но скорость чтения и записи не очень радует.
максимальная скорость получаеться примерно 100КБ/с при минимальных задержках в настройках EBI

это нормально или можно добиться большей скорости ?

Вообще чтение из SDRAM происходит примерно за 7-8 тактов периферийной шины. А уж ее скорость задается пользователем. Если ядро запустить на 32 МГц и использовать удвоение частоты периферийной шины, то SDRAM будет работать на 64 МГц. И на чтение будет уходить порядка 100-150 нСек, что весьма не плохо.
"Курите" документацию по генераторам xMega - там много интересного. Свой проект я "выкурил" из этого атмеловского примера...

Сообщение отредактировал KKV2003 - Jan 17 2011, 04:07
Go to the top of the page
 
+Quote Post
bekor
сообщение Jan 17 2011, 06:53
Сообщение #25


Участник
*

Группа: Участник
Сообщений: 66
Регистрация: 28-06-09
Пользователь №: 50 704



Спасибо,
буду разбираться, хотя у меня и сейчас 32MHz


--------------------
1 километр = 1024 метр
Go to the top of the page
 
+Quote Post
bekor
сообщение Jan 17 2011, 21:42
Сообщение #26


Участник
*

Группа: Участник
Сообщений: 66
Регистрация: 28-06-09
Пользователь №: 50 704



вот настроил процессор на 32МГц а периферию на 64МГц
скорость работы SDRAM поднялась с 100КБ/с до 160КБ/с
но всеравно мало...
мне нужно хотябы 500КБ/с

что еще можно придумать ?

и еше вопрос, почему перед чтением в этих функциях глобально запрешаются прерывания ?
нельзя ли как то без этого, а то это будет мишать основной программе.



ууу разобрался [CENSORED] 08.gif
вся проблема была в том что основное времья жрало не само чтение а вызов функции чтения,
вынул эти строки из функции и прям в цикл в место вызова запихнул и скорость поднялась до 580КБ/с

теперь осталось разобраться с глобальным отключением прерываний,
непонятно зачем оно вообше нужно если обращение к SDRAM производиться апаратными средствами EBI ?

Сообщение отредактировал IgorKossak - Jan 17 2011, 22:12
Причина редактирования: Последнее предупреждение


--------------------
1 километр = 1024 метр
Go to the top of the page
 
+Quote Post
KKV2003
сообщение Jan 18 2011, 10:44
Сообщение #27


Участник
*

Группа: Участник
Сообщений: 30
Регистрация: 11-02-08
Пользователь №: 34 931



Поздравляю с успехом. А с прерываниями вряд-ли подскажу, ибо их аппаратным доступом не пользуюсь... Может доку их "докурить"? blush.gif
Go to the top of the page
 
+Quote Post
bekor
сообщение Jan 18 2011, 18:26
Сообщение #28


Участник
*

Группа: Участник
Сообщений: 66
Регистрация: 28-06-09
Пользователь №: 50 704



спасибо, rolleyes.gif
с прерыванием тоже разбирусь как нибудь,
точнее пока что проблем не выявилось с этим
пока все нормально работает...

Сообщение отредактировал bekor - Jan 18 2011, 18:28


--------------------
1 километр = 1024 метр
Go to the top of the page
 
+Quote Post
bekor
сообщение Feb 4 2011, 12:49
Сообщение #29


Участник
*

Группа: Участник
Сообщений: 66
Регистрация: 28-06-09
Пользователь №: 50 704



возможно ли писать этот кусок кода на ассемблере чтобы уменьшить время его выполнения ?
Код
unsigned char s,r,data;

s=SREG;
#asm("cli")
r=RAMPX;
RAMPX=((unsigned char *) &addr)[2];
data=*((unsigned char*) addr);
RAMPX=r;
SREG=s;


--------------------
1 километр = 1024 метр
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Feb 6 2011, 09:01
Сообщение #30


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(bekor @ Feb 4 2011, 15:49) *
возможно ли писать этот кусок кода на ассемблере чтобы уменьшить время его выполнения ?
Код
unsigned char s,r,data;

s=SREG;
#asm("cli")
r=RAMPX;
RAMPX=((unsigned char *) &addr)[2];
data=*((unsigned char*) addr);
RAMPX=r;
SREG=s;


Возможно всё. Что за компилятор?
Можно ассемблерную вставку написать, либо в отдельном nnn.S файле написать асмовую функцию.


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post

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

 


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


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