?? 5409的mcbsp配置成spi口的小結.txt
字號:
5409的McBSP配置成SPI口的小結(http://www.dspinfo.net/new_view.asp?id=1166)
終于把5409的McBSP的配置搞清楚了!現在就把我做的寫出來,也好讓后來人在這方面少走彎路。
我的目標是將MCBSP配置成SPI兼容接口。 我采用MCBSP0。
下面我把我用匯編寫的McBSP的初始化程序給出來。已經調試通過了,但是可能還有不對的地方,請大家看了以后指正!
.include "cpu_reg.inc"
.def McBsp0Init
McBsp0Init:
stm #spcr10,spsa0 ;接收復位
stm #0000h,spsd0
stm #spcr20,spsa0
stm #0000h,spsd0 ;發送復位
rpt #9
nop
STM #spcr10,spsa0
STM #1800h,spsd0 ;clkstp=11b
*---------------------------PCR0------------------------------------
stm #pcr0,spsa0
;CLKXP=0,CLKXM=1,FSXM=1,FSXP=1
;xx..............;RESERVED
;..0.............;XIOEN=0時,DS,FSX,CLKX配置為串行接口
;...0............;RIOEN=0時,DR,FSR,CLKR,CLKS配置為串行接口引腳
;....1...........;FSXM=1時,采樣率發生器的幀同步模式位(SRGR2的FSGM位)決定幀同步信號
;.....0..........;FSRM=1,片內采樣率發生器產生幀同步信號,FSR為輸出引腳(除非SRGR的GSYNC=1)
;......1.........;在SPI模式下,CLKXM=1時,McBSP為主設備,并產生時鐘(CLKX)
;去驅動它的接收時鐘(CLKR)和系統的SPI從設備的SCLK時鐘
;.......1........;DLB=0時,
;CLKRM=0,接收時鐘由外部時鐘驅動
;CLKRM=1,接收時鐘由內部采樣率發生器驅動
;DLB=1時,
;CLKRM=0,接收時鐘由發送時鐘驅動,CLKX的特性由PCR的CLKXM位
;設定。CLKR引腳為高阻態
;CLKRM=1,CLKR為由發送時鐘(CLKX)驅動的輸出引腳。CLKX的特性由PCR的CLKXM位
;設定。
;........x.......;RESERVED,
;.........x......;CLKS引腳狀態位。當CLKS被選作通用輸入時,該位反映了CLKX引腳的值
;..........x.....;DX引腳狀態位
;...........x....;DR引腳狀態位
;............1...;幀同步脈沖FSX低電平有效
;.............0..;幀同步脈沖FSR低電平有效
;..............0.;發送時鐘極性,CLKXP=0時,在CLKX的上升沿采樣發送數據
;...............0;接收時鐘極性,CLKRP=0時,在CLKR的上升沿采樣發送數據
stm #0b08h,spsd0
*-------------------SRGR20-----------------------------------
stm #srgr20,spsa0
;0...............;GSYNC=0,采樣率發生寄存器時鐘(CLKG)自由運行
;.0..............;CLKSP=0,在CLKS的上升沿產生CLKG和FSG
;..1.............;CLKSM=1,采樣率發生器時鐘由CPU時鐘驅動
;...0............;FSGM=0,當DXR復制到XSR而產生發送幀同步信號(FSX)
;FSGM=0時,FPER和FWID均被忽略
;....xxxxxxxxxxxx;FPER,幀周期
stm #2000h,spsd0 ;clksm=1,fsgm=0
*--------------------SRGR10----------------------------------
stm #srgr10,spsa0
;DSP時鐘為60MHz,MBF200為12MHz
;xxxxxxxx........;FWID,幀寬度
;........00110000;CLKDV=48,采樣率發生時鐘除法器
stm #0030h,spsd0
;clkgdv=30h,SPI的時鐘=DSP時鐘/48
;=1MHz
nop
nop
*----------------------RCR10----------------------------------
stm #rcr10,spsa0
;x...............;RESERVED
;.0000000........;RFLEN1=0000000,每幀1字
;........100.....;RWDLEN1=100,每字24bit
;...........xxxxx;RESERVED
stm #0080h,spsd0
*---------------------RCR20------------------------------------
stm #rcr20,spsa0
;0...............;RPHASE=0,單相幀
;.0000000........;RFLEN2=0000000,每幀1字
;........100.....;RWDLEN2=100,每個字24bit
;...........00...;RCOMPAND=00,無擴展,數據傳送從最高位(msb)開始
;.............0..;RFIG=0,第一個后的接收幀同步脈沖重新啟動數據傳送
;..............01;RDATDLY=01,延遲一位數據
stm #0081h,spsd0 ;rdatdly=01
*-------------------------XCR10----------------------------------
stm #xcr10,spsa0 ;發送
;x...............;reserved
;.0000000........;XFRLEN1=0000000,每幀1字
;........100.....;XWDLEN1=100,每字24bit
;...........XXXXX;RESERVED
stm #0080h,spsd0 ;
*-------------------------XCR20----------------------------------
stm #xcr20,spsa0 ;發送
;0...............;XPHASE=0,單相幀
;.0000000........;XFLEN2=0000000,每幀1字
;........100.....;XWDLEN2=100,每字24bit
;...........00...;XCOMPAND=00,無擴展,數據傳輸從最高位(MSB)開始
;.............0..;SFIG=0,第一個后的發送幀同步脈沖重新啟動數據傳送
;..............01;XDATDLY=01,延遲一位數據
stm #0081h,spsd0
*-----------------------SPCR20----------------------------------------
STM #spcr20,spsa0
STM #0040h,spsd0 ;grst=1
rpt #9
nop ;等待
*---------------------------SPCR10---------------------------------------
stm #spcr10,spsa0 ;RINTM=10
;0...............;DLB=0,禁止循環返回
;.00.............;RJUST=00,DRR靠右對齊,高位補0
;...11...........;CLSTP=11,時鐘停止模式,有延時
;.....xxx........;RESERVED
;........0.......;DXENA=0,DX使能關
;.........0......;ABIS=0,禁止ABIS模式
;..........10....;RINTM=10,接收中斷RINT由一個新的幀同步信號產生
;............0...;RSYNCERR=0,無接收同步錯誤
;.............0..;RFULL=0,RBR沒有出現上溢
;..............0.;RRDY=0,接收器沒有準備好
;...............1;RRST=1,打開串口接收
stm #9821h, spsd0
rpt #9
nop
*----------------------------SPCR20----------------------------------
stm #spcr20,spsa0
;xxxxxx..........;RESERVED
;......0.........;FREE=1,時鐘自由運行
;.......0........;SOFT=0,禁止SOFT模式
;........0.......;FRST=0,幀同步邏輯電路復位。采樣率發生器不會產生幀同步信號FSG
;.........1......;GRST=1,采樣率發生器從復位中退出。CLKG按照采樣率發生寄存器
;(SRGR)中的編程值產生時鐘信號
;..........10....;XINTM=10,發送中斷XINT由一個新的幀同步信號產生
;............0...;XSYNCERR=0,無發送幀幀同步錯誤
;.............0..;XEMPTY=0,XSR為空
;..............0.;XRDY=0,發送器未準備好
;...............1;XRST=1,打開串口發送
stm #0061h,spsd0
rpt #9
nop
stm #spcr20,spsa0 ;FRST=1
orm #0080h,spsd0
rpt #6
nop
ret
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -