Перейти к содержанию
    

SPI0 в режиме Master уходит в Disable при попытке отправить байт (AT91SAM7X128)

Всем привет!

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

 

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

SPI0_NPCS2 (PA14)

SPI0_NPCS3 (PA15)

SPI0_MISO (PA16)

SPI0_MOSI (PA17)

SPI0_SPCK (PA18)

 

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

3edb70c9a0be.gif

 

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

 

Тогда после выполнения строчки:

AT91C_BASE_SPI0->SPI_TDR = (frame & 0xFFFF) | (0x07 << 16) |
                AT91C_SPI_LASTXFER;

где frame = 0x06 - посылаемые данные,

состояние SPI0 меняется так:

 

cfada5bc40cd.gif

 

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

 

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

 

P.S. Порт PA12 идёт сразу в разъём, к нему только внешний PullUp подключается.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Установить бит "MODFDIS" в 1.

Иначе активный уровень CS воспринимается как запрос от другого мастера.

Ошибка должна уйти.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо тебе, DIM, огромное!! Ошибка пропала!

Но получается, что это глюк проца, ведь при настройке PA12 как PIO на уровень этой ножки SPI0 реагировать ведь не должен, так?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да уж, могли бы в errat'е хотя бы написать.

Ладно, ещё раз спасибо за помощь!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...