Так как раз с этим никто и не спорит.
Проблема в том, что (как я уже писал) TOIE1 - ни разу не понятная именованная константа.
Чтобы понять, что она означает, минимум, нужно суметь открыть дэйтишит в нужном месте. А коль скоро мы его там открыли, то дальше уже без разницы - число там или именованная константа, т.к. все и так на одной странице.
НО! все это - только с точки зрения “читателя”. А с точки зрения “писателя” все намного хуже - из-за того, что напрочь отсутствуют единые и понятные способы преобразования тех имен, которые приведены в дэйташите, в имена констант, описанных в заголовочных файлах.
Вывод: если “читателю” безразлично, а для “писателя” - сложности, так зачем оно такое нужно?
Собственно, проблема как таковая имеется только у автора 8-го поста, который не смог разобраться, что такое 0b00000100 применительно к регистру TIMSK0.
Больше ни у кого никаких проблем нет.
Но, в связи с тем, что у кого-то проблемы все-таки возникли, теперь уже у меня возник вопрос: а можно ли каким-то разумным способом подобных проблем избегать?
Пока что разумных предложений не озвучено, напротив, в ответах преобладают эмоции.
Вопрос не в этом.
Любому человеку, имеющему мало-мальский опыт, понятно, что прежде всего ошибки следует искать в собственном свеженаписанном коде, а не в коде, который уже давно и успешно использует масса людей.
Вопрос в том, как угадывать названия именованных констант, не прибегая к процедуре утомительного поиска по многочисленным заголовочным файлам?
Ну то есть следующий код можно считать вполне кошерным?
#define LCD_WR 0x1000 // PB12
#define LCD_RS 0x0800 // PB11
#define LCD_CS 0x0002 // PB1
#define LCD_RESET 0x0001 // PB0
#define DATA_MASK 0x07f8 // PB3-PB10, данные передаются в разрядах: D0-PB3, D1-PB4, ... D7-PB10
#define CTRL_MASK_DEFAULT 0x1803 // все управляющие биты HIGH (WR | RS | CS | RESET)
#define CTRL_MASK_WR_RS_CS 0x0001 // маска для записи команд (RESET)
#define CTRL_MASK_WR_CS 0x0801 // маска для записи данных (RS | RESET)
#define AUDIO_INPUT PA0 // аналоговый вход
#define size 1024 // длина буфера оцифровки
...
void Lcd_Write_Com(unsigned char d) { // вывод команды: опустить CS, RS и WR, вывести байт, поднять WR
GPIOB_BASE->ODR = CTRL_MASK_WR_RS_CS | (d << 3);
GPIOB_BASE->BSRR = LCD_WR;
}
inline void Lcd_Write_Data(unsigned char d) { // вывод данных: опустить CS и WR, вывести байт, поднять WR
GPIOB_BASE->ODR = CTRL_MASK_WR_CS | (d << 3);
GPIOB_BASE->BSRR = LCD_WR;
}
...
Lcd_Write_Com(0x11);
delay(20);
Lcd_Write_Com(0xD0);
Lcd_Write_Data(0x07);
Lcd_Write_Data(0x42);
Lcd_Write_Data(0x18);
Или однократно используемые 0xD0, 0x07, 0x42… тоже следовало как-то обозвать?