Pasha 111 0 28 октября, 2010 Опубликовано 28 октября, 2010 · Жалоба Всем привет! Возникла у меня вот такая проблема, на которую потратил весь вчерашний день. Использую 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 подключается. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DIM 0 28 октября, 2010 Опубликовано 28 октября, 2010 · Жалоба Установить бит "MODFDIS" в 1. Иначе активный уровень CS воспринимается как запрос от другого мастера. Ошибка должна уйти. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Pasha 111 0 28 октября, 2010 Опубликовано 28 октября, 2010 · Жалоба Спасибо тебе, DIM, огромное!! Ошибка пропала! Но получается, что это глюк проца, ведь при настройке PA12 как PIO на уровень этой ножки SPI0 реагировать ведь не должен, так? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DIM 0 28 октября, 2010 Опубликовано 28 октября, 2010 · Жалоба Да, но происходит как происходит. Сам наелся. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Pasha 111 0 28 октября, 2010 Опубликовано 28 октября, 2010 · Жалоба Да уж, могли бы в errat'е хотя бы написать. Ладно, ещё раз спасибо за помощь! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться