Dru 0 4 марта, 2005 Опубликовано 4 марта, 2005 · Жалоба Как настроить EMIF (в TMS320VC5502), чтобы он передавал четыре 32-х битных слова подряд при записи/чтении в/из памяти? Используется SBSRAM. Сигнал READY заведен на единицу. Какими командами надо делать передачу? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Armen 0 4 марта, 2005 Опубликовано 4 марта, 2005 · Жалоба Как настроить EMIF (в TMS320VC5502), чтобы он передавал четыре 32-х битных слова подряд при записи/чтении в/из памяти? Используется SBSRAM. Сигнал READY заведен на единицу. Какими командами надо делать передачу? <{POST_SNAPBACK}> Privet. Tut delo ne v nastroykax, a v tom chto sam emif imeet ochen nizkuyu proizvoditelnost. Daje pri vernix nastroykax burst u nego 2X32. vot tebe siilka: http://focus.ti.com/docs/apps/catalog/reso...ctName=spra924a zdes naydesh vse otveti po teme proizvoditelnosti emifa i cache. Ya sam namuchalsya, pravda u menya SDRAM no vobshem eto dela ne menyaet. Vse vozmojnie testi i proverki proizvedeni, kstati kak info... u 5501 toje 32-x bitniy emif Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Dru 0 4 марта, 2005 Опубликовано 4 марта, 2005 · Жалоба Мне говорили что на 5510 это работает, но в нем есть настройка частоты с которой проц будет гнать данные на EMIF, а в 5502 эти поля в глобальном регистре EMIF убраны. 2*32bit у меня получается тока на запись при включенном Write Posting, а на чтение только 1*32bit, а мне этого мало, читать надо хотя бы в 2 раза быстрее. Играет роль какие команды используются при чтении? i-cache это только для инструкций, если программа во внешней памяти, а мне надо считывать данные, и записывать обработанные. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Armen 0 4 марта, 2005 Опубликовано 4 марта, 2005 · Жалоба Мне говорили что на 5510 это работает, но в нем есть настройка частоты с которой проц будет гнать данные на EMIF, а в 5502 эти поля в глобальном регистре EMIF убраны. 2*32bit у меня получается тока на запись при включенном Write Posting, а на чтение только 1*32bit, а мне этого мало, читать надо хотя бы в 2 раза быстрее. Играет роль какие команды используются при чтении? i-cache это только для инструкций, если программа во внешней памяти, а мне надо считывать данные, и записывать обработанные. <{POST_SNAPBACK}> EMIF u 5510 serii znachitelno luchshe chem u 5502/5501, tam ogromnaya raznica po skoroti dostupa k pamyati. Esli ti prosmotrel link to tam na poslednix stranicax privedeni skorosti dostupov k pamyati u 5502 i est sravnenie s 5510. Tormoz zdes imenno v EMIFe. Zadacha ponyatna. Da imeet znachenie chto ti chitaesh i chto pishesh, skajem esli ti chitaesh iz pamyati short i long (16 bit, 32 bita) to skorost u tebya budet odinakowoy, t.e. esli u tebya copy masivov to luchshe delat kak long (MOV dbl(*AR0), ...), viigrivaesh v dva raza. Emif ustroen takim obrazom chto esli ti osushestvlyaesh 16 bitniy dostup, to on vse ravno k pamyati osushestvlyaetsya 32 bitniy dostup i chitaet srazu 32 bita a ne 16. Esli u tebya time kritichnie bloki (skajem vocoderi), to luchshe dannie peretashit v internal memory, tam s nimi rabotat a zatem obratno v external. poskolku cherez processor obrashenie k pamyati vsegda odinochnoe to prosto kommandami tipa mov uvelichit skorost k pamyati nelzya, zato eto mojno sdelat pri pomoshi DMA. pri vernix nastroykax DMA osushestvlyaet burst dostup k pamyati. Chto minimum v dva raza bistree chem prosto mov dbl(*ARx),... Pri pomoshi DMA mojno dobitsya prilichnix skorostey. Vobshet tut nujno sdelat chto vrode programnogo keshirovaniya. Da i eshe ne zabud' pro nastroyku skorosti sistemnix clocko-ov, otkuda beryet clock tvoy emif(3). Tam po defaultu delitel po moemu 4 t.e. esli core clock 200 MHz emiv->50 . Postav delitel na 2.... (100MHz emif). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Dru 0 5 марта, 2005 Опубликовано 5 марта, 2005 · Жалоба Да, при запуске передачи через DMA скорость поднялась существенно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Armen 0 5 марта, 2005 Опубликовано 5 марта, 2005 · Жалоба poprobuy eti nastroyki kstati u tebya ved DMA copy, okonchanie processa copy mojno uznat po interruptu #define DMACSDP_DSTBEN_DISABLED (0 << 14) #define DMACSDP_DSTBEN_ENABLED (2 << 14) #define DMACSDP_DSTPACK_DISABLED (0 << 13) #define DMACSDP_DSTPACK_ENABLED (1 << 13) #define DMACSDP_DST_DARAM0 (0 << 9) #define DMACSDP_DST_DARAM1 (1 << 9) #define DMACSDP_DST_EMIF (2 << 9) #define DMACSDP_DST_PEREPH (3 << 9) #define DMACSDP_SRCBEN_DISABLED (0 << 7) #define DMACSDP_SRCBEN_ENABLED (2 << 7) #define DMACSDP_SRCPACK_DISABLED (0 << 6) #define DMACSDP_SRCPACK_ENABLED (1 << 6) #define DMACSDP_SRC_DARAM0 (0 << 2) #define DMACSDP_SRC_DARAM1 (1 << 2) #define DMACSDP_SRC_EMIF (2 << 2) #define DMACSDP_SRC_PEREPH (3 << 2) #define DMACSDP_DATATYPE_8BIT (0 << 0) #define DMACSDP_DATATYPE_16BIT (1 << 0) #define DMACSDP_DATATYPE_32BIT (2 << 0) //CHANNEL #1 REGISTERS #define DMA_CSDP1_0C20 0x0C20 #define DMA_CCR1_0C21 0x0C21 #define DMA_CICR1_0C22 0x0C22 #define DMA_CSR1_0C23 0x0C23 #define DMA_CSSA_L1_0C24 0x0C24 #define DMA_CSSA_U1_0C25 0x0C25 #define DMA_CDSA_L1_0C26 0x0C26 #define DMA_CDSA_U1_0C27 0x0C27 #define DMA_CEN1_0C28 0x0C28 #define DMA_CFN1_0C29 0x0C29 #define DMA_CSFI1_0C2A 0x0C2A #define DMA_CSEI1_0C2B 0x0C2B #define DMA_CSAC1_0C2C 0x0C2C #define DMA_CDAC1_0C2D 0x0C2D #define DMA_CDEI1_0C2E 0x0C2E #define DMA_CDFI1_0C2F 0x0C2F #define IO_PORT(a) (*( (ioport unsigned short*)(a))) void memcpyDMAInit() { //DMA receive port configuration for background memory copy //CHANNEL #1 REGISTERS IO_PORT(DMA_CFN1_0C29) = 1; IO_PORT(DMA_CICR1_0C22) = 0x0008; IO_PORT(DMA_CSFI1_0C2A) = 0x0000; IO_PORT(DMA_CSEI1_0C2B) = 0x0000; IO_PORT(DMA_CSAC1_0C2C) = 0x0000; IO_PORT(DMA_CDAC1_0C2D) = 0x0000; IO_PORT(DMA_CDEI1_0C2E) = 0x0000; IO_PORT(DMA_CDFI1_0C2F) = 0x0000; } void memcpyDMA( void *pDst, void *pSrc, short size ) { short CSDP; IO_PORT(DMA_CCR1_0C21) = 0x0000; IO_PORT(DMA_CSSA_L1_0C24) = BYTE_ADDR_LO(pSrc); IO_PORT(DMA_CSSA_U1_0C25) = BYTE_ADDR_HI(pSrc); IO_PORT(DMA_CDSA_L1_0C26) = BYTE_ADDR_LO(pDst); IO_PORT(DMA_CDSA_U1_0C27) = BYTE_ADDR_HI(pDst); IO_PORT(DMA_CEN1_0C28) = size; CSDP = DMACSDP_DATATYPE_16BIT | DMACSDP_DSTBEN_ENABLED | DMACSDP_DSTPACK_ENABLED | DMACSDP_SRCBEN_ENABLED | DMACSDP_SRCPACK_ENABLED; if( ((unsigned long)pDst) >> 15 == 0 ) CSDP |= DMACSDP_DST_DARAM1; else CSDP |= DMACSDP_DST_EMIF; if( ((unsigned long)pSrc) >> 15 == 0 ) CSDP |= DMACSDP_SRC_DARAM0; else CSDP |= DMACSDP_SRC_EMIF; IO_PORT(DMA_CSDP1_0C20) = CSDP; IO_PORT(DMA_CCR1_0C21) = 0x50c0; } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Dru 0 10 марта, 2005 Опубликовано 10 марта, 2005 · Жалоба Подскажи плиз, как обрабатывать прерывания если несколько обработчиков весит (одно прерывание по завершении DMA, второе при заполнении входного FIFO). При срабатывание второго я запускаю DMA для вычитывания FIFO. А прерывание от DMA пока пустое. Осциллографом видно что прерывание от FIFO приходит но в обработчик заходит и выходит тока 1 раз. Может там какие-нибудь нюансы я не учитываю при написании самого обработчика? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Armen 0 10 марта, 2005 Опубликовано 10 марта, 2005 · Жалоба dlya chego nujen interrupt ot FIFO. V principe interrupt zaversheniya DMA vpolne dostatochen. Mojet ya zadachu ne vpolne korrektno predstavlyayu? <_< Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DimonD 0 10 марта, 2005 Опубликовано 10 марта, 2005 · Жалоба Извините немного не в тему: помогите найти русское описание к TMS320VC5502 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Armen 0 11 марта, 2005 Опубликовано 11 марта, 2005 · Жалоба Извините немного не в тему: помогите найти русское описание к TMS320VC5502 <{POST_SNAPBACK}> Etogo dumayu net, on poka chto v principe nevenkiy... V lyubom sluchae luchshe ego rodnie. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Dru 0 11 марта, 2005 Опубликовано 11 марта, 2005 · Жалоба Входное FIFO размерностью 4К слов, как только оно заполняется (4K - 100) срабатывает прерывание и в обработчике запускается DMA, после срабатывания прерывания от DMA, процессор должен обработать данные и выкинуть их в выходное FIFO. Данные во входное FIFO идут непрерывно, но скорость поступления примерно в 2-3 раза ниже чем скорость работы DMA. Касательно описания на русском у меня нет, я использую документацию с Texas Instruments http://focus.ti.com/docs/prod/folders/prin...s320vc5502.html Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Armen 0 11 марта, 2005 Опубликовано 11 марта, 2005 · Жалоба FIFO u tebya kakoe to otdelnoe ustroystvo? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Dru 0 11 марта, 2005 Опубликовано 11 марта, 2005 · Жалоба Да отдельная микросхема памяти, организованная как FIFO. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Armen 0 14 марта, 2005 Опубликовано 14 марта, 2005 · Жалоба Ok ponyatno. Ti pravilno skonfiguriroval registri IER0 i IER1? Mojet u tebya prerivanie prixodit ( mojesh proverit po regitram IFR0, IFR1 ) No oni zamaskirovani IER0 ili IER1, poetomu i interrupta ne voznikaet. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Dru 0 15 марта, 2005 Опубликовано 15 марта, 2005 · Жалоба Спасибо. Вроде нашел, пришлось вручную править таблицу векторов. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться