Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: SSP на LPC2220:кто-нибудь смог запустить?
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Sasha75
Бьюсь второй день, никак не могу запустить сабж. Поиск по сайтам NXP и Keil ничего не дал. SPI1 на тех же выводах работает превосходно, но для проекта жизненно важно использовать именно 16 битный SSP с FIFO. Кто-нибудь сталкивался?
zltigo
Цитата(Sasha75 @ May 6 2009, 18:18) *
Бьюсь второй день, никак не могу запустить сабж.

Питание SSP в PCONP не включили, либо не выбрали режим SSP в SSPCR1, либо то и другое. Четвертого не дано smile.gif. В User Manual все подробно описано.
Sasha75
Цитата(zltigo @ May 6 2009, 18:29) *
Питание SSP в PCONP не включили, либо не выбрали режим SSP в SSPCR1, либо то и другое. Четвертого не дано smile.gif. В User Manual все подробно описано.

Сделал, как рекомендует мануал:
PCONP &= ~0x00000400; //clear PSPI bit (PCONP.10)
PCONP |= 0x00800000; //set PSSP bit (PCONP.23)

Режим SSP выбран:
SSPCR0 = 0x090F; //16 bit. SPI frame format, CPOL=CPHA=0

как-то подозрительно, что не нашел в сети кусков кода SSP для данного процессора
zltigo
Цитата(Sasha75 @ May 7 2009, 08:41) *
Сделал, как рекомендует мануал:

Если трудно прочитать мануал, то прочитайте до полного понимания ОДНУ сторочку из предыдущего поста и выполните ВТОРОЕ условие. И совет - никогда не используйте всякие мутные 0x...........
GetSmart
Цитата(zltigo @ May 7 2009, 11:15) *
И совет - никогда не используйте всякие мутные 0x...........

Цитата
SSPCR0 = 0x090F; //16 bit. SPI frame format, CPOL=CPHA=0

Здесь что ли не использовать? А что, лучше устанавливать поля регистра по отдельности с пустой тратой времени?
zltigo
Цитата(GetSmart @ May 7 2009, 09:33) *
Здесь что ли не использовать?

Нигде не использовать.
Код
    SSPCR0 = SSPCR0_DSS(8)|SSPCR0_SCR(1)|SSPCR0_FRF(0);
GetSmart
Цитата(zltigo @ May 7 2009, 11:49) *
SSPCR0_DSS

А это из какой оперы? Из какого файла?
zltigo
Цитата(GetSmart @ May 7 2009, 09:58) *
А это из какой оперы? Из какого файла?

Сам написал smile.gif
Код
// SSP Control Register 0
#define SSPCR0_DSS_POS    (0)
#define SSPCR0_FRF_POS    (4)
#define SSPCR0_SCR_POS     (8)
#define SSPCR0_DSS(nbit)    (((nbit)-1)<<SSPCR0_DSS_POS)
#define SSPCR0_FRF(mode)    ((mode)<<SSPCR0_FRF_POS)
#define SSPCR0_CPOL        BIT6
#define SSPCR0_CPHA        BIT7
#define SSPCR0_SCR(divx)     (((divx)-1)<<SSPCR0_SCR_POS)

один раз потратил несколько минут и все
Sasha75
Цитата(zltigo @ May 7 2009, 09:15) *
Если трудно прочитать мануал, то прочитайте до полного понимания ОДНУ сторочку из предыдущего поста и выполните ВТОРОЕ условие. И совет - никогда не используйте всякие мутные 0x...........


Работа с продуктами от NXP, конечно, изрядно подточила мои умственные способности, но не настолько:

SSPCR1 = 0x00; //Normal mode, master
<прочая инициализация>
SSPCR1 = 0x02; //SSP Enable
Начиная с этого места каждая запись в SSPDR должна приводить к посылке 16 бит, но этого не происходит
zltigo
Цитата(Sasha75 @ May 7 2009, 17:45) *
Работа с продуктами от NXP, конечно, изрядно подточила мои умственные способности, но не настолько:

Телепатически оценить трудно, как и отвечать на вопросы уровня "Я все сделал правильно, но не работает. Что делать". Вы полагаете, что вытягивать по строчке из Вас инициализацию и вычитывать с мануалом в руках значения разных магических чисел кому-то очень интересно? Лично мне расхотелось sad.gif
GetSmart
Вот мой код инициализации для LPC213x
Код
void LPC213xInitSPI1Master()
{
    PINSEL1 = (PINSEL1 & ~0x3fc) | 0x0a8;   // for SCK+, MISO+, MOSI+, SSEL-
    SSPCR1 = 0x00;      // turn off SSP
    SSPCR0 = 0x07;      // SPI, 8 bit, mode 0, 1 - active level SCK
    SSPCPSR = 6;        // even only
    SSPIMSC = 0;        // interupt disabled
    SSPCR1 = 0x02;      // SSP enable in master
    SSPSR;
}

Может PINSEL не установили?
Sasha75
Цитата(GetSmart @ May 7 2009, 18:33) *
Вот мой код инициализации для LPC213x
Код
void LPC213xInitSPI1Master()
{
    PINSEL1 = (PINSEL1 & ~0x3fc) | 0x0a8;   // for SCK+, MISO+, MOSI+, SSEL-
    SSPCR1 = 0x00;      // turn off SSP
    SSPCR0 = 0x07;      // SPI, 8 bit, mode 0, 1 - active level SCK
    SSPCPSR = 6;        // even only
    SSPIMSC = 0;        // interupt disabled
    SSPCR1 = 0x02;      // SSP enable in master
    SSPSR;
}

Может PINSEL не установили?

Спасибо за код. Я попробовал, но не помогло. Придется опять вступать в переписку с NXP. sad.gif Из предыдущего опыта с LPC2210 я знаю, что даташит у них не обязательно совпадает с реальностью
GetSmart
Это вроде новый проц. В новых появилось ещё управление клоком индивидуально для каждой перифирии. Ещё могли появиться какие-нибудь навороты. В начале описания SSP обычно есть блок схема, на которой всё важное нарисовано.

А что не так с LPC2210 ? Рассказывайте, не стесьняйтесь. Народ хочет знать smile.gif
Я вот только один косяк припоминаю, который у них в последнем мануале на LPC213х не соответствует действительности - это в RTC в регистре тиков кварца младший бит не используется, а используются следующие 15 бит.
Sasha75
Цитата(GetSmart @ May 14 2009, 18:01) *
Это вроде новый проц. В новых появилось ещё управление клоком индивидуально для каждой перифирии. Ещё могли появиться какие-нибудь навороты. В начале описания SSP обычно есть блок схема, на которой всё важное нарисовано.

А что не так с LPC2210 ? Рассказывайте, не стесьняйтесь. Народ хочет знать smile.gif
Я вот только один косяк припоминаю, который у них в последнем мануале на LPC213х не соответствует действительности - это в RTC в регистре тиков кварца младший бит не используется, а используются следующие 15 бит.

В LPC2210 был заявлен 16-битный SPI, я безуспешно пытался его запустить, после 3х недельной переписки из NXP пришел ответ, что при составлении даташита были перепутаны абзацы, никакого 16-битного SPI в этом проце нет, зато он есть в LPC213x, приносим извинения и пр. До этого они присылали отписки в духе "читайте даташит внимательно" или "обратитесь к местному дистрибьютору"
KRS
Цитата(Sasha75 @ May 14 2009, 18:53) *
В LPC2210 был заявлен 16-битный SPI

так у них в даташите написано что 2210 его и нет, есть только в 2210/01
у LPC часто даташиты меняются, я первым делом, если что то не работает проверяю, а не вышел ли новый даташит!
Sasha75
Цитата(KRS @ May 15 2009, 01:02) *
так у них в даташите написано что 2210 его и нет, есть только в 2210/01
у LPC часто даташиты меняются, я первым делом, если что то не работает проверяю, а не вышел ли новый даташит!

В LPC2210/01 его тоже нет, проверено smile.gif Даташит они исправили, когда мы им ткнули пальцем в ошибку. У LPC часто даташиты меняются, потому как бардак
GetSmart
Цитата(Sasha75 @ May 15 2009, 14:22) *
У LPC часто даташиты меняются, потому как бардак

Небольшой такой бардак с документацией. Но зато сами проци хорошие.
Wano
Цитата(GetSmart @ May 15 2009, 12:41) *
Небольшой такой бардак с документацией. Но зато сами проци хорошие.


Эт чтооо. Вот рааааз smile.gif)) пол года назад: уезжаю и говорю практиканту - ты разведи платку с LPC2387 USB/HOST и CAN выведи. Приезжаю через пару недель, приходит плата. Запаял проц и о чууууудо :
The USB host controller is available on the LPC2388 only.
Ну тут и посыпались трёхэтажные ...... smile.gif)) Так самое главное у меня есть краткое описалово в котором написано, что у 87-го есть HOST,я практиканту и сказал не задумываясь. Так тот же ещё умудрился и плату состряпать, там ножек не хватало, но как-то он их завёл. Не проверял, вроде новые 87-е тоже имеют HOST. Бойтесь практикантов smile3009.gif
Sasha75
Цитата(KRS @ May 15 2009, 01:02) *
так у них в даташите написано что 2210 его и нет, есть только в 2210/01
у LPC часто даташиты меняются, я первым делом, если что то не работает проверяю, а не вышел ли новый даташит!

Проблема решилась. У LPC2220 ошибка в даташите с адресом бита PCSSP. Он 21 бит, а не 23, как указано в таблице на стр. 77. На форуме уже обсуждалось для других процессоров из этой серии:
http://electronix.ru/forum/index.php?showt...mp;#entry466381



Цитата(GetSmart @ May 7 2009, 19:33) *
Вот мой код инициализации для LPC213x
Код
void LPC213xInitSPI1Master()
{
    PINSEL1 = (PINSEL1 & ~0x3fc) | 0x0a8;   // for SCK+, MISO+, MOSI+, SSEL-
    SSPCR1 = 0x00;      // turn off SSP
    SSPCR0 = 0x07;      // SPI, 8 bit, mode 0, 1 - active level SCK
    SSPCPSR = 6;        // even only
    SSPIMSC = 0;        // interupt disabled
    SSPCR1 = 0x02;      // SSP enable in master
    SSPSR;
}

Может PINSEL не установили?

Проблема решилась. У LPC2220 ошибка в даташите с адресом бита PCSSP. Он 21 бит, а не 23, как указано в таблице на стр. 77. На форуме уже обсуждалось для других процессоров из этой серии:
http://electronix.ru/forum/index.php?showt...mp;#entry466381
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.