Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: SSP, не заносятся данные в регистр данных
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > ARM, 32bit
S1LENCE
Здравствуйте,

у меня вот такая проблема в симулятор (мк lpc2148), использую SSP, пишу в регистр данных (SSPDR) данные 16 бит, вроде все нормально, флаг TFE = 0, BSY = 1, но в регистре все равно нули, в чем может быть проблема? или так и должно быть (возможно с регистра данных данные автоматически переносятся в сдвиговых регистр и в симуляторе этого не видно) ?

Спасибо!
DpInRock
Симулятор поступает совершенно правильно. Как в жизни. Ибо писать в регистр данных и читать регистр данных - это разные вещи. Регистры разные ибо.
S1LENCE
В каком смысле разные регистры? Он же один?
на сколько я понимаю. если он пустой и я туда заношу данные, то SPI сразу начанает передачу и поэтому я вижу нули, или не так?
Спасибо
zltigo
QUOTE (S1LENCE @ Jan 5 2011, 17:08) *
В каком смысле разные регистры? Он же один?

Вы будете смеяться, но их два - один на запись, другой на чтение. Начните с попытки понять, что такое SPI а не с тыкания мышкой в симуляторы.
S1LENCE
Ну это понятно что 2 фифо буфера, но программа все равно к одному обращается - SSPDR
zltigo
QUOTE (S1LENCE @ Jan 5 2011, 21:22) *
но программа все равно к одному обращается - SSPDR

А подумать, хоть чуть-чуть? Два "понятно", а зачем тогда второй, "если все равно к одному обращается"?
S1LENCE
При записи в этот регистр, данные поступают в Т буфер, когда считывает, то данные считываются с R буфера
DpInRock
Цитата(S1LENCE @ Jan 5 2011, 22:04) *
При записи в этот регистр, данные поступают в Т буфер, когда считывает, то данные считываются с R буфера

Вы где умных слов набрались таких? Не ходите больше туда. Там Зло.

Типа, просто посмотрите на схему (блок схему) SPI. Любого микроконтроллера. Абсолютно любого.
S1LENCE
Подскажите, пожалуйста, что я не так делаю, немогу понять

Код
int main(void)
{
int i;

    PINSEL1 |= 0x02A8;         //select SSEL, MISO, MOSI, SCK
    IO0DIR |= (1 << 20);            //SSEl as output
    SSPCR0 = 0x0D;         //14 bit
    SSPCPSR = 0xFA;           //speed = 32kHz
    SSPCR1 |= (1 << 1);         //SSP enable
for(;;)
{
    SSPDR = 0x16C8;
    while (!(SSPSR & (1 << 0)));
    for(i = 0; i < 100000; i++);
}
}


Почему в дебаггере в SSPDR всегда 0х3FF, тоесть все "1" после команды SSPDR = 0x16C8
И работает не так как надо...
DpInRock
А не пробовали прочитать ответы на самый первый пост? Попробуйте.
S1LENCE
Я так и не понял те ответы, но работает уже правильно
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.