|
|
  |
OMAP L138, быстрый старт |
|
|
|
Aug 23 2012, 07:12
|
Знающий
   
Группа: Свой
Сообщений: 549
Регистрация: 1-06-05
Пользователь №: 5 644

|
Цитата(torik @ Aug 23 2012, 07:51)  ...Что-то не могу найти простых толковых примеров, Quick Start или еще чего. Ткните куда-нибудь... Возможно, Вам будут полезны примеры из StarterWare.
|
|
|
|
|
Aug 23 2012, 15:41
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(torik @ Aug 23 2012, 19:04)  Начнем с простого GPIO - как настроить на выход и изменять значение? 1. Включить GPIO в PSC 2. Настроить соответствующий PINMUX 3. Настроить пин на вывод и вывести значение Примерно так же, как и в любом МК. Только на первый взгляд все кажется монструозным.
|
|
|
|
|
Aug 24 2012, 13:00
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(torik @ Aug 24 2012, 16:34)  Уже становится понятнее. А что такое 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, наблюдаем изменение состояния пина
|
|
|
|
|
Aug 29 2012, 06:25
|

Гуру
     
Группа: Свой
Сообщений: 2 113
Регистрация: 1-11-05
Пользователь №: 10 359

|
Когда 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 сигнальника с плисины я подаю короткий ресет, без этого и арм не запускается. Подскажите, где копать - в железе или в настройках проекта? Проверили на отладке - ведет себя также
--------------------
Быть. torizin-liteha@yandex.ru
|
|
|
|
|
Aug 29 2012, 07:41
|

Гуру
     
Группа: Свой
Сообщений: 2 113
Регистрация: 1-11-05
Пользователь №: 10 359

|
Охренеть. По примерам из 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 что-то делать, что-то еще включить?
--------------------
Быть. torizin-liteha@yandex.ru
|
|
|
|
|
Aug 29 2012, 09:03
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(torik @ Aug 29 2012, 11:41)  По примерам из StarterWare: Код PSCModuleControl(SOC_PSC_0_REGS, HW_PSC_DSP, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE); И заливаю это в АРМ, все верно? Со StarterWare я не знаком, но на вид верно. Цитата(torik @ Aug 29 2012, 11:41)  А как положить это в ПЗУ, хотя бы M25P64, подключенное к сигнальнику? А то не могу же я, не прекратив выполнение программы арма началь отладку дсп... Могу предложить Хитрый Способ: 1. Создаем в HEX-редакторе "бинарник" для ARM из одной инструкции "b .": 0xfe 0xff 0xff 0xea 2. Берем AISGen, ставим в нем галку "Configure PSC", разрешаем в конфигурации PSC DSP 3. Создаем загрузочный образ Дубово, но зато просто и будет работать. Цитата(torik @ Aug 29 2012, 11:41)  Но кроме того, вернусь к изначальной теме: мне надо помыргать светодиодом. На основе StarterWire и рекомендаций aaarrr (я только не понял че там за ID такой), написал прогу и запускаю ее под арм: ... Однако светодиод не моргает. Подпрогаммы посмотрел, вроде бы все верно (да и кто бы сомневался). Может в арм-е по-другому надо с psc что-то делать, что-то еще включить? ID - регистр модуля GPIO. Его можно прочитать, чтобы убедиться, что клок на самом деле включен. Подозреваю, что SYSCFG залочен (см. регистры Kick0, Kick1), поэтому запись в PINMUX не проходит.
|
|
|
|
|
Aug 29 2012, 09:44
|

Гуру
     
Группа: Свой
Сообщений: 2 113
Регистрация: 1-11-05
Пользователь №: 10 359

|
Цитата Подозреваю, что 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, несмотря на разлочивание.
--------------------
Быть. torizin-liteha@yandex.ru
|
|
|
|
|
Aug 29 2012, 09:56
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(torik @ Aug 29 2012, 13:44)  Для тупых поясните - что это такое за регистр ID модуля GPIO? Регистр REVID, 0-й адрес в пространстве модуля. Не знаю, как еще объяснить. Цитата(torik @ Aug 29 2012, 13:44)  Попробовал прочитать пинмукс после записи в него - результат 0, несмотря на разлочивание. Возможно, процессор не в привилегированном режиме находится. Попробуйте прочитать REVID SYSCFG.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|