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

mantech

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

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

  • Посещение

  • Победитель дней

    1

Весь контент mantech


  1. Прерывания ARM946E

    В таком случае НАВИС техподдержку не оказывает? Раз девайс их и более нигде не встречается.
  2. LPC2478 и SD карта

    Карта подключена по SPI или в режиме SD(4битном)? Просто команды инициализации разные. То, что в файле исходников работало в режиме SPI на аврках и стмах, думаю на лпсишках тоже должно работать. Может что еще недосмотрели?
  3. LPC2478 и SD карта

    Вот пример инициализации с поддержкой всех типов карт(MMC SD SD2.0 SDHC) Использую в своем микроПЛК уже 2 года, люди вставляют разные карточки и вроде как не жалуются sdmmc.txt
  4. LPC2478 и SD карта

    FatFS все равно какой тип флешки. Это решается на уровне disk initialize в этой процедуре флешка инициализируется на низком уровне, в дальнейшем файловую систему интересуют только функции чтения, записи и состояния диска. Когда я только начал освоение флешек и фатфс, то чановская функция инициализации мне не понравилась (трудна в понимании и использует таймера, я писал для аврки, а там таймеры на вес золота :rolleyes: ) плюс небыло поддержки НС карт.
  5. Да, тоже заработало. Были проблемы с доступом к СД-карте(слишком быстро) и УСБ запрос некорректно отрабатывался. Теперь все пишет и читает одновременно, хоть из 5и файлов
  6. USB Mass Storage

    В смысле, УСБ-хосту? Ему на это какбы пофиг Он сам "говорит" об этом файловой системе, по моему это было в diskstatus или ioctl уже подзабыл немного. Там нужно выставить флаг readonly.
  7. USB Mass Storage

    В карте проверки на readonly нет!! Это должен делать контроллер. В УСБ-флешках есть такая функция, реализуется либо переключателем на корпусе либо программно, с помощью проги для встроенного контроллера (сам видел для чипов phison и alcor) так же флеха может сама перейти в только чтение при повреждении внутреннего нанда.
  8. STM32F4 + FatFS + uSD

    Я ртосины не использую по принципиальным причинам :rolleyes: , но расколупывание либы от ст привело к мысли о том, что USBProcess() постоянно "крутить" нет смысла, мало того, из-за этого еще и иногда зависает, поэтому решил разбить ее на 2 части - то, что отвечает за первоначальную инициализацию, и остальное за дисконнект. Как только диск замонтировался - первую часть отключаю, как флешку выняли - вторую соотв. Зависания и ошибки исчезли.
  9. LPC2478 и SD карта

    с 1Гиговой флешкой всё работает норм, а вот с 2Гиговой чет не хочет... Скорее всего карта 2го типа, 1й тип - самые старинные флешки, работают с упрощенной инициализацией, как ММС. 2й тип требует дополнительной ACMD, а НС еще и CMD8. Посмотрите в эту сторону... Возможно еще то, что флешки бывают "медленные", в смысле их контроллер. Раз такое бывало, проверил так - пробовал инициализацию 3 раза через секунду, так некоторые со 2го, а одна даже только с 3го раза запускалась.
  10. Пользуясь случаем про этот модуль. Вопрос - возможны-ли одновременные операции на одном физ. диске когда 1 или 2 файла читаются, а один пишется. На разных дисках работает нормально, а вот когда на одном, иногда сносится FAT. Еслт какая-то плюшка _FS_LOCK пока детально не разбирался, описание у чана - 3 предложения, примеров не видел. Может у кого есть что сказать? ЗЫ. да, файловые операции происходят в одном потоке, без ртосин, прерываний и многозадачности.
  11. Каюсь, не силен в языках...(человеческих) :laughing:
  12. Мы же электронщики, а не политики, надо быть выше всего этого B) Присоединяюсь к вопросам, интересно, будет ли у стмок расширено разрешение экрана встроенного LCD контроллера. 800х600 по современным меркам маловато как-то, а хотелось бы очень что-то поболее :rolleyes: Хотя если помечтать немного, то и встроенный LVDS был бы очень кстати ;)
  13. Нашел глючок у Чана небольшой :rolleyes: Делаю многодисковую систему, при монтировании диска выскакивала ошибка, если был не 0й диск. Ошибка в неучете изменения указателя пути и имени файла. Вот пофиксенная функция f_mount: FRESULT f_mount ( FATFS* fs, /* Pointer to the file system object (NULL:unmount)*/ const TCHAR* path, /* Logical drive number to be mounted/unmounted */ BYTE opt /* 0:Do not mount (delayed mount), 1:Mount immediately */ ) { FATFS *cfs; int vol; FRESULT res; const TCHAR* cpath; //добавил копию указателя cpath=path; //тоже vol = get_ldnumber(&path); if (vol < 0) return FR_INVALID_DRIVE; cfs = FatFs[vol]; /* Pointer to fs object */ if (cfs) { #if _FS_LOCK clear_lock(cfs); #endif #if _FS_REENTRANT /* Discard sync object of the current volume */ if (!ff_del_syncobj(cfs->sobj)) return FR_INT_ERR; #endif cfs->fs_type = 0; /* Clear old fs object */ } if (fs) { fs->fs_type = 0; /* Clear new fs object */ #if _FS_REENTRANT /* Create sync object for the new volume */ if (!ff_cre_syncobj(vol, &fs->sobj)) return FR_INT_ERR; #endif } FatFs[vol] = fs; /* Register new fs object */ if (!fs || opt != 1) return FR_OK; /* Do not mount now, it will be mounted later */ res = find_volume(&fs, &cpath, 0); /* Force mounted the volume - ИСПРАВЛЕНО! */ LEAVE_FF(fs, res); }
  14. Embedded lua ?

    Да, я так и делал - структуры было лень ваять в парсере, а 32х битные числа и плавающую точку упаковывал в массив из 2х элементов по 16 бит каждый. Пользователь этого чуда не видел, а думал что с 32х биткой работает
  15. Embedded lua ?

    Да, с частотой я че-то погорячился Виртуальная машина не стандартная конечно. Задумывалось сие чудо для простых задачек, типа принять пакетик с уарта, проверить парой IFов, и дрыгнуть парой ножек, но чтоб не писать постоянные инициализации портов АЦПшек УАРТов и прочей периферийки, вобщем избавится от рутины. Плюс были заинтересованные клиенты, и у них запрос типа "не умею программить контроллеры, а вот пару -тройку сишных команд нарисовать могу" :rolleyes: - таким пришлось в самую пору... Делалось все очень просто - сишный текст парсился компилятором в командной строке типа GCC и создавался бинарник на сд-карту, потом эта карта вставлялась в контроллер и запускалась прога. Потом я уже "наворотил" там всяких менюшек, протоколов связи и т.п. Сделал систему прерываний прооптимизировал код и сделал 3х задачную систему... ЗЫ. Единственное что могу сказать по поводу ресурсов - 1 оператор у меня занимал примерно 3-5 псевдоассемблерных команд, а каждая команда 2 байта в памяти. Быстродействие примерно 3000 таких команд в сек. Соотв выполнялось 500-900 операторов в сек. Исключение операторы с большим кол-вом параметров. Т.е. из 12кб ОЗУ, хватало на 700-1000 операторов, согласитесь, в такой проге можно не только светодиодами помигать))))))
  16. Новый STM32F4

    Интересно, на основе его ЖК-контроллера можно сделать вывод в формате vga на моник, синхросигналы есть, r g b завести на цап простейший, а то у него собственное макс. разрешение 800х600, а надо бы 1024х768, моник умеет растягивать, а контроллер - нет...
  17. Embedded lua ?

    Делал виртуальный ПЛК на аврке, мега 1284, у нее на все про все 16кб ОЗУ, причем на ней крутилось 3 задачи, ФС, 2 уарта в пакетном режиме, и еще кое, что по мелочи. В первой задаче работала прога, которая обслуживает платежную систему(купюрник+монетник+хоппер) и логи в файл, вторая - интерфейс с ПК для настройки, и 3я задача - сам процесс приготовления сиропа. Скорость задач не очень большая, порядка 400-600 команд.сек, но для 8и битки, на частоте 11059200Мгц вполне неплохо. Сейчас хочу сделать на АРМе - порядка на 2 быстрее и памяти в нем дохрена. Так что все не так плохо. Единственный минус такого подхода - система понимает псевдоассемблер, который должен подготовить компилятор на ПК.
  18. Цена сего девайса просто поражает... :( Хотя идея не плохая сделать все, что нужно на мелкой платке.
  19. DAC & DMA в stm32f407

    Я так понял, что в этом примере все сделано в духе кудрявых стшных индусов, а именно, таймер6 тактирует ЦАП, который в свою очередь дает пинок ДМА, чтоб тот заложил новое значение в его регистр, и т.п. А можно сделать в данном случае по уму, как - таймер пинает ДМА, тот берет значение и просто закладывает его в регистр ЦАПа, который работает в режиме без триггера? Так же проще получается, другое дело, может ли так работать контроллер. Если да, то может кто поделится командами инициализации таймера №6 в режиме тактировки им ДМА?
  20. DAC & DMA в stm32f407

    Приветствую осваивающих данный сабж. Может кто сталкивался, нужно запустить ЦАП в режиме ДМА, но только один его канал! (нужен канал №2) Пробовал код из стшного примера: void DAC_Ch2_SineWaveConfig(void) { DMA_InitTypeDef DMA_InitStructure; /* DAC channel2 Configuration */ DAC_InitStructure.DAC_Trigger = DAC_Trigger_T6_TRGO; DAC_InitStructure.DAC_WaveGeneration = DAC_WaveGeneration_None; DAC_InitStructure.DAC_OutputBuffer = DAC_OutputBuffer_Enable; DAC_Init(DAC_Channel_2, &DAC_InitStructure); /* DMA1_Stream5 channel7 configuration **************************************/ DMA_DeInit(DMA1_Stream5); DMA_InitStructure.DMA_Channel = DMA_Channel_7; DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)DAC_DHR12R2_ADDRESS; DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)&Sine12bit; DMA_InitStructure.DMA_DIR = DMA_DIR_MemoryToPeripheral; DMA_InitStructure.DMA_BufferSize = 32; DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord; DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord; DMA_InitStructure.DMA_Mode = DMA_Mode_Circular; DMA_InitStructure.DMA_Priority = DMA_Priority_High; DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable; DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull; DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single; DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single; DMA_Init(DMA1_Stream5, &DMA_InitStructure); /* Enable DMA1_Stream5 */ DMA_Cmd(DMA1_Stream5, ENABLE); /* Enable DAC Channel2 */ DAC_Cmd(DAC_Channel_2, ENABLE); /* Enable DMA for DAC Channel2 */ DAC_DMACmd(DAC_Channel_2, ENABLE); } Работает только если проинициализирован подобным образом и первый канал, без него ни в какую, и наоборот первый без второго не работает. В чем фишка??
  21. А им он не нужен. Это только для памяти.
  22. Надо попробовать B) Проверил - вроде работает, единственное, пришлось поставить __no_init без которого проц вешался намертво, видать компилер и правда что-то пытался туда вдуть.... Вопрос - когда записываю в эту память, туда все пишется и читается, но при выкл. питания информация искажается. Там что-то еще нужно "включать" или что? сразу скажу - параллельно работают часы, которые не сбиваются, и батарейка хорошая 3в... Все разобрался, там надо еще регулятор питания подключить было. Все работает, всем спасибо! :a14:
  23. Как раз и нужна, чтоб при откл питания данные сохранялись. "Тогда нужно еще как-то сказать линкеру, чтоб не инициализировал эти данные." - за это я как раз меньше всего волнуюсь - там есть защита от записи, которая не дает писать туда до тех пор, пока ее специально не отключишь... Это я понял, только очень желательно разместить там эти массивы, которые я написал, а то придется больше 150 обращений к массиву править как через указатель, а это не айс :( ЗЫ. А можно сделать так, что массив int разместить с адреса BKPSRAM_BASE и с того-же адреса массив char? Это не будет эквивалентно union?
  24. У долбанутого ИАра там #pragma location = адрес Правда для переменных прокатывает, а вот с юнионом никак не хочет...
  25. Вопрос еще один, как "сказать" ИАРу, что вот это - union {Uint16 GlobalVar_w[VarCount];unsigned char GlobalVar_b[VarCount*2];} s_var; #define GlobalVar s_var.GlobalVar_w #define GlobalVarb s_var.GlobalVar_b должно находиться c адреса 0x40024000 до ...?
×
×
  • Создать...