編寫MCU的低級代碼時,我似乎總是遇到這種困境。 我永遠不知道在哪裏聲明引腳定義,以使代碼儘可能重用。爲微控制器編寫設備驅動程序,在哪裏定義IO端口引腳?
在這種情況下我寫驅動器接口的到MCP4922 12位串行DAC。我不確定如何/在哪裏我應該聲明DAC的引腳定義爲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;
}
這是我一直在尋找的一種感謝。我將總結我的理解,以確保我的理解......如果那是可以的。 1)在驅動頭文件中定義了一個保存PIN信息的結構2)在你的主應用程序中聲明瞭一個結構實例 3)在另一個頭文件中定義的引腳信息被分配給結構4)結構被傳遞給驅動慣例是必要的。 這是正確的嗎? – volting 2010-05-27 14:30:23
我添加了一個用法示例以供進一步說明,但您明白了。我不認爲這是爲嵌入式系統編寫設備驅動程序的最佳方式,但在我的應用程序中似乎是合適的。 – Timbo 2010-05-27 14:47:28
現在感謝了,我看到這個任務在iic_init_bus()中完成 - 使它的整潔和整齊。 即使它不是「絕對最好」,它肯定會更好,然後我有..我真的需要找到一本關於嵌入式編程良好實踐的好書,可以幫助我解決這些類型問題... 再次感謝 – volting 2010-05-27 15:01:37