<br />终于把5409的McBSP的配置搞清楚了!现在就把我做的写出来,也好让后来人在这方面少走弯路。我的目标是将MCBSP配置成SPI兼容接口。<br /> 我采用MCBSP0。 下面我把我用汇编写的McBSP的初始化程序给出来。已经调试通过了,但是可能还有不对的地方,请大家看了以后指正!<br /> .include "cpu_reg.inc"<br /> .def McBsp0Init<br />McBsp0Init: <br /> stm #spcr10,spsa0 ;接收复位<br /> stm #0000h,spsd0 <br /> <br /> stm #spcr20,spsa0 <br /> stm #0000h,spsd0 ;发送复位<br /> rpt #9<br /> nop<br /> STM #spcr10,spsa0<br /> STM #1800h,spsd0 ;clkstp=11b<br />*---------------------------PCR0------------------------------------ <br /> stm #pcr0,spsa0 ;CLKXP=0,CLKXM=1,FSXM=1,FSXP=1<br /> ;xx..............;RESERVED<br /> ;..0.............;XIOEN=0时,DS,FSX,CLKX配置为串行接口<br /> ;...0............;RIOEN=0时,DR,FSR,CLKR,CLKS配置为串行接口引脚<br /> ;....1...........;FSXM=1时,采样率发生器的帧同步模式位(SRGR2的FSGM位)决定帧同步信号<br /> ;.....0..........;FSRM=1,片内采样率发生器产生帧同步信号,FSR为输出引脚(除非SRGR的GSYNC=1)<br /> ;......1.........;在SPI模式下,CLKXM=1时,McBSP为主设备,并产生时钟(CLKX)<br /> ;去驱动它的接收时钟(CLKR)和系统的SPI从设备的SCLK时钟<br /> ;.......1........;DLB=0时,<br /> ;CLKRM=0,接收时钟由外部时钟驱动<br /> ;CLKRM=1,接收时钟由内部采样率发生器驱动<br /> ;DLB=1时,<br /> ;CLKRM=0,接收时钟由发送时钟驱动,CLKX的特性由PCR的CLKXM位<br /> ;设定。CLKR引脚为高阻态<br /> ;CLKRM=1,CLKR为由发送时钟(CLKX)驱动的输出引脚。CLKX的特性由PCR的CLKXM位<br /> ;设定。<br /> ;........x.......;RESERVED,<br /> ;.........x......;CLKS引脚状态位。当CLKS被选作通用输入时,该位反映了CLKX引脚的值<br /> ;..........x.....;DX引脚状态位<br /> ;...........x....;DR引脚状态位<br /> ;............1...;帧同步脉冲FSX低电平有效<br /> ;.............0..;帧同步脉冲FSR低电平有效<br /> ;..............0.;发送时钟极性,CLKXP=0时,在CLKX的上升沿采样发送数据<br /> ;...............0;接收时钟极性,CLKRP=0时,在CLKR的上升沿采样发送数据<br /> stm #0b08h,spsd0<br />*-------------------SRGR20----------------------------------- <br /> stm #srgr20,spsa0<br /> ;0...............;GSYNC=0,采样率发生寄存器时钟(CLKG)自由运行<br /> ;.0..............;CLKSP=0,在CLKS的上升沿产生CLKG和FSG<br /> ;..1.............;CLKSM=1,采样率发生器时钟由CPU时钟驱动<br /> ;...0............;FSGM=0,当DXR复制到XSR而产生发送帧同步信号(FSX)<br /> ;FSGM=0时,FPER和FWID均被忽略<br /> ;....xxxxxxxxxxxx;FPER,帧周期<br /> stm #2000h,spsd0 ;clksm=1,fsgm=0<br />*--------------------SRGR10---------------------------------- <br /> stm #srgr10,spsa0 ;DSP时钟为60MHz,MBF200为12MHz<br /> ;xxxxxxxx........;FWID,帧宽度<br /> ;........00110000;CLKDV=48,采样率发生时钟除法器<br /> stm #0030h,spsd0 ;clkgdv=30h,SPI的时钟=DSP时钟/48<br /> ;=1MHz<br /> nop<br /> nop<br />*----------------------RCR10---------------------------------- <br /> stm #rcr10,spsa0 <br /> ;x...............;RESERVED<br /> ;.0000000........;RFLEN1=000 0000,每帧1字<br /> ;........100.....;RWDLEN1=100,每字24bit<br /> ;...........xxxxx;RESERVED<br /> stm #0080h,spsd0 <br />*---------------------RCR20------------------------------------ <br /> stm #rcr20,spsa0<br /> ;0...............;RPHASE=0,单相帧<br /> ;.0000000........;RFLEN2=000 0000,每帧1字<br /> ;........100.....;RWDLEN2=100,每个字24bit<br /> ;...........00...;RCOMPAND=00,无扩展,数据传送从最高位(msb)开始<br /> ;.............0..;RFIG=0,第一个后的接收帧同步脉冲重新启动数据传送<br /> ;..............01;RDATDLY=01,延迟一位数据<br /> stm #0081h,spsd0 ;rdatdly=01<br />*-------------------------XCR10---------------------------------- <br /> stm #xcr10,spsa0 ;发送<br /> ;x...............;reserved<br /> ;.0000000........;XFRLEN1=000 0000,每帧1字<br /> ;........100.....;XWDLEN1=100,每字24bit<br /> ;...........XXXXX;RESERVED<br /> stm #0080h,spsd0 ;<br />*-------------------------XCR20---------------------------------- <br /> stm #xcr20,spsa0 ;发送<br /> ;0...............;XPHASE=0,单相帧<br /> ;.0000000........;XFLEN2=000 0000,每帧1字<br /> ;........100.....;XWDLEN2=100,每字24bit<br /> ;...........00...;XCOMPAND=00,无扩展,数据传输从最高位(MSB)开始<br /> ;.............0..;SFIG=0,第一个后的发送帧同步脉冲重新启动数据传送<br /> ;..............01;XDATDLY=01,延迟一位数据<br /> stm #0081h,spsd0 <br />*-----------------------SPCR20----------------------------------------<br /> STM #spcr20,spsa0<br /> STM #0040h,spsd0 ;grst=1 <br /> rpt #9<br /> nop ;等待<br />*---------------------------SPCR10---------------------------------------<br /> stm #spcr10,spsa0 ;RINTM=10<br /> ;0...............;DLB=0,禁止循环返回<br /> ;.00.............;RJUST=00,DRR靠右对齐,高位补0<br /> ;...11...........;CLSTP=11,时钟停止模式,有延时<br /> ;.....xxx........;RESERVED<br /> ;........0.......;DXENA=0,DX使能关<br /> ;.........0......;ABIS=0,禁止ABIS模式<br /> ;..........10....;RINTM=10,接收中断RINT由一个新的帧同步信号产生<br /> ;............0...;RSYNCERR=0,无接收同步错误<br /> ;.............0..;RFULL=0,RBR没有出现上溢<br /> ;..............0.;RRDY=0,接收器没有准备好<br /> ;...............1;RRST=1,打开串口接收<br /> stm #9821h, spsd0 <br /> rpt #9<br /> nop<br />*----------------------------SPCR20----------------------------------<br /> stm #spcr20,spsa0 <br /> ;xxxxxx..........;RESERVED<br /> ;......0.........;FREE=1,时钟自由运行<br /> ;.......0........;SOFT=0,禁止SOFT模式<br /> ;........0.......;FRST=0,帧同步逻辑电路复位。采样率发生器不会产生帧同步信号FSG<br /> ;.........1......;GRST=1,采样率发生器从复位中退出。CLKG按照采样率发生寄存器<br /> ;(SRGR)中的编程值产生时钟信号<br /> ;..........10....;XINTM=10,发送中断XINT由一个新的帧同步信号产生<br /> ;............0...;XSYNCERR=0,无发送帧帧同步错误<br /> ;.............0..;XEMPTY=0,XSR为空<br /> ;..............0.;XRDY=0,发送器未准备好<br /> ;...............1;XRST=1,打开串口发送<br /> stm #0061h,spsd0 <br /> rpt #9<br /> nop<br /> stm #spcr20,spsa0 ;FRST=1<br /> orm #0080h,spsd0<br /> rpt #6<br /> nop<br /> ret<br />,本贴地址:http://www.hellodsp.com/bbs/viewthread.php?tid=9037<br /><br /><br /><br /> |
|