Jump to content

    

khorght

Участник
  • Content Count

    11
  • Joined

  • Last visited

Community Reputation

0 Обычный
  1. Здравствуйте,уважаемые. Никак не получается заставить работать EIC с помощью Atmel ASF. Пытаюсь сделать прерывание по RISING_EDGE, схема подключения пина: пин - выход буфера - SN74LVC8T245 - вход буфера, притянутый к земле через 100кОм. Как только подаю на вход 3Вольта генерится не одно прерывание по переднему фронту а очень много прерываний, от 6 до 20 штук, проверил осциллографом, чистый сигнал, дёрганий не видно, конденсаторы повешены между всему парами питание-земля.Пытался подвесить на вход буфера кондер, ничего не изменилось. Код вот такой: // Enable edge-triggered interrupt. eic_options.eic_mode = EIC_MODE_EDGE_TRIGGERED; // Interrupt will trigger on falling edge. eic_options.eic_edge = EIC_EDGE_RISING_EDGE; // Initialize in synchronous mode : interrupt is synchronized to the clock eic_options.eic_async = EIC_ASYNCH_MODE; //EIC_ASYNCH_MODE; // Set the interrupt line number. eic_options.eic_line = EXT_INT0; // Map the interrupt lines to the GPIO pin with the right peripheral functions. gpio_enable_module_pin(AVR32_EIC_EXTINT_0_PIN, AVR32_EIC_EXTINT_0_FUNCTION); // Disable all interrupts. Disable_global_interrupt(); // Register the EIC interrupt handler to the interrupt controller. INTC_register_interrupt(&eic_int_handler, D0_IRQ, AVR32_INTC_INT0); // Init the EIC controller with the options eic_init(&AVR32_EIC, &eic_options, 1); // Enable the chosen lines and their corresponding interrupt feature. eic_enable_line(&AVR32_EIC, eic_options.eic_line); eic_enable_interrupt_line(&AVR32_EIC, eic_options.eic_line); // Enable all interrupts. Enable_global_interrupt(); #if __GNUC__ __attribute__((__interrupt__)) #elif __ICCAVR32__ __interrupt #endif static void eic_int_handler(void) { ... eic_clear_interrupt_line(&AVR32_EIC, eic_options.eic_line); } Менял на другие ноги и прерывания ( мало-ли) - результат тот же. Пробовал снять подтяжку и поймать прерывание по заднему фронту, опять то же самое. Подскажите, пожалуйста в чем может быть проблема. Спасибо PS.Попытка заменить на GPIO INTC, увы невозможна, использую USB, а он при попытке инициализации через INTC_init_interrupts, наглухо убивает USB. А вызов этой функции перед инициализацией USB не срабатывает, прерывание не выстреливает.
  2. At32UC3A ASF USBComposite нужна помощь

    Кое-как нашел один косяк - оказывается для 1256 USB CLOCK SRC можно(нужно?) выставить PLL1 которые заранее настроен на частоту 48,может можно и сразу нарпямую голый кварц тыкать,не проверял, а вот на 3256 такое уже не работает, надо выставлять источником просто кварц (если установлен 8, 12, 16 Мгц) и никаких множителей для PLL1 48МГц не надо, нигде в описании этого вроде не встречалось и не отложилось или отложилось не туда))) видимо ASF последней версии как-то сам множит как надо частоту, непонятно правда(чисто из любопытства) почему нельзя для ЮСБ использовать второй кварц, может мне основной приспичит что-то вроде 11.48 от которого USB уже не стартанет... теперь по крайней мере девайс стал опознаваться и слать декриптор устройства нормально,хотя дескрипторы интерфейсов ни в какую не желает слать хосту и остается открытым вопрос почему в оригинальных файлах фрэймворка для вендор класса висят два интерфейса, ну вот не нужен мне там лишний интерфейс и всё тут, который к тому же вообще заглушка какая-то в нем эндпойнтов нет))) ЗЫ. как же все-таки хорошо и удобно работать с LUFA, на первый тестовый проект с USB при условии что еще искал как и на чем накропать хостовую часть времени потратил около дня...
  3. At32UC3A ASF USBComposite нужна помощь

    Цитата(kovigor @ Jan 30 2014, 23:13) Да, USB - штука непростая, с наскоку может и не выйти, придется глубоко вникать ... http://zalil.ru/34942957 Огромнейшее спасибо за ссылку,но к сожалению у меня x64,придется покопаться в старых ноутах.
  4. At32UC3A ASF USBComposite нужна помощь

    Да я уже атмеловские пробую VID PID, попробовал их пример композитка из мыши и массторэдж... где-то что они видимо правят помимо того что они описывают в аппноутах. плата...разводку уже думал перетравить на всякий случай и развести поплотнее,кабель добротный,не китай за 100 руб,но если я правильно понял ASF, что на мой дилетантский взгляд странно внутри этого ада - там в любом случае добавится конфигурация для FS, по крайней мере судя по Vendor class если я вообще отключу FS то у них макросами тогда закрыты все функции чтения записи в эндпойнты,только репорты остаются. как всегда... хотелось нахрапом сляпать быстренько и переключиться на что-то другое,а получится как с LAN...зато TCP/IP стэк весь перелопатил и даже свою реализацию рабочую накидал ))) дело за малым найти рабочую ссылу на не жадный BusHound или может Wireshark USBCap выручит. Спасибо за подсказки и удачных вам проектов,друзья.
  5. At32UC3A ASF USBComposite нужна помощь

    Что с одним что с двумя интерфейсами результат одинаков - VID 0000 PID 0002, устройство сообщило об ошибке и было отключено,но насколько я понимаю я могу сделать стоклько интерфейсов сколько взбредет(учитывая конечно количество эндпойнтов в контроллере). Непонятно с чего но вдруг стало хотя бы определять, после того как стал жестко править структуры для Дувайса,Интерфейсов и прочего под свои значения, у меня там почти все нестандартные оказались, итог - определяет VID PID а интерфейсы наглухо не видит, перебросил проект с 1256 на 3256(наконецто допаял тестовую платку),так как в идеале мне нужно ХайСпид а Не Фулл(1256 только на Фулл работает)... итог - опять нагухо виснет в VID 0000. Насчет BusHound спасибо,попробую посмотреть.
  6. Здравствуйте,уважаемые. пытаюсь написать проект композитного ЮСБ устройста HIDGeneric + Vendor , отдельно как сингл интерфейс устройства стартуют(тоесть настройка кварца,инициализация и т.д. проходят корректно поэтому эту часть не выкладываю как заведомо рабочую), при попытке впихнуть их оба в композит девайс устройство не опознается системой, видится как VID 0000 PID 0002 и останавливается системой как выдавшее ошибку, естесственно я задаю совершенно другие VIP & PID. Решил начать с композита хотя бы с одним интерфейсом,та же ситуация VID 0000 PID 0002 мой usb_conf.h: (VID PID заменил на XXXX, MANUFACTURE,DEVICE,SERIAL...тоже, извините) CODE//! Device definition (mandatory) #define USB_DEVICE_VENDOR_ID 0xXXXX #define USB_DEVICE_PRODUCT_ID 0xXXXX #define USB_DEVICE_MAJOR_VERSION 1 #define USB_DEVICE_MINOR_VERSION 1 #define USB_DEVICE_POWER 100 // Consumption on Vbus line (mA) #define USB_DEVICE_ATTR (USB_CONFIG_ATTR_BUS_POWERED) // (USB_CONFIG_ATTR_SELF_POWERED) // (USB_CONFIG_ATTR_BUS_POWERED) // (USB_CONFIG_ATTR_REMOTE_WAKEUP|USB_CONFIG_ATTR_SELF_POWERED) // (USB_CONFIG_ATTR_REMOTE_WAKEUP|USB_CONFIG_ATTR_BUS_POWERED) //! USB Device string definitions (Optional) #define USB_DEVICE_MANUFACTURE_NAME "manufacturer" #define USB_DEVICE_PRODUCT_NAME "prod" #define USB_DEVICE_SERIAL_NAME " ... " //! To define a Low speed device //#define USB_DEVICE_LOW_SPEED //! To authorize the High speed #if (UC3A3||UC3A4) #define USB_DEVICE_HS_SUPPORT #endif #define UDC_VBUS_EVENT(b_vbus_high) main_vbus_action(b_vbus_high) //user_callback_vbus_action(b_vbus_high) #define UDC_SOF_EVENT() main_sof_action() //user_callback_sof_action() #define UDC_SUSPEND_EVENT() main_suspend_action() //user_callback_suspend_action() #define UDC_RESUME_EVENT() main_resume_action() //user_callback_resume_action() //! Mandatory when USB_DEVICE_ATTR authorizes remote wakeup feature #define UDC_REMOTEWAKEUP_ENABLE() main_remotewakeup_enable() //user_callback_remotewakeup_enable() #define UDC_REMOTEWAKEUP_DISABLE() main_remotewakeup_disable() //user_callback_remotewakeup_disable() //! When a extra string descriptor must be supported //! other than manufacturer, product and serial string //#define UDC_GET_EXTRA_STRING() main_extra_string() //! Control endpoint size #define USB_DEVICE_EP_CTRL_SIZE 64 //! Number of interfaces for this device #define USB_DEVICE_NB_INTERFACE 1 // 1 or more #define USB_DEVICE_MAX_EP 2 // 0 to max endpoint requested by interfaces / //! Interface callback definition #define UDI_HID_GENERIC_ENABLE_EXT() main_generic_enable() #define UDI_HID_GENERIC_DISABLE_EXT() main_generic_disable() #define UDI_HID_GENERIC_REPORT_OUT(ptr) main_hid_report(ptr) #define UDI_HID_GENERIC_SET_FEATURE(report) main_hid_set_feature(report) #define UDI_HID_REPORT_IN_SIZE 64 #define UDI_HID_REPORT_OUT_SIZE 64 #define UDI_HID_REPORT_FEATURE_SIZE 4 #define UDI_HID_GENERIC_EP_SIZE 64 //! Endpoint numbers definition #define UDI_HID_GENERIC_EP_OUT (1 | USB_EP_DIR_OUT) #define UDI_HID_GENERIC_EP_IN (2 | USB_EP_DIR_IN) //#define UDI_HID_GENERIC_STRING_ID 4 // JTAGICE3 CMSIS-DAP #define UDI_HID_GENERIC_EP_NB 2 //! Interface number #define UDI_HID_GENERIC_IFACE_NUMBER 0 //! USB Interfaces descriptor structure #define UDI_COMPOSITE_DESC_T \ udi_hid_generic_desc_t udi_hid_generic //! USB Interfaces descriptor value for Full Speed #define UDI_COMPOSITE_DESC_FS \ .udi_hid_generic = UDI_HID_GENERIC_DESC //! USB Interfaces descriptor value for High Speed #define UDI_COMPOSITE_DESC_HS \ .udi_hid_generic = UDI_HID_GENERIC_DESC //! USB Interface APIs #define UDI_COMPOSITE_API \ &udi_api_hid_generic подскажите куда копать.Спасибо
  7. LPC2364 EMAC

    пошел топорным методом - подогнал пример из FreeRTOS, сверил построчно, у меня делается ровно то-же самое, только через самописную индус-стайл библиотеку. проверяю пример без подвязки lwip, тупо выводя в терминал полученный пакет или посылая arp(arp стопроцентно нормальный, взят из проекта на stm32, там всё работало, весь самописный стэк протоколов отрабатывал как положено) результат - пакет якобы ушел, а wireshark молчит, регистр TSV0 вещает, что у меня length error(вычесть единичку из длины пакета перед тем как писать в дескриптор не забыл), пакеты якобы, приходят но у всех поголовно length error, crc error и т.д. и самое расчудесное, что если посмотреть что же там пришло... оказывается у пакетов перманентно пустые первые 12 байт, тоесть мак-адреса Езернет пакета куда-то исчезают или в лучшем случае иногда пакет забит 0xFF в первых 63 байтах.
  8. LPC2364 EMAC

    Здравствуйте,форумчане. Пытаюсь запустить EMAC на LPC2364, PHY KSZ8031RNL, инициализация проходит как положено, PHY стартует, на REF_CLK 50Мгц как положено,пробовал два варианта объвяления массивов дескрипторов-буфферов и в обоих вариантах получаю следующее - вижу что пакеты приходят и якобы уходят(про адский косяк с тем что в данной серии первый отправленный пакет не обновляет TxConsumeIndex регистр молчу) но судя тому что есть в памяти по адресам буферов и контрол дескрипторов... там ничего не меняется, тоесть я получаю 4 пакета, отпускаю их вижу(инкрементирую соответстующий регистр), что пришли еще пакеты,но судя по выводу в терминал данные там не меняются, тоесть RxProduceIndex показывает что пришли новые пакеты а данные старые, тоесть EMAC не записал полученные пакеты и в памяти в дебаге я вижу старые данные по соответствующим адресам. проект в IAR 6.50.3, icf стандартный для Flash, ничего не менял, BASE адрес EMAC DMA 0x7FE00000, все дескрипторы и буферы сидят в следующих 16кб, как и положено. Вот оба варианта попытки инициалзицации: Этот своровал из примера для 24xx Код/* EMAC Memory Buffer configuration for 16K Ethernet RAM. */ #define NUM_RX_FRAG         4           /* Num.of RX Fragments 4*1536= 6.0kB */ #define NUM_TX_FRAG         2           /* Num.of TX Fragments 3*1536= 4.6kB */ #define ETH_FRAG_SIZE       1536        /* Packet Fragment size 1536 Bytes   */ #define ETH_MAX_FLEN        1536        /* Max. Ethernet Frame Size          */ /* EMAC variables located in 16K Ethernet SRAM */ #define RX_DESC_BASE        0x7FE00000 #define RX_STAT_BASE        (RX_DESC_BASE + NUM_RX_FRAG*8) #define TX_DESC_BASE        (RX_STAT_BASE + NUM_RX_FRAG*8) #define TX_STAT_BASE        (TX_DESC_BASE + NUM_TX_FRAG*8) #define RX_BUF_BASE         (TX_STAT_BASE + NUM_TX_FRAG*4) #define TX_BUF_BASE         (RX_BUF_BASE  + NUM_RX_FRAG*ETH_FRAG_SIZE) /* RX and TX descriptor and status definitions. */ #define RX_DESC_PACKET(i)   (*(unsigned int *)(RX_DESC_BASE   + 8*i)) #define RX_DESC_CTRL(i)     (*(unsigned int *)(RX_DESC_BASE+4 + 8*i)) #define RX_STAT_INFO(i)     (*(unsigned int *)(RX_STAT_BASE   + 8*i)) #define RX_STAT_HASHCRC(i)  (*(unsigned int *)(RX_STAT_BASE+4 + 8*i)) #define TX_DESC_PACKET(i)   (*(unsigned int *)(TX_DESC_BASE   + 8*i)) #define TX_DESC_CTRL(i)     (*(unsigned int *)(TX_DESC_BASE+4 + 8*i)) #define TX_STAT_INFO(i)     (*(unsigned int *)(TX_STAT_BASE   + 4*i)) #define RX_BUF(i)           (RX_BUF_BASE + ETH_FRAG_SIZE*i) #define TX_BUF(i)           (TX_BUF_BASE + ETH_FRAG_SIZE*i) это первоначальный Код#pragma location="EMAC_DMA_RAM" #pragma data_alignment=4 ETH_DescrTypeDef RxDscrTab[ETH_RXBUFNB];/* Ethernet Rx Descriptor */ #pragma location="EMAC_DMA_RAM" #pragma data_alignment=4 ETH_DescrTypeDef TxDscrTab[ETH_TXBUFNB];/* Ethernet Tx Descriptor */ #pragma location="EMAC_DMA_RAM" #pragma data_alignment=8 ETH_RxStatusTypeDef RxStatusTab[ETH_RXBUFNB];/* Ethernet Rx Status */ #pragma location="EMAC_DMA_RAM" #pragma data_alignment=4 ETH_TxStatusTypeDef TxStatusTab[ETH_TXBUFNB];/* Ethernet Tx Status */ #pragma location="EMAC_DMA_RAM" #pragma data_alignment=4 uint8_t Rx_Buff[ETH_RXBUFNB][ETH_RX_BUF_SIZE]; /* Ethernet Receive Buffer */ #pragma location="EMAC_DMA_RAM" #pragma data_alignment=4 uint8_t Tx_Buff[ETH_TXBUFNB][ETH_TX_BUF_SIZE]; /* Ethernet Transmit Buffer */ Гугление результатов не дало, кто-то натыкался на такую проблему в lpc17xx,но там как раз парень писал буферы в общее ОЗУ, куда у EMAC доступа нет. Подскажите в чем может быть дело. Спасибо.
  9. Веселье продолжается - судя по всему один из буфферов у меня был сдохший, заменил его, теперь вываливается ошибка "Failed to get CPU status after 4 attempts" через косоль jlink могу посмотреть ID чипа, а прошиться не могу. Перепроверил все пины осциллографом, всё дергается, ответ от чипа приходит. Плата точно рабочая, проц тоже, проверял на оригинальном RLINK. лог файл приатачил
  10. Здравствуйте,уважаемые. Спаял схемку по схеме в приатаченном файле, прошился, через IAR обновился,устройство нормально опознается,но прошить ничего не могу, проверка показала что пины TRST и RST всегда HIGH( в разводке ошибок нет точно, отпаивался полностью и проверял голые ноги ), соответственно JTAG-sequence в отсутсвие дергания на этих ногах невозможен.Проверил остальные пины осциллографом,всё корректно работает, клок тикает, данные передаются. утилиткой от IAR для jlink коммандами r0/r1 и trst0/trst1 нормально дергаю ногами, тоесть ноги не мертвые. Подскажите что делать. Спасибо.
  11. str912FAW44 в raisonance ride7

    Пытаюсь заставить работать данный контроллер в данной среде. что сделал - скачал библиотеку версию 2.1, в ней был готовый проект для ride7 дергающий одной ножкой по порту с задержкой, открываю его, пытаюсь откомпилировать и залить в контроллер и получаю ошибки типа: 91x_init.o:(.flashtext+0x0): first defined here obj\91x_init.o: In function `_startup': (.flashtext+0x0): multiple definition of `_startup' C:\Program Files (x86)\Raisonance\Ride7\Ride\lib\ARM\STR91xFA_Lib_v2.1\project\RIDEv7\obj\91x_init.o:(.flashtext+0x0): first defined here collect2: ld returned 1 exit status тоесть,как я понимаю в среде уже объявлен дефолтный стартап и компилируемый стартап конфликтует(логичный вопрос как тот кто писал в компании st этот пример и библиотеку умудрился его скомпилить...) . убираю инит, проект компилится но не стартует, судя по дебаггеру майн функция не стартует, все регистры GPIO и SCU остаются дефолтными, компилирую инит отдельно, исключаю его из компиляции и линковки, прописываю его как деволтный стартап - результат тот-же, тоеть ничего не работает, помогите разобраться. другую среду для разработки использовать не могу так-как использую R-Link а он работает только с родным софтом... по крайней мере как его прикрутить к IAR я не нашел. контроллер не дохлый, пробовал работать с ним через str9x.h, дефолный стартап и прямое обращение к регистрам SCU GPIO, всё нормально. Заранее спасибо.