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

 
 
 
Reply to this topicStart new topic
> AT91SAM7S64 и SPI, Где проблема?
marcinio
сообщение Aug 15 2008, 18:27
Сообщение #1


Участник
*

Группа: Новичок
Сообщений: 42
Регистрация: 3-07-07
Пользователь №: 28 861



Решил я заняться изучением АРМа – AT91SAM7S64. Написал в Кейле SPI инициализацию:
Код
AT91C_BASE_PMC->PMC_PCER     = 1<<2 | 1<<5;                            //PIOA, SPI Peripheral Clock Enable    
    
AT91C_BASE_PIOA->PIO_PDR     = 1<<11 | 1<<12 | 1<<13 | 1<<14;        //Disables PIOA Control,enables peripheral control
AT91C_BASE_PIOA->PIO_ASR     = 1<<11 | 1<<12 | 1<<13 | 1<<14;        //Peripheral A select    
    
T91C_BASE_SPI->SPI_MR        = AT91C_SPI_MSTR | 14<<16;        //Master mode | Fixed Peripheral Select - NPCS0, PCS = xxx0 NPCS[3:0] = 1110
AT91C_BASE_SPI->SPI_CSR[0]   = 48<<8;                                //SPCK Baudrate
AT91C_BASE_SPI->SPI_CR       = 1;                                    //SPI Enable

AT91C_BASE_SPI->SPI_TDR      = 100;                                    //Data

Но ничего не сработало: SPI просто решил не запускаться (в SPI Status Register SPIENS = 0), в Logic Analyzer уровни линий NPCS0, MISO, MOSI, PSCK не разу не поменялись. Уже весь день пробую понять, в чём проблема? А она именно в этих строчках... 05.gif
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Aug 15 2008, 18:45
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



MODFDIS в SPI_MR поставьте.

И старайтесь все же использовать символьные наименования битов вместо чисел - конструкции типа AT91C_BASE_PMC->PMC_PCER = 1<<2 | 1<<5 проверять очень утомительно.
Go to the top of the page
 
+Quote Post
marcinio
сообщение Aug 16 2008, 08:49
Сообщение #3


Участник
*

Группа: Новичок
Сообщений: 42
Регистрация: 3-07-07
Пользователь №: 28 861



Цитата
И старайтесь все же использовать символьные наименования битов

буду стараться smile.gif

но MODFDIS не помогло.
Я никак не могу понять, что в конце концов надо, чтобы запустить SPI и появилась галочка SPIENS в статус регистре?

Код
AT91C_BASE_PMC->PMC_PCER     = AT91C_ID_PIOA | AT91C_ID_SPI;                            //PIOA, SPI Peripheral Clock Enable    
    
AT91C_BASE_PIOA->PIO_PDR     = AT91C_PIO_PA11 | AT91C_PIO_PA12 | AT91C_PIO_PA13 | AT91C_PIO_PA14;        //Disables PIOA Control,enables peripheral control
AT91C_BASE_PIOA->PIO_ASR     = AT91C_PIO_PA11 | AT91C_PIO_PA12 | AT91C_PIO_PA13 | AT91C_PIO_PA14;        //Peripheral A select
AT91C_BASE_SPI->SPI_CR        = AT91C_SPI_SPIEN;


или готовыми функциями:
Код
AT91PS_SPI SPI0 = AT91C_BASE_SPI;

AT91F_SPI_CfgPIO();
AT91F_SPI_CfgPMC();
AT91F_SPI_Enable(SPI0);


результат тоже самый.

Сообщение отредактировал marcinio - Aug 16 2008, 08:49
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Aug 16 2008, 10:29
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Вы в симуляторе смотрите, или на реальной железке?

В таком виде все обязано работать (SPI Mode 0):
Код
AT91C_BASE_PMC->PMC_PCER     = (1UL<<AT91C_ID_PIOA) | (1UL<<AT91C_ID_SPI);                            //PIOA, SPI Peripheral Clock Enable    
    
AT91C_BASE_PIOA->PIO_PDR     = AT91C_PIO_PA11 | AT91C_PIO_PA12 | AT91C_PIO_PA13 | AT91C_PIO_PA14;        //Disables PIOA Control,enables peripheral control
AT91C_BASE_PIOA->PIO_ASR     = AT91C_PIO_PA11 | AT91C_PIO_PA12 | AT91C_PIO_PA13 | AT91C_PIO_PA14;        //Peripheral A select

AT91C_BASE_SPI->SPI_CSR[0]   = (48<<8) | AT91C_SPI_NCPHA;                                //SPCK Baudrate
AT91C_BASE_SPI->SPI_MR        = AT91C_SPI_MSTR | AT91C_SPI_MODFDIS;
AT91C_BASE_SPI->SPI_CR        = AT91C_SPI_SPIEN;
Go to the top of the page
 
+Quote Post
marcinio
сообщение Aug 16 2008, 11:36
Сообщение #5


Участник
*

Группа: Новичок
Сообщений: 42
Регистрация: 3-07-07
Пользователь №: 28 861



Попробовал данный код, ничего не изменилось. Проверяю и в симуляторе, и на железке - если SPIENS == 1, то засвечивается диод (жтага пока ещё нет).
Я приложил свой проект, хоть там просто тот же самый код + while цикл с проверкой SPIENS.
Прикрепленный файл  SPI_Interface.zip ( 67.6 килобайт ) Кол-во скачиваний: 103
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Aug 16 2008, 11:46
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Пардон, наврал я sad.gif Должно быть:
Код
AT91C_BASE_PMC->PMC_PCER     = (1UL<<AT91C_ID_PIOA) | (1UL<<AT91C_ID_SPI);                            //PIOA, SPI Peripheral Clock Enable
Go to the top of the page
 
+Quote Post
marcinio
сообщение Aug 16 2008, 12:03
Сообщение #7


Участник
*

Группа: Новичок
Сообщений: 42
Регистрация: 3-07-07
Пользователь №: 28 861



SPIENS до сих пор равен нулю. 07.gif
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Aug 16 2008, 12:18
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Проверил в железе (SAM7X) - все работает, SPIENS == 1.
Go to the top of the page
 
+Quote Post
marcinio
сообщение Aug 16 2008, 17:33
Сообщение #9


Участник
*

Группа: Новичок
Сообщений: 42
Регистрация: 3-07-07
Пользователь №: 28 861



Да, поже я проверил на железе - работает a14.gif
Но почему такие простые действия не могут отображаться в симуляторе? sad.gif
Go to the top of the page
 
+Quote Post
zltigo
сообщение Aug 16 2008, 17:48
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(marcinio @ Aug 16 2008, 19:33) *
Да, поже я проверил на железе - работает a14.gif

Ну и зачем тогда надо было, ну скажем максимально мягко, - вводить в заблуждение:
Цитата
Попробовал данный код, ничего не изменилось. Проверяю и в симуляторе, и на железке

Цитата
Но почему такие простые действия не могут отображаться в симуляторе? sad.gif

Потому, что Вы даже несколько сторочек не смогли написать, а с кого-то требуете некий симулятор который должен все понимать и работать sad.gif


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Aug 16 2008, 18:22
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(marcinio @ Aug 16 2008, 21:33) *
Да, поже я проверил на железе - работает a14.gif
Но почему такие простые действия не могут отображаться в симуляторе? sad.gif

Симулятором следует пользоваться только для проверки математики/логики. Периферию следует отлаживать исключительно в железе.
Go to the top of the page
 
+Quote Post
SpiritDance
сообщение Aug 17 2008, 14:42
Сообщение #12


Дух погибшего транзистора
****

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



Цитата(aaarrr @ Aug 16 2008, 22:22) *
Симулятором следует пользоваться только для проверки математики/логики.

Нафига для этого симулятор? Есть же VC++6.0 smile.gif


--------------------
Yes, there are two paths you can go by But in the long run Theres still time to change the road youre on.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Aug 17 2008, 15:07
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(SpiritDance @ Aug 17 2008, 18:42) *
Нафига для этого симулятор? Есть же VC++6.0 smile.gif

VC не поможет отладить специфическую периферию ядра (MMU, CP15) и просто работу CPU в разных режимах. Кроме того, время выполнения оценить не получится.
Go to the top of the page
 
+Quote Post

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

 


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


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