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

arttech

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

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

  • Посещение

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


  1. Нет, всё верно, у меня контроллер MMC, на котором висят, как eMMC память, так и SD карточка, для которых в определённое время и нужно конфигурировать контроллер.
  2. А где можно взять документацию для версии 2.0, а то смотрю везде CSD имеет одинаковую структуру, как для MMC версии 3, так и для версии 4.
  3. Подскажите, как определить объём для uSD (интерфейс MMC4.4.1) карты объёмом свыше 2ГБ? Для карт 2ГБ и ниже размер высчитывался из полей структуры CSD . Для более крупных объёмов надо оперировать структурой EXT_CSD, которая занимает 512 байт. При попытке чтения этой структуры (CMD8), MMC контроллер не возвращает ничего.
  4. Подскажите, где можно раздобыть спецификацию на телефонный интерфейс (обычный телефонный аппарат), для того, чтобы можно было спроектировать FXO порт. Может кто знает простое схемотехническое решение такого порта? Заранее благодарен.
  5. PCI <-> SPI

    Необходимо сделать сопряжение устройства SPI с PCI шиной. Подскажите, какое решение лучше использовать? Хотелось бы поставить один мост PCI-SPI и забыть... но таковых пока найти не удаётся
  6. Размещение функции в RAM

    Как лучше и проще можно разместить функцию в RAM памяти средствами IAR? До сегодняшнего дня делал это так #pragma segment="RAM" void Print_flash() @ "RAM" { ................. } и далее сегмент "RAM" прописывал в .xcl файле в разделе "Read/Write memory". Всё работает, но такой подход не устраивает.
  7. RSEG(-z)

    "Pragma" только объявляет сегмент, а далее компилятор объединяет весь код, определённый под указанным сегментом... #pragma segment="MYSEG" 2 void FUNK_1() @ "MYSEG" { ... } void FUNK_2() @ "MYSEG" { ... } void FUNK_3() @ "MYSEG" { ... } В процессе линковки, линковщик размещает данные сегменты согласно указанным в файле с расширением .xcl Важно знать карту памяти данного МК, чтоб правильно указать границы, как уже приводил пример выше -P(CODE)CODE,ISR_FUNC,DATA16_C,MYSEG=8000-FFBD Отсюда видно, что сегмент "MYSEG" размещён в пространстве адресов 0x8000 - 0xFFBD.... Можно сделать размещение более наглядным -P(CODE)CODE=8000-9000 -P(CODE)ISR_FUNC,DATA16_C=9100-B000 -P(CODE)MYSEG=C000-FFBD Только в данном случае мы должны быть уверены, что код указанных сегментов вместится в указанные рамки. Для более полного понимания, какие данные размещаются и в каких сегментах воспользуйтесь EW430_CompilerReference.pdf Segment reference, стр. 241
  8. RSEG(-z)

    Вот пример, как я размещаю сегменты в памяти. Они размещаются один за другим это в MSP серии F2xxx -P(CODE)CODE,ISR_FUNC,DATA16_C,MYSEG=8000-FFBD т.е. размещать разрешено как угодно, главное, чтоб было установлено выравнивание адреса === #pragma segment="NAME" [align] align - Specifies an alignment for the segment part. The value must be a constant integer expression to the power of two. Description Use this pragma directive to define a segment name that can be used by the segment operators __segment_begin and __segment_end. All segment declarations for a specific segment must have the same memory type attribute and alignment. === я это делаю так: #pragma segment="MYSEG" 2
  9. RSEG(-z)

    Попробуйте сделать так: -P(CODE)CODE=3100-FFBF,10000-1FFFF -P(CODE)M1E1_add_M2E2=3100-FFBF,10000-1FFFF Дело в том, что main находится в том же сегменте, вы изначально указали свой сегмент, вот стартап на него и переходит
  10. Ага, а импульсный ток можно ограничить дросселем... Правильно ли будет такое решение для ограничения тока?
  11. Как известно, кислотные автомобильные аккумуляторы надо заряжать до напряжения 14.2 - 14.7В зарядным током 10% от ёмкости аккумулятора. Т.е. источник заряда должен иметь на выходе порядка 15В с возможностью регулировки выходного тока. Правильно ли будет заряжать аккумулятор, подавая на него 15В действующего значения напряжения, когда амплитудное значение будет составлять скажем 30В? Регулировка тока при этом будет осуществляться методом ШИМ.
  12. Огромное спасибо за советы и полезные идеи :)
  13. Да, идея хорошая и что самое главное достоверно можно определить наличие дыр в коде.. Но вот хотелось бы узнать, как сам компилятор заставить определить перерасход RAMa...
  14. определение расхода RAM

    Добрый день! Подскажите, как можно определить какое количество памяти RAM требуется в процессе выполнения программы и не превышает ли программа своими запросами установленное количество на МК? Использую MSP430F2471, RAM памяти - 4 КБ. Иногда замечал, что в процессе девайс начинал вести себя непредсказуемо и логики в работе никакой не было. После уменьшения количества длин буферов всё ставало на свои места. В MAP файле под глобальные переменные расходуется "3 670 bytes of DATA memory (+ 61 absolute )", но вот в процессе работы включаются в работу процедуры, где запрашивается RAM из стека. Так вот, как убедиться, что процедуры не превышают запрашиваемый объём RAM?
  15. К счастью тему дребезга освоил давно, поэтому позаботился чтоб этот фактор никак не влиял (формировал импульсы другим МК). Прерывание в этом МК настраивается только по перепаду либо от 0 к 1, либо наоборот..
  16. Поделитесь опытом, кто знает. Использую МК CC2430. Настроено внешнее прерывание. При перепаде уровня на ножке (внешнее воздействие) происходит двойной вызов процедуры обработки прерывания. Вот как описывается этот обработчик. // IAR 8051 #define HAL_MCU_LITTLE_ENDIAN() __LITTLE_ENDIAN__ #define HAL_ISR_FUNC_DECLARATION(f,v) \ _PRAGMA(vector=v) __near_func __interrupt void f(void) #define HAL_ISR_FUNC_PROTOTYPE(f,v) \ _PRAGMA(vector=v) __near_func __interrupt void f(void) #define HAL_ISR_FUNCTION(f,v) \ HAL_ISR_FUNC_PROTOTYPE(f,v); HAL_ISR_FUNC_DECLARATION(f,v) void InterruptInit(void) { //Активация внешнего прерывания на нулевом порту P0_1 PICTL |= 0x09; P0IFG &= ~0x02; P0IE = 1; //Port 0 interrupt Enable } static ISR_FUNC_PTR fptr; //Привязка процедуры обработки к вектору прерывания void ButIntConnect(ISR_FUNC_PTR isr) { istate_t key; HAL_INT_LOCK(key); fptr = isr; HAL_INT_UNLOCK(key); } //обработка события при нажатии на кнопку void push_but(void) { but = TRUE; index++; } HAL_ISR_FUNCTION(P1_ISR,P0INT_VECTOR) { if (fptr != NULL){ (*fptr)(); P0IFG &= ~0x02; } } //======= MAIN ====== void main() { InterruptInit(); ButIntConnect(&push_but); while(TRUE){ if(but == TRUE){ but = FALSE; } }
  17. Судя по всему, да их не хватает.. Поменял в установках чип на XC95144XL всё прошло как по маслу... Спасибо за совет :)
  18. Подскажите пожалуйста возможный недосмотр при проектировании схемы под ПЛИС XC9572XL. Процессы: Synthesize и Translate проходят без проблем На этапе сборки "Fit" системы выдаёт ошибку: "Mapping a total of 59 equations into 4 function blocks.......................................................................... ................................................................................ . .....................................ERROR:Cpld:892 - Cannot place signal XLXN_16. Consider reducing the collapsing input limit or the product term limit to prevent the fitter from creating high input and/or high product term functions. .......... ERROR:Cpld:868 - Cannot fit the design into any of the specified devices with the selected implementation options. " Проверял так: разбивал схему на 2 логически законченных части - всё работает, вместе - нет. Работаю в серде Xilinx ISE 8.1i. В приложении сам файл схемы, который не удаётся провести через все этапы проверки и сборки.source_scheme.sch
  19. Есть одно "НО". Мобильник автоматом будет настраиваться на предлагаемый оператором диапазон частот... Мне же нужно установить частоту генерации жёстко и таким образом проверить правильность принятия данных
  20. В данный момент собираю приёмник, способный вести приём в диапазоне 890-915 МГц (GSM). Задача состоит в том, чтоб проверить правильность приёма данных. Для этого я хоу: - ссинтезировать эталонную последовательность байтов - настроиться на частоту из диапазона 890-915 МГц - модулировать данные GMSK модуляцией - принять приёмником, всё это дело демодулировать и убедиться в правильности приёма Есть ли готовые такие синтезаторы или можно как-нибудь самому собрать данный девайс используя готовые чипы трансиверов?
  21. Подскажите, кто знает: Какой размер буфера порта GSM Data/Fax у телефона Sony Ericsson-a? Думаю модель называть нет смысла, т.к. буфер имеет одинаковый объём.
  22. LPC2138, конфликт IRQ

    Отличная идея с запретом всех прерываний. Вот этот вариант ещё и не опробовал. Спасибо. А эти ошибки надо суметь увидеть, я пока не в состоянии это сделать т.к. велосипед едет, но иногда спотыкается... :) Хотя проблему уже устранил привязавшись на все 100% к аппаратному SPI. До этого мне нужны были отдельные сигналы MISO_STRB и MOSI_STRB и я их сделал отдельно переключая портовые выводы. На данном этапе свёл всё к одному синхростробу..
  23. LPC2138, конфликт IRQ

    Подскажите, как можно обойти нижеописанную проблему. Контроллер производит обработку по 2м прерываниям IRQ. 1. UART0- приоритет 0; 2. Timer0 - приоритет 1; В процессе передачи данных участвует SPI (вызывается процедура). Один раз в 20мсек эта подпрограмма (приёма/передачи по SPI) вызывается и работает около 1мсек по времени. Если всё оставить как должно быть, то прерываясь процессор вносит незначительные погрешности в задержках приёма/передачи по SPI и в результате процесс приёма/передачи срывается (в данном случае виноват не LPC, а приёмник). Но Timer0 и UART при этом работают великолепно. Чтоб избежать срыва в работе при передаче по SPI я на время выполнения процедуры запрещаю прерывания по UART (U0IER = 0x00;). При этом как минимум одно прерывание по UARTу успевает проскочить, но т.к. прерывание дезактивировано, то в буфер UARTa просто добавится плюс один символ, который я потом в процессе смогу забрать самостоятельно, что в дальнейшем и делаю. Но появляется другая проблема, через каждые 20-40 секунд контроллер начинает перезапускаться. Как избежать конфликта с прерыванием по UARTу и как устранить перезапуск МК?
  24. Всё абсолютно идентичное, схемы 1:1 и прошиты одной прошивкой. Соединены обычно: Tx1 - Rx2, Tx2 - Rx1, GND - GND
×
×
  • Создать...