Программа Raspberry Pi, которая взаимодействует с I / O (HID, SPI, GPIO) - PullRequest
0 голосов
/ 12 февраля 2019

Я работаю над проектом с использованием Raspberry Pi, где мне нужно создать графический интерфейс, который может взаимодействовать с различными периферийными устройствами.В частности, программе необходимо:

- прочитать данные о местоположении с сенсорного экрана, мыши или другого устройства HID

- выполнить некоторые математические операции с данными о положении

- сохранитьданные в буфере FIFO

- вывод данных через порт SPI с фиксированной частотой кадров

У меня есть опыт работы с электроникой, с некоторым опытом написания прошивок для микроконтроллеров, но я относительныйновичок, когда дело доходит до такого рода вещей.Я провел некоторое исследование, и похоже, что данные мыши / сенсорного экрана доступны при чтении файла в каталоге / dev / input, и я предполагаю, что вы можете получить доступ к порту SPI, читая или записывая в какой-то файл в каталоге / dev,(Я сейчас использую Raspbian)

Мои первые мысли были написать простую программу на C, которая а) считывает файл данных сенсорного экрана и сохраняет его в предварительно выделенном буфере в памяти, а б) записывает данные, следующие в строкев файл данных SPI, чтобы записать его в порт SPI.Часть (a) сработает либо при прерывании по таймеру, и запросит данные сенсорного экрана, чтобы определить, являются ли они новыми, или сработает при прерывании «новых данных».Часть (b), SPI-часть программы, будет запускаться с фиксированной скоростью, вероятно, из-за прерывания по таймеру.

Итак, мои вопросы:

-Есть ли это возможно (илилегко) получить доступ к прерываниям или системным таймерам из пространства пользователя?Я предполагаю, что вам нужно каким-то образом получить хуки для ядра?

-Если бы я сделал так, чтобы моя функция работала, когда прерывание или таймер срабатывает?

-Как легко?это использовать SPI DMA в пространстве пользователя?У кого-нибудь есть такой опыт?Я провел небольшое исследование, и похоже, что вам нужно загрузить собственный драйвер ядра, но я не знал, насколько это будет сложно.

- Возможно ли выписать параллельное слово на GPIO,как бы вы делали это на микроконтроллере (т.е. сразу, записав слово в выходной регистр порта)?

Я знаю, что есть много языков программирования и оболочек более высокого уровня, которые позволяют вам общаться с повторными сообщениями., но я немного не решаюсь делать это так, потому что время кажется довольно сжатым.Мне нужно вывести (3) 16-битных слов на кадр со скоростью ~ 1k кадров в секунду.При битрейте SPI 500 кГц каждый кадр имеет длину 96 мкс, а при частоте 1 кбит / с каждый период равен 1 мс.Вот почему SPI DMA или даже запись данных в виде параллельного слова будет намного проще с точки зрения времени.

Спасибо за помощь!

...