Отговори на тема  [ 8 мнения ] 
Непознат код 
Автор Съобщение
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Нед Окт 19, 2008 7:26 pm
Мнения: 673
Мнение Непознат код
Здравейте
Преправям едни И2Ц софтурни драйвери, за АМ2321. Причината е че с хардуерните такива не ще да работи, иска едни неща за събуждане дето няма как да му ги дам и едни времена ... не мога да се справя.
Код:
#define SDA_IN()  {GPIOB->CRL&=0X0FFFFFFF;GPIOB->CRL|=4<<28;}
#define SDA_OUT() {GPIOB->CRL&=0X0FFFFFFF;GPIOB->CRL|=3<<28;}

Това ми трябва на нормален C.
Това CRL може да е дефинирано в друг ххх.H фаил дето го нямам (sys.h)

Да добавя проца е ST32F103

_________________
Вниманиене съмвишист....ИЙ.


Съб Яну 21, 2017 2:23 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Фев 26, 2006 6:52 pm
Мнения: 11266
Местоположение: Добрич
Мнение Re: Непознат код
Не разбирам какво ти трябва...

GPIOB е порт B, т.е. става дума за пинове PB0-PB15

CRLH е Port configuration register low, т.е. в него са настройките на PB0-PB7 като за всеки пин има по 4 бита.

Младшите 2 бита определят режима:
MODEy[1:0]: Port x mode bits (y= 0 .. 7)
00: Input mode (reset state)
01: Output mode, max speed 10 MHz.
10: Output mode, max speed 2 MHz.
11: Output mode, max speed 50 MHz.

Старшите 2 са CNFy[1:0]: Port x configuration bits (y= 0 .. 7)
In input mode (MODE[1:0]=00):
00: Analog mode
01: Floating input (reset state)
10: Input with pull-up / pull-down
11: Reserved
In output mode (MODE[1:0] > 00):
00: General purpose output push-pull
01: General purpose output Open-drain
10: Alternate function output Push-pull
11: Alternate function output Open-drain

В твоя пример имаш:
Код:
#define SDA_IN()  {GPIOB->CRL&=0X0FFFFFFF;GPIOB->CRL|=4<<28;}
#define SDA_OUT() {GPIOB->CRL&=0X0FFFFFFF;GPIOB->CRL|=3<<28;}


GPIOB->CRL&=0X0FFFFFFF - сваля старшите 4 бита, а GPIOB->CRL|=4<<28 им слага стойност. Идеята вероятно е да конфигурират пин PB7 като Input mode + Floating input
във втория макрос идеята им сигурно е Output mode, max speed 50 MHz + General purpose output push-pull

С две думи сетват най-старшите 4 бите на CRL за да програмират PB7 в един или друг режим. Само като забележка, въпросният регистър има не 4 а общо 32 бита. И ако не дай си Боже решиш да ползваш и някой друг пин от PB0-PB6 то трябва да си много внимателен двете конфигурирания да не се застъпват. Т.е. да не би в прекъсване някъде да програмираш един пин, а в друг контекст да програмираш друг пин. Резултатът може и да не ти хареса ;-)


Съб Яну 21, 2017 3:36 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Сеп 26, 2004 9:21 pm
Мнения: 30686
Местоположение: София
Мнение Re: Непознат код
па то това си е номрално C :) ...


Съб Яну 21, 2017 6:26 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Яну 26, 2005 2:01 pm
Мнения: 1952
Местоположение: Варна
Мнение Re: Непознат код
Това заклинание е по-добро:
Код:
#define SDA_IN()  {GPIOB->CRL = (GPIOB->CRL & ~(0x0FuL<<28)) | (4uL<<28);}
#define SDA_OUT() {GPIOB->CRL = (GPIOB->CRL & ~(0x0FuL<<28)) | (3uL<<28);}

Избягва междинното превключване, за кратко, на пина в "Analog mode".

_________________
Най-опасният враг на истината и свободата е мнозинството.


Съб Яну 21, 2017 7:07 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Яну 26, 2005 2:01 pm
Мнения: 1952
Местоположение: Варна
Мнение Re: Непознат код
Ето и един примерен хедър, където да видиш как е деклариран регистъра CRL.


Прикачени файлове:
stm32f10x.h [16.54 KiB]
261 пъти

_________________
Най-опасният враг на истината и свободата е мнозинството.
Съб Яну 21, 2017 7:21 pm
Профил
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Нед Окт 19, 2008 7:26 pm
Мнения: 673
Мнение Re: Непознат код
Да благодаря
В даташеита регистрите са GPIOB_CRL ,GPIOB_CRH , GPIOB_IDR ...
Някъде трябва да има нещо подобно
на структура GPIOB {CRL,CRH,IDR...}
За да става така
GPOIB->CRL

Иначе не мога да го разбера това.

_________________
Вниманиене съмвишист....ИЙ.


Съб Яну 21, 2017 7:53 pm
Профил
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Нед Окт 19, 2008 7:26 pm
Мнения: 673
Мнение Re: Непознат код
Zdrav написа:
Ето и един примерен хедър, където да видиш как е деклариран регистъра CRL.


Да благодаря писал съм по бавно от теб.

_________________
Вниманиене съмвишист....ИЙ.


Съб Яну 21, 2017 7:56 pm
Профил
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Нед Окт 19, 2008 7:26 pm
Мнения: 673
Мнение Re: Непознат код
Заработи на mikroC PRO for ARM. Това е първия вариант в който тръгна, без оптимизиране.
Бъдете снизходителни, това е аматьорска работа, и преправен чужд код, с триста зора. :oops: .
На някой непрофесионалист може да му е от полза.


Прикачени файлове:
AM2321.rar [1.62 MiB]
201 пъти

_________________
Вниманиене съмвишист....ИЙ.
Нед Яну 22, 2017 6:45 pm
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 8 мнения ] 

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 0 госта


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

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни