当前位置:   article > 正文

一个SPI模块不够用?不要慌 28335 还可以将McBSP配置为SPI_mcbsp配置spi

mcbsp配置spi

将28335上的SPIA模块用来与AD2S1210芯片通信了,还需要另外一个SPI

这时候想到了

然后我就去TI官网找到了McBSP的参考指南

下面给出McBSP配置为SPI的具体步骤:

  1. GPIO初始化即 将McBSP0对应的GPIO复用为McBSP0        
  1. void Mcbsp_SPI_Gpio(void)
  2. {
  3. //mcbspb 做spi
  4. EALLOW;
  5. GpioCtrlRegs.GPAPUD.bit.GPIO24 = 0; // Enable pull-up on GPIO24 (SPISIMO)
  6. GpioCtrlRegs.GPAPUD.bit.GPIO25 = 0; // Enable pull-up on GPIO25 (SPISOMI)
  7. GpioCtrlRegs.GPAPUD.bit.GPIO26 = 0; // Enable pull-up on GPIO26 (SPICLK)
  8. GpioCtrlRegs.GPAQSEL2.bit.GPIO24 = 3; // Asynch input GPIO24 (SPISIMO)
  9. GpioCtrlRegs.GPAQSEL2.bit.GPIO25 = 3; // Asynch input GPIO25 (SPISOMI)
  10. GpioCtrlRegs.GPAQSEL2.bit.GPIO26 = 3; // Asynch input GPIO26 (SPICLK)
  11. GpioCtrlRegs.GPAQSEL2.bit.GPIO27 = 3; // Asynch input GPIO27 (SPISTE)
  12. //下面的值是3
  13. GpioCtrlRegs.GPAMUX2.bit.GPIO24 = 3; // Configure GPIO24 as SPISIMO
  14. GpioCtrlRegs.GPAMUX2.bit.GPIO25 = 3; // Configure GPIO25 as SPISOMI
  15. GpioCtrlRegs.GPAMUX2.bit.GPIO26 = 3; // Configure GPIO26 as SPICLK
  16. //Configure GPIO27 as SPISTEA
  17. GpioCtrlRegs.GPAPUD.bit.GPIO27 = 0;// Enable pullup
  18. GpioDataRegs.GPASET.bit.GPIO27 = 1; // Load output latch
  19. GpioCtrlRegs.GPAMUX2.bit.GPIO27 = 0; //
  20. GpioCtrlRegs.GPADIR.bit.GPIO27 = 1; // GPIO27 = output
  21. EDIS;
  22. }

所以GPIO24-27 复用为 McBSP-B

 2.McBSP模块相关寄存器初始化

  1. //以下设置适用于数据回送模式,也即自发自收
  2. void mcbsp_init()
  3. {
  4. /*----------------------------------------
  5. 1.使帧同步逻辑、采样率发生器、接收器和发送器处于复位状态,即FRST=GRST=XRST=RRST=0
  6. ----------------------------------------*/
  7. McbspbRegs.SPCR2.bit.FRST=0;
  8. McbspbRegs.SPCR2.bit.GRST=0;
  9. McbspbRegs.SPCR2.bit.XRST=0;
  10. McbspbRegs.SPCR1.bit.RRST=0;
  11. /*----------------------------------------
  12. 2. 控制寄存器配置
  13. a.串行端口控制寄存器SPCR1&SPCR2
  14. b.接收控制寄存器RCR1&RCR2
  15. c.发送控制寄存器XCR1&XCR2
  16. d.采样率发生寄存器SRGR1&SRGR2:采样率发生寄存器用于产生时钟信号CLKG和帧同步信号FSG
  17. 1).SRGR2.bit.CLKSM+PCR.bit.SCLKME共同确定输入时钟源,本次为01内部输入时钟LSPCLK
  18. 2). f clkg=f 输入时钟/(SRGR1.bit.CLKGDV+1)
  19. FSG周期:每(SRGR2.bit.FPER+1 )个CLKG周期 输出一个FSG脉冲
  20. ----------------------------------------*/
  21. McbspbRegs.SPCR2.all=0x0000;
  22. McbspbRegs.SPCR1.all=0x9000; //DLB=1,表示数字回环测试 10启用时钟停止模式兼容SPI
  23. McbspbRegs.RCR2.all=0x0001;
  24. McbspbRegs.RCR1.all=0x0040;//设置接收数据位数为16位
  25. McbspbRegs.XCR2.all=0x0001;
  26. McbspbRegs.XCR1.all=0x0040; //收发都是单向帧,每帧1个字,16位字长,不压扩,1位数据延迟
  27. McbspbRegs.SRGR2.all=0x3140;//0011 0001 0100 0000
  28. McbspbRegs.SRGR1.all=0x0003;//0000 0000 0000 0011 CLKG = LSPCLK / (3+1) = 9.375Mhz
  29. McbspbRegs.MCR2.all=0x0;
  30. McbspbRegs.MCR1.all=0x0;
  31. McbspbRegs.PCR.all=0x0A00;//由采样率发生器提供发送时钟和发送帧同步,照样上面。另外后4位对极性进行了配置
  32. //SPI模式下 XPHASE=RPHASE=XFRLEN1=RFRLEN1=0 XWDLEN1=RWDLEN1
  33. // McbspbRegs
  34. /*-----------------------------------------
  35. 添注:采用中断时,SPCR1.bit.RINTM或者SPCR2.bit.XINTM+MFFINT.bit.RINT(XINT)要设置好,进入中断后读DRR或写DXR
  36. -----------------------------------------*/
  37. McbspbRegs.MFFINT.bit.XINT = 1;
  38. McbspbRegs.MFFINT.bit.RINT = 1;
  39. /*----------------------------------------
  40. 3. 等待2个时钟周期及以上,保证内部的同步
  41. a.设置GRST=1,采样率发生器工作
  42. 等待2个时钟周期及以上,保证内部的同步
  43. b.设置RRST=XRST=1,允许发送和接收数据
  44. c.若使用内部帧同步逻辑,则需将FRST=1
  45. ----------------------------------------*/
  46. delay_us(1);
  47. //省略delay_loop();
  48. // Wait at least 2 SRG clock cycles
  49. McbspbRegs.SPCR2.bit.GRST=1;
  50. //省略delay_loop();
  51. // Wait at least 2 SRG clock cycles
  52. McbspbRegs.SPCR2.bit.XRST=1;
  53. McbspbRegs.SPCR1.bit.RRST=1;
  54. McbspbRegs.SPCR2.bit.FRST=1;
  55. }

 3.编写McBSP收发函数

        McBSP采用双缓存发送和三缓存接收数据寄存器,以支持连续传送

 

SPI收发程序如下:

  1. Uint16 Mcbsp_SPI_Byte(Uint16 data)
  2. {
  3. // 等待发送寄存器为空
  4. while(McbspbRegs.SPCR2.bit.XRDY != 1);
  5. // 向发送寄存器写入数据
  6. McbspbRegs.DXR1.all = data;
  7. // 等待接收就绪
  8. while(McbspbRegs.SPCR1.bit.RRDY != 1 );
  9. return McbspbRegs.DRR1.all;
  10. }

 最后仿真测试:

测试结果正确

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/205707
推荐阅读
相关标签
  

闽ICP备14008679号