智能無線多媒體數字播放系統的設計與實現
(5)SPTDAT和SPRDAT寄存器:發射和接收數據寄存器。
在Linux系統啟動時,要對以上寄存器進行賦值,就必須通過SPI驅動程序。而驅動程序就是作為系統和外部設備的一個橋梁,在這里只有將SPI通道正確打開,系統才能夠通過這個橋梁對外部無線芯片的基本工作寄存器進行操作,完成數據的收發。
Linux中的I/O子系統向內核中的其他部分提供了一個統一的標準設備接口,這是通過include/linux/fs.h中的數據結構file_operations完成的[11]。圖3所示為本系統中SPI驅動設備描述符函數組成框圖。
圖3中驅動程序的struct file_operations( )只使用了系統提供的4個子函數接口:open( )、write( )、ioctl( )和release( )。其中open( )用于完成SPI設備的打開、初始化相關寄存器、準備進行設備I/O操作;write( )完成通過SPI接口進行寫操作;ioctl( )是進行讀寫以外的其他操作,通過對I/O口高低電平的改變實現不同功能;release( )用于關閉設備,釋放占用內存[12]。
S3C2440A SPI的傳輸形式是由SPI控制寄存器SPCON中的1bit位和2bit位的值共同決定的。1bit位是CPHA(Clock Phrase Select),它用來選擇傳輸格式為Format A或Format B,置0為Format A,置1為Format B;2bit位是CPOL(Clock Polarity),它決定時鐘信號是高電平觸發還是低電平觸發,置0為active high,置1為active low。由圖3可以看出,CYWUSB6934的SPI單字節讀出時鐘是高電平觸發的,又如虛線箭頭處時鐘信號的上升沿正與圖4中SPI時鐘相吻合,而在圖4中cmd的2bit位是傳輸字節中的最高2位,再根據圖5中MOSI的MSB就應該是傳輸字節的最高2位,為00,所以選擇方式為Format A高電平觸發。
評論