第一次換手從TN2313轉到CAN128上面,控制SPI的暫存器名稱全都變了
在2313上面叫做USI,到CAN128時似乎是作了些簡化之類的,就直接叫SPI了
當初進了實驗室之後一上手就直接拿學長的測試程式來作操作,需要SPI通訊時就直接CALL函式
事實上整個SPI的工作方式及操作方法完全是一知半解,只知道把要傳的值丟到傳輸的函式中就好了
現在要換操作平台,就只好全部自已來啦!!
===========================================================
(以下都是在CAN128上面的操作)
設定SPI通訊的暫存器名稱叫做SPCR (SPI的Control Reg吧)
主要設定SPI的致能(SPE)、SPI工作完成的中斷致能(SPIE)、本機為MASTER或SLAVE(MSTR)
通訊的速度(SPR1、SPR0)及資料傳輸格式(CPOL、CPHA)
資料儲存的暫存器叫SPDR,基本的用法跟UART的UDR一樣
直接丟資料給它或從它那邊拿東西出來就可以了
比較特別的是由於SPI的資料是用擠的,MASTER推一個值給SLAVE,同時SLAVE會被擠一個值回來
所以如果只是單純要讀SLAVE端的資料的話,還是要由MASTER端隨便丟一個值到SLAVE去。
SPSR是SPI通訊的狀態暫存器,比較需要注意的是SPIF這個位置,它是SPI傳輸完成與否的旗標
當SPI傳輸完成後,它會舉旗變成1,若有SPI的中斷函式,則在函式結束時會回復到0。
===========================================================
這次的測試中,我很笨的自已把MOSI位置與MISO位置定義反了,害我DEBUG好久
還跟學弟借ATMEGA128的程式來測,慢慢DEBUG
其中比較奇怪的是,同樣一張的MEGA128開發模組板,燒同樣程式與FUSE,可是一個可以通一個不能通
用示波器量測,MOSI的輸出連1V都不到,完全不工作
偶然的情況下,我給MISO LOW電壓,想看發送不行,接收是否可收到0x00的資料
結果我一給了低電壓後,示波器上面MOSI端的電壓就馬上正常了,我從MISO移開了GND電壓
MOSI的輸出還是正常,重燒程式後依然正常,然後就一路正常了
是MCU內部出了問題嗎 = = 有夠無言的
留言列表