Совершенно с вами согласен!!! :-) И я о том-же. Рисунок 2 Device-to-host. Но инициатор сигнала STOP (ACK) - ХОСТ! Впрочем, мы уходим от темы - человек задал вопрос - как побороть конфликт с мышью. Я ответил. Конфликт действительно ЕСТЬ. Не раз натыкался - при активности мышки хост манипулирует клоком клавиатуры подтягивая его к 0. Возможны два варианта, когда это произойдет: 1. Во время передачи данных от девайса к хосту. (он самый маловероятный, т.к. в этот момент хост делает то же самое с клоком мышки, заставляя прекращать передачу от нее). В этом случае необходимо в процессе передачи считывать значение пина CLK когда этот самый клок ДЕВАЙСОМ же и отпущен (выход с открытым коллектором). И если CLK подтянут к нулю - прекращать передачу. Подождем для уверенности 2мс - и снова передадим те-же данные. А то что данные приняты ХОСТОМ - определяем по наличию ACK. Он как-раз 11-й. А в Вашей же статье (to Rezident): "If a transmission is inhibited before the 11th clock pulse" Если надо - схему сопряжения которую использовал приаттачу 2. Линия CLK подтягивается к 0 во время простоя девайса. Это более вероятный вариант. По сути в данном случае хост сигнализирует, что в данный момент обрабатывается мышка. Я обрабатывал его в прерывании по пину (вход CLK на девайс). В прерывании отслеживал состояние пина DATA. Если DATA в 1 - то это либо ACK (если до этого мы что-нить передавали), либо запрет на передачу нашим устройством (как раз этот случай мы и рассматривали). Его обрабатывать не надо - просто ничего не передавать. А если в момент когда CLK со стороны хоста подтянут к 0 и DATA в 0 - то это запрос от хоста на передачу в наше устройство. (HOST_RQ_BIT в моем случае) Вот кусок - он для MSP430: ;----------------------------------------------------------------------------- ; прерывание от Хоста (по CLK) ;----------------------------------------------------------------------------- P2_INT: bic.b #0x02,P2IFG bit.b #DIN_BIT,&P2IN jc HostAck bis #HOST_RQ_BIT,Flags bic #LPM3, 0(SP) ; Decode = Active in Mainloop reti HostAck: bis #HOST_ACK_BIT,Flags bis.b #WDTIE,&IE1 ;разрешим прерывания от WDT reti
Сообщение отредактировал Dimmy - Jul 4 2007, 21:52
|