bekor 0 February 6, 2011 Posted February 6, 2011 · Report post Возможно всё. Что за компилятор? CodeVisionAVR :rolleyes: Quote Share this post Link to post Share on other sites More sharing options...
demiurg_spb 0 February 6, 2011 Posted February 6, 2011 · Report post 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 Quote Share this post Link to post Share on other sites More sharing options...
zombi 0 February 6, 2011 Posted February 6, 2011 · Report post возможно ли писать этот кусок кода на ассемблере чтобы уменьшить время его выполнения ? Может для начала посмотреть как на асме выглядят эти процедуры после кодевижона. И тогда подумать можно ли их ускорить. и еше вопрос, почему перед чтением в этих функциях глобально запрешаются прерывания ? Я тоже не понимаю зачем прерывания запрещать. Возможно для того чтобы эти фукции были атомарны и также как LDS,STS не прерывались. Quote Share this post Link to post Share on other sites More sharing options...
bekor 0 February 7, 2011 Posted February 7, 2011 (edited) · Report post Напишите то что нужно Вам и будет счастье... хочу читать байт по заданному адресу с 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 Edited February 7, 2011 by bekor Quote Share this post Link to post Share on other sites More sharing options...
zombi 0 February 8, 2011 Posted February 8, 2011 · Report post Вот это . компиль превратил в это: . Мдаааа... Лишний раз убедился что если нужно быстродействие нужно на асме писать. Помочь это ускорить не смогу т.к. не знаком с кодевижоном и никогда не писал на СИ для мк. З.Ы. А вот это макросы чтоли? __GETB1MN _addr_a1,2 __SUBD1N -1 Quote Share this post Link to post Share on other sites More sharing options...
UraGun 0 March 1, 2011 Posted March 1, 2011 · Report post Сейчас вожусь с тем же самым. По моему твёрдому убеждению после прокуренной доки на эксмегу, и закупленных непонятно зачем на радиорынке 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 Михаил. Quote Share this post Link to post Share on other sites More sharing options...
korobov_michael 0 March 3, 2011 Posted March 3, 2011 · Report post Добрый день. У меня дополнительный вопрос по работе со SDRAM. Стоит связка ATxmega128A1+MT48LC16M4A2P-75:G. Тесты прошли нормально, память с контроллером работает. Однако, когда контроллер при отладке попадает в breakpoint, и находится в стопе какое-то время, содержимое SDRAM разрушается. Компилятор и отладчик от ИАРа. Знает ли кто-нибудь, есть ли возможность как-то настроить отладчик, чтобы даже в стопе от EBI шли команды refresh на SDRAM? А то задолбался, чес-слово! К тому же думаю, что на ARM'ах, которые предназначены для работы со SDRAM, эта проблема ну уж точно должна была быть решена Спасибо. Quote Share this post Link to post Share on other sites More sharing options...
KKV2003 0 March 3, 2011 Posted March 3, 2011 · Report post Сильно сомневаюсь, чтобы можно было бы тормознуть процессор с сохранением работоспособности памяти если это не заложено автоматически. Когда к памяти не производится обращение, то на нее можно ( нужно ) подавать команду SelfRefresh, то есть самостоятельной регенерации. В этом режиме ей даже тактовых импульсов подавать не надо. Но вот как действует EBI-контроллер - я не знаю совершенно. Есть подозрение, что можно вручную контроллеру памяти указывать перейти в режим SelfRefresh - тогда даже если проц тормознется, то содержимое оперативки должно сохраняться. Хотя пока наши люди такой возможности не нашли. Да и отладчиком пока xMeg-у не мучили. Может и мы с таким столкнемся. Может быть Вам тоже не тормозить процессор - использовать другие методы отладки? P.S. При работе с SDRAM без использования EBI таких проблем, мне кажется, не будет. Команду можно подать и вручную. Разве что тормознется в процессе обращения к памяти, ДО команды SelfRefresh. Quote Share this post Link to post Share on other sites More sharing options...
AlexG_changed 0 March 3, 2011 Posted March 3, 2011 · Report post Судя по справке 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. Quote Share this post Link to post Share on other sites More sharing options...
korobov_michael 0 March 4, 2011 Posted March 4, 2011 · Report post В 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, чтобы выполнить эту операцию. Quote Share this post Link to post Share on other sites More sharing options...