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

 
 
> SPI не выставляет биты конца передачи, AT91SAM7S64
MiklPolikov
сообщение Jan 24 2012, 05:50
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 015
Регистрация: 23-01-07
Из: Москва
Пользователь №: 24 702



С SPI происходит что-то странное :
Биты RDRF, TDRE по которым можно судить об окончании передачи иногда выставляются, а иногда нет

Код в kiel:

*AT91C_SPI_CR=AT91C_SPI_SPIEN; //инициализация
*AT91C_SPI_MR=AT91C_SPI_MSTR;
AT91C_BASE_SPI->SPI_CSR[0]=0xC02 ;
......................

transmit_data=(0<<6)|(0x6<<1)|(0<<0); //передача-приём
*AT91C_SPI_TDR=transmit_data;
while(!(*AT91C_SPI_SR & AT91C_SPI_RDRF) {} // ждём пока закончится передача, на этой строчке зависает.
receive_data=*AT91C_SPI_RDR;


Смотрю под отладкой. Зависает каждый раз в разный момент.
Причём проблема появилась после того как я включил WDT и раскидал по коду команду его сброса.

У меня много прерываний, предположил что программа уходит в прерывание и пропускает момент когда
в регистре выставилась 1, но одновременно успевает её сбросить. Отключил половину-ничего не изменилось.
Да и весь остальной код(USB, UART, чтение портов по прерываниям ) работает безглючно.

А у этой проблемы с SPI прямая зависимость от включенного WDT и его периодического сброса .

Я правильно понимаю, что выставление битов в регистре SPI_SR ни как не зависит от сотояния линии MISO , потому что SPI просто считает свои же
такты ?
Кто что посоветует ?


--------------------
Если у Вас нет практического опыта в данной теме- не вступайте в дискуссию и не пишите никаких теоретических рассуждений! Заранее спасибо !
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 20th July 2025 - 22:08
Рейтинг@Mail.ru


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