реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Как получить прерывание от SATA(в режиме IDE)?
IOne
сообщение Sep 20 2013, 13:51
Сообщение #1





Группа: Участник
Сообщений: 5
Регистрация: 29-04-11
Пользователь №: 64 688



Есть контроллер SATA, который похож на контроллер, входящий в состав Intel 6 Series Chipset. Он подключается через PCI к процессорному модулю с архитектурой MIPS64.
Я работаю с ним в режиме IDE без DMA, проблема в том, что почему-то нет прерываний.

Последовательность действий такая:
1) Выделяю BAR'ам пространство в области ввода-вывода.
2) Подключаю обработчик прерывания и разрешаю прерывание PCI на самом процессорном модуле.
3) В PCI по адресу 0x4 записываю 0xffff035d, тем самым ставя биты 0, 2, 3, 4, 6, 8, 9 в регистре Command шины PCI.
4) Делаю ресет контроллера и перевожу его в режим IDE.
5) Записываю 0 в Control Register чтобы разрешить прерывания.
6) Записываю 0xa0 в drive/head register.
7) Записываю 0xec(команда идентификации) в регистр Command.
8) Жду, пока не снимится бит 7(BSY) и не установится бит 3(DRQ) в регистре Status.

После этого по идее должно быть прерывание, но его нет, в дальнейшем работаю с диском по опросу битов BSY и DRQ, диск работает нормально, но за всё время не было ни одного прерывания.
Правильный ли у меня алгоритм действий, или я что-то пропустил?

Ещё вопрос по поводу DMA: работа с ним зависит от конкретного контроллера или это как-то стандартизировано?
Go to the top of the page
 
+Quote Post
Mar_K
сообщение Dec 12 2014, 19:08
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 46
Регистрация: 7-12-11
Пользователь №: 68 727



Цитата(IOne @ Sep 20 2013, 16:51) *
Есть контроллер SATA, который похож на контроллер, входящий в состав Intel 6 Series Chipset. Он подключается через PCI к процессорному модулю с архитектурой MIPS64.
Я работаю с ним в режиме IDE без DMA, проблема в том, что почему-то нет прерываний.

Последовательность действий такая:
1) Выделяю BAR'ам пространство в области ввода-вывода.
2) Подключаю обработчик прерывания и разрешаю прерывание PCI на самом процессорном модуле.
3) В PCI по адресу 0x4 записываю 0xffff035d, тем самым ставя биты 0, 2, 3, 4, 6, 8, 9 в регистре Command шины PCI.
4) Делаю ресет контроллера и перевожу его в режим IDE.
5) Записываю 0 в Control Register чтобы разрешить прерывания.
6) Записываю 0xa0 в drive/head register.
7) Записываю 0xec(команда идентификации) в регистр Command.
8) Жду, пока не снимится бит 7(BSY) и не установится бит 3(DRQ) в регистре Status.

После этого по идее должно быть прерывание, но его нет, в дальнейшем работаю с диском по опросу битов BSY и DRQ, диск работает нормально, но за всё время не было ни одного прерывания.
Правильный ли у меня алгоритм действий, или я что-то пропустил?

Ещё вопрос по поводу DMA: работа с ним зависит от конкретного контроллера или это как-то стандартизировано?

5) Все 8 бит нулями или только бит nIEN ? Нужно только его.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 16th April 2024 - 08:54
Рейтинг@Mail.ru


Страница сгенерированна за 0.0136 секунд с 7
ELECTRONIX ©2004-2016