torik 0 23 августа, 2012 Опубликовано 23 августа, 2012 · Жалоба Всем привет. Сигнальниками раньше не занимался, больше ПЛИС. Но СИ и еклипс мне знакомы. Сделал плату, на ней имеется ПЛИС и OMAP L138. Нужно написать простую программку для проверки работоспособности платы: - EMIF, подключенный к ПЛИС - UPP, подключенный к ПЛСИ - чтение/запись DDR2, подключенной к сигнальнику - помаргать светодиодиками. Что-то не могу найти простых толковых примеров, Quick Start или еще чего. Ткните куда-нибудь... "хело ворлд" в Code Composer Studio v5 получил, т.е. jtag работает, проц запускается. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Konst_777 0 23 августа, 2012 Опубликовано 23 августа, 2012 · Жалоба ...Что-то не могу найти простых толковых примеров, Quick Start или еще чего. Ткните куда-нибудь... Возможно, Вам будут полезны примеры из StarterWare. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
torik 0 23 августа, 2012 Опубликовано 23 августа, 2012 · Жалоба Почитал доку на upp - там гора регистров, может проще под bios драйвера скачать и пойти таким путем? Про биос есть дока толковая? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 68 23 августа, 2012 Опубликовано 23 августа, 2012 · Жалоба Почитал доку на upp - там гора регистров UPP - пожалуй, один из самых простых модулей. Окучить его в минимальном виде можно буквально десятком строк на "C". Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
torik 0 23 августа, 2012 Опубликовано 23 августа, 2012 · Жалоба Дык есть примеры-то? Да даже проще - я не понимаю как светодиодами через GPIO помаргать. Скачивал какие-то примеры - но они не компилятся. Начнем с простого GPIO - как настроить на выход и изменять значение? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 68 23 августа, 2012 Опубликовано 23 августа, 2012 · Жалоба Начнем с простого GPIO - как настроить на выход и изменять значение? 1. Включить GPIO в PSC 2. Настроить соответствующий PINMUX 3. Настроить пин на вывод и вывести значение Примерно так же, как и в любом МК. Только на первый взгляд все кажется монструозным. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
torik 0 24 августа, 2012 Опубликовано 24 августа, 2012 · Жалоба 1. Включить GPIO в PSC 2. Настроить соответствующий PINMUX 3. Настроить пин на вывод и вывести значение Уже становится понятнее. А что такое PSC, есть для вышеперечисленных пунктов подробный порядок действий? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 68 24 августа, 2012 Опубликовано 24 августа, 2012 · Жалоба Уже становится понятнее. А что такое 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, наблюдаем изменение состояния пина Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
torik 0 24 августа, 2012 Опубликовано 24 августа, 2012 · Жалоба Во, что-то более-менее понятное в StraterWare вижу. Скомпилил пример. А когда создаю свой проект, где в проекте указать --include path? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
torik 0 29 августа, 2012 Опубликовано 29 августа, 2012 · Жалоба Когда 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 сигнальника с плисины я подаю короткий ресет, без этого и арм не запускается. Подскажите, где копать - в железе или в настройках проекта? Проверили на отладке - ведет себя также Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 68 29 августа, 2012 Опубликовано 29 августа, 2012 · Жалоба DSP нужно включить со стороны ARM'а - он выключается почти сразу после старта. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
torik 0 29 августа, 2012 Опубликовано 29 августа, 2012 · Жалоба Охренеть. По примерам из 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 что-то делать, что-то еще включить? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 68 29 августа, 2012 Опубликовано 29 августа, 2012 · Жалоба По примерам из 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 не проходит. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
torik 0 29 августа, 2012 Опубликовано 29 августа, 2012 · Жалоба Подозреваю, что 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, несмотря на разлочивание. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 68 29 августа, 2012 Опубликовано 29 августа, 2012 · Жалоба Для тупых поясните - что это такое за регистр ID модуля GPIO? Регистр REVID, 0-й адрес в пространстве модуля. Не знаю, как еще объяснить. Попробовал прочитать пинмукс после записи в него - результат 0, несмотря на разлочивание. Возможно, процессор не в привилегированном режиме находится. Попробуйте прочитать REVID SYSCFG. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться