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

Всем привет.

 

Сигнальниками раньше не занимался, больше ПЛИС. Но СИ и еклипс мне знакомы.

Сделал плату, на ней имеется ПЛИС и OMAP L138.

Нужно написать простую программку для проверки работоспособности платы:

- EMIF, подключенный к ПЛИС

- UPP, подключенный к ПЛСИ

- чтение/запись DDR2, подключенной к сигнальнику

- помаргать светодиодиками.

 

Что-то не могу найти простых толковых примеров, Quick Start или еще чего. Ткните куда-нибудь...

 

"хело ворлд" в Code Composer Studio v5 получил, т.е. jtag работает, проц запускается.

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


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

...Что-то не могу найти простых толковых примеров, Quick Start или еще чего. Ткните куда-нибудь...

Возможно, Вам будут полезны примеры из StarterWare.

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


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

Почитал доку на upp - там гора регистров, может проще под bios драйвера скачать и пойти таким путем?

Про биос есть дока толковая?

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


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

Почитал доку на upp - там гора регистров

UPP - пожалуй, один из самых простых модулей. Окучить его в минимальном виде можно буквально десятком строк на "C".

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


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

Дык есть примеры-то?

Да даже проще - я не понимаю как светодиодами через GPIO помаргать. Скачивал какие-то примеры - но они не компилятся.

 

Начнем с простого GPIO - как настроить на выход и изменять значение?

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


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

Начнем с простого GPIO - как настроить на выход и изменять значение?

1. Включить GPIO в PSC

2. Настроить соответствующий PINMUX

3. Настроить пин на вывод и вывести значение

 

Примерно так же, как и в любом МК. Только на первый взгляд все кажется монструозным.

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


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

1. Включить GPIO в PSC

2. Настроить соответствующий PINMUX

3. Настроить пин на вывод и вывести значение

 

Уже становится понятнее. А что такое PSC, есть для вышеперечисленных пунктов подробный порядок действий?

 

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


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

Уже становится понятнее. А что такое PSC, есть для вышеперечисленных пунктов подробный порядок действий?

PSC - Power and Sleep Controller.

 

Подробный порядок действий для GPIO:

1. PSC

1.1. Записываем 0x03 (Enable State) в регистр MDCTL3 модуля PSC1 (MDCTL3 @ PSC1 - GPIO, привязки даны в документации на PSC)

1.2. Ставим GO0 в регистре PTCMD модуля PSC1, вызывая тем самым смену состояния

1.3. Дожидаемся сброса бита GOSTAT0 в регистре PTSTAT

2. PINMUX

2.1. Просто выставляем нужное значение в соответствующем поле PINMUX

3. GPIO

3.1. Убеждаемся, что ID модуля читается, т.е. п.1 отработали правильно

3.2. Сбрасываем нужный бит в DIRxx, переводя тем самым пин на выход

3.3. Пишем SET_DATAxx / CLR_DATAxx, наблюдаем изменение состояния пина

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


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

Во, что-то более-менее понятное в StraterWare вижу.

Скомпилил пример. А когда создаю свой проект, где в проекте указать --include path?

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


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

Когда ARM ядро запускаю, все нормально. Прога дебажится через SAU-510.

Однако когда создаю проект под DSP ядро, при попытке подключиться дает ошибку:

 

Error connecting to the target:
(Error -1180 @ 0x0)
Device is held in reset. Take the device out of reset, and retry the operation.
(Emulation package 5.0.747.0)

 

На ногу RESETn сигнальника с плисины я подаю короткий ресет, без этого и арм не запускается.

Подскажите, где копать - в железе или в настройках проекта?

 

Проверили на отладке - ведет себя также

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


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

DSP нужно включить со стороны ARM'а - он выключается почти сразу после старта.

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


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

Охренеть.

 

По примерам из StarterWare:

   PSCModuleControl(SOC_PSC_0_REGS, HW_PSC_DSP, PSC_POWERDOMAIN_ALWAYS_ON,
             PSC_MDCTL_NEXT_ENABLE);

И заливаю это в АРМ, все верно?

 

А как положить это в ПЗУ, хотя бы M25P64, подключенное к сигнальнику? А то не могу же я, не прекратив выполнение программы арма началь отладку дсп...

 

 

Но кроме того, вернусь к изначальной теме: мне надо помыргать светодиодом.

На основе StarterWire и рекомендаций aaarrr (я только не понял че там за ID такой), написал прогу и запускаю ее под арм:

 

#include <stdio.h>

#include "gpio.h"
#include "psc.h"

#include "soc_OMAPL138.h"
#include "lcdkOMAPL138.h"

#include "hw_syscfg0_OMAPL138.h"

#include "hw_types.h"

/*****************************************************************************
**                       MACRO DEFINITION
*****************************************************************************/
/* Pin Multiplexing bit mask to select GP0[0] pin. */
#define PINMUX1_GPIO0_0_ENABLE    (SYSCFG_PINMUX1_PINMUX1_27_24_GPIO0_1  << SYSCFG_PINMUX1_PINMUX1_27_24_SHIFT)

/****************************************************************************/
/*              LOCAL FUNCTION PROTOTYPES                                   */
/****************************************************************************/
static void Delay(volatile unsigned int delay);

/****************************************************************************/
/*              GLOBAL VARIABLES                                            */
/****************************************************************************/

/****************************************************************************/
/*             LOCAL FUNCTION DEFINITIONS                                   */
/****************************************************************************/




//#include <OMAPL138_common.h>
/*
* hello.c
*/
void main(void) {
    printf("Hello World!\n");
    //CSL_FINS(gpioRegs->BANK[GP0].DIR, GPIO_DIR_DIR12, CSL_GPIO_DIR_DIR_OUT);
    unsigned int savePinmux = 0;


    /* The Local PSC number for GPIO is 3. GPIO belongs to PSC1 module.*/
   PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_GPIO, PSC_POWERDOMAIN_ALWAYS_ON,
             PSC_MDCTL_NEXT_ENABLE);

   PSCModuleControl(SOC_PSC_0_REGS, HW_PSC_DSP, PSC_POWERDOMAIN_ALWAYS_ON,
             PSC_MDCTL_NEXT_ENABLE);

    /* Pin Multiplexing of pin 12 of GPIO Bank 6.*/
//   GPIOBank6Pin12PinMuxSetup();
    /*
    ** Clearing the bit in context and retaining the other bit values
    ** in PINMUX10 register.
    */
    savePinmux = (HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(1)) &
                 ~(SYSCFG_PINMUX1_PINMUX1_31_28));

    /* Setting the pins corresponding to GP4[0] in PINMUX10 register.*/
    HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(1)) =
         (PINMUX1_GPIO0_0_ENABLE | savePinmux);


    /* Sets the pin 1 (GP0[0]) as out.*/
    GPIODirModeSet(SOC_GPIO_0_REGS, 1, GPIO_DIR_OUTPUT);

    while(1)
    {
        GPIOPinWrite(SOC_GPIO_0_REGS, 1, GPIO_PIN_LOW);

        Delay(1000000);

        GPIOPinWrite(SOC_GPIO_0_REGS, 1, GPIO_PIN_HIGH);

        Delay(1000000);
    }


}

/*
** \brief  This function checks the insertion status of the MMC/SD card
**         in the device and prints related statements on the serial
**         commuincation console of the external device.
**
*/

/*
** \brief   This function can be called to generate a delay.
*/

static void Delay(volatile unsigned int delay)
{
    while(delay--);
}

 

Однако светодиод не моргает. Подпрогаммы посмотрел, вроде бы все верно (да и кто бы сомневался). Может в арм-е по-другому надо с psc что-то делать, что-то еще включить?

 

 

 

 

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


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

По примерам из StarterWare:

   PSCModuleControl(SOC_PSC_0_REGS, HW_PSC_DSP, PSC_POWERDOMAIN_ALWAYS_ON,
             PSC_MDCTL_NEXT_ENABLE);

И заливаю это в АРМ, все верно?

Со StarterWare я не знаком, но на вид верно.

 

А как положить это в ПЗУ, хотя бы M25P64, подключенное к сигнальнику? А то не могу же я, не прекратив выполнение программы арма началь отладку дсп...

Могу предложить Хитрый Способ:

1. Создаем в HEX-редакторе "бинарник" для ARM из одной инструкции "b .": 0xfe 0xff 0xff 0xea

2. Берем AISGen, ставим в нем галку "Configure PSC", разрешаем в конфигурации PSC DSP

3. Создаем загрузочный образ

Дубово, но зато просто и будет работать.

 

Но кроме того, вернусь к изначальной теме: мне надо помыргать светодиодом.

На основе StarterWire и рекомендаций aaarrr (я только не понял че там за ID такой), написал прогу и запускаю ее под арм:

...

Однако светодиод не моргает. Подпрогаммы посмотрел, вроде бы все верно (да и кто бы сомневался). Может в арм-е по-другому надо с psc что-то делать, что-то еще включить?

ID - регистр модуля GPIO. Его можно прочитать, чтобы убедиться, что клок на самом деле включен.

Подозреваю, что SYSCFG залочен (см. регистры Kick0, Kick1), поэтому запись в PINMUX не проходит.

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


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

Подозреваю, что SYSCFG залочен (см. регистры Kick0, Kick1), поэтому запись в PINMUX не проходит.

 

Пишу такую последовательность:

    HWREG (SOC_SYSCFG_0_REGS + SYSCFG0_KICK0R) = 0x83e70b13;
    HWREG (SOC_SYSCFG_0_REGS + SYSCFG0_KICK1R) = 0x95a4f1e0;

 

Эффект нулевой.

 

ID - регистр модуля GPIO

Для тупых поясните - что это такое за регистр ID модуля GPIO?

 

Попробовал прочитать пинмукс после записи в него - результат 0, несмотря на разлочивание.

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


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

Для тупых поясните - что это такое за регистр ID модуля GPIO?

Регистр REVID, 0-й адрес в пространстве модуля. Не знаю, как еще объяснить.

 

Попробовал прочитать пинмукс после записи в него - результат 0, несмотря на разлочивание.

Возможно, процессор не в привилегированном режиме находится. Попробуйте прочитать REVID SYSCFG.

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


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

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

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

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

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

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

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

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

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

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