|
|
  |
Программная реализация интерфейса |
|
|
|
Apr 12 2011, 23:29
|

Профессионал
    
Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339

|
Цитата 16 тактов на прием одного бита - сомнительно, на грани фола Цитата(zombi @ Apr 12 2011, 21:54)  Код ldi count,8 cc0:sbic port,synch rjmp cc0 lsl acc1 cc1:sbis port,synch rjmp cc1 sbic port,bit_IN ori acc1,$01 dec count brne cc0 Нет это очень много. 8 команд вместе с записью в Sram. Частота кварца 18.432 , что бы с погрешностями не заморачиваться в дальнейшем Вот такая идейка. Завтра вечером дам этот вариант.  На работе не дадут.....поработать Вот их очередность sbic inc сдвиг dec count brne main st z dec brne main Просто оформить надо, а сейчас лень. Но похоже при таком ТЗ -APMом попахивает
--------------------
Закон Мерфи:
Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
|
|
|
|
|
Apr 13 2011, 06:17
|

Профессионал
    
Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339

|
Вот код , по идее сможем поймать биты. Но посчитать не успеваю CODE *********************** ;/ * * ;/ * ATMega 164P * ;/ * * ;/ ***********************
; Ну def и equ не пишу
;************************************************* ;* ;;/ТАБЛИЦА прерываний;;* * ;************************************************* jmp RESET ;/Reset
.org INT0addr sbic PORTX,PXX; Линия данных ARINC-429 inc temp lsl temp dec count brne MAIN st Z,temp ldi count,8 dec ZL brne MAIN
; jmp PCINT0 ; PCINT0 ; jmp PCINT1 ; PCINT1 ; jmp PCINT2 ; PCINT2 ; jmp PCINT3 ; PCINT
;************************************************** ;* ;;/Initialization ExtInterrupr;;* * ;**************************************************
; ЛОВИМ СИНХРОИМПУЛЬСЫ ARINC-429 по INT0 RESET: ldi temp,1<<INTF0 out EIFR,temp ldi temp,1<<INT0 ; Разрешаем прерывание INT0 out EIMSK,temp ldi temp,1<<ISC01|0<<ISC00 sts EICRA,temp ;+ По спадающему фронту ------------------------------------- ldi count,8 ; Не продумывал особо, но на расположение буффера возможно придётся делать ограничение ; Он должен находится в самом начале памяти, в данном MCU = 100 ldwi Z,BUFF ; макрос LDI ; Ниже команду пишу специально , хотя по сути она не нужна, так чтобы была понятно логика subi ZL,-33 ;************************************************** sei MAIN: rjmp MAIN
Сообщение отредактировал IgorKossak - Apr 13 2011, 09:55
Причина редактирования: [codebox] !!!
--------------------
Закон Мерфи:
Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
|
|
|
|
|
Apr 13 2011, 09:51
|

Профессионал
    
Группа: Участник
Сообщений: 1 091
Регистрация: 25-07-07
Из: Саратов
Пользователь №: 29 357

|
Цитата(rx3apf @ Apr 12 2011, 19:13)  Изначально разговор был про программную реализацию. SPI slave тоже можно, благо что приемник имеет двойную буферизацию. Байтовую синхронизацию, правда, придется обеспечивать ручками. И границы слов тоже. Но чтобы быстренько все это дело скушать и куда-то отдать - вполне, и 22 бита вместо 24 тут нисколько не помеха. Накладные расходы на сборку-отправку резко сокращаются. А синхронизацией пускай PC занимается. Я так понимаю, что речь о каком-то сниффере протокола, и задача засосать в PC этот самый входной поток. Вариантов реализации по крайней мере два-три... Я так понял, что программная реализация - это чисто спортивный интерес. Практически же этим заниматься глупо, на SPI это можно сделать проще на порядок, а может и на два. Потому что вынуть байт из SPI - это пара команд, а для программного приема каждого бита требуется не меньше десятка.
|
|
|
|
|
Apr 13 2011, 11:09
|

Гуру
     
Группа: Свой
Сообщений: 2 076
Регистрация: 10-09-08
Пользователь №: 40 106

|
Цитата(777777 @ Apr 13 2011, 13:51)  вынуть байт из SPI - это пара команд, а для программного приема каждого бита требуется не меньше десятка. А какже быть с 22 битами данных? Цитата(ILYAUL @ Apr 13 2011, 10:17)  Вот код , по идее сможем поймать биты. Но посчитать не успеваю На мой взгляд при програмной реализации приема по SPI необходимо прочитать линию данных как можно ближе к фронту синхро сигнала (D-триггер это делает синхронно). Если делать по опросу синхро то чтение линии данных произойдёт в лучшем случае через 3 такта, в худшем через 5 тактов процессора. Если использовать прерывание то линию данных проц прочитает в самом лучшем случае через 7 тактов. Но чтобы ответить на вопрос возможна ли реализация этого протокола нужна временная диаграмма сигналов SYNC и DATA. TS никак не хочет ее предоставить или сам не знает, но уже пишет Цитата программу на асме имитирующую передачу кода МАСТЕРОМ
|
|
|
|
|
Apr 13 2011, 12:17
|

Мастер-фломастер
   
Группа: Свой
Сообщений: 611
Регистрация: 29-12-05
Пользователь №: 12 700

|
Цитата(=GM= @ Apr 13 2011, 15:48)  Зачем нужен внешний, если есть встроенный сдвиговый регистр spi? я особо не вчитывался, но показалось что то не устроило автора в SPI. а так то конечно... Цитата(rx3apf @ Apr 13 2011, 16:07)  Да так же, как и с началом принимаемого слова. Программно, иначе никак. А какие проблемы ? Набираем 8 битов, сохраняем... А потом программная обработка. Причем лучше уже на хосте (PC), который гораздо быстрее. да - я бы также поступил если не заморачиваться - через spi берем данные из интерфейса и транслируем их через UART а уже на другой системе анализируем.. или взять Xmega- spi завести на DMA и уже можно сделать анализ локально..
--------------------
Вон ПОПОВ, клоун клоуном, а радио изобрел!!
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|