Jump to content

    

V_M_Luck

Участник
  • Content Count

    55
  • Joined

  • Last visited

Posts posted by V_M_Luck


  1. Что-то я читал, читал по subj и так ничего не прояснил.

    Я правильно понимаю, чтобы мой девайс с двумя bulk endpoints успешно заработал под win xp, 7, необходимо просто правильно написать inf?

    Где можно внятно почитать, как именно правильно писать inf?

    Смущает момент подписывания inf. Это как-то обходится?

     

    Заранее благодарен за любую информацию.

  2. Если отсчёты по абсциссе идут равномерно, то достаточно сравнивать вторые разности.

    Это понятно. Я так и начал делать, но шумы не дают четко определить эту точку.

     

    Вам нужно найти место перегиба или сделать первую производную монотонной?

    Я имел в виду, можно уточнять место перегиба.

     

    Что, в данном случае, автор темы понимает под термином "излом" - ему необходимо уточнить.

    Уточняю. Не знаю перегиб там или излом. Более четких картинок не получается. Может и перегиб.

    Если уйти в физику, то в этой точке удар. Так-что может и излом. С другой стороны датчик, выдающий электрический сигнал, не сможет среагировать мгновенно - так что перегиб.

     

    Исходя из позы стрелки на картинке, рискнул предположить, что автора интересуют точки перегиба. (правда, судя по вопросу, он пока не знает, что на картинке их две)

    Интересует именно эта. А на картине их три.

     

    Вообще я думал так.

    Аппроксимирую чем-нибудь попроще, найду производные и все ОК. Можно идти в этом направлении? Чем таким аппроксимировать?

  3. Доброго времени суток!

    Задача такая.

    Есть довольно гладкая линия. На ней есть неярко выраженный излом. Плюс кое-какой несильный шум. Посоветуйте вычислительно простой алгоритм определения момента излома (номера отсчета).

    Сигналы периодически повторяются. Наверное можно как-то накапливать и корректировать результат.

    post-11420-1307620320_thumb.png

    Заранее благодарен.

  4. Необходимо подключить инкрементальный энкодер к таймеру TIM2 на STM32. Сигналы шумные. Вырыл в даташите, что по входам можно включать фильтры, которые представляют собой счетчики (filter downcounter), тактируемы клоком fDTS. Вопрос в том, что это за клок? Где про него что-нибудб сказано в даташите?

    :smile3046:

  5. Подскажите, как в C-Spy в макросе запустить отлаживаемый процессор? IAR ARM 5.2, MT-LINK.

    То есть, бряк сработал, макрос что-то выкинул в лог и по-новой запустил проц.

    Может что-то вроде __jlinkExecCommand("go");? Так не работает...

  6. 2. Если "случайно" выполняется ремап

    Что вы имеете в виду?

    Я использую как основу Atmel пример. Там в board_lowlevel.c был вызов BOARD_RemapRam(); - я его закоментарил. На всякий случай проверяю на старте GPNVM[3] бит. Еще есть лазейки для "случайного" ремапа?

  7. Похоже, что все-таки я неправильно настраивал ТТ.

    Вариан тпервых записей, с которыми я мог отключать и подключать DCache:

    0x00200C1A, 0x00100C1A,0x00200C1A,0x00300C1E

    Еще раз спрашиваю: почему? Ответ "потому что иначе не работают прерывания" совершенно не устраивает.

    Первая запись существенна. Хотя действительно, это совершенно не очевидно.

    Нет.

    Я имел ввиду, если под DMA выделить часть SRAM, отключив в ней кэширование и буферизацию.

    В общем я так и сделал. Описал таблицу дескрипторов второго уровня и дал 1 КБ SRAM под DMA.

     

    Кстати: в PDC нужно указывать физические, а не виртуальные адреса. Как-то не удобно...

     

     

    Похоже, что все-таки я неправильно настраивал ТТ.

    Вариан тпервых записей, с которыми я мог отключать и подключать DCache:

    0x00200C1A, 0x00100C1A,0x00200C1A,0x00300C1E

    Еще раз спрашиваю: почему? Ответ "потому что иначе не работают прерывания" совершенно не устраивает.

    Первая запись существенна. Хотя действительно, это совершенно не очевидно.

    Нет.

    Я имел ввиду, если под DMA выделить часть SRAM, отключив в ней кэширование и буферизацию.

    В общем я так и сделал. Описал таблицу дескрипторов второго уровня и дал 1 КБ SRAM под DMA.

     

    Кстати: в PDC нужно указывать физические, а не виртуальные адреса. Как-то не удобно...

  8. Посмотрите, откуда падаете в Data Abort. Связь с кэшем тут если и есть, то весьма опосредованная.

    Попадаю из первого обращения к стеку.

    Я пользуюсь примером EugenB2. Единственное, я маплю адреса Boot Memory на Flash, поэтому первая запись TT 0x00000C1A.

    Когда отключаю DCache, убираю запись в TT 0x00300C1E (SRAM) - попадаю в Data Abort. То же, если TT не исправлять.

    Пример я уже давал выше. Буфера надо располагать в некешируемой области - для данного примера это от 0x21F00000 до 0x21FFBFFF.

    Если использовать SRAM, то необходимо его дробить на мелкие страницы?

  9. Спасибо за ответ.

    Это в общем-то понятно. Вопрос возник вот почему. Я, разбираясь в этом вопросе провожу некоторые эксперименты. Я настроил UART на выдачу через PDC. Ну и шлю на ПК строчки. Без ММУ и кэшей все работает. Подключаю ММУ, все ОЗУ - одним сектором, кэш и буферизация включены, DCash, ICASH включены - все ОК. Отключаю DCash - тоже работает, но начинает глючить дебаггер. Отключаю кэш и буферизацию в ММУ - не работает! Вишу в Data abort.

    Как же корректно сконфигурировать ММУ и кэши для использования DMA?

  10. Уважаемый vmp!

    Возвращаясь к вашему примеру, не могли бы вы пояснить, как имеено связаны биты C и B описания секций с областью DMA? Интуитивно понятно, но чем все-таки это чревато?

     

    Уважаемый vmp!

    Возвращаясь к вашему примеру, не могли бы вы пояснить, как имеено связаны биты C и B описания секций с областью DMA? Интуитивно понятно, но чем все-таки это чревато?

  11. Практика лучше теории. Я у себя отключил мму - работает.

    Отключил мму и кэши - работает.

    То есть и прерывания то-же.

    Без этого не работают прерывания. Детально не разбирался, нащупал решение опытным путем и успокоился.

    Проблема где-то еще.

  12. Начинаю работать с SAM9XE, IAR 5.2.

    Во всех примерах в board_lowlevel.c в конце инициализации выполняется RamRemap.

    Покапавшись, я обнаружил, что ремап используется для обслуживания векторов прерываний с адреса 0.

    Я решил разместить вектора во флеш. У брал ремап, подправил icf, чтобы .vectors линковались во флеш,

    на старте проверяю GPNVMBit[3] - он в "1". Все вроде ок, но не работает. Какие здесь могут быть еще грабли?

     

    Сорри. Все заработало. Был мой глюк.

    Единственный вопрос к гуру. Нет ли в таком расположении векторов каких-нибудь принципиальных проблем?

  13. Что-то не могу разобраться.

    Могу ли я разместить функции прошивки в BANK1 (32K) и используя их шить FLASH в BANK0, естественно, отключив прерывания.

    Без отдельного бутлоадера. Пока что это не получилось. Функции прошивки в ОЗУ - все работает, просто для проекта ОЗУ маловато. Надо экономить.

    Keil 3.22

  14. Спасибо, сейчас попробую.

    По поводу

    что флоу котроллером периферию можно назначать только для USB.
    , то в доках сказано, что только USB умеет выставлять "Last burst and last single requests", т.е. корректно завершать передачу по DMA. С SSP то же все работает, но там не очень очевидно отслеживается конец. Я запускал передачу по SSP по DMA, так что бы дождаться конца приема по DMA, нужно было дождаться окончания работы канала DMA на отправку, а потом еще и ожидать опустошения FIFO и регистра DR SSP.

     

    Спасибо брат!!! :a14: :beer:

    ЗАРАБОТАЛО!

  15. Продолжая разбираться получил следующее: если сделать Flow Controller - SSP, то DMA идет. Но в этом случае не отслеживается колличество принятых байт, а мне бы этого хотелось.

  16. Необходимо запустить dma на SSP на прием данных.

    str911faw44, настройка SSP:

    SSP_DeInit(SSP0);
    SSP_InitStructure.SSP_FrameFormat = SSP_FrameFormat_Motorola;    
    SSP_InitStructure.SSP_Mode = SSP_Mode_Master;
    SSP_InitStructure.SSP_CPOL = SSP_CPOL_High;
    SSP_InitStructure.SSP_CPHA = SSP_CPHA_2Edge;
    SSP_InitStructure.SSP_DataSize = SSP_DataSize_8b;                                 
    SSP_InitStructure.SSP_ClockPrescaler = 4;
    SSP_InitStructure.SSP_ClockRate = 59; 
    SSP_Init(SSP0, &SSP_InitStructure);
    SSP_DMACmd(SSP0, SSP_DMA_Transmit, ENABLE);
    SSP_DMACmd(SSP0, SSP_DMA_Receive, ENABLE);
    SSP_Cmd(SSP0,  ENABLE);

    настройка DMA:

    DMA_DeInit();                         
    DMA_Cmd(ENABLE);
    DMA_StructInit(&DMA_InitStruct);
    DMA_InitStruct.DMA_Channel_LLstItm=0; 
    DMA_InitStruct.DMA_Channel_SrcAdd=(u32)((&SSP0->DR));
    DMA_InitStruct.DMA_Channel_DesAdd=(u32)(rdata);
    DMA_InitStruct.DMA_Channel_SrcWidth= DMA_SrcWidth_Byte;
    DMA_InitStruct.DMA_Channel_DesWidth= DMA_DesWidth_Byte; 
    DMA_InitStruct.DMA_Channel_FlowCntrl= DMA_FlowCntrl2_DMA;
    DMA_InitStruct.DMA_Channel_Src = DMA_SRC_SSP0_RX;
    DMA_InitStruct.DMA_Channel_TrsfSize =9;
    DMA_ChannelDESIncConfig (DMA_Channel2, ENABLE);
    DMA_Init(DMA_Channel2,&DMA_InitStruct); 
    DMA_ChannelCmd (DMA_Channel2,ENABLE);

    далее передаю по SSP 9 байт и смотрю что в приемном буфере.

    А там ничего. Для определения окончания приема использую опрос регистра TCRISR. Не работает. Что не так?