Search
Write a publication
Pull to refresh
2
0
Сергей @wasserati

Инженер электронщик

Send message
Спасибо за статью.
Сам задумывался над чем-то подобным. Только знаний С++ для реализации не хватило.
Частично решал проблему с помощью макросов вроде:
#define WRITE_BITFIELD(MOD, N,  REG, FIELD, VAL)   { (MOD ## N)->REG = ((MOD ## N)->REG &= ~(MOD ## _ ## REG ## _ ## FIELD)) | \ (uint32_t)(VAL) << (MOD ## _ ## REG ## _ ## FIELD ## _ ## Pos); }

Что выливалось в код:
WRITE_BITFIELD(I2C, 1, TIMINGR, PRESC,  0x0B)

Не оптимальное решение, но от ошибок вроде записи не в тот регистр спасало.
Теперь можно и ряд других ошибок отлавливать.
Можно еще доработать подход и использовать его для работы с регистрами различных ИС подключаемых посредством I2C или SPI, или пр. Писать придется в переменную, а не по адресу. А уже потом эту переменную передавать.

Information

Rating
Does not participate
Location
Сумы, Сумская обл., Украина
Date of birth
Registered
Activity