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

TMS320VC5502 Как получить 4x32bit передачу?

Как настроить EMIF (в TMS320VC5502), чтобы он передавал четыре 32-х битных слова подряд при записи/чтении в/из памяти? Используется SBSRAM. Сигнал READY заведен на единицу. Какими командами надо делать передачу?

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


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

Как настроить EMIF (в TMS320VC5502), чтобы он передавал четыре 32-х битных слова подряд при записи/чтении в/из памяти? Используется SBSRAM. Сигнал READY заведен на единицу. Какими командами надо делать передачу?

 

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

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


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

Мне говорили что на 5510 это работает, но в нем есть настройка частоты с которой проц будет гнать данные на EMIF, а в 5502 эти поля в глобальном регистре EMIF убраны.

2*32bit у меня получается тока на запись при включенном Write Posting, а на чтение только 1*32bit, а мне этого мало, читать надо хотя бы в 2 раза быстрее. Играет роль какие команды используются при чтении?

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

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


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

Мне говорили что на 5510 это работает, но в нем есть настройка частоты с которой проц будет гнать данные на EMIF, а в 5502 эти поля в глобальном регистре  EMIF убраны.

  2*32bit у меня получается тока на запись при включенном Write Posting, а на чтение только 1*32bit, а мне этого мало, читать надо хотя бы в 2 раза быстрее. Играет роль какие команды используются при чтении?

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

 

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).

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


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

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;

}

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


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

Подскажи плиз, как обрабатывать прерывания если несколько обработчиков весит (одно прерывание по завершении DMA, второе при заполнении входного FIFO).

При срабатывание второго я запускаю DMA для вычитывания FIFO. А прерывание от DMA пока пустое. Осциллографом видно что прерывание от FIFO приходит но в обработчик заходит и выходит тока 1 раз. Может там какие-нибудь нюансы я не учитываю при написании самого обработчика?

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


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

Извините немного не в тему: помогите найти русское описание к TMS320VC5502

 

Etogo dumayu net, on poka chto v principe nevenkiy... V lyubom sluchae luchshe ego rodnie.

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


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

Входное FIFO размерностью 4К слов, как только оно заполняется (4K - 100) срабатывает прерывание и в обработчике запускается DMA, после срабатывания прерывания от DMA, процессор должен обработать данные и выкинуть их в выходное FIFO. Данные во входное FIFO идут непрерывно, но скорость поступления примерно в 2-3 раза ниже чем скорость работы DMA.

 

Касательно описания на русском у меня нет, я использую документацию с Texas Instruments http://focus.ti.com/docs/prod/folders/prin...s320vc5502.html

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


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

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.

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


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

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

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

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

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

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

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

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

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

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