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

 
 
> как лучше дописать макрос Аскольда для STM32?, застрял на cpl();
Метценгерштейн
сообщение Jan 1 2013, 10:28
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 357
Регистрация: 12-04-05
Из: Петербург
Пользователь №: 4 079



В общем, пока вот что получилось

Код
#elif defined(STM32L152xx)
    #define _setL(port,bit)         do { port -> BSRRH |= bit; } while(0) // возможно, | лишний символ
    #define _setH(port,bit)         do { port -> BSRRL |= bit; } while(0)
    #define _clrL(port,bit)         do { port -> BSRRL |= bit; } while(0)
    #define _clrH(port,bit)         do { port -> BSRRH |= bit; } while(0)
    #define _cpl(port,bit,val)      do {


вот с cpl не знаю. У нас по очереди нужно записывать бит в регистр
port -> BSRRH |= bit
потом в
port -> BSRRL |= bit

никакого XOR, как с АВР.
по идее, нужно делать проверку if ()
бита в порте GPIOx_IDR

но что-то не хочет компилиться.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Метценгерштейн
сообщение Jan 1 2013, 18:33
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 357
Регистрация: 12-04-05
Из: Петербург
Пользователь №: 4 079



вот решение

Код
#elif defined(STM32L152xx)
    #define _setL(port,bit)         do { port -> BSRRH |= bit; } while(0) // возможно, | лишний символ
    #define _setH(port,bit)         do { port -> BSRRL |= bit; } while(0)
    #define _clrL(port,bit)         do { port -> BSRRL |= bit; } while(0)
    #define _clrH(port,bit)         do { port -> BSRRH |= bit; } while(0)
    #define _cpl(port,bit,val) { if ((port -> ODR) & bit) _clr##val(port, bit); else _set##val(port, bit); }
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Jan 1 2013, 18:54
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(Метценгерштейн @ Jan 1 2013, 20:33) *
вот решение

Код
#elif defined(STM32L152xx)
    #define _setL(port,bit)         do { port -> BSRRH |= bit; } while(0) // возможно, | лишний символ

Наверняка лишний.
Цитата
Bits 15:0 BSy: Port x set bit y (y= 0..15)
These bits are write-only and can be accessed in word, half-word or byte mode. A read to
these bits returns the value 0x0000

Назначение этих региистров - исключить чтение-модификацию-запись, то есть сделать запись атомарной.
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 20th July 2025 - 23:37
Рейтинг@Mail.ru


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