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

Sarez

Участник
  • Постов

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

  • Посещение

Репутация

0 Обычный

Информация о Sarez

  • Звание
    Частый гость
    Частый гость
  • День рождения 27.09.1983

Контакты

  • Сайт
    Array
  • ICQ
    Array

Информация

  • Город
    Array
  1. ARM+I2S Codec

    Приветствую Всех! Народ, подскажите, может встречал кто плату отладочную на ARM7 с установленным аудиокодеком... Желательно подключенном по I2S. А то шарюсь что-то и везде используется свой АЦП, что меня не совсем устраивает - звук должен быть 16 битным... Или может есть просто киты с кодеками, без контроллера??? Заранее благодарен...
  2. ok. Большое спасибо!!! Будем разбираться....
  3. Доброго времени суток всем!!! Вопрос такой.... Имеется проц lpc 2148. Работаю в Keil V3.33. Загоняю во flash через Flash Utilyty следующий код : #include "LPC214x.h" //#include <LPC214x.h> //#include <LPC21xx.H> #include <stdio.h> #include <ctype.h> #include <inttypes.h> void main( void ) { IODIR1 |= 1 << 24; while(1) { IOSET1 = 0x01000000; IOCLR1 = 0x01000000; /* __asm { nop }; __asm { nop }; __asm { nop }; __asm { nop }; __asm { nop }; __asm { nop }; __asm { nop }; __asm { nop }; __asm { nop }; __asm { nop }; */ } } И осцилом по дрыгающейся ножке наблюдаю, что одно прохождение сего while занимает 1.3 мкс... При частоте 60 Mhz не до фига ли получается ???? Расскоменчиваю нопы и получаю: #include "LPC214x.h" //#include <LPC214x.h> //#include <LPC21xx.H> #include <stdio.h> #include <ctype.h> #include <inttypes.h> void main( void ) { IODIR1 |= 1 << 24; while(1) { IOSET1 = 0x01000000; IOCLR1 = 0x01000000; __asm { nop }; __asm { nop }; __asm { nop }; __asm { nop }; __asm { nop }; __asm { nop }; __asm { nop }; __asm { nop }; __asm { nop }; __asm { nop }; } } Время прохождения while = 2.25 мкс... Т.е 10 nop он выполняет за 1 мкс...т.е 1 nop за 0.1 мкс, что соответствует частоте 10 Mhz. Непонятно, т.к проц настроен на 60 Mhz.... Настройки PLL - M = 5, P = 2. MAMTIM = 4 На всякий случай пристегиваю startup с инициализацией..... Заранее спасибо за помощь. Startup.rar
  4. Здравствуйте Всем! Тут такая проблема.... Имеется LPC2214. Конфигурирую банк памяти на CS0 вот так: BCFG0 = 0x00001840; // WST1 = 5, WST2 = 4 Кручу в цикле следующий код : while (1) { memcpy ( plis, (op_code ) , 4 ); } Где plis - банк памяти 0 ( 8 битный) , op_code - массив из 4 значений, которые я в этот банк пытаюсь записать. Происходит следующее : когда виглером из иара шью флеш контроллера и сразу смотрю сигналы внешнего интерфейса памяти, то вижу, что сигнал BLS0 действительно уходит в низкий уровень на 4 такта, как и должен, затем уходит в высокий уровень на 10 тактов (????????????) и так далее 4 раза ( пишу 4 значения). Вопрос первый - какой период работы интерфейса внешней памяти???? Я поиграл значением WST2 - и все равно в сумме получаю, что на запись одного байта у меня уходит 14 тактов..., т.к при уменьшении значения WST2 растягивается время нахождения в высоком уровне между перепадами..... Далее самое интересное... Отключаю виглер сбрасываю плату и наблюдаю, действительно BLS0 уходит в низкий уровень 4 раза, но при этом время нахождения в высоком уровне растягивается, т.е получается, что после того, как я зашил код в МК интерфейс внешней памяти работает с одними таймингами...... сбрасываю контроллер - с другими...... Народ, помогите пожалуйста!!!
  5. Народ!!!! Помогите пожалуйста!!! Подскажите, если я делаю две или несколько операций записи во внешний банк памяти, сколько циклов между операциями записи сигналы CS и BLS0 находятся в высоком уровне???? Я выставил параметр IDCY в регистре BCFG в 0 - смотрю сигналы осцилографом - а они у меня между циклами висят в еденице 6 тактов.... Как можно это время регулировать???? ПОМОГИТЕ!!! От этих времянок проект горит.....
  6. LPC2214 + Wiznet W3150. Помогите...

    Приветствую!!! Проблема в следующем. Имеется W3150 в связке с LPC2214. Сетевой обмен ведется с использованием 2 каналов. По одному идут команды устройству, по другому данные. Имеется ПЛИС которая видна для контроллера как банк памяти 1. ПЛИС и стек сидят на одной шине данных. Проблема в том, что стек произвольно уходит в SOCK_CLOSED, т.е разрывает соединение по каналу данных. Причем была идея посадить ПЛИС на те же линии EMC, на которых сидит стек ( на CS2 и OE ), чтоба напрямую ловить данные , передаваемые от стека в МК. Однако в этом случае соединение по каналу данных рвется фактически сразу - после установки соединения по данному каналу анализируется состояние сокета , и в нем почему -то висит значение SOCK_CLOSED. Пересадил ПЛИС на линии первого банка - ситуация несколько изменилась - соединение рвется в момент передачи данных, но почему-то не сразу, а спустя какое-то время...... Не могу понять, что происходит....
  7. Контроллер внешней памяти

    Доброго Всем.... Подскажите пожалуйста... Имеется МК LPC2214. Имеется ПЛИС, которая подключена к МК с использованием EMC как 8 битный банк памяти №1 ( соответственно используя вывод CS1, OE и BLS0 ). Какие функции использовать, чтобы записать в ПЛИС ???? Т.е какие функции использовать для записи во внешний банк памяти?? Я делаю вот так : memcpy (plis1, rx_buf, 1); Где plis1 : uint8 * plis1 = (uint8 *)(0x81000000 ); // адрес плис в пространстве контроллера Соответственно rx_buf : uint8 * rx_buf = (uint8 *)(0x40002ffa) ; // буфер данных 4096 байт Каким образом выполняется копирование с точки зрения контроллера внешней памяти? Я понимаю так , что в данном случае берется байт данных из буфера, контроллером EMC выставляются CS1 и BLS0 и удерживаются столько тактов, сколько я указал в BCFG1 -конфигурационном регистре банка памяти 1. Тогда непонятно, почему при просмотре данных сигналов ( CS1 и BLS0 ) осцилографом они не изменяются - висят в 1???? Буду очень признателен, если укажете, в чем я ошибаюсь....
  8. ОС реального времени + TCP/IP

    Доброго всем дня! Народ, не кинете ли пару ссылочек по ОС реального времени... Можно даже начиная с простейшего - какие имеются, в чем их различия и преимущества, критерии применения ( когда надо ставить, а когда это будет лишним гемороем..). Если можно - скинте пожалуйста не очень сложный проект с использованием ОС ( если конечно фраза "не очень сложный" здесь уместна ). Интересует возможность реализации сетевого контроллера на базе АРМ со встроенным Ethernet... Стоит ли вешать в таком случае на него ось или можно и без нее. Каких максимальных скоростей обмена в данном случае можно достичь... Интересуют скорости порядка 40 Мбит/с.... Или же вообще стоит идти в другом направлении.... Всем заранее спасибо!
  9. программирование FLASH

    Ребята, опишите пожалуйста последовательность шагов при программировании FLASH (LPC2214) через WIGLER используя H-JTAG. Работаю в среде IAR. Заранее спасибо
  10. Есть!!! Обработал!!! Спасибо большое :a14: Буду разбираться с этим файлом. БОЛЬШОЕ СПАСИБО!!!!
  11. а __enable_interrupt стоит в main ? Поподробне пожалуйста? Чтобы разрешить прерывания нужно еще что нибудь сделать , кроме записи едениц по требуемым каналам в регистр VICIntEnable ?
  12. Пробовал....уже когда из шкафа достал любимай бубен, даже так делал : org 0x18 ldr pc, IRQ org 0x38 IRQ: dc32 irq_handler Что то вроде перехода по адресу обработчика прерывания.....
  13. реализация прерываний

    Доброго дня!!! Народ, помогите пожалуйста!!!! Несколько дней уже бьюсь с прерываниями - не могу реализовать- программа не переходит на обработчик .... Опишите, если можно , как для малолетнего идиота, пошагово алгоритм действий.... Опишу, что у делаю я. Есть контроллер LPC 2214. Есть источник прерывания ( стек W3150) . Есть IAR 4.40 . Источник висит на линии порта ввода/вывода P0.16. Линия сконфигурирована как вход внешнего прерывания EINT0 ( регистр IO0DIR = 0x000000, т.е нога P0.16 сконфигурирована как вход, регистр PINSEL1 = 0x01, т.е линия сконфигурирована как вход внешнего прерывания..) . Сигналом прерывания является низкий уровень на входе. Соответственно содержимое регистра EXMODE ( выбор типа прерывания - по фронту или по уровню , не менял - там нули..). startup файл добовляю в проект и прописываю следующее ( полную версию startup прилагаю) : org 0x18 ldr pc, 0xFFFFF030 ; адрес регистра VicVectAddr В xls файле по поводу стеков следующее ( полную версию прилагаю ) : //************************************************************************* // Stack and heap segments. //************************************************************************* -Z(DATA)CSTACK+2000=40000000-40003FFF -Z(DATA)IRQ_STACK+100=40000000-40003FFF -Z(DATA)HEAP+8000=40000000-40003FFF -Z(DATA)FIQ_STACK+100=40000000-40003FFF Функция обработки : __arm __irq void irq_handler() { printf("socket is :"); IR_STATUS[0] = IINCHIP_READ(INT_REG); IR_STATUS[0] = IINCHIP_READ(INT_STATUS(0)); EXTINT = 0x1; VICVectAddr = 0; // Clear interrupt in VIC. // iinchip_irq(); } Определена до main. Функция инициализации VIC : void irq_init () { IO0DIR = 0x00000000; PINSEL1 = 0x00000001; VICVectCntl0 = 0x2e; VICVectAddr0 = (unsigned)&irq_handler; VICIntSelect = 0x00000000; VICIntEnable = 0x00004000 ; } Вызываю в main() до инициализации самого источника прерываний. Что самое интересное - в регистрах EXTINT и VIQIRQStatus после возникновения прерываний еденицы, т.е контроллер прерывание ловит, но почему-то не переходит на его обработчик.... Обьясните пожалуйста пошагово, как это делать. Если можно, подкинте примеры startupa.. Пытался сделать прерывание fiq, как показывал уважаемый Andy Mozzhevilov тут http://electronix.ru/forum/index.php?showtopic=31378 был тут http://electronix.ru/forum/index.php?showt...mp;#entry190686 тут http://electronix.ru/forum/index.php?showt...27621&st=15 но ничего не вышло. Пожалуйста помогите!!!! cstartup.rar testos_lnk1.rar
  14. прерывание fiq

    Доброго всем дня! Скажите пожалуйста, не мог ли кто нибудь скинуть пример реализации fiq-прерывания в IAR под LPC (или любой другой) ? Особенно интересует содержание startup- файла. Чтоб посмотреть , как умные люди делают, а то я что-то вконец запутался...
  15. fiq- прерывание + Wiznet.

    Доброго Всем дня! Помогите пожалуйста найти ошибку. Имеется стек Wiznet +LPC2214 . Стек INT -выводом висит на EINT0 ( P0.16 ) LPC. Пытаюсь реализовать fiq-прерывание . Для этого имеется следующая C-функция в main: __fiq __arm void fiq_handler (void) { uint8 int_val; IINCHIP_ISR_DISABLE(); int_val = IINCHIP_READ(INT_REG); // зачитываю int-регистр стека if (int_val & INT_IPCONFLICT) { printf("IP conflict : %.2x\r\n", int_val); } IINCHIP_ISR_ENABLE(); //iinchip_irq(); EXTINT = 0x1; } В файле startup следующее ( среда IAR 4.40 ): __program_start ldr pc,[pc,#24] ; Absolute jump can reach 4 GByte ; b ?cstartup ; Relative branch allows remap, limited to 32 MByte ; Vectors can be enabled by removing the comments below or by ; using #pragma vector from C code. org 0x04 ; ldr pc,[pc,#24] ; Branch to undef_handler org 0x08 ; ldr pc,[pc,#24] ; Branch to swi_handler org 0x0c ; ldr pc,[pc,#24] ; Branch to prefetch_handler org 0x10 ; ldr pc,[pc,#24] ; Branch to data_handler org 0x18 ; ldr pc,[pc,#24] ; Branch to irq_handler org 0x1c ldr pc, FIQ_Addr // закидываю в pc адрес обработчика ; Constant table entries (for ldr pc) will be placed at 0x20 ; Exception vectors can be specified in C code by #pragma vector or by filling ; in the vectors below. The vector address is the ARM vector number + 0x20. org 0x20 dc32 ?cstartup org 0x24 ; dc32 undef_handler org 0x28 ; dc32 swi_handler org 0x2c ; dc32 prefetch_handler org 0x30 ; dc32 data_handler org 0x38 ; dc32 irq_handler org 0x3c FIQ_Addr: dc32 fiq_handler // получаю адрес обработчика ; LTORG ENDMOD __program_start ; ENDMOD Линия P0.16 настроена как вход, через PINSEL1 для этой ноги выбрана функция EINT0. Настройки контроллера прерываний следующие : PINSEL1 = 0x01; VICIntSelect = 0x4000; // выбираем fiq для EINT0 VICIntEnable = 0x4000; // разрешаем прерывание В регистре IMR (Interrupt Mask Register) стека Wiznet записано значение 0x80 ( т.е разрешено прерывание только в случае IP-Conflict ). Хотя тут есть неястность - в даташите на стек написано, что если прерывание нужно разрешить - то в соответствующий бит писать 1. В Wizne-товском драйвере же написано следующее: void setINTMask(uint8 mask) { IINCHIP_WRITE(INTMASK,mask); // must be setted 0x10. } Или же это указано для запрещения прерываний? Но опять же в даташите указано, что бит 4 этого регистра должен быть выставлен в 0, а здесь он в 1. При отладке как только доходит до соединения по одному из каналов ( стек в режиме клиента пытается законнектится к хосту), то винда начинает верещать о конфликте IP-адресов ( т.к в качестве IP стека указан IP хоста ), но код из обработчика не выполняется, а стек, согласно программе переходит в режим listen... Не могу понять , что он хочет... Помогите пожалуйста!!
×
×
  • Создать...