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

gosha

Свой
  • Постов

    365
  • Зарегистрирован

  • Посещение

Весь контент gosha


  1. Попробуйте в BIOS поставить настройки по- умолчанию. Погуглить "windows 7 не видит устройства"
  2. На требуемый вектор прерывания должен завеситься обработчик isr: Обработчик завешивается? http://ecos.sourceware.org/cgi-bin/cvsweb....mp;cvsroot=ecos CYGACC_COMM_IF_DBG_ISR_SET(*comm, cyg_hal_plf_serial_isr); static int cyg_hal_plf_serial_isr(void *__ch_data, int* __ctrlc, CYG_ADDRWORD __vector, CYG_ADDRWORD __data) { int res = 0; channel_data_t* chan = (channel_data_t*)__ch_data; char c; cyg_uint8 lsr; CYGARC_HAL_SAVE_GP(); cyg_drv_interrupt_acknowledge(chan->isr_vector); *__ctrlc = 0; HAL_READ_UINT8(chan->base+CYG_DEV_LSR, lsr); if ( (lsr & SIO_LSR_DR) != 0 ) { HAL_READ_UINT8(chan->base+CYG_DEV_RBR, c); if( cyg_hal_is_break( &c , 1 ) ) *__ctrlc = 1; } res = CYG_ISR_HANDLED; CYGARC_HAL_RESTORE_GP(); return res; } Функция обработчика вызывается? Снимается ли причина прерывания? Флаги наличия прерывания в UART? Если снимается причина прерывания, я бы посмотрел макрос HAL_INTERRUPT_ACKNOWLEDGE(chan->isr_vector); Флаги прерывания в регистрах контроллера до его вызова и после. Разбирался бы с логикой работы контроллера прерываний. Под мою плату также не было порта. Я собирпл порт из кубиков (компонент из комплекта eCos) при помощи GUI утилиты настройки bp rjvgktrnf eCos : ./tools/bin/configtool http://caxapa.ru/upload/files/58bbd5554bd7...83f4372e73d8f79 Стр 248
  3. Под eCos такого не делал. Работаю с Redboot (начальный загрузчик часть eCos). Необходимая программа(.elf .bin .o) может грузится c IDE диска, по сети Ethernet(TFTP), c USB flash диска. Можно посмотреть исходные тексты этого файла (который обеспечивает от приглашения командной строки разбор и выполнение ASCII команд) http://ecos.sourceware.org/cgi-bin/cvsweb....mp;cvsroot=ecos http://ecos.sourceware.org/cgi-bin/cvsweb....mp;cvsroot=ecos Обычно, так и делают: eCos собирают в виде файла (.bin .elf) в котором по умолчанию стартует приложение пользователя, Собирают и прошивают во flash платы начальный загрузчик Redboot. Он грузит eCos программу (команда load из командной строки или сценария автоматической загрузки), и передаёт её управление (команда go). После уже работает eCos. Страница 303 документа по ссылке: http://caxapa.ru/upload/files/58bbd5554bd7...83f4372e73d8f79
  4. Обработчик прерывания по таймеру работает? Должен вызываться.hal_clock_initialize(CYGNUM_HAL_RTC_PERIOD); Там должен обработчик прерывания по таймеру завеситься на нужное irq при помощи HAL_INTERRUPT_ATTACH() После прерывания должны размаскироваться HAL_INTERRUPT_UNMASK() Должны глобально разрешаться прерывания и они позже не должны случайно за- маскироваться. Это работает? Я бы еще поставил печать отладочных сообщений в ф-ии (вызываются они или нет): void hal_clock_initialize(cyg_uint32 period) void hal_clock_read(cyg_uint32 *pvalue) void hal_clock_reset(cyg_uint32 vector, cyg_uint32 period)
  5. Как я понял, надо организовать пакетную передачу данных? Завести признак начала данных и контролную сумму в конце пакета данных?
  6. тим всё выкачивается с помощью утилиты cvs http://ecos.sourceware.org/anoncvs.html snapshot: http://hg-pub.ecoscentric.com/ecos/archive/tip.tar.bz2 http://hg-pub.ecoscentric.com/ecos/ Личто я пользуюсь для сборки кросс компиляторами от Debian. http://www.emdebian.org/debian/pool/main/g/gcc-4.1/ Собираю на Debian 6.0 х86 инструментальной машине так: #ecosconfig -- config= config_file_name.ecc tree #make config_file_name.ecc: cdl_option CYGBLD_GLOBAL_COMMAND_PREFIX { # Flavor: data user_value mips-linux-gnu # value_source user # Default value: mipsisa32-elf }; В прикреплённом файле: утилита ecosconfig c с исходниками собранная для debian 6 инструментальной машины. И утилите gui конфигурации ./tools/bin/configtool. ecosconfig.tar.gz
  7. Необычный GUI

    А если на arm9 машинах написать gtk приложения. А по сети гонять данные (состояние/управление). http://www.opennet.ru/docs/RUS/gtk_mono/
  8. Тогда вопрос: Что устанавливать собираемся?
  9. Я бы брал, на который Debian можно поставить с DVD. http://www.debian.org/ports/arm/
  10. http://www.opennet.ru/man.shtml?topic=requ...9&russian=2 По замеру времени, выше предложили типовой вариант: внешнее событие подаём на один луч осциллографа. В обработчике прерывания выводим, например на LPT, логическую "1". Сигнал с LPT подаём на другой луч осциллографа. Смотрим разность по времени импульсов. Двух лучевой осциллограф рулит.
  11. В Linux нет приоритетной системы прерываний- одной из отличительных особенностей RTOS. Завесить в своём драйвере (или модифицируя исходный код драйвера RS232) обработчик прерывания легко. Управление обработчик прерываний гарантированно получит, сразу же при отсутсвии в системе одновременно с ним других аппаратных прерываний. Также в критических участках кода ядра ОС или драйверов, могут временно полностью запрещаться рперывания на несколько микросекунд. Приложение пользователя даже с наибольшим приоритетом получит упраление через шаг планировщика (scheduler) ядра ОС Linux. Временной шаг планировщика задаётся при настройке до последующей сборки ядра Linux kernel. И может быть изменен только пере- сборкой ядра. /boot/.config-2.6.32-5-686 В debian 6 это : # CONFIG_HZ_100 is not set CONFIG_HZ_250=y # CONFIG_HZ_300 is not set # CONFIG_HZ_1000 is not set CONFIG_HZ=250 Если не использоватьRTOS, возможно применить Linux Real Time Application Interface: Например: http://packages.debian.org/sid/rtai
  12. Я бы предложил айти исходники драйвера RTC. И посмотрел, на какие ф-ии он завешивается. Команда: установить/считать дату из под Redboot RedBoot_cmd("date", "Show/Set the time of day", "[YYYY/MM/DD HH:MM:SS]", do_time_date ); static bool verify(cyg_uint32 val, int min, int max, char *id) { if (((int)val < min) || ((int)val > max)) { diag_printf("%s is out of range - must be [%d..%d]\n", id, min, max); return false; } return true; } void do_time_date(int argc, char *argv[]) { cyg_uint32 now = Cyg_WallClock::wallclock->get_current_time(); cyg_uint32 year, month, mday, hour, minute, second; char *sp; bool ok = true; if (argc == 1) { // Just show the current time/date _simple_mkdate(now, &year, &month, &mday, &hour, &minute, &second); diag_printf("%04d/%02d/%02d %02d:%02d:%02d\n", year, month, mday, hour, minute, second); } else if (argc == 3) { sp = argv[1]; if (!parse_num(sp, (unsigned long *)&year, &sp, "/") || !parse_num(sp, (unsigned long *)&month, &sp, "/") || !parse_num(sp, (unsigned long *)&mday, &sp, "/")) { ok = false; } sp = argv[2]; if (!parse_num(sp, (unsigned long *)&hour, &sp, ":") || !parse_num(sp, (unsigned long *)&minute, &sp, ":") || !parse_num(sp, (unsigned long *)&second, &sp, ":")) { ok = false; } if (ok) { // Verify values make some sense, then set the hardware if (year < 100) year += 2000; ok = ok && verify(year, 1970, 2034, "year"); ok = ok && verify(month, 1, 12, "month"); ok = ok && verify(mday, 1, 31, "day"); ok = ok && verify(hour, 0, 23, "hour"); ok = ok && verify(minute, 0, 59, "minute"); ok = ok && verify(second, 0, 59, "second"); if (ok) { now = _simple_mktime(year, month, mday, hour, minute, second); Cyg_WallClock::wallclock->set_current_time(now); } } } else { ok = false; } if (!ok) { diag_printf("usage: date [YYYY/MM/DD HH:MM:SS]\n"); } }
  13. какие макросы пере- определены (стр 78 arch.inc)? Как собираете? В отдельном дереве? #ecosconfig --config=filename tree #make Собирал ecos кросс-коплилятором от Debian- всё было ok. http://www.emdebian.org/debian/pool/main/g/gcc-4.1/
  14. Verilog, xilinx, RAMB4_S16_S16 Синтезатор -Synplify. Можно ли и как про-инициализировать начальные значения RAMB4_S16_S16 для синтеза, но так, чтобы значения задавались не по столбцам, а по 16- разрядным словам?
  15. Имеется 5 входных и 5 выходных шин данных; Имеется счетчик (cnt) от 0 до 4 В зависимости от величины счетчика нужно коммутировать входные шины на выходные: cnt1<= ((cnt + 3'h1) < 3'h5) ? (cnt + 3'h1) : (cnt + 3'h1 - 3'h5); cnt2<= ((cnt + 3'h2) < 3'h5) ? (cnt + 3'h2) : (cnt + 3'h2 - 3'h5); cnt3<= ((cnt + 3'h3) < 3'h5) ? (cnt + 3'h3) : (cnt + 3'h3 - 3'h5); cnt4<= ((cnt + 3'h4) < 3'h5) ? (cnt + 3'h4) : (cnt + 3'h4 - 3'h5); out_bus[ cnt][32:0]<= in_bus_0[32:0]; out_bus[cnt1][32:0]<= in_bus_1[32:0]; out_bus[cnt2][32:0]<= in_bus_2[32:0]; out_bus[cnt3][32:0]<= in_bus_3[32:0]; out_bus[cnt4][32:0]<= in_bus_4[32:0];
  16. Внутрисхемная отладка не работает?
  17. Я бы не стал. Увеличение сроков разработки, Трудозатрат чел/час на разработку. И потом отладка и их исправление даже в эксплуатации. Если есть что- то готовое и работающее, отлаженное, даже не оптимальное, я бы предложил это использовать. Это, как правило, более устраивает заказчика.
  18. qnx 6.5

    Никому не попадался генератор для 6.5. Пропадаю.
  19. Не пинайте сильно новичка. Появилась необходимость, чтобы adsp 21368 загружался с spi flash at45db321. Также необходимо, чтобы из VisualDSP можно было шить эту spi flash. Как я понял, надо модифицировать какой-то драйвер для этого. Написал программку, которая может читать, присать, делать верификацию flash. Но, нигде не могу найти, как сделать из нее драйвер, через который VisualDSP ->Tools->Flash_programmer мог бы шить собранную программу в spi flash. Существуют ли .pdf, examples по этому поводу? Существует ли текст драйвера, который можно модифицировать ф-ями паботы с at45 spi flash? Можно ли писать драйвер на Cи? Или только на asm? Спасибо.
  20. Оптимизировать работу с SDRAM: Я бы предложил обмениваться с sdram 32-битными словами по dma (не 8/16- битными). Адреса буферов в sdram выровнять на границу row/col/bank (типа чтоб не пересекалась граница банка и пр.) Запись/чтение производить блоками данных, а не по одному байту. См циклограммы работы с sdram.
  21. Сигнал ACK использовать невозможно (нет в микросхеме SRAM). Сооотв в регистре он выключен. Состояние шины DSP смотрим логическим анализатором. Создается впечатление, что CPU core вообще не ждет готовности AMI(ext memory interface). Если после каждой записи поставить сброс буферов в шину, все гораздо лучше. Но если прибавить waitstate до 32, то в линию вообще выдается постоянно 0. Первый раз с таким сталкиваюсь. Пропадаю. *pAMICTL1= PREDIS | RHC2 | /*RHC1 |*/ AMIFLSH | IC7 | HC2 | /*HC1 |*/ WS12 | PKDIS | BW32 | AMIEN; /* sram, 32 bit bus */ /* SRAM тест 1 */ for(addr= 0; addr <= SRAM_SIZE; addr++) /* пишем по нечетным адресам 0xffff_ffff, по четным 0x0000_0000 */ {p= (volatile unsigned int *)(EXT_BUS_BANK1_ADDR | addr); *pAMICTL1|= AMIFLSH; if(addr & 0x01) {*p= 0xffffffff; continue;} *p= 0x00000000; } for(r=0x100; r; r--) continue; /* задержка */ for(addr= 0; addr <= SRAM_SIZE; addr++) /* проверяем, что по нечетным адресам 0xffff_ffff, по четным 0x0000_0000 */ {p= (volatile unsigned int *)(EXT_BUS_BANK1_ADDR | addr); *pAMICTL1|= AMIFLSH; v= *p; if(addr & 0x01) {if(v == 0xffffffff) continue;} else {if(!v) continue;} return 0; } /* SRAM тест 2 */ for(r=0x100; r; r--) continue; /* задержка */ for(addr= 0; addr <= SRAM_SIZE; addr++) /* пишем по нечетным адресам 0x0000_0000, по четным 0xffff_ffff */ {p= (volatile unsigned int *)(EXT_BUS_BANK1_ADDR | addr); if(*pAMICTL1 & AMIFLSH) continue; if(addr & 0x01) {*p= 0x00000000; *pAMICTL1|= AMIFLSH; continue;} *p= 0xffffffff; *pAMICTL1|= AMIFLSH; } for(r=0x100; r; r--) continue; /* задержка */ for(addr= 0; addr <= SRAM_SIZE; addr++) /* проверяем, что по нечетным адресам 0x0000_0000, по четным 0xffff_ffff */ {p= (volatile unsigned int *)(EXT_BUS_BANK1_ADDR | addr); v= *p; if(addr & 0x01) {if(!v) continue;} else {if(v == 0xffffffff) continue;} return 0; }
  22. Написал втупую такую ф-ю по аналогии с примером от Visual DSP: Все компилится. Но в datasheet указано, что для adsp 21638 DPI содержит 2 модуля spi. В коде это как указать, какой spi подключить к inout pin? static void set_dpi(void) {SRU2(SPI_MOSI_O, DPI_PB01_I); SRU2(HIGH, DPI_PBEN01_I); SRU2(SPI_MISO_I, DPI_PB02_I); SRU2(LOW, DPI_PBEN02_I); SRU2(SPI_CLK_O, DPI_PB03_I); SRU2(HIGH, DPI_PBEN03_I); SRU2(FLAG0_O, DPI_PB05_I); /* flag pins to act as chip select */ SRU2(HIGH, DPI_PBEN05_I); return; } Пропадаю. Документация от AD отстой по сравнению с TI.
  23. Не пинайте сильно, только начинаю изучать ADSP. ADSP-21368_hardware_reference_rev2-1.pdf Table A-21. Group A Sources – Serial Clock (картинка в attachment) Регистры представляют из себя битовые поля по 5 бит. В них нужно писать номер pin, к которому подсоединить внутреннюю аппаратуру? Напр нужно подсоединить spi_clk к dpi_p1. Что нужно записать в регистр и в какой регистр.? Что нужно записать в регистры периферии ADSP, которые не нужно подключать к внешним pin? Спасибо.
  24. Visual DSP 5. Update 8. Дело в том, что Settings => Preferences => Plugins Menu существует, и там много квадратиков с галочками. А Tools => Plugins Menu отсутсвует. Что я делаю не так?
  25. Не пинайте новичка. Подск пож., если выбираю lwip application при project_create, то тип процессора можно выбрать только из семейтва blackfin. Нужно для adsp 21368. Почему так? Значит ли это, что lwip необходимо прикручивать самому из исходников, или я что- то делаю не так?
×
×
  • Создать...