@vladislav9619996

Как добавлять данные в DMA и передавать их?

Мне нужно отправлять данные с одного устройства на другое с помощью Uart. Для того чтобы отслеживать отправлены ли данные хочу использовать DMA. Объясните как выделить память в DMA отправлять данные по нему и проверить что они отправлены.
P. S нужен именно пример кода так как свой не работает
  • Вопрос задан
  • 202 просмотра
Пригласить эксперта
Ответы на вопрос 1
15432
@15432
Системный программист ^_^
DMA (Direct Memory Access) - передача данных сторонним контроллером с прямым доступом в память. Например на PCI шине у вас находится ATA контроллер, который принял данные от жесткого диска и самостоятельно положил их в ОЗУ. А ЦПУ при этом периодически проверяет факт завершения передачи (обычно в аппаратном регистре самого контроллера).
Для использования DMA при передаче по UART вам необходим аппаратный UART контроллер с поддержкой DMA (для x86 PC я таких не видал). Предположим, вы нашли такой контроллер. Контроллер работает с физической памятью, а ПО на x86 PC - с виртуальной, поэтому вам необходимо будет написать свой kernel driver, который:
1) будет иметь доступ к аппаратным регистрам UART контроллера (для задания физических регионов памяти и проверки флагов состояния)
2) сможет выделять диапазоны физической памяти и выставлять их контроллеру
3) взаимодействовать с системой через IOCTL чтобы передавать конечному ПО считанные двнные

Реализация сильно зависит от вашего устройства и самого UART контроллера. Нужно смотреть документацию и по ней писать драйвер. Вы даже не указали, на ПК вы это делаете или на каком-нибудь WiFi роутере.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы