Jump to content

    

prgjz

Участник
  • Content Count

    62
  • Joined

  • Last visited

Everything posted by prgjz


  1. STM32G07x STM32G08x

    STM32L5 FDCAN из Cube L5 не работает у меня с PCAN https://www.peak-system.com/PCAN-USB-FD.365.0.html?&L=1 Выдаёт ощибку на CAN бусе. Может кто нибудь сказать что я не прав? IMXRT1064 не делает проблем. NXP SDK имеет бит тайминг калькулятор. В Cube MX я не нашёл такого... Читал рекомендации STM32L5 для FDCAN 80Mhz такт подавать. Но как то глупо иметь 110MHz а использовать только 80. https://www.rutronik.com/development-stories/rutdevkit-stm32l5/ Вообще молодцы! У низ FDCAN пример 20Mhz?!? Буду очень признателен если кто меня прояснит.
  2. Спасибо большое! Как-то проглядел я...
  3. Доброго времени! Пытаюсь запустить SPI NAND Flash TC58CVG2S0HxAI на LPC4088 от NXP. Вроде всё просто но не работает правильно. ID читается. Стирание, запись и чтение происходит без ошибок. Но какой блок бы я не считывал — они содержат то что я в последний зписывал. Сохраняется и после сенятия/подачи напряжения. Пишу всегда блоком 4224 Байт (ECC включена). Может кто поделится опытом что я не так делаю? NAND.zip
  4. Получился у кого порт для IAR M4? У меня для LPC1769 без проблем... А вот LPC4087 только без FPU работает. Посмотрел в scmRTOS\port\cortex\mx-gcc\ и сделал изменеимя в os_target_asm.s os_start ...... #if __ARMVFP__ LDR R4, [R0, #(4 * 15)] // Load process entry point into R4 ADD R0, R0, #(4 * 17) // emulate context restore #else LDR R4, [R0, #(4 * 14)] // Load process entry point into R4 ADD R0, R0, #(4 * 16) // emulate context restore #endif вообще не стартует. Если LDR R4, [R0, #(4 * 14)] и ADD R0, R0, #(4 * 16) оставить то TProc1::exec() вызывается правильно но PendSV_Handler при первом вызове в конце в летит и переключение не происходит. Моя ошибка - не доглядел... Изменил в os_target.cpp #ifdef __ARMVFP__ StackPointer -= 6; // emulate "push LR,R12,R3,R2,R1,R0" *(--StackPointer) = 0xFFFFFFFDUL; // exc_return: Return to Thread mode, floating-point context inactive, execution uses PSP after return. StackPointer -= 8; // emulate "push R4-R11" #else StackPointer -= 14; // emulate "push R14,R12,R3,R2,R1,R0,R11-R4" #endif и всё пошло!!!
  5. __STREXH return 1

    Спасибо, помогло...
  6. __STREXH return 1

    Не могу разоброаться с функцинй __STREXH. NXP LPC1769. __no_init static volatile unsigned short can_a_tx_count; // at address 0x10007bb0 volatile unsigned ttt; void can_a_route_buf(unsigned char * buf, unsigned int len) { ..... ttt = __STREXH(can_a_tx_count+len,&can_a_tx_count); // возвращает всегда 1, а хотелось бы 0 } Что делаю не так?
  7. А обратно? CAN->MCR &= ~CAN_MCR_INRQ; // в нормальный модус
  8. JLink_J-TraceARM.pdf "Multiple devices in the scan chain"
  9. упс... минимальный стек больше при FPU. Заработало но результат как и у kosyak©: При TN_SUPPORT_FPU = 0 и TN_SUPPORT_FPU = 1 работает без проблем. А вот при TN_SUPPORT_FPU = 2 падает в HardFault на инструкции VMOV S0,R0. R0 = 0x320. Уже день пробился безрезультатно. Меня собственно устраивает TN_SUPPORT_FPU = 1 :) Не подскажет ли кто как в EWARM заставть компилятор для определённой функции не делать код для FPU (#pragma например)?
  10. Да, мне нравится она! Использую в старых проектах. Перешёл на TNKernel в частности из-за tn_net.
  11. Кто нибудь добился успеха с TN_SUPPORT_FPU? Прграмма с TN_SUPPORT_FPU > 0 ведёт себя как ревнивая женщина (LPC4088). Неужели нет альтернативы FreeRTOS?
  12. Такая же проблема. Я думал что это прблема IAR и связался с суппортом. Выяснилось что проблема у J-Link железа V6.00, V8.00 без проблем. J-Link FW V6.00 без проблем с JLinkARM.dll до версии 474a включительно. Жду ещё ответа от IAR...
  13. Всё отлтчно работает: C166v753 и MDK5.03 совместно установлены. При запуске проекта для С166 (у меня в частности XC167CI) ругается "Error: Device not found" но при нажатии на кнопку "OK" перестаёт ругаться и всё работает. Лечилка одна и таже. Выбираю Target C166 "Prof. Developers Kit/RealView MDK". Версия лекарства не известна, датируется 29.07.2010 13:18.
  14. Кто нибудь подружил уже TNNet с STM32 и/или LPC4375? Администрация спрашивает сколько усилий мне для этого надо...
  15. Здравствуйте! TNKernal на LPC1778 без проблем. Решил прменять на LPC4078 из за плавающей точки. Если в настройках EWARM 6.50.2.4 LPC1778 на LPC4078 меняю - всё ещё хорошо. С добавлением FPU=VFPv4 программа ведёт себя как ревнивая женщина.... fpu_init(); вызывается. Выражения в плавающей точкой применяются только в одной задаче. Кто может сталкивался с подобной проблемой? Проведите ликбез пожалуйста.
  16. #define DMA_TOUT 10000000 Ещё ни разу не выалился по таймауту. Сама запись через DMA относительно постоянна по времени. SanDisk Extreme Pro 20Mhz CLK: 2мс ждёт в цикле для 16ти секторов (8kbyte) for (i = DMA_TOUT; i; i--) { if (LPC_GPDMA->RawIntTCStat & (1<<(GPDMA_MCI_WRITE_CHANNEL))) { /* Data transfer finished. */ break; } } В начале использовал прерыания чтобы не ждать. Но для поблочного переноса нужно дать для того чтоб в конце переноса CMD12 (Stop Read or Write transm.) послать. При использовании ОСи не проблема подождать в низко приоритетной задаче. Я использую TNKernel которую могу только порекомендовать. Без ОСи ждать действтительно не лучший вариант.
  17. Сожалею но не могу секунду ждать. У меня логгер 25600Hz 32 канала записывает. Только я не совсем понимаю зачем тогда поблочная запись если секунду ждать можно? Пробовал заменить на for(volatile unsigned int i = 100; i;--i); работает.
  18. Всё просто: сначала (CMD13+CMD25) а потом в цикле равном количеству секторов for (j = 0; j < cnt; buf += 512, j++) { /* Set MCI Transfer registers. */ LPC_MCI->DATATMR = DATA_WR_TOUT_VALUE; LPC_MCI->DATALEN = 512; /* Start DMA Memory to Peripheral transfer. */ DmaStart (DMA_WRITE, buf); LPC_MCI->DATACTRL = 0x99; for (i = DMA_TOUT; i; i--) { if (LPC_GPDMA->RawIntTCStat & 0x01) { /* Data transfer finished. */ break; } } if (i == 0) { /* DMA Data Transfer timeout. */ return (__FALSE); } if (cnt == 1) { break; } /* Wait until Data Block sent to Card. */ while (LPC_MCI->STATUS != (MCI_DATA_END | MCI_DATA_BLK_END)) { if (LPC_MCI->STATUS & (MCI_DATA_CRC_FAIL | MCI_DATA_TIMEOUT)) { /* Error while Data Block sending occured. */ return (__FALSE); } } /* Wait 2 SD clocks */ for (i = WAIT_2SD_CLK(__CPUCLK); i; i--); } И в конце CMD12
  19. В MCI_Cmd_WriteBlock() numOfBlock и не нужна. Я тоже не знаю зачем они её туда передают... В этой функции другая ошибка: cmdIf.Argument = blockNum * BLOCK_LENGTH; А должно что то типа if(SDHC) cmdIf.Argument = blockNum; else cmdIf.Argument = blockNum * BLOCK_LENGTH; А вот в MCI_WriteBlock(), которая в свою очередь вызывает MCI_Cmd_WriteBlock() стоит LPC_MCI->DATALEN = BLOCK_LENGTH*numOfBlock; Кстати сегодня вышел новый релиз в котором исправлены некоторые ошибки в lpc177x_8x_mci.c Посмотрите на http://sw.lpcware.com/index.php
  20. Делал, запись работает а вот читать поблочно не получается. На LPCWare.com есть пример который я в начале взял за основу. Но у меня примерно после 7 секунд почему то не вызывалось прерывание MCI и программка зависала не получив флаг окончания переноса данных.
  21. NXP USB Host Stack + FatFs - FAT file system module R0.09 на LPC1769 работает стабильно. Проблемы были в начале с фукцией Host_EnumDev(). Пришлось неного доработать чтобы все Флэшки (в крайнем случае которые у меня в наличии были) опознавались.
  22. LPC1768 и RTC

    Работает на LPC1769 и LPC2387: void rtc_init( void ) { /// Enable power for RTC PCONP_bit.PCRTC = 1; // CTC reset and select RTC clock from 32 Khz.oscillator #if __CORE__ < 7 if(LPC_RTC->CCR != 0x11) LPC_RTC->CCR = 0x12; #else // If RTC is stopped, clear STOP bit. if ( LPC_RTC->RTC_AUX & (0x1<<4) ) { LPC_RTC->RTC_AUX |= (0x1<<4); LPC_RTC->CCR = 0x12; } #endif // Clear RTC interrupt register LPC_RTC->ILR = 0xFF; // Dasable all the alrams. LPC_RTC->AMR = 0xFF; // Enable only second count interrupt. LPC_RTC->CIIR = 0x01; // Disable all subsecond interrupts. #if __CORE__ < 7 // Enable RTC LPC_RTC->CCR = 0x11; #else LPC_RTC->CALIBRATION = 0; LPC_RTC->CCR = 0x11; #endif rtc_read(0); }
  23. Рабочий проект выложить не могу, а отдельно сделать к сожалению сейчас нет времени. Выкладываю свои изменения в стеке Юрия которому, пользуясь случаем, огромное спасибо за эту работу. Всё остальное в tcp.cpp. Основное изменение это возможность одновременно использовать для Cortex и ARM7 проектов. MAC address первые три NXP Semiconductors (0x00,0x60,0x37) остальные берутся из серийного номера. Успеха! tn_net.zip tcp.zip
  24. Да, выложил в указанном топике. В tn_net_cfg.h #define USE_PHY_KS8721 или #define USE_PHY_DP83848C выбрать.
  25. У меня без проблем получилось. И изменения не значительные типа #if __CORE__ < 7 #define MEM_DRV_START_ADDR 0x7FE00000u //-- LPC2368 #else #define MEM_DRV_START_ADDR 0x20080000u //-- LPC1768 #endif lpc_net.zip