Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: AT91SAM7S64 и SPI
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
marcinio
Решил я заняться изучением АРМа – 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
aaarrr
MODFDIS в SPI_MR поставьте.

И старайтесь все же использовать символьные наименования битов вместо чисел - конструкции типа AT91C_BASE_PMC->PMC_PCER = 1<<2 | 1<<5 проверять очень утомительно.
marcinio
Цитата
И старайтесь все же использовать символьные наименования битов

буду стараться 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);


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

В таком виде все обязано работать (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;
marcinio
Попробовал данный код, ничего не изменилось. Проверяю и в симуляторе, и на железке - если SPIENS == 1, то засвечивается диод (жтага пока ещё нет).
Я приложил свой проект, хоть там просто тот же самый код + while цикл с проверкой SPIENS.
Нажмите для просмотра прикрепленного файла
aaarrr
Пардон, наврал я sad.gif Должно быть:
Код
AT91C_BASE_PMC->PMC_PCER     = (1UL<<AT91C_ID_PIOA) | (1UL<<AT91C_ID_SPI);                            //PIOA, SPI Peripheral Clock Enable
marcinio
SPIENS до сих пор равен нулю. 07.gif
aaarrr
Проверил в железе (SAM7X) - все работает, SPIENS == 1.
marcinio
Да, поже я проверил на железе - работает a14.gif
Но почему такие простые действия не могут отображаться в симуляторе? sad.gif
zltigo
Цитата(marcinio @ Aug 16 2008, 19:33) *
Да, поже я проверил на железе - работает a14.gif

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

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

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

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

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

VC не поможет отладить специфическую периферию ядра (MMU, CP15) и просто работу CPU в разных режимах. Кроме того, время выполнения оценить не получится.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.