Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: LPC2103, использование SPI
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > ARM, 32bit
smk
В книге Тревора Мартина сказано, что при использовании модуля SPI в режиме ведущего нужно на P0.7 (SSEL0) P0.20 (вероятно имеется ввиду Р0.21 SSEL1) принудительно подавать 1. Так ли это? Мне нужно использовать только SPI0 как мастер. При єтом планировалось, что Р0.7 будет управлять выводом SS ведомого. Возможно ли так поступить? Спасибо.
GetSmart
Цитата(smk @ Nov 11 2011, 21:40) *
В книге Тревора Мартина сказано, что при использовании модуля SPI в режиме ведущего нужно на P0.7 (SSEL0) P0.20 (вероятно имеется ввиду Р0.21 SSEL1) принудительно подавать 1. Так ли это? Мне нужно использовать только SPI0 как мастер. При єтом планировалось, что Р0.7 будет управлять выводом SS ведомого. Возможно ли так поступить? Спасибо.

В режиме мастера пины SSELx процессоров LPC2103,2102,2101 можно юзать по любому назначению. Вот выдержка из юзер мануала
Цитата
On the LPC2101/02/03 the SSEL0 pin can be used for a different function when the SPI0
interface is only used in Master mode. For example, the pin hosting the SSEL0 function can
be configured as an output digital GPIO pin or used to select one of the Match outputs.

В книге Тревора Мартина возможно описываются старые процессоры ARM7 от NXP (LPC2104,2105,2106,2114 и др.)
smk
А почему вот это IO0SET |= (1<<30); работает, а на вот это IO0SET |= (1<<31); Keil ругается?
DpInRock
Странно что Кейл ругается. Может подсознательно чует быссмысленность данной операции.
Если надо установить один единственный бит в регистре надо просто
IO0SET=1<<31; И все.
smk
Цитата(DpInRock @ Nov 11 2011, 21:11) *
Странно что Кейл ругается. Может подсознательно чует быссмысленность данной операции.
Если надо установить один единственный бит в регистре надо просто
IO0SET=1<<31; И все.

Так тоже ругается. main.c(23): warning: #61-D: integer operation result is out of range
aaarrr
1U<<31
smk
Т.е. оно работает, но вот такие предупреждения.
DpInRock
Чисто так, совет.

Определяем
#define b0 1
#define b1 2
#define b2 4
..
#define b31 0x80000000

И юзаем просто.
Намного изящнее выглядит
IO0SET=b1|b4|b29

нежели страшные конструкции из 6 символов...
И кейл ругаться перестанет.
smk
Цитата(aaarrr @ Nov 11 2011, 21:16) *
1U<<31

Точно. Помогло. Спасибо.
smk
Еще возник такой вопрос. SPI в LPC2103 позволяет передавать как 8 так и 16 бит. Можно ли переключаться "на горячую" между этими режимами? S0SPCR = 0x0824;//8 bit и S0SPCR = 0x0020;//16 bit так правильно? Спасибо.
esaulenka
Цитата(smk @ Nov 12 2011, 15:21) *
Еще возник такой вопрос. SPI в LPC2103 позволяет передавать как 8 так и 16 бит. Можно ли переключаться "на горячую" между этими режимами? S0SPCR = 0x0824;//8 bit и S0SPCR = 0x0020;//16 bit так правильно? Спасибо.


У нас на 2138 так когда-то работало. Что будет в момент передачи, я не знаю, но в момент простоя SPI переключаться можно без проблем.
Только, кажется мне, тут с третьим битом ошибка, должно быть наоборот.


PS и если плата ещё не разведена, рекомендую посмотреть на SSP - тот же SPI, но пошустрее и с FIFO.
smk
Цитата(esaulenka @ Nov 14 2011, 11:35) *
PS и если плата ещё не разведена, рекомендую посмотреть на SSP - тот же SPI, но пошустрее и с FIFO.

Спасибо, заинтересовало. На вскидку не понял, а SSEL там автоматом выставляется?
esaulenka
Цитата(smk @ Nov 14 2011, 15:19) *
На вскидку не понял, а SSEL там автоматом выставляется?

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