khorght
Участник-
Постов
11 -
Зарегистрирован
-
Посещение
Репутация
0 Обычный-
Здравствуйте,уважаемые. Никак не получается заставить работать 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 не срабатывает, прерывание не выстреливает.
-
Кое-как нашел один косяк - оказывается для 1256 USB CLOCK SRC можно(нужно?) выставить PLL1 которые заранее настроен на частоту 48,может можно и сразу нарпямую голый кварц тыкать,не проверял, а вот на 3256 такое уже не работает, надо выставлять источником просто кварц (если установлен 8, 12, 16 Мгц) и никаких множителей для PLL1 48МГц не надо, нигде в описании этого вроде не встречалось и не отложилось или отложилось не туда))) видимо ASF последней версии как-то сам множит как надо частоту, непонятно правда(чисто из любопытства) почему нельзя для ЮСБ использовать второй кварц, может мне основной приспичит что-то вроде 11.48 от которого USB уже не стартанет... теперь по крайней мере девайс стал опознаваться и слать декриптор устройства нормально,хотя дескрипторы интерфейсов ни в какую не желает слать хосту и остается открытым вопрос почему в оригинальных файлах фрэймворка для вендор класса висят два интерфейса, ну вот не нужен мне там лишний интерфейс и всё тут, который к тому же вообще заглушка какая-то в нем эндпойнтов нет))) ЗЫ. как же все-таки хорошо и удобно работать с LUFA, на первый тестовый проект с USB при условии что еще искал как и на чем накропать хостовую часть времени потратил около дня...
-
Огромнейшее спасибо за ссылку,но к сожалению у меня x64,придется покопаться в старых ноутах.
-
Да я уже атмеловские пробую VID PID, попробовал их пример композитка из мыши и массторэдж... где-то что они видимо правят помимо того что они описывают в аппноутах. плата...разводку уже думал перетравить на всякий случай и развести поплотнее,кабель добротный,не китай за 100 руб,но если я правильно понял ASF, что на мой дилетантский взгляд странно внутри этого ада - там в любом случае добавится конфигурация для FS, по крайней мере судя по Vendor class если я вообще отключу FS то у них макросами тогда закрыты все функции чтения записи в эндпойнты,только репорты остаются. как всегда... хотелось нахрапом сляпать быстренько и переключиться на что-то другое,а получится как с LAN...зато TCP/IP стэк весь перелопатил и даже свою реализацию рабочую накидал ))) дело за малым найти рабочую ссылу на не жадный BusHound или может Wireshark USBCap выручит. Спасибо за подсказки и удачных вам проектов,друзья.
-
Что с одним что с двумя интерфейсами результат одинаков - VID 0000 PID 0002, устройство сообщило об ошибке и было отключено,но насколько я понимаю я могу сделать стоклько интерфейсов сколько взбредет(учитывая конечно количество эндпойнтов в контроллере). Непонятно с чего но вдруг стало хотя бы определять, после того как стал жестко править структуры для Дувайса,Интерфейсов и прочего под свои значения, у меня там почти все нестандартные оказались, итог - определяет VID PID а интерфейсы наглухо не видит, перебросил проект с 1256 на 3256(наконецто допаял тестовую платку),так как в идеале мне нужно ХайСпид а Не Фулл(1256 только на Фулл работает)... итог - опять нагухо виснет в VID 0000. Насчет BusHound спасибо,попробую посмотреть.
-
Здравствуйте,уважаемые. пытаюсь написать проект композитного ЮСБ устройста HIDGeneric + Vendor , отдельно как сингл интерфейс устройства стартуют(тоесть настройка кварца,инициализация и т.д. проходят корректно поэтому эту часть не выкладываю как заведомо рабочую), при попытке впихнуть их оба в композит девайс устройство не опознается системой, видится как VID 0000 PID 0002 и останавливается системой как выдавшее ошибку, естесственно я задаю совершенно другие VIP & PID. Решил начать с композита хотя бы с одним интерфейсом,та же ситуация VID 0000 PID 0002 мой usb_conf.h: (VID PID заменил на XXXX, MANUFACTURE,DEVICE,SERIAL...тоже, извините) //! 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 подскажите куда копать.Спасибо
-
пошел топорным методом - подогнал пример из FreeRTOS, сверил построчно, у меня делается ровно то-же самое, только через самописную индус-стайл библиотеку. проверяю пример без подвязки lwip, тупо выводя в терминал полученный пакет или посылая arp(arp стопроцентно нормальный, взят из проекта на stm32, там всё работало, весь самописный стэк протоколов отрабатывал как положено) результат - пакет якобы ушел, а wireshark молчит, регистр TSV0 вещает, что у меня length error(вычесть единичку из длины пакета перед тем как писать в дескриптор не забыл), пакеты якобы, приходят но у всех поголовно length error, crc error и т.д. и самое расчудесное, что если посмотреть что же там пришло... оказывается у пакетов перманентно пустые первые 12 байт, тоесть мак-адреса Езернет пакета куда-то исчезают или в лучшем случае иногда пакет забит 0xFF в первых 63 байтах.
-
Здравствуйте,форумчане. Пытаюсь запустить 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 доступа нет. Подскажите в чем может быть дело. Спасибо.
-
MT-link v5 не могу заставить работать
khorght ответил khorght тема в Отладочные платы
Веселье продолжается - судя по всему один из буфферов у меня был сдохший, заменил его, теперь вываливается ошибка "Failed to get CPU status after 4 attempts" через косоль jlink могу посмотреть ID чипа, а прошиться не могу. Перепроверил все пины осциллографом, всё дергается, ответ от чипа приходит. Плата точно рабочая, проц тоже, проверял на оригинальном RLINK. лог файл приатачил -
MT-link v5 не могу заставить работать
khorght опубликовал тема в Отладочные платы
Здравствуйте,уважаемые. Спаял схемку по схеме в приатаченном файле, прошился, через IAR обновился,устройство нормально опознается,но прошить ничего не могу, проверка показала что пины TRST и RST всегда HIGH( в разводке ошибок нет точно, отпаивался полностью и проверял голые ноги ), соответственно JTAG-sequence в отсутсвие дергания на этих ногах невозможен.Проверил остальные пины осциллографом,всё корректно работает, клок тикает, данные передаются. утилиткой от IAR для jlink коммандами r0/r1 и trst0/trst1 нормально дергаю ногами, тоесть ноги не мертвые. Подскажите что делать. Спасибо. mtlink5.pdf -
Пытаюсь заставить работать данный контроллер в данной среде. что сделал - скачал библиотеку версию 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, всё нормально. Заранее спасибо.