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

 
 
> модуль ядра, работа по SPI
TigerSHARC
сообщение Jul 29 2012, 16:16
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 688
Регистрация: 4-09-09
Пользователь №: 52 195



В учебных целях хочу написать драйвер(модуль ядра), который работал бы слейвом в режиме SPI и записывал данные с мастера в буфер. Прочитал тольковую статью http://dmilvdv.narod.ru/Translate/WDDL/index.html но как применительно к моему процессору (SAM9G45) написать модуль SPI-slave не знаю.
Драйверы для Linux до этого момента не писал.
У меня есть standalone-приложение, реализующее требуемые функции.
Если просто перенести соотвествующие процессору *.h файлы, описывающие перифирийные регистры, и, написать функции опроса и записи в эти регистры (как в standalone-приложении) в код модуля ядра? такое будет работать?
где можно примеры посмотреть?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
ubobrov
сообщение Nov 23 2012, 13:04
Сообщение #2


Участник
*

Группа: Свой
Сообщений: 64
Регистрация: 15-08-05
Пользователь №: 7 636



Вот, я переделывал драйвер SPI от атмела чтоб он работал как слейв. Все то же самое, что и мастер, тока ждет CS. Все работает.

Прикрепленные файлы
Прикрепленный файл  atmel_mpi.c.zip ( 8.88 килобайт ) Кол-во скачиваний: 24
 
Go to the top of the page
 
+Quote Post
alx2
сообщение Dec 9 2012, 12:30
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 340
Регистрация: 25-10-05
Из: Пермь, Россия
Пользователь №: 10 091



Цитата(ubobrov @ Nov 23 2012, 18:04) *
Вот, я переделывал драйвер SPI от атмела чтоб он работал как слейв. Все то же самое, что и мастер, тока ждет CS. Все работает.

Не могли бы Вы пояснить работу вашего драйвера с таймерами?
А именно, что происходит при возникновении таймаута?

И еще один момент мне непонятен. В обработчике прерываний RXBUFF/ENDRX/NSSR Вы запрещаете только фактически возникшие прерывания (spi_writel(as, IDR, pending)wink.gif. Допустим, принят/передан последний байт последней транзакции, и возникло прерывание по RXBUFF/ENDRX, но сигнал CS еще активен. В результате RXBUFF/ENDRX будут запрещены обработчиком, но NSSR останется разрешенным. as->current_transfer становится равным NULL. Далее мастер снимает сигнал CS, в результате возникает прерывание NSSR, и мы снова попадаем в ту же ветку обработчика, в которой падаем, так как xfer равен NULL! Я что-то где-то не учел или неправильно понял?


--------------------
Всего наилучшего,
Alex Mogilnikov
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 15:54
Рейтинг@Mail.ru


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