[an error occurred while processing this directive]
[an error occurred while processing this directive]
|
Обязательно нужно переделать логику формирования REQ#. GNT# вашей картой может быть получен внутри чужого цикла, который только начался (причем Исключительно Внутри - на чипсетах VIA Lite для AMD Athlon/Duron). И такая ситуация может зациклиться до бесконечности, т.е. гарантировано зависание. Получается - убран REQ# - практически через два такта убран GNT# (арбитр шины не следит за транзакциями) и на следующем такте передан другому master-y. И все это, повторяю, внутри чужой транзакции.
Summary. На то что где-то получен GNT# внимания обращать не нужно. REQ# остается активным до входа шины в состояние IDLE и выборки собственного FRAME# (при полученном GNT#). Это заставит арбитр удерживать GNT# для *вашей карты*. REQ# деактивируется при входе Master FSM в адресную фазу => На такте 'n' убран REQ#, на такте 'n+1' выставлен FRAME# - без зазора.
P.S. Состояние DEVSEL#=0, TRDY#=1 совершенно допустимо.
E-mail: info@telesys.ru