Перейти к содержанию
    

CodeVisionAVR :rolleyes:

тогда асмовые вставки выглядят примерно так:

    #asm
       ld   r30,y+
       ld   r31,y+
       adiw r30,0
    #endasm

Напишите то что нужно Вам и будет счастье...

 

Вы с asm для AVR знакомы?

 

http://www.atmel.com/dyn/resources/prod_do...nts/doc0856.pdf

http://www.atmel.com/dyn/resources/prod_do...nts/doc1022.pdf

http://www.avr-asm-download.de/beginner_en.pdf

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

возможно ли писать этот кусок кода на ассемблере чтобы уменьшить время его выполнения ?

Может для начала посмотреть как на асме выглядят эти процедуры после кодевижона.

И тогда подумать можно ли их ускорить.

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

Я тоже не понимаю зачем прерывания запрещать.

Возможно для того чтобы эти фукции были атомарны и также как LDS,STS не прерывались.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Напишите то что нужно Вам и будет счастье...

хочу читать байт по заданному адресу с SDRAM.

Вы с asm для AVR знакомы?

К сожалению с ASM не дружу.

как на асме выглядят эти процедуры после кодевижона

Вот это

         sx1=SREG;
         #asm("cli")
         rx1=RAMPX;
         RAMPX=((unsigned char *) &addr_a1)[2];
         vdac_a1=*((unsigned char*) addr_a1);
         RAMPX=rx1;
         SREG=sx1;
         addr_a1++;

компиль превратил в это:

 

;         sx1=SREG;
_0x84:
    IN   R3,63
;         #asm("cli")
    cli
;         rx1=RAMPX;
    IN   R2,57
;         RAMPX=((unsigned char *) &addr_a1)[2];
    __GETB1MN _addr_a1,2
    OUT  0x39,R30
;         vdac_a1=*((unsigned char*) addr_a1);
    LDS  R26,_addr_a1
    LDS  R27,_addr_a1+1
    LD   R13,X
;         RAMPX=rx1;
    OUT  0x39,R2
;         SREG=sx1;
    OUT  0x3F,R3
;         addr_a1++;
    LDI  R26,LOW(_addr_a1)
    LDI  R27,HIGH(_addr_a1)
    CALL __GETD1P_INC
    __SUBD1N -1
    CALL __PUTDP1_DEC

Изменено пользователем bekor

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот это

.

компиль превратил в это:

.

Мдаааа...

Лишний раз убедился что если нужно быстродействие нужно на асме писать.

Помочь это ускорить не смогу т.к. не знаком с кодевижоном и никогда не писал на СИ для мк.

 

З.Ы. А вот это макросы чтоли?

__GETB1MN _addr_a1,2

__SUBD1N -1

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Сейчас вожусь с тем же самым. По моему твёрдому убеждению после прокуренной доки на эксмегу, и закупленных непонятно зачем на радиорынке SDRAM планок с 8ми и 16 битными микросхемами, нашел тайминги в доке на эксмегу. там четко показано последовательное вычитывание двух тетрад по одному адресу. А значит, при подключении 8ми битной микросхемы, траблов не будет, но и работать не будет тоже. т.к. вместо двух тетрад, расположенных по одному адресу будут вычитываться два последовательных адреса. За сим возня с 8ми и 16 битными кристаллами была отложена. Закупил за бугром 100 штук MT48LC32M4A2-7EG. Это именно то, что нужно, все 128 кбит при 4х разрядах данных. Щас как раз собираю макет. Кстаит, не только я применил эту память, вот эти ребятки тоже :

http://alvidi.de/avr_xmodul_V2_0_en.html

но у них пол памяти только, потому что 16 микросхема.

Кстати они весьма любезно выложили и схему :

http://alvidi.de/data_sheets/avr_xschematic_V2_0.pdf

Успехов, коллеги.

 

ЗЫ памятью могу поделиться. 5$/шт, остправлю в любой город куда ходят поезда из Запорожья. Без проблем скажем по 10 штучек, кому нужно. Мне пока столько не выработать. Пишите, звоните, если что +380-6666666-82 Михаил.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Добрый день. У меня дополнительный вопрос по работе со SDRAM.

 

Стоит связка ATxmega128A1+MT48LC16M4A2P-75:G. Тесты прошли нормально, память с контроллером работает. Однако, когда контроллер при отладке попадает в breakpoint, и находится в стопе какое-то время, содержимое SDRAM разрушается. Компилятор и отладчик от ИАРа. Знает ли кто-нибудь, есть ли возможность как-то настроить отладчик, чтобы даже в стопе от EBI шли команды refresh на SDRAM? А то задолбался, чес-слово! К тому же думаю, что на ARM'ах, которые предназначены для работы со SDRAM, эта проблема ну уж точно должна была быть решена

 

Спасибо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Сильно сомневаюсь, чтобы можно было бы тормознуть процессор с сохранением работоспособности памяти если это не заложено автоматически. Когда к памяти не производится обращение, то на нее можно ( нужно ) подавать команду SelfRefresh, то есть самостоятельной регенерации. В этом режиме ей даже тактовых импульсов подавать не надо. Но вот как действует EBI-контроллер - я не знаю совершенно.

 

Есть подозрение, что можно вручную контроллеру памяти указывать перейти в режим SelfRefresh - тогда даже если проц тормознется, то содержимое оперативки должно сохраняться. Хотя пока наши люди такой возможности не нашли. Да и отладчиком пока xMeg-у не мучили. Может и мы с таким столкнемся. Может быть Вам тоже не тормозить процессор - использовать другие методы отладки?

 

P.S. При работе с SDRAM без использования EBI таких проблем, мне кажется, не будет. Команду можно подать и вручную. Разве что тормознется в процессе обращения к памяти, ДО команды SelfRefresh.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Судя по справке AVR Studio 5 в JTAGICE mkII и 3 кое-что предусмотрено для регенерации SDRAM во время останова:

 

XMEGA OCD

OCD and clocking

 

When the MCU enters stopped mode, the OCD clock is used as MCU clock. The OCD clock is either the JTAG TCK if the JTAG interface is being used, or the PDI_CLK if the PDI interface is being used.

 

The JTAGICE mkII does not offer a variable clock rate for XMEGA targets.

 

SDRAM refresh in stopped mode

 

When the OCD is in stopped mode, the MCU is clocked by the PDI or JTAG clock, as described in the paragraph above. Since nothing is known of this frequency by the debugger or OCD, a low refresh period (0x10) is automatically used. This value can't be changed by the user.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В AppNote 1312 нашел штуку, которая напрямую, конечно, не подойдет, но, быть может, окажется полезной.

 

2.5 SDRAM Refresh Considerations

 

...

 

When in sleep mode and the clock to the EBI module is stopped, it is possible to enter Self-refresh mode for the SDRAM module. To enable Self-refresh, set the SDRAM Self-refresh Enable bit (SDSREN) in Control Register B (CTRLB) for Chip Select block 3. Note that it is not possible to access the SDRAM when in Self-refresh mode.

Получится, конечно, полный изврат, но можно перед потенциальной точкой останова записать этот бит. Вопрос только в том, сколько времени требуется EBI, чтобы выполнить эту операцию.

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...