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

Galizin

Участник
  • Публикаций

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

  • Посещение

Репутация

0 Обычный
  1. stm32 ADC Hard_Fault

    http://infocenter.arm.com/help/index.jsp?t...a/CIHFDJCA.html Может поможет локализовать
  2. В документе по таймерам 3 серии сказано что в для tim17, tim16 в качестве trigger out используется OC.
  3. Microdrive P-ATA, чем заменить?

    Здравствуйте. У меня тот же плейер и та же ситуация. Получилось у Вас что нибудь с compact flash?
  4. ADC прерывания в STM32

    Цитата(Acvarif @ Feb 6 2012, 15:54) Не работает. Правда в инициализации задействовано DMA (в DMA данные попадают как положено - успешно выводятся на COM1). Но одно другого (DMA и прерывания по окончанию преобразования) вроде не должно касаться. Гляньте код кому не лень. Может чего напутано в инициализации прерываний или в самоой void ADC_IRQHandler. EOCIE в регистре ADC_CR1 ? Или что то типа ADC_ITConfig(ADC1, ADC_IT_EOC, ENABLE) согласно Вашему стилю? Правда это все для 1 серии. Но для второй наверняка так же.
  5. тормозит DMA - 2

    Может кроме DMA использовать таймер дополнительно. ДМА будет писать в теневой регистр. По таймеру аппаратно будет запускаться DAC - данные из теневого регистра будут переноситься регистр DAC. Нужно реализовать небольшое отставание записи данных в DAC от запуска самого преобразования. Тогда сигнал будет выводится с отставанием почти в период, зато случайные небольшие задержки не будут влиять на результат - есть почти целый период, что бы выполнить эту операцию. Если ЦАП внешний возможно придется организовать внешнюю защелку. Из защелки в DAC данные должны попадать по сигналу таймера (ШИМ).
  6. STM32 – вопросы – проблемы - решения.

    Цитата(wedmeed @ Jul 18 2011, 09:50) На выходных набрел на статью в эйзиэлектроникс про прошивку как раз моего чипа. Про версию чипа прислал мне 0x1F1F. Вот эти два предложения противоречат друг другу. С одной стороны чип тот же, с другой - другой идентификатор. 1F1F выглядит странно. Попробуйте уменьшить скорость порта.
  7. STM32 flash loader demonstrator.

    Цитата(Serj78 @ Jun 20 2011, 14:24) Есть успешный опыт использования его из командной строки? Да есть. http://we.easyelectronics.ru/STM32/ispolzo...-stm32f100.html Маленькая программка зашилась.
  8. Совсем простой программатор

    Цитата(wedmeed @ Jun 6 2011, 07:43) 1. Поддерживает ли софтина такой девайс (STM32F100C4) ? Если нет, то какую использовать? Почти. Требуется доработка конфигурационных файлов http://we.easyelectronics.ru/STM32/ispolzo...-stm32f100.html Цитата(wedmeed @ Jun 6 2011, 07:43) 2. Дайте, пожалуйста, схему элементарного программатора через UART. st3232 datasheet Hello world я через него залил. Программу ~14k не удалось залить - не проходит проверку. Возможно нужны провода минимальной длины или спалил чего. Поскольку купил stm32vldiscovery - в причинах не разбирался.
  9. Proteus+MSP430

    Цитата(NoName @ Mar 10 2009, 13:33) Этого добра и краем глаза не видал. Будут новости отпишитесь, интересно посмотреть. В 7.6 proteus появилась модель MSP430. Похоже WD таймет в интервальном режиме там не работает. IO ports вроде работают. Утверждается, что загружается ELF, но на самом деле пишет, что не поддерживает этот формат. C hex работает. Но отлаживать неудобно. Есть дизассемблер.
  10. DTOA на MSP430

    Вот еще маленькая функция преобразования float в char* Это не окончательный вариант и может не работать. Но идея прозрачна - выделение целой части потом вычитание этого целого и умножение на 10 и так в цикле.[attachment=15893:attachment]
  11. прерывание от P1 и P2

    Я столкнулся с тем что порядок настройки регистров тоже имеет значение. Сделал установку всех битов в беспорядке - прерывание не генерировалось. Скопировал с примеров - все работает как часы. Примеры от gcc. В одном из них есть работа по прерыванию от порта. Такое впечатление что P2IE должен устанавливаться в последнюю очередь, что бы генерировалось прерывание.
  12. Исходники программ и библиотек

    Библиотека 32 разрядной плавающей точки MSP430 для gcc без аппаратного умножителя. Для работы нужно слинковаться с библиотекой. Добавляет чуть больше 1к кода но это гораздо меньше чем стандартная библиотека gcc. Переработанный пакет FPP из состава iar. Внутри считается как и в оригинале. Перед и после работы каждая функция выполняет преобразование к iee754. Определены 2 набора функций - один описан в fpp.h. Второй совпадает с набором названий gcc. Нет проверки на ошибки.[attachment=15409:attachment]
  13. Прерывания TimerA

    Цитата(CSB @ Nov 13 2007, 13:12) На сколько я понял, вы работаете с DCO. Но таймер тактируется от ACLK вместо SMCLK. TASSEL1 следует поменять на TASSEL2. Да таймер тактируется с ACLK - это место в коде закомментарено. TASSEL2 в msp430f1121 не используется. Обозначен как unused bite ЦитатаTACCTL0 = CM1|CAP|CCIE; // Capture on_falling CCI0A interrupts захват будет по переднему фронту, а не по заднему как Вы написали. slau049.pdf описание TACTLx 10 Capture on falling edge То есть если первый бит установлен - то по спаду. Есть всего два макроса для CM - CM1 и CM0 предполагаю, что CM1 является более старшим битом. ЦитатаЕсли нет входной частоты, то кто же выведет контроллер из режима lpm0? Если нет захвата - нет и прерывания от него. Но частота то на CCI есть. Синхронный режим не включен - сам CCI мог бы и тактировать. А если частота CCI превышает чатоту таймера - эначит не каждый спад CCI будет распознан? Как то криво получается. Я полагал что такое получается только в случае синхронной работы захвата. А в асинхрнном режиме флаг прерывания выставляетс я асинхронно и независимо от тактирвоания TA. На то он и асинхронный режим.
  14. Прерывания TimerA

    Здравствуйте. Я пытаюсь мерить частоту с помощью таймера А. На вход таймера я подаю искомую чатоту - для примера SMCLK или ACLK. На вход захвата TACCR0 подаю сигнал с частотой 42,3 ( 128/3 ) Hz. В первом прерывании по захвату я сохраняю захваченное значение. По истечении 64 прерываний я снова читаю захваченное значение Нахожу разность с сохраненным - это количество входных импульсов за 3/128*64 Sec. На основании этого делением расчитываю частоту. При бездействии ухожу в lpm0. Если входная частота есть - то все меряется как следует. А вот если входная частота отсутствует - то не происходит вызова прерывания по CCR0 - Контроллер как бы подвисает. Вот исходный код - если тактировать от ACLK без кварца(закомментарено) - то 0 частота не меряется. КодLONG TimerSavedValue; WORD    Capt0SavedCount; WORD    CurrentHiTimer; WORD    Capt0Count;   LONG    CountFromPrevTime; void main() {   WDTCTL = WDTPW + WDTHOLD;             // Stop watchdog timer   P1DIR |= LCD_CLK|LCD_DI;              // Set P1.0 to output direction   P2DIR |= LCD_POWER;      P2OUT |= LCD_POWER;           // LCD Power on   P1OUT &= ~(LCD_CLK|LCD_DI);   P1SEL = CLOCK42HZ; // P1.1 to timer      DCOCTL = DCO0|DCO1|DCO2;   TACCTL0 = CM1|CAP|CCIE; // Capture on_falling CCI0A interrupts   // Clock from SMCLK - measure frenq of DCO - must use LPM1 for active DCO   TACTL = TASSEL1|MC1|TAIE|TACLR; //SMCLK Continuous interrupt_on_overflow clear      //TACTL = TASSEL0|MC1|TAIE|TACLR; //ACLK Continuous interrupt_on_overflow clear   _EINT();      do   {     _BIS_SR(LPM0_bits); /* Wait end of measure */     _NOP();        {       FLOAT F;                  F = CountFromPrevTime * 128.0 / 3 /Capt0SavedCount;       DisplayFloat(F);       if ( (BUTTON_POWER & P1IN) == 0 )       {         DCOCTL = DCOCTL + DCO0;         if ( DCOCTL == 0 )         {           BCSCTL1 = (BCSCTL1&~(RSEL0|RSEL1|RSEL2)) + ((BCSCTL1+RSEL0)&(RSEL0|RSEL1|RSEL2));         }       }     }        }while(1); } static WORD GetHiTAWord(WORD TACaptValue) {   WORD RetVal = CurrentHiTimer;      if ( (SWORD)TACaptValue > 0 && ( (TACTL & TAIFG) ) )   {     RetVal++; /* Correct TA owerflow if need */   }   return RetVal; } /* Owerflow TA ISR */ #if !defined(__GNUC__) interrupt [TIMERA1_VECTOR] void TAOwerflow(void) #else interrupt (TIMERA1_VECTOR)  TAOwerflow(void) #endif {      if ( TAIV ) // Pseudo Reading TAIV !!!!     CurrentHiTimer++; } /* CCR0 capture vector */ #if !defined(__GNUC__) interrupt [TIMERA0_VECTOR] void TACapture(void) #else interrupt (TIMERA0_VECTOR)  TACapture(void) #endif {   Capt0Count++;   if ( Capt0Count >= 64 )   {      t_Timer Value;      Value.Word[LO] = TACCR0;      Value.Word[HI] = GetHiTAWord( Value.Word[LO] );          // Calculate tick count from prev time     CountFromPrevTime = Value.Long - TimerSavedValue;     // Save previon value     TimerSavedValue = Value.Long;     // Save time measure interval ticks.     Capt0SavedCount = Capt0Count;     Capt0Count = 0;     _BIC_SR_IRQ(LPM4_bits); /* Exit from all LPM */       } }