Jump to content

    

defunct

Свой
  • Content Count

    3825
  • Joined

  • Last visited

Community Reputation

0 Обычный

About defunct

  • Rank
    кекс
  • Birthday 03/17/1969

Контакты

  • ICQ
    127802410

Информация

  • Город
    Киев

Recent Profile Visitors

3825 profile views
  1. XMEGA еще жива?

    Цитата(V_G @ May 29 2017, 02:36) По-моему, я запускал xmegу в SPI в режиме мастера с DMA лет 6-7 назад. Для этого надо использовать не основной SPI, а UART в режиме SPI да разумеется UART в режиме SPI запустить можно. Только у меня в проекте были задействованы все UART'ы, и три SPI.. Для связи с ARM'ом SPI в режиме Slave для обеспечения duplex 5 Mhz канала. В итоге выяснилось, что у XMEGA большие проблемы с SPI TX'ом. В режиме Slave'а передается эхо принятого символа (возможно из-за приоритета DMA который ниже чем приоритет ядра проца, и DMA просто иногда не успевает засунуть новый символ во-время)... workaround - для проблемы с эхо из тех что находил в инете - передавать в режиме мастера, а в мастере не работает DMA вообще. Ситуация патовая... Насколько помню, после экспериментов получилось добиться устойчивого двунаправленного обмена по DMA в режиме SPI MODE0/2 на частоте 1Mhz... (Mode1/3 - эхо символы выскакивают на более низких частотах.. т.е. надо было бы понижать частоту SPI еще больше). В общем SPI модуль XMEGA немного огорчил, в остальном чип хороший.
  2. XMEGA еще жива?

    Цитата(sigmaN @ Mar 8 2017, 22:25) Например stm8s003f3p6 стоит дешевле Tiny13 (цены Aliexpress), а по возможностям камень с Mega8 тягается и часто перетягивает )) Но то что с AVR пора слазить это точно. Уж точно ни о каких XMega речи идти не должно, тут только STM32! Куда-то зачем-то слазить )) Это вопрос скорей религиозный. Я до сих пор в новые проекты закладываю ATmega128 / XMegaA3. Как периферийный сопроцессор цены им нет. В xmega есть недочет - невозможность работы SPI в режиме мастера через DMA, но для сопроцессора быть мастером и не надо.. также у меня в ходу mega16/168 и tiny13 для новых разработок. Ровная архитектура, куча наработок, просто уникальные супер-скоростные для своей мощности GPIO. Всякий овощ полезен, как говорится, и слазить только потому что что-то где-то вышло на пару центов дешевле это несерьезно, разве только у вас там миллионные партии. Цитата(Сергей Борщ @ Mar 9 2017, 08:55) Под рукой - согласен. Но когда под рукой нет ничего подходящего и стоит выбор - что заказывать, А или Б, при этом Б (ХМега) имеет неадекватно высокую цену, а А имеет бОльшие возможности при более низкой цене - выбор очевиден. Позвольте не согласиться ) Выбор не очевиден ) Наработки часто играют более важную роль. Если у меня есть отлаженная и проверенная годами библиотека под Б, и нет отлаженной библиотеки под A. Я выберу Б, пусть A имеет бОльшие возможности, дешевле и быстрее. Время на отладку / переписывание библиотеки под A, а также учет архитектурных/схематических/электрических отличий может вылиться в куда бОльшие затраты, чем экономия пусть $200-$300 на партии в 100шт. ) Даже если опустить время на допиливание библиотек, риск наткнуться на непредвиденную ситуацию очень высок. (На моей практике был случай - заложил камень побыстрее/подешевле и с бОльшим числом возможностей в устройство электро-учета. а он возьми и начни зависать )) не спас ни внутренний watchdog, ни внешний. В итоге 3 выезда на объект, перепрошивка всех устройств, аж пожалел что не поставил туда проверенную мегу. фикс был понижение тактовой частоты на 10% от указанной производителем максимальной)... PS: очень рад видеть что форум живет, и старожилы (zltigo, prottoss, Сергей, и многие другие) все еще здесь!
  3. Помогите с lm3s8962

    Цитата(a_L_ex @ Oct 21 2014, 11:11) Добрый день. Ситуация такова, после загрузки в МК программы становится невозможным подключиться и работать через ULINK2. Программатор просто не подключается ни из-под LabView, ни из-под Кейла. Выдает ошибку "cannot enter debug mode" при попытке загрузки новой программы? Может есть способ стереть загруженную программу, какой то hard-reset? Возможно что-то с PLL нахомутано, либо программа отключает JTAG пины.. Чип можно разлочить (стереть содержимое флеша и вернуть JTAG в рабочее состояние) специальной последовательностью переходов из JTAG в SWD режим и обратно при актином сигнале Reset. Смотрите секцию datasheet "Recover a "Locked" Microcontroller". J-Link это умеет делать непроизвольно. Достаточно 4 раза запустить и закрыть J-Link Commander при зажатом Reset (он там при старте пытается найти МК и переключается между JTAG и SWD, что приводит к разлочиванию МК). Цитата(a_L_ex @ Oct 27 2014, 10:46) Я правильно понял что с помощью LM Flash Programmer и подключения через USB можно стереть прогу из чипа и разблокировать JTAG? Думаю нет, там этот LM Flash Programmer хочет какую-то особенность в схематике которая есть только в TI'ых демо платах. Через ULINK у меня разлочить не получилось. J-Link'ом без проблем как описал выше.
  4. LM3S9B92 ethernet TX dma

    Цитата(Alex11 @ Oct 6 2014, 21:26) Вы не видите фрейма вообще, или не видите правильного? В Loopback отловил, что уходит неправильный фрейм. Ошибка тут оказалась: Код (U32 *)&pTxBuf,             ^ был напуган Спасибо за направление.
  5. LM3S9B92 ethernet TX dma

    Цитата(Alex11 @ Oct 6 2014, 21:26) Вы не видите фрейма вообще, или не видите правильного? Спасибо, это хороший вопрос! Натолкнул меня на мысль включить режим loopback и посмотреть, что там получается. Отпишу как будет результат.
  6. LM3S9B92 ethernet TX dma

    Доброго времени суток! Добрался до девайса, который спроектировали 4 года назад уже и чипы "not recommended for new design" LM3S9B92 ревизия C5, но партия железок спаяна, поэтому есть острая необходимость доделать. Сделал RX по DMA, как отдельный процесс, работает довольно гладко. А с TX беда. По статусам показывает что фрейм отправлен, но реально фрейм не уходит. Привожу упрощенный кусочек кода (оттестированный). Пакет на отправку однотипно подготавливается для случая с DMA и без DMA. вот этот кусочек подготавливает данные к отправке: КодU32  buffer[2048 >> 2];  // 2KB to conver whole TX fifo void nic_TxPacket(U8 *pPacket, U32 size) {     U16 len;     U8 *pTxBuf = (U8 *)buffer;     len = size - (ETHERNET_HDR_LEN);  // size - 14 (TX len should contain data payload len w/o eth hdr)     memcpy(&pTxBuf[0], &len, sizeof(len));  // put frame len first     memcpy(&pTxBuf[2], pPacket, size);       // copy rest of the packet Подготовленный фрейм лежит в pTxBuf. Вот этот кусочек работает на ура (здесь проц напрямую пишет в TX fifo подготовленный фрейм): Код    U32 *p = (U32 *)pTxBuf;     size += 2; // inc by "len" field     size = (size + 3) >> 2; // convert size into word count     while(size--)         MAC_DATA_R = *p++;     MAC_TR_R = MAC_TR_NEWTX;     while(MAC_TR_R & MAC_TR_NEWTX); если пытаюсь то же самое отправить по DMA - получаю статус DMA - все ОК, статус MAC - Tx complete. Но фрейма на выходе с девайса не вижу.. Код    pdma_RunAutoTxfer32(EMAC_TX_DMA_CHANNEL,                         (U32 *)EMAC_FIFO_ADDR,   // ==0x40048010                         (U32 *)&pTxBuf,                         size + 2);     while(udma_Busy(EMAC_TX_DMA_CHANNEL));     MAC_TR_R = MAC_TR_NEWTX;     while(MAC_TR_R & MAC_TR_NEWTX); код функции "pdma_RunAutoTxfer32(): Код#define EMAC_RX_DMA_CHANNEL   6 #define EMAC_TX_DMA_CHANNEL   7 #define udma_Busy(Chan)     (UDMA_ENASET_R & (1 << (Chan))) typedef struct tagUDMA_TASK_DESCRIPTOR {     V32  Src;        // contains pointer to the end of the source buffer (inclusive)     V32  Dst;        // contains pointer to the end of the dest buffer (inclusive)     V32  Ctrl;     V32  reserved; } UDMA_TASK_DESC, *PUDMA_TASK_DESC; void pdma_RunAutoTxfer32(U32 Chan, U32 *pDst, void *pSrc, U32 size) {     U32 cnt = (size + 3) >> 2;     U32 ChanMask = (1 << Chan);     PUDMA_TASK_DESC pTask = udma_GetPrimaryEntry(Chan);     cnt -= 1;     pTask->Src = (U32)pSrc + (cnt << 2);  // pointer to the last word inclusive     pTask->Dst = (U32)pDst;  // for PDMA TX dest is peripheral data reg     pTask->Ctrl = 0         | UDMA_CHCTL_DSTINC_NONE         | UDMA_CHCTL_DSTSIZE_32         | UDMA_CHCTL_SRCINC_32         | UDMA_CHCTL_SRCSIZE_32         | UDMA_CHCTL_ARBSIZE_1         | (cnt << UDMA_CHCTL_XFERSIZE_S)         | UDMA_CHCTL_XFERMODE_AUTO ;     UDMA_ALTCLR_R  |= ChanMask; // use primary entry (clear alternate)     UDMA_ENASET_R  |= ChanMask; // enable channel     UDMA_SWREQ_R   |= ChanMask;  // generate soft request to push channel } Буду благодарен если меня ткнут носом, что я делаю не так!
  7. Деление int на size_t

    Цитата(sonycman @ Nov 6 2013, 15:25) Но разве не должно быть наоборот - если хоть один операнд знаковый, то результат становится знаковым? не должно быть наоборот. Результат приводится к большей разрядной сетке. unsigned имеет больше значащих разрядов чем signed.
  8. Чудеса

    Цитата(ILYAUL @ Nov 17 2012, 18:52) Кодsbi PORTB, PD0 CBI DDRB,    PD0            ; Меняем вывод на ввод А для чего делается короткий пульс (запись 1 в порт когда пин настроен на вывод)? подозреваю что если есть внешний pull-up достаточно управлять только DDR'ом.
  9. Цитата(Сергей Борщ @ Dec 7 2012, 10:07) Коротко: чтобы отлаживать ту программу, которая будет работать в боевом устройстве, а не "программу, похожую на боевую".... Если программа написана правильно, то никакой разницы в ее работе с оптимизацией или без - нет. Отсюда и -O0 и -Os - обе боевые прошивки, -O0 чуть медленнее и чуть толще. ЦитатаОй, да никто не мешает отлаживать оптимизированный C-код. Я отлаживаю оптимизированный C-код постоянно, но это от безысходности. Неоптимизированный у меня просто не помещается в девайс отсюда я ставлю на первое место именно этот пункт. Cравнивая удобство того как отлаживать оптимизированный и неоптимизированный - то однозначно подымаю две руки за то, что неоптимизированный код отлаживать удобнее. Переползание на оптимизированный код произойдет само собой, не нужно с этого начинать. Цитатано рядом всегда открыто окно дизассемблера не всегда есть под рукой второй или хотя бы wide monitor, иногда приходится работать и с 1280x1024, съеденное дизассемблером место отнимает значительную часть у окошка с С-кодом.
  10. Цитата(Nixon @ Jun 1 2010, 13:56) P.S. Вот маленькая таблица сравнения "устойчивости" различных алгоритмов. http://defectoscopy.com/results.html Для каких ip доступна ссылка? для "ua" - закрыта
  11. Цитата(tvi @ Dec 4 2012, 13:25) Вообще то я пытаюсь уйти от ассемблера переходя на Си, но видать от ассемблера не просто уйти! Просто собирайте с отключенной оптимизацией для отладки -O0. После отладки не забудьте оптимизацию вернуть на место -Os / -O2 Цитата(Сергей Борщ @ Dec 4 2012, 11:05) Отлаживайте дизассемблерный текст. А смысл? Такое разве только от безысходности: - -O0 прошивка не влазит в чип - баг проявляется с оптимизацией и не проявляется без оной. - не хватает производительности без оптимизации Во всех других случаях много эффективней будет отлаживать C код чем дизассемблер.
  12. Цитата(demiurg_spb @ Dec 6 2012, 08:04) avr-gcc 4.7.2 #pragma pack(push, 1) Дык, pack=1 это значение по-умолчанию. А как насчет pack = 4. Принимает без вопросов и warning'ов, но на деле выравнивания на 4 не делает (в 4.2.2).
  13. http://www.avrfreaks.net/index.php?name=PN...874&start=0 У меня правда установлен GCC4.2.2 так что не имел возможности посмотреть работает ли упомянутый багфикс в 4.3 / 4.4. Но то что выравнивание не работает в 4.2.2, а также игнорируется #pragma pack это есть такое.
  14. Цитата(Juli05 @ Dec 4 2012, 06:31) Пожалуйста, кто знает как добавить бинарный файл в проект AVR Studio на подобие RAW BYNARY IMAGE в IAR. Чтобы обращаться к файлу как к массиву. Спасайте!))) Не встречал такой опции в студии. Да и IAR позволяет подключить всего один такой файл, а бывает нужно много. В общем случае для подключения бинарнарников к чему угодно можно использовать программу-конвертер, которая преобразует бинарник в Сишный или в asm'овый (требуемый язык) массив результат конвертера (.c/ .asm и т.п.) потом просто подключаете к проекту. запуск конвертера можно прописать в makefile так что при сборке проекта все требуемые бинарники предварительно сконвертируются автоматически.
  15. Цитата(sKWO @ Nov 20 2012, 09:19) По моему вы задействовали лишний вывод. PD3 можно исключить. Вместо него включить PD2 и при наступлении условия выводить "0" Так пропадет возможность мониторить входной сигнал во время генерации собственного.