Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: OMAP L138
Форум разработчиков электроники ELECTRONIX.ru > Цифровая обработка сигналов - ЦОС (DSP) > Сигнальные процессоры и их программирование - DSP
Страницы: 1, 2
aaarrr
Если не считать инициализации PINMUX и PSC, для запуска и начала передачи (с DMA) в UPP нужно прописать всего полдюжины регистров.
Исходники мало помогут, ибо все настройки напрямую зависят от того, какая железка прикручена с другой стороны UPP.
Поэтому лучше изложить ситуацию и задать вопросы. Интерфейс действительно очень простой.
lekintr
Цитата(aaarrr @ Nov 1 2013, 21:17) *
Поэтому лучше изложить ситуацию и задать вопросы. Интерфейс действительно очень простой.

Поддерживаю.
ASN
octobus
Как точно заметил уважаемый aaarrr исходники мало помогут, ибо все настройки напрямую зависят от того, какая железка прикручена с другой стороны UPP.
Интерфейс простой, но есть несколько тонкостей.
Во-первых, чтобы использовать на всю катушку пропускную способность UPP (а иначе зачем DMA?) лучше выделять большие массивы под окна и работать поллингом по строкам, читая соответствующее регистры. А поддержку пакетирования можно реализовать передачей тегов в первой сроке пакета, состоящего из переменного количества строк.
Во-вторых, аппаратное управление потоком работает только в одну сторону (если не ошибаюсь, по приёму от OMAP). В другую сторону оно не работает, и приходится устанавливать сигнал waits вручную из программы.
При выборе подходящего размера строки (к примеру 64 байта) потери на передачу пакетов минимальной длины будут вполне приемлемы.
octobus
Сейчас вопрос стоит не в том, что невозможно разобраться с UPP, а в том, чтобы сэкономить время на тупые эксперименты с последовательностью команд и заполнением регистров. Поэтому нужны исходники, рабочие, в которых гарантированно рабочий код на прием и передачу желательно с эффективным использованием callback'ов. К OMAP подключена ПЛИСина, поэтому вопросов с согласованием нет. ПЛИСина всегда сможет подстроиться под OMAP.
Убедительно прошу не подымать тему недельку попусту. Советы не нужны, пока, во всяком случае. Нужны исходники. Надеюсь на понимание.
ASN
octobus
Вот исходники для uboot.
Код
#define DAVINCI_GPIO_BINTEN    0x01E26008
#define DAVINCI_GPIO_BANK01    0x01E26010
#define DAVINCI_GPIO_BANK23    0x01E26038
#define DAVINCI_GPIO_BANK45    0x01E26060
#define DAVINCI_GPIO_BANK67    0x01E26088
#define DAVINCI_GPIO_BANK89 0x01E260B0

struct davinci_gpio {
    unsigned int dir;
    unsigned int out_data;
    unsigned int set_data;
    unsigned int clr_data;
    unsigned int in_data;
    unsigned int set_rising;
    unsigned int clr_rising;
    unsigned int set_falling;
    unsigned int clr_falling;
    unsigned int intstat;
};

struct davinci_gpio_bank {
    int num_gpio;
    unsigned int irq_num;
    unsigned int irq_mask;
    unsigned long *in_use;
    unsigned long base;
};

#define davinci_gpio_bank01 ((struct davinci_gpio *)DAVINCI_GPIO_BANK01)
#define davinci_gpio_bank23 ((struct davinci_gpio *)DAVINCI_GPIO_BANK23)
#define davinci_gpio_bank45 ((struct davinci_gpio *)DAVINCI_GPIO_BANK45)
#define davinci_gpio_bank67 ((struct davinci_gpio *)DAVINCI_GPIO_BANK67)
#define davinci_gpio_bank89 ((struct davinci_gpio *)DAVINCI_GPIO_BANK89)

/**************************************************************************\
* Register Overlay Structure
\**************************************************************************/
typedef struct  {
    volatile unsigned UPPID;
    volatile unsigned UPPCR;
    volatile unsigned UPDLB;
    volatile unsigned char RSVD0[4];
    volatile unsigned UPCTL;
    volatile unsigned UPICR;
    volatile unsigned UPIVR;
    volatile unsigned UPTCR;
    volatile unsigned UPISR;
    volatile unsigned UPIER;
    volatile unsigned UPIES;
    volatile unsigned UPIEC;
    volatile unsigned UPEOI;
    volatile unsigned char RSVD1[12];
    volatile unsigned UPID0;
    volatile unsigned UPID1;
    volatile unsigned UPID2;
    volatile unsigned char RSVD2[4];
    volatile unsigned UPIS0;
    volatile unsigned UPIS1;
    volatile unsigned UPIS2;
    volatile unsigned char RSVD3[4];
    volatile unsigned UPQD0;
    volatile unsigned UPQD1;
    volatile unsigned UPQD2;
    volatile unsigned char RSVD4[4];
    volatile unsigned UPQS0;
    volatile unsigned UPQS1;
    volatile unsigned UPQS2;
} CSL_UppRegs;

typedef struct  {
    volatile unsigned REVID;
    volatile unsigned char RSVD0[4];
    volatile unsigned DIEIDR0;
    volatile unsigned DIEIDR1;
    volatile unsigned DIEIDR2;
    volatile unsigned DIEIDR3;
    volatile unsigned DEVIDR0;
    volatile unsigned char RSVD1[4];
    volatile unsigned BOOTCFG;
    volatile unsigned CHIPREVIDR;
    volatile unsigned char RSVD2[16];
    volatile unsigned KICK0R;
    volatile unsigned KICK1R;
    volatile unsigned HOST0CFG;
    volatile unsigned HOST1CFG1;
    volatile unsigned char RSVD3[152];
    volatile unsigned IRAWSTAT;
    volatile unsigned IENSTAT;
    volatile unsigned IENSET;
    volatile unsigned IENCLR;
    volatile unsigned EOI;
    volatile unsigned FLTADDRR;
    volatile unsigned FLTSTAT;
    volatile unsigned char RSVD4[20];
    volatile unsigned MSTPRI0;
    volatile unsigned MSTPRI1;
    volatile unsigned MSTPRI2;
    volatile unsigned char RSVD5[4];
    volatile unsigned PINMUX0;
    volatile unsigned PINMUX1;
    volatile unsigned PINMUX2;
    volatile unsigned PINMUX3;
    volatile unsigned PINMUX4;
    volatile unsigned PINMUX5;
    volatile unsigned PINMUX6;
    volatile unsigned PINMUX7;
    volatile unsigned PINMUX8;
    volatile unsigned PINMUX9;
    volatile unsigned PINMUX10;
    volatile unsigned PINMUX11;
    volatile unsigned PINMUX12;
    volatile unsigned PINMUX13;
    volatile unsigned PINMUX14;
    volatile unsigned PINMUX15;
    volatile unsigned PINMUX16;
    volatile unsigned PINMUX17;
    volatile unsigned PINMUX18;
    volatile unsigned PINMUX19;
    volatile unsigned SUSPSRC;
    volatile unsigned CHIPSIG;
    volatile unsigned CHIPSIG_CLR;
    volatile unsigned CFGCHIP0;
    volatile unsigned CFGCHIP1;
    volatile unsigned CFGCHIP2;
    volatile unsigned CFGCHIP31;
    volatile unsigned CFGCHIP4;
} CSL_SyscfgRegs;

#define CSL_SYSCFG_0_REGS   (0x01C14000u)
#define CSL_UPP_0_REGS         (0x01E16000u)
CSL_UppRegs* uppRegs =     (CSL_UppRegs*)(CSL_UPP_0_REGS);
CSL_SyscfgRegs* sysRegs = (CSL_SyscfgRegs*)(CSL_SYSCFG_0_REGS);

void UPP_WAITB_RESET(void)
{
    davinci_gpio_bank89->clr_data |= (1<<12);   //WAIT_B off
}

void setup_UPP(void)
{
    int x;
    sysRegs->SUSPSRC &= ~(1<<4);
    //2.1.add. Transmit Clock source - from UPP_2xTXCLK pin
    sysRegs->CFGCHIP31 = 0x60;
/*     uPP Transmit Clock Selection (spruh77.pdf p.144)
CFGCHIP3_UPP_TX | CFGCHIP3_ASYNC3_CLKSRC | Transmit Clock Source
----------------------------------------------------------------
  0 (ASYNC3)    |        0 (PLL0)        |     PLL0_SYSCLK2
  0 (ASYNC3)    |        1 (PLL1)        |     PLL1_SYSCLK2
  1 (TXCLK)     |        X               |     UPP_2xTXCLK pin
*/
    //2.2 Enable clocks uPP
    // Setup Peripherals;
    // wait for UPPID to become valid after enabling module in 2
    while ( uppRegs->UPPID != 0x44231100 );

    //3. SWRST
    //wait for dma active/pending bits DB to clear
    uppRegs->UPPCR = 0x1b;

    //4. Wait at least 200 clock cycles
    udelay(100000);
    uppRegs->UPPCR = 0x0b;

    //5. Program UPP Config Reg's
    //UPCTL
    uppRegs->UPCTL = 0x07;

    //UPICR
    /* !NB
       spruh77.pdf page 1519
       33.2.6.1 Step-by-Step Procedure
       NOTE: When initializing the uPP peripheral, the uPP interface configuration
       register (UPICR) must be programmed using a single, 32-bit write. Writing
       UPICR fields one-by-one can lead to unexpected results.
    */

    uppRegs->UPICR = 0x00180020;

    //UPIVR - idle value
    uppRegs->UPIVR = 0xAC;

    //6. UPIES - Interrupt Enable

    uppRegs->UPIEC = 0xffffffff;
    uppRegs->UPIES = 0x1f1f;
    uppRegs->UPIER = 0xffffffff;

    //7. uPP peripheral Enable
    uppRegs->UPPCR = 0x0b;

    davinci_gpio_bank89->dir &= ~(1<<12);    // wait_b out

    UPP_WAITB_RESET();
}

lekintr
2ASN тоже поковыряю Ваши исходники.
octobus
О, отлично, спасибо огромнейшее за исходник. Попробую с ним разобраться. Спасибо.
octobus
В общем все пришлось писать заново, используя другие ресурсы. Форум electronix.ru ни фига мне не помог.
Собственно не очень и рассчитывал. Зато теперь... утритесь гуру sm.gif
Мне удалось запустить UPP в режиме DMA с прерываниями и загрузкой новых данных на лету.
По осциллографу видно что при размере буфера больше определенного размера пропуски пропадают.

Прикрепляю проект для CCS 5.4. Ничего не требуется, только импортировать проект. Все настроено так, что проект компилируется с любого места на винте.
UPP в проекте работает в режиме
TX канал A, RX канал B, ширина шины данных 8bit, частота CPU 300MHz, частота UPP 37.5MHz
Кроме того в проекте активирован режим Digital Loopback, поэтому чтобы данные полетели наружу надо его отключить.
Чтобы отключить надо закомментировать UPP_LOOPBACK_ENABLED
Также там включены только прерывания RX,TX чтобы включить все надо закомментить UPP_INT_TEST_ENABLED

Еще нашел ошибки в скачанном недавно с сайта Texas Instrumente Starterware для OMAPL138. У них в файле hw_upp.h неверные адреса регистров.
Будьте осторожны. В проекте эта ошибка исправлена.

Проект для OMAPL138.
ASN
octobus
Поздравляю sm.gif.
Смущает только, что при размере буфера больше определенного размера пропуски пропадают.
Поскольку обмен идёт через AXI, при изменении нагрузки SOC без правильного управления потоком пакеты могут начать снова пропадать.
А какая у Вас установившаяся скорость обмена ?
У нас тоже 8bit и частота 36,864 МГц. Всё крутиться под Linux. Пакеты переменной длины с выравниванием по границе 64 байта.
lekintr
Я посмотрел проект похоже пропадают не пакеты, или данные. Под "пропуском" скорее всего имется ввиду "время бездействия UPP"
Victor_Tr

Прикрепляю проект для CCS 5.4. Ничего не требуется, только импортировать проект. Все настроено так, что проект компилируется с любого места на винте.
UPP в проекте работает в режиме
p.h неверные адреса регистров.
Будьте осторожны. В проекте эта ошибка исправлена.

Проект для OMAPL138.
[/quote]

А можно получить Вашш проект по почте, ссылка мне недоступна
почта v i c t o r_T r o f i m o v@ m a i l. r u
octobus
жду не дождусь когда же уберут предупреждение, второй год глаза мозолит.
Пока не снимут, файлы оставлять не буду.
den_steppenwolf
Цитата(octobus @ Oct 6 2014, 08:24) *
жду не дождусь когда же уберут предупреждение, второй год глаза мозолит.
Пока не снимут, файлы оставлять не буду.

А можно мне тоже ваш проект? Буду очень признателен
почта otdel55(с о б а к а)oniip.ru
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.