TWI總線可以認為是I2C總線,ATmega328p的TWI總線是一個簡單強大的通訊接口,使用兩根線就可以了,分別是時鐘線SCL和數據線SDA。關於TWI的一些術語就不在這裡講了,自己可以去百度一下,大把的資料。
我們主要來看它涉及到的寄存器。
1.TWBR :TWI比特率寄存器
TWBR 為比特率發生器分頻因子。比特率發生器是一個分頻器,在主機模式下產生SCL時鐘頻率。就是一個8位的,這個沒啥說的。
2.TWCR :TWI控制寄存器
該寄存器用來使能TWI,通過施加START到總線上來啟動主機訪問,產生接收器應答,產生STOP狀態,以及在寫入數據到TWDR寄存器時控制總線的暫停等一些列活動。
bit 7:TWI中斷標誌,當TWI完成當前的工作,希望應用程序介入時TWINT置位。若SREG的I標誌及其TWCR寄存器的TWIE標誌也置位,則MCU執行TWI中斷。
bit 6:使能TWI應答。TWEA標誌控制應答脈衝的產生,若TWEA置位,則會出現如下條件時接口發生ACK脈衝:
設備從機地址被接收
TWAR的TWGCE置位時接收到廣播呼叫
在主機模式或者從機模式下接收到一個字節的數據
將TWEA清零可以是器件暫時脫離總線,置位後器件重新恢復地址識別。
bit 5:TWI START狀態標誌。當cpu希望自己成為總線上的主機時需要置位該位。TWI硬件檢測總線是不是可用,若總線空閒時,接口就在總線上產生START狀態,若總線忙,接口就一直等待,直達檢測到一個STOP狀態然後產生START以聲明自己希望成為主機,發送START之後軟件必須清零TWSTA。
bit 4:TWI STOP狀態標誌。在主機模式下,如果該位置位,則TWI接口將在總線上產生STOP狀態,然後該位自動清零。在從機模式下,置位該位可以使接口從錯位狀態恢復到未被尋址的狀態。
bit 3:TWI寫碰撞標誌。當TWINT為低時,寫數據寄存器TWDR將置位該位。當TWINT為高時,每一次對TWDR的寫訪問都將更新此標誌。
bit 2:TWI使能。該位用於使能TWI操作與激活TWI接口,當該位置位,TWI引腳將I/O引腳切換到SCL與SDA引腳。如果該位清零,TWI接口將被關閉,所有的TWI傳輸將被終止。
bit 1:保留位
bit 0:使能TWI中斷。當SREG的I位和TWIE置位時,只要TWINT為1,TWI中斷就激活。
3.TWSR :TWI 狀態寄存器
bit 7~3:TWI狀態位。這5位用來反映TWI邏輯和總線的狀態,從TWSR讀出的值包含5位狀態值和2位預分頻值。
我們來看一下這5位對應的值,發送模式的狀態情況,見下表:
即當這5位的值為:0x08,表示START信號發送了,就這個意思。
bit 1~0:TWI預分頻位。可讀寫,用於控制比特率的預分頻因子。見下表:
4.TWDR :TWI 數據寄存器
在發送模式下,該寄存器包含了要發送的字節,在接收模式下,該寄存器包含了接收到的數據。當TWI接口沒有進行移位工作(TWINT置位)時,這個寄存器使可以寫的。
bit 7~0:根據不同的狀態,存放的要發的下一個字節數據或者是接收到的數據。
5.TWAR – TWI 從機地址寄存器
bit7~1:從機地址。工作在從機模式的時候,TWI講根據這個地址進行響應。主機模式不需要此地址。
bit 0:控制到底是讀還是寫。
6.TWAMR :TWI 從機地址掩碼寄存器
關於寄存器就先說這麼多了。
再來看兩個表:
我們寫程序的時候,就可以根據這個表來自己弄了。
下一個教程我們再來寫相關的程序。
閱讀更多 小5嵌入式 的文章