Transcript USCI-SPI
[0102] Lecture 13
USCI-SPI
(Universal Serial Communication Interface)
UCA 與UCB Module皆支援SPI Mode
(Synchronous Peripheral Interface)
UCA Module在Synchronous Mode下即工作
在SPI Mode
一般的SPI 有一個Master裝置和一個Slave 裝
置
SPI
SPI
SPI的傳輸動作類似UART
將8-bit(7-bit) data存入TXBUF後,即
由模組傳送出去
8-bit(7-bit)data由模組接受後,存放在
RXBUF中
Master 與Slave 皆配備有RXBUF和
TXBUF
SPI
SPI
SPI Mode的傳輸中,Bit-rate由Master
裝置決定,並提供BitCLK給Slave裝
置使用
SPI 與UART不同的是,傳輸只能由
Master 發起
Master在將資料存入TXBUF後,便會
開始SPI 模組的傳輸,並輸出BitCLK
給Slave
SPI
SPI
Slave使用來自Master的時脈訊號,接
收來自Master傳送的data,並將
TXBUF(Slave)的data傳出
Slave裝置將data存入TXBUF後並不能
立即送出,data會在TXBUF中等候,
直到Master發起傳輸
SPI
BitCLK
由於Slave裝置的Bit-rate 由Master提
供的BitCLK決定,所以只需要設定
Master的Bit-rate即可
設定Bit-rate的方法和在UART中一樣,
設定UCA2BR0與UCA2BR1構成
UCA2BR
𝑓𝐵𝑖𝑡𝐶𝐿𝐾= 𝑆𝑜𝑢𝑟𝑐𝑒 𝐶𝐿𝐾 𝑈𝐶𝐴2𝐵𝑅
由使用手冊得知,UCAx模組工作在
SPI mode時,UCA2MCTL不需使用,
設值為零
SPI
SPI Interrupt
SPI 模組和UART一樣,RXIFG和
TXIFG共享一個中斷向量
由UCA2IV的值,反映發起中斷的訊
號源為何
SPI
SPI-Bus
SPI 通訊介面分別有3-Pin 與4-Pin兩
種模式
3-Pin 模式的SPI-Bus 共有CLK、
SIMO、SOMI三條連線
4-Pin 模式則多了一條STE line
STE(Slave Transmit Enable) 是讓Slave
裝置也能夠發起傳輸,令一組SPI介
面允許一個以上的Master角色
SPI
SPI-Bus
CLK pin 用來傳遞Master的BitCLK訊
號給Slave
SIMO pin用於Master 輸出資料給
Slave接收
SOMI pin用於Slave 輸出資料給
Master接收
MSP430EVM設置了UCA2的腳
位供我們使用
SPI
SPI-Bus
由電路圖可知UCA2的腳位配置
SPI
SPI-Bus
接出的腳位位於圖中紅圈處
SPI
SPI-Bus
以導線連接相應的Pin腳
SPI
SPI-Bus
特別注意導線於排針上須確實連接
SPI
UCAx模組設定
UCAx的部分設定需要在模組暫停時
才能變更,因此在設定前,我們需要
以UCSWRT 軟體暫停功能先暫停
UCA模組的活動。
待設定完成後,再清除UCSWRST bit
讓系統就緒。
系統就緒後即可開始由Master發起傳
輸
SPI
UCAxCTL0
UCMST: Master Mode
0b= Slave mode
1b= Master mode
UCMODEx: When UCSYNC = 1
00b= 3-pin SPI
01b、10b for 4-pin SPI
SPI
UCAxCTL0
UCSYNC: Synchronous
0b= Asynchronous
1b= Synchronous
SPI
UCAxCTL1
UCSSELx: Clock source select
00b = Reserved
01b = ACLK
10b = SMCLK
11b = SMCLK
SPI
UCAxCTL1
UCSWRT: Software Reset(Default=1)
通訊模組的軟暫停,許多設定必須在通訊模
組暫停的情況下才能更動,預設是1。
0b = 通訊模組啟動
1b = 通訊模組暫停
SPI
UCAxBR0
UCBRx: Bit-rate prescaler(Bit7-Bit0)
Bit-rate 預除器的Low byte 設定,加上
UCAxBR1 × 256的值成為UCBRx,用來設
定Bit-rate 和Source clock的關係。
SPI
UCAxBR1
UCBRx: Bit-rate prescaler(Bit15-Bit8)
Bit-rate 預除器的High byte 設定,加上
UCAxBR0的值成為UCBRx,用來設定Bitrate 和Source clock的關係。
SPI
UCAxMCTL
Bit7-0 : Reserved
SPI
UCAxSTAT
UCLISTEN: Listen enable
0b = Disabled
1b = Enabled. UCAxTXD 會把資料傳到
receiver.
UCFE: Framing Error flag.
UCOE: Overrun Error flag
SPI
UCAxSTAT
UCBUSY: USCI Busy
0b = USCI inactive
1b = USCI transmitting or receiving
SPI
UCAxRXBUF
UCRXBUFx: Receive data Buffer
外部傳入的資料會暫存於此,RXBUFx在收
到資料後會升起UCRXIFG;讀取RXBUFx會
清除UCRXIFG.
在7-bit 模式下MSB會一直為0。
SPI
UCAxTXBUF
UCTXBUF: Transmit data Buffer
將要傳出的資料存放於此。Master一旦將要
傳輸的資料放置於此,傳輸模組即開始傳送,
同時寫入資料到TX buffer 會清除UCTXIFG
Slave 寫入資料到TX buffer會清楚UCTXIFG,
但資料會在TX buffer中等待
Master 發起通訊
SPI
UCAxIE
UCTXIE: Transmit interrupt enabled
UCRXIE: Receive interrupt enabled
SPI
UCAxIFG
UCTXIFG: Transmit interrupt Flag
UCTXIFG 會在 TX buffer 清空時升起
UCRXIFG: Receive interrupt Flag
UCRXIFG 會在讀取完一個完整字節後升起
SPI
UCAxIV
UCAxIV: Interrupt Vector
反映 Interrupt source,
02b = UCRXIFG; Higher Priority
04b = UCTXIFG; Lower Priority
Example
範例1
利用UCA2模組,設定在SPI模式,配置成
Master裝置
利用UCA2STAT中的UCLISTEN bit 設定Self
echo
Bit-rate 設定為9600bps
傳送一個byte的資料給自己接收
範例程式下載
Exercise
練習1
兩人一組
撰寫一個SPI傳輸程式
一個人撰寫Master程式,一個人撰寫Slave程
式
Bit-rate 9600bps
以Key pad 控制,傳輸5個不同字
元給對方
Exercise
練習1
Master 傳輸的訊息為小寫a~e
Slave 傳輸的訊息為大寫A~E
將資料放入TXBUF後切換D1狀態
RXBUF收到資料後切換D2狀態
將收到的資料顯示在LCM上
Exercise
練習2
角色互換
原本做Master 端的人改寫成Slave端程式
原本做Slave端的人改寫成Master端程式
嚴禁板子互換
Exercise
Reference Code
Master端程式
Slave端程式
Exercise
完成後,找到專案裡面的source file,以附
檔形式寄到 [email protected],並在
主旨中註明姓名、系級與學號,
source檔名稱請利於辨識。
EX:
主旨:
微處理機實習 LAB3 王大明 電機碩二 7101064123
Appendixes
附件
LCD.h
附件下載