Jump to content

    

artkam

Участник
  • Content Count

    182
  • Joined

  • Last visited

Community Reputation

0 Обычный

About artkam

  • Rank
    Частый гость

Контакты

  • Сайт
    http://
  • ICQ
    0

Информация

  • Город
    Уфа

Recent Profile Visitors

1510 profile views
  1. Поэтому и обратился на форум, чтоб направили в правильном направлении, разъяснили основные моменты... В итоге, сделал вот так, в какой-то степени работает... CODE void ClockAsm(unsigned int *peg) { __ASM volatile ( //"LDR r3, 0x4002041A \n \t" //"LDR r1, 0x40020418 \n \t" //"LDR r2, 0x40020C10 \n \t" //"MOV r3, 0x00000020 \n \t" ".equ PERIPH_BASE, 0x40000000 \n \t" ".equ AHB1PERIPH_BASE, 0x00020000 \n \t" ".equ GPIOD_BASE, 0x0C00 \n \t" ".equ GPIOB_BASE, 0x0400 \n \t" ".equ GPIO_IDR, 0x10 \n \t" ".equ GPIO_BSRRL, 0x18 \n \t" ".equ GPIO_BSRRH, 0x1A \n \t" ".equ GPIO_BSRR_BS_5, 0x20 \n \t" "LDR r3, [%[data_ptr], 0x00] \n \t" "LDR v1, =(GPIO_BSRR_BS_5) \n \t" "LDR v2, =(PERIPH_BASE + AHB1PERIPH_BASE + GPIOB_BASE + GPIO_BSRRH) \n \t" "LDR v3, =(PERIPH_BASE + AHB1PERIPH_BASE + GPIOB_BASE + GPIO_BSRRL) \n\t" "LDR v6, =(PERIPH_BASE + AHB1PERIPH_BASE + GPIOD_BASE + GPIO_IDR) \n\t" //0 "STRH v1, [v3, 0x00] \n \t" "LDR v5, [v6, 0x00] \n \t" "STRH v1, [v2, 0x00] \n \t" "STR v5, [r3, 0] \n \t" //1 "STRH v1, [v3, 0x00] \n \t" "LDR v5, [v6, 0x00] \n \t" "STRH v1, [v2, 0x00] \n \t" "STR v5, [r3, 4] \n \t" ... //338 "STRH v1, [v3, 0x00] \n \t" "LDR v5, [v6, 0x00] \n \t" "STRH v1, [v2, 0x00] \n \t" "STR v5, [r3, #1352] \n \t" : : [data_ptr] "r" (&peg) : "r3", "v1", "v2", "v3", "v5", "v6", "memory" ); } Теперь, следующая проблема: мне необходима выборка длиной 600 семплов, а, при увеличении шагов до 339, например, компилятор ругается: "Error: offset out of range"... Подскажите, возможно есть еще какая-то очевидная ошибка?
  2. Цитата(aaarrr @ Jun 27 2016, 16:24) И почему не оформить код в виде нормального ассемблерного модуля? Наверно, можно оформить и в виде отдельного модуля... Но я не понимаю пока, какие преимущества я из этого смогу извлечь?
  3. Здравствуйте, уважаемые товарищи! В си-коде, для проверки состояния порта используется вставка на ассемблере, приведенная ниже. Но где-то что-то идет не так задумано, и в буфере, что передается в функцию по ссылке, ничего кроме нулей не обнаруживается. Возможно, я что-то недопонимаю и делаю не так, как надо. Хотелось бы услышать идеи, с помощью которых можно было бы починить код... CODE void f(unsigned int* peg) { __ASM volatile ( ".equ PERIPH_BASE, 0x40000000 \n \t" ".equ AHB1PERIPH_BASE, 0x00020000 \n \t" ".equ GPIOD_BASE, 0x0C00 \n \t" ".equ GPIOB_BASE, 0x0400 \n \t" ".equ GPIO_IDR, 0x10 \n \t" ".equ GPIO_BSRRL, 0x18 \n \t" ".equ GPIO_BSRRH, 0x1A \n \t" ".equ GPIO_BSRR_BS_5, 0x20 \n \t" "LDR r0, =(GPIO_BSRR_BS_5) \n \t" "LDR r1, =(PERIPH_BASE + AHB1PERIPH_BASE + GPIOB_BASE + GPIO_BSRRH) \n\t" "LDR r2, =(PERIPH_BASE + AHB1PERIPH_BASE + GPIOB_BASE + GPIO_BSRRL) \n\t" "LDR r3, =(PERIPH_BASE + AHB1PERIPH_BASE + GPIOD_BASE + GPIO_IDR) \n\t" "LDR r4, [%[data_ptr], 0x00] \n \t" //0 "STRH r0, [r2, 0x00] \n \t" // set clock "LDR r5, [r3, 0x00] \n \t" // считываем GPIOD->IDR "STRH r0, [r1, 0x00] \n \t" // reset clock "STR r5, [r4, 0] \n \t" // записываем то, что было в GPIOD->IDR, в память со смещением //1 "STRH r0, [r2, 0x00] \n \t" "LDR r5, [r3, 0x00] \n \t" "STRH r0, [r1, 0x00] \n \t" "STR r5, [r4, 4] \n \t" //2 "STRH r0, [r2, 0x00] \n \t" "LDR r5, [r3, 0x00] \n \t" "STRH r0, [r1, 0x00] \n \t" "STR r5, [r4, 8] \n \t" /* Множество раз повторяется. */ //681 "STRH r0, [r2, 0x00] \n \t" "LDR r5, [r3, 0x00] \n \t" "STRH r0, [r1, 0x00] \n \t" "STR r5, [r4, #2724] \n \t" : : [data_ptr] "r" (peg) : ); }
  4. А какие пояснения Вам хотелось бы услышать? Вроде, стандартная мостовая схема... Единственное, Вам необходимо будет подобрать инструментальный усилитель. Я в своих экспериментах использовал AD8129...
  5. Цитата(ШСА @ Nov 6 2015, 16:59) Поясните, пожалуйста. Примерно так:
  6. Попробуйте на Вашей "подкове" намотать две идентичные обмотки и включить их по мостовой схеме:
  7. А источник питания, от которого Вы всю конструкцию питаете, в ограничение по току не уходит?
  8. Быть можеть, не ломать голову, а подобрать что-то осюда: http://www.irf.com/product/_/N~1nje2h ??
  9. Интересный у Вас расклад... Какой смысл в измерении одного и того же напряжения с помощью 12 АЦП? Почему бы не измерить одним, а до остальных мк не передать измеренное значение по какому-нибудь интерфейсу передачи данных?
  10. DS90C032 - это приемник. А ТС просит приемо-передатчик с напряжением питания 5В, как я понял.
  11. Существуют в природе так называемые LVDS трансиверы. Например, SN65LVDM176. Может быть такая микросхема подойдет под Ваши задачи?
  12. MAX4445. Думаю, хорошо подойдет в качестве усилителя.
  13. Затактировал АЦП на 100МГц, переключил на "высокоскоростной" режим - ступеньки исчезли...
  14. По крайней мере такой вариант видится вполне логичным... DC-DC микропотребляющих с широким входным диапазоном на рынке нынче хватает...
  15. Зачем городить? Внутри XTR все же есть, вроде как...