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

 
 
 
Reply to this topicStart new topic
> SPI0 в режиме Master уходит в Disable при попытке отправить байт (AT91SAM7X128), Если на PA12 (NPCS0) установлен низкий уровень и PA12 - порт ввода!
Pasha 111
сообщение Oct 28 2010, 06:16
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 154
Регистрация: 6-11-05
Из: Москва
Пользователь №: 10 515



Всем привет!
Возникла у меня вот такая проблема, на которую потратил весь вчерашний день.

Использую SPI0 на AT91SAM7X128 в режиме Master для передачи байта устройству, висящему на NPSC3 (есть ещё другое на NPCS2, но с ним всё аналогично). Настраиваю ножки процессора для работы с периферией А (с включёнными pull-up'ами):
SPI0_NPCS2 (PA14)
SPI0_NPCS3 (PA15)
SPI0_MISO (PA16)
SPI0_MOSI (PA17)
SPI0_SPCK (PA18)

Вот настройки PIOA:


Дальше инициализирую SPI0. Всё нормально работает, пока на PA12 (SPI0_NPCS0) не установится низкий уровень.

Тогда после выполнения строчки:
Код
AT91C_BASE_SPI0->SPI_TDR = (frame & 0xFFFF) | (0x07 << 16) |
                AT91C_SPI_LASTXFER;

где frame = 0x06 - посылаемые данные,
состояние SPI0 меняется так:



SPIENS становится = 0, т.е. SPI0 переходит в disable. После этого SPI0 уже, естественно, не работает, и флаг AT91C_SPI_RDRF в Status Register не появляется. Причём изначально PA12 работал как порт ввода, когда на нём возникал низкий уровень происходил описанный глюк. Тогда я пошёл дальше, решил сделать его портом вывода. При установке на нём нуля происходит всё тоже самое! Как этот порт может влиять на SPI0, когда настроен как порт, а не как SPI0_NPCS0?

Да, на плате ещё используется SPI1, он нормально работает при этом. Если на PA12 высокий уровень, то SPI0 тоже нормально работает.

P.S. Порт PA12 идёт сразу в разъём, к нему только внешний PullUp подключается.
Go to the top of the page
 
+Quote Post
DIM
сообщение Oct 28 2010, 07:00
Сообщение #2


Участник
*

Группа: Свой
Сообщений: 70
Регистрация: 6-07-04
Пользователь №: 277



Установить бит "MODFDIS" в 1.
Иначе активный уровень CS воспринимается как запрос от другого мастера.
Ошибка должна уйти.
Go to the top of the page
 
+Quote Post
Pasha 111
сообщение Oct 28 2010, 07:09
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 154
Регистрация: 6-11-05
Из: Москва
Пользователь №: 10 515



Спасибо тебе, DIM, огромное!! Ошибка пропала!
Но получается, что это глюк проца, ведь при настройке PA12 как PIO на уровень этой ножки SPI0 реагировать ведь не должен, так?
Go to the top of the page
 
+Quote Post
DIM
сообщение Oct 28 2010, 07:13
Сообщение #4


Участник
*

Группа: Свой
Сообщений: 70
Регистрация: 6-07-04
Пользователь №: 277



Да, но происходит как происходит. Сам наелся.
Go to the top of the page
 
+Quote Post
Pasha 111
сообщение Oct 28 2010, 07:20
Сообщение #5


Частый гость
**

Группа: Свой
Сообщений: 154
Регистрация: 6-11-05
Из: Москва
Пользователь №: 10 515



Да уж, могли бы в errat'е хотя бы написать.
Ладно, ещё раз спасибо за помощь!
Go to the top of the page
 
+Quote Post

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

 


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


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