Кажется, я всегда сталкиваюсь с этой дилеммой при написании низкоуровневого кода для микроконтроллеров. Я никогда не знаю, где объявить определения выводов, чтобы сделать код максимально пригодным для повторного использования.
В этом случае я пишу драйвер для интерфейса 8051 с 12-битным последовательным ЦАП MCP4922. Я не уверен, как и где я должен объявить определения контактов для CS (выбор микросхемы) и LDAC (защелка данных) для ЦАП. На данный момент нет заявленного в заголовочном файле драйвера.
Я провел много исследований, пытаясь найти лучший подход, но ничего не нашел.
Я в основном хочу знать, каковы лучшие практики ... если есть книги, которые стоит прочитать, или онлайн-информация, примеры и т. Д., Любые рекомендации будут приветствоваться.
Только фрагмент драйвера, чтобы вы поняли суть
/**
@brief This function is used to write a 16bit data word to DAC B -12 data bit plus 4 configuration bits
@param dac_data A 12bit word
@param ip_buf_unbuf_select Input Buffered/unbuffered select bit. Buffered = 1; Unbuffered = 0
@param gain_select Output Gain Selection bit. 1 = 1x (VOUT = VREF * D/4096). 0 =2x (VOUT = 2 * VREF * D/4096)
*/
void MCP4922_DAC_B_TX_word(unsigned short int dac_data, bit ip_buf_unbuf_select, bit gain_select)
{
unsigned char low_byte=0, high_byte=0;
CS = 0; /**Select the chip*/
high_byte |= ((0x01 << 7) | (0x01 << 4)); /**Set bit to select DAC A and Set SHDN bit high for DAC A active operation*/
if(ip_buf_unbuf_select) high_byte |= (0x01 << 6);
if(gain_select) high_byte |= (0x01 << 5);
high_byte |= ((dac_data >> 8) & 0x0F);
low_byte |= dac_data;
SPI_master_byte(high_byte);
SPI_master_byte(low_byte);
CS = 1;
LDAC = 0; /**Latch the Data*/
LDAC = 1;
}