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

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> stm32f0xx + i2c, проблемы с периферией... срочно нужна помощь...
Посторонним В...
сообщение Sep 3 2012, 12:38
Сообщение #16


Участник
*

Группа: Участник
Сообщений: 41
Регистрация: 2-08-12
Пользователь №: 72 984




#define I2C_SCL_PIN GPIO_Pin_0
#define I2C_SDA_PIN GPIO_Pin_1
#define I2C_SCL_PIN_SOURCE GPIO_PinSource0
#define I2C_SDA_PIN_SOURCE GPIO_PinSource1
#define I2C_PORT GPIOB


#define I2CSWM_SET_SCL() (I2C_PORT->ODR |= I2C_SCL_PIN)
#define I2CSWM_RES_SCL() (I2C_PORT->ODR &= ~I2C_SCL_PIN)
#define I2CSWM_GET_SCL() (I2C_PORT->IDR & I2C_SCL_PIN)


#define I2CSWM_SET_SDA() (I2C_PORT->ODR |= I2C_SDA_PIN)
#define I2CSWM_RES_SDA() (I2C_PORT->ODR &= ~I2C_SDA_PIN)
#define I2CSWM_GET_SDA() (I2C_PORT->IDR & I2C_SDA_PIN)

у меня что та типа такого получилось....

код не пробовал.... )))

большие сомнения в I2CSWM_GET_SDA() и I2CSWM_GET_SLC()

Цитата(kan35 @ Sep 3 2012, 05:08) *
У F0 новый I2C, говорят учли все недочеты прошлых версий.


и добавили новых косяков.... )))
Go to the top of the page
 
+Quote Post
kosyak©
сообщение Sep 3 2012, 13:28
Сообщение #17


Частый гость
**

Группа: Свой
Сообщений: 179
Регистрация: 1-10-07
Из: НЧ
Пользователь №: 30 966



Думаю что у вас будет как то так

#define I2C_SCL_PIN 0 /*Номер пина*/
#define I2C_SDA_PIN 1

#define I2C_PORT GPIOB


#define I2CSWM_SETSCL() (I2C_PORT->BSRR |= 1<<I2C_SCL_PIN)
#define I2CSWM_CLEARSCL() (I2C_PORT->BSRR |= 1<<16<<I2C_SCL_PIN)
#define I2CSWM_GETSCL() ( (I2C_PORT->IDR & (1<<I2C_SCL_PIN)) == 0 ? 0 : 1 )


#define I2CSWM_SETSDA() (I2C_PORT->BSRR |= 1<<I2C_SDA_PIN)
#define I2CSWM_CLEARSDA() (I2C_PORT->BSRR |= 1<<16<<I2C_SDA_PIN)
#define I2CSWM_GETSDA() ( (I2C_PORT->IDR & (1<<I2C_SDA_PIN)) == 0 ? 0 : 1 )

Уделите внимание правильной настройке порта.
Go to the top of the page
 
+Quote Post
Посторонним В...
сообщение Sep 3 2012, 14:06
Сообщение #18


Участник
*

Группа: Участник
Сообщений: 41
Регистрация: 2-08-12
Пользователь №: 72 984



УРРРРРРРРРРРРРРРРРРААААААААААААААААААААААААААА!!!!!!!!!!!!!!!!!!!!


ВСЕ ЗАРАБОТАЛО!!!!


ДРУЗЬЯ СПАСИБА!!!!


Go to the top of the page
 
+Quote Post
kosyak©
сообщение Sep 3 2012, 14:22
Сообщение #19


Частый гость
**

Группа: Свой
Сообщений: 179
Регистрация: 1-10-07
Из: НЧ
Пользователь №: 30 966



Хм..эт чего мой код заработал? Или удалось запустить аппаратный?
Go to the top of the page
 
+Quote Post
Посторонним В...
сообщение Sep 3 2012, 15:16
Сообщение #20


Участник
*

Группа: Участник
Сообщений: 41
Регистрация: 2-08-12
Пользователь №: 72 984



Цитата(kosyak© @ Sep 3 2012, 14:22) *
Хм..эт чего мой код заработал? Или удалось запустить аппаратный?



ваш код....


макросы только поправил....


спасибо огромное...


нескромный вопрос :
а "one wire" программного у вас подобного куска кода не завалялось...???
буду признателен вдвойне!!!! )))


хрен с этим аппаратным... программный понятнее )))
Go to the top of the page
 
+Quote Post
kosyak©
сообщение Sep 3 2012, 15:47
Сообщение #21


Частый гость
**

Группа: Свой
Сообщений: 179
Регистрация: 1-10-07
Из: НЧ
Пользователь №: 30 966



Код то у меня есть...только он писан давно и для дургих процессоров.
Он мне не всем нравится..точнее совсем не нравится, имеет неприятные ограничения в использовании.
Приводит такое я не очень хочу ). Поищите в интернете - наверняка найдется более грамотное решение.

А аппаратный I2C все таки хорошо. Правда, если они действительно его поправили ...
Go to the top of the page
 
+Quote Post
Посторонним В...
сообщение Sep 3 2012, 16:33
Сообщение #22


Участник
*

Группа: Участник
Сообщений: 41
Регистрация: 2-08-12
Пользователь №: 72 984



Цитата(kosyak© @ Sep 3 2012, 15:47) *
Код то у меня есть...только он писан давно и для дургих процессоров.
Он мне не всем нравится..точнее совсем не нравится, имеет неприятные ограничения в использовании.
Приводит такое я не очень хочу ). Поищите в интернете - наверняка найдется более грамотное решение.

А аппаратный I2C все таки хорошо. Правда, если они действительно его поправили ...


ну аппаратный конечно лучше )))

видите ли я новичек в контроллерах...

любую логику реализовать могу запрасто а вот аппаратная часть и периферия мне пока тяжело дается...

уарт вот единственный из интерфейсов освоил... (((

конечно же стараюсь ... набиваю руку...

а ваш пример великолепен... просто - грамотно - четко... "высший пилотаж" )))

и все ошибки по схеме обрабатываются ... у меня был пример более корявый.... здесь можно реализовать контроль статуса связи с контроллером )))

кстати в m0 сейчас поставить вывод в "единицу" через регистр BSRR а сброс в "ноль " через BRR

получилось типа


#define I2CSWM_SETSCL() (I2C_PORT->BSRR |= (1<<I2C_SCL_PIN))
#define I2CSWM_CLEARSCL() (I2C_PORT->BRR |= (1<<I2C_SCL_PIN))
#define I2CSWM_GETSCL() ( (I2C_PORT->IDR & (1<<I2C_SCL_PIN)) == 0 ? 0 : 1 )


#define I2CSWM_SETSDA() (I2C_PORT->BSRR |= (1<<I2C_SDA_PIN))
#define I2CSWM_CLEARSDA() (I2C_PORT->BRR |= (1<<I2C_SDA_PIN))
#define I2CSWM_GETSDA() ( (I2C_PORT->IDR & (1<<I2C_SDA_PIN)) == 0 ? 0 : 1 )


а в stm32f0xx.h есть вообще определения типа

#define GPIO_Pin_0 (uint32_t)(0x00000001)
#define GPIO_Pin_1 (uint32_t)(0x00000002)
#define GPIO_Pin_2 (uint32_t)(0x00000004)
#define GPIO_Pin_3 (uint32_t)(0x00000008)


#define GPIO_Source0 (uint32_t)(0x00)
#define GPIO_Source1 (uint32_t)(0x01)
#define GPIO_Source2 (uint32_t)(0x02)
#define GPIO_Source3 (uint32_t)(0x03)


итд...


получилось проще



#define I2C_SCL_PIN GPIO_Pin_0
#define I2C_SDA_PIN GPIO_Pin_1
#define I2C_SCL_PIN_SOURCE GPIO_Source0
#define I2C_SDA_PIN_SOURCE GPIO_Source1

#define I2C_PORT GPIOB



#define I2CSWM_SETSCL() (I2C_PORT->BSRR |= I2C_SCL_PIN )
#define I2CSWM_CLEARSCL() (I2C_PORT->BRR |= I2C_SCL_PIN )
#define I2CSWM_GETSCL() ( ( I2C_PORT->IDR & I2C_SCL_PIN ) == 0 ? 0 : 1 )


#define I2CSWM_SETSDA() (I2C_PORT->BSRR |= I2C_SDA_PIN)
#define I2CSWM_CLEARSDA() (I2C_PORT->BRR |= I2C_SDA_PIN)
#define I2CSWM_GETSDA() ( ( I2C_PORT->IDR & I2C_SDA_PIN ) == 0 ? 0 : 1 )



и сразу пошел обмен с контроллером ))))))))
Go to the top of the page
 
+Quote Post
Мур
сообщение Aug 30 2014, 13:20
Сообщение #23


Знающий
****

Группа: Свой
Сообщений: 815
Регистрация: 7-06-06
Из: Харьков
Пользователь №: 17 847



Народ, бодаюсь с отладкой I2C для Кортекса М4 (EFM32WG990F256). Есть в Кейле возможность просмотра окна периферии I2C. Красота!..
Только в толк не пойму, почему выполняя последовательность команд

i2c->TXDATA = tmp; /* Data not transmitted until START sent */
i2c->CMD = I2C_CMD_START;

в строчках Property CMD
TXDATA не вижу новых кодов (только нули), хотя должны быть коды 0x01 0xe2

Без этого не могу стартануть последовательность от моего мастера... Что это может быть?
Go to the top of the page
 
+Quote Post
KnightIgor
сообщение Aug 30 2014, 17:05
Сообщение #24


Знающий
****

Группа: Участник
Сообщений: 643
Регистрация: 29-05-09
Из: Германия
Пользователь №: 49 725



Цитата(Мур @ Aug 30 2014, 15:20) *
Народ, бодаюсь с отладкой I2C для Кортекса М4 (EFM32WG990F256). Есть в Кейле возможность просмотра окна периферии I2C. Красота!..
Только в толк не пойму, почему выполняя последовательность команд

i2c->TXDATA = tmp; /* Data not transmitted until START sent */
i2c->CMD = I2C_CMD_START;

в строчках Property CMD
TXDATA не вижу новых кодов (только нули), хотя должны быть коды 0x01 0xe2

Без этого не могу стартануть последовательность от моего мастера... Что это может быть?

Не углубляясь в дебри доков на указаный процессор (Ваша задача), но рассуждая по аналогии с EFM32G210, сообщу, что:
- первая команда есть загрузка адреса ведомого на шине I2C, а вторая команда вырабатывает START и немедленную последующую передачу этого адреса.
- регистр TXDATA есть только для чтения и НЕ отображает записаное в него значение.
Go to the top of the page
 
+Quote Post
Мур
сообщение Aug 31 2014, 07:37
Сообщение #25


Знающий
****

Группа: Свой
Сообщений: 815
Регистрация: 7-06-06
Из: Харьков
Пользователь №: 17 847



Цитата(KnightIgor @ Aug 30 2014, 21:05) *
Не углубляясь в дебри доков на указаный процессор (Ваша задача), но рассуждая по аналогии с EFM32G210, сообщу, что:
- первая команда есть загрузка адреса ведомого на шине I2C, а вторая команда вырабатывает START и немедленную последующую передачу этого адреса.
- регистр TXDATA есть только для чтения и НЕ отображает записаное в него значение.

Спасибо!...
Я догадывался.... Ну а START ?... Его я и осцилом на ножке не вижу.... Окошко периферии для регистра CMD бит тоже не взводится...
Go to the top of the page
 
+Quote Post
KnightIgor
сообщение Aug 31 2014, 09:34
Сообщение #26


Знающий
****

Группа: Участник
Сообщений: 643
Регистрация: 29-05-09
Из: Германия
Пользователь №: 49 725



Цитата(Мур @ Aug 31 2014, 09:37) *
Спасибо!...
Я догадывался.... Ну а START ?... Его я и осцилом на ножке не вижу.... Окошко периферии для регистра CMD бит тоже не взводится...

Предполагаю, что периферия не инициализирована. Во-первых, необходимо включить такт периферии I2C. Во-вторых, правильно проинициализировать линии портов. В-третьих, не забыть "соединить" I2C с линиями портов, правильно взведя соответствующие биты в I2C->ROUTE. Я настоятельно рекомендую использовать периферийную библиотеку для процессора. Для EFM32 она написана очень умно и эффективно. Помощь прилагается.
Go to the top of the page
 
+Quote Post
Мур
сообщение Aug 31 2014, 13:26
Сообщение #27


Знающий
****

Группа: Свой
Сообщений: 815
Регистрация: 7-06-06
Из: Харьков
Пользователь №: 17 847



Цитата(KnightIgor @ Aug 31 2014, 13:34) *
Предполагаю, что периферия не инициализирована. Во-первых, необходимо включить такт периферии I2C. Во-вторых, правильно проинициализировать линии портов. В-третьих, не забыть "соединить" I2C с линиями портов, правильно взведя соответствующие биты в I2C->ROUTE. Я настоятельно рекомендую использовать периферийную библиотеку для процессора. Для EFM32 она написана очень умно и эффективно. Помощь прилагается.


Отлично! Пригодится...
Самое интересное, что за основу взят фирменный проект для изучения, где именно средствами этой библиотеки инициализируется тактирование... Буду ковырять... Спасибо еще раз!
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 31st July 2025 - 05:42
Рейтинг@Mail.ru


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