7856|3

1

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

DSP28335外接DAC8554教程 [复制链接]

DAC8554芯片的数据传输接口为SPI,每一帧为24位;但是28335的SPI接口最高可配置为16位。

使用28335控制DAC8554方法有三种:

1.才用IO口模拟SPI接口通信;

2.灵活使用28335的SPI接口通信;

3.使用28335的McBSP接口按照DAC8554的时序自定义通信格式。

此处以第二种方法为例:

dsp28335与DAC8554的接线为:



DAC8554的写时序为:


/SYNC必须在D_IN发送24位后DAC才认为接收到的数据为有效数据,否则,将接收到的数据舍弃。

本实验所使用的具体方法是开启28335SPI的FIFO功能,将24位数据帧分成两个12位的数据,依次存入SPITXBUF,这样就可以spi成功发送24的帧

  1. #include "DSP2833x_Device.h"     // DSP2833x Headerfile Include File  
  2. #include "DSP2833x_Examples.h"   // DSP2833x Examples Include File  
  3.   
  4. #define   spi_socket    0x10//OUTA  
  5.   
  6.   
  7.   
  8.   
  9. void spi_fifo_init(void);  
  10. void spi_init(void);  
  11. void spi_xmit(Uint16 a);  
  12.   
  13.   
  14. void main(void)  
  15. {  
  16.    float sdata;  // send data  
  17.      
  18. // Step 1. Initialize System Control:  
  19. // PLL, WatchDog, enable Peripheral Clocks  
  20. // This example function is found in the DSP2833x_SysCtrl.c file.  
  21.    InitSysCtrl();  
  22.   
  23. // Step 2. Initalize GPIO:   
  24. // This example function is found in the DSP2833x_Gpio.c file and  
  25. // illustrates how to set the GPIO to it's default state.  
  26. // InitGpio();  // Skipped for this example   
  27. // Setup only the GP I/O only for SPI-A functionality  
  28. // This function is found in DSP2833x_Spi.c  
  29.   
  30.    InitXintf16Gpio();   //zq  
  31.   
  32.    InitSpiaGpio();  
  33.   
  34. // Step 3. Clear all interrupts and initialize PIE vector table:  
  35. // Disable CPU interrupts   
  36.    DINT;  
  37.   
  38. // Initialize PIE control registers to their default state.  
  39. // The default state is all PIE interrupts disabled and flags  
  40. // are cleared.   
  41. // This function is found in the DSP2833x_PieCtrl.c file.  
  42.    InitPieCtrl();  
  43.   
  44. // Disable CPU interrupts and clear all CPU interrupt flags:  
  45.    IER = 0x0000;  
  46.    IFR = 0x0000;  
  47.      
  48. // Initialize the PIE vector table with pointers to the shell Interrupt   
  49. // Service Routines (ISR).   
  50. // This will populate the entire table, even if the interrupt  
  51. // is not used in this example.  This is useful for debug purposes.  
  52. // The shell ISR routines are found in DSP2833x_DefaultIsr.c.  
  53. // This function is found in DSP2833x_PieVect.c.  
  54.    InitPieVectTable();  
  55.       
  56. // Step 4. Initialize all the Device Peripherals:  
  57. // This function is found in DSP2833x_InitPeripherals.c  
  58. // InitPeripherals(); // Not required for this example  
  59.    spi_fifo_init();   // Initialize the Spi FIFO  
  60.    spi_init();        // init SPI  
  61.   
  62. // Step 5. User specific code:  
  63.   
  64.   
  65.   
  66.      // Transmit data  
  67.      sdata=sdata*198.6;//  变比为100/1  
  68.      spi_xmit(sdata);  
  69.   
  70. }     
  71.   
  72.   
  73. // Step 7. Insert all local Interrupt Service Routines (ISRs) and functions here:     
  74.   
  75.   
  76. void spi_init()  
  77. {      
  78.     SpiaRegs.SPICCR.all =0x000B;                 // Reset on, rising edge, 12-bit char bits  
  79.     SpiaRegs.SPICTL.all =0x0006;                 // Enable master mode, normal phase,  
  80.                                                  // enable talk, and SPI int disabled.  
  81.     SpiaRegs.SPIBRR =0x0004;//150M/2/(SPIBRR+1)=15M  
  82.     SpiaRegs.SPICCR.all =0x009B;                 // Relinquish SPI from Reset  
  83.     SpiaRegs.SPIPRI.bit.FREE = 1;                // Set so breakpoints don't disturb xmission  
  84. }  
  85.   
  86. void spi_xmit(Uint16 a)  
  87. {  
  88.     SpiaRegs.SPITXBUF=(((spi_socket<<8)&0xff00)|((a>>8)&0x00ff));  
  89.     SpiaRegs.SPITXBUF=(a<<4);  
  90. }      
  91.   
  92. void spi_fifo_init()                                          
  93. {  
  94. // Initialize SPI FIFO registers  
  95.     SpiaRegs.SPIFFTX.all=0xE040;  
  96.     SpiaRegs.SPIFFRX.all=0x204f;  
  97.     SpiaRegs.SPIFFCT.all=0x0;  
  98. }   
  99.   
  100.   
  101. //===========================================================================  
  102. // No more.  
  103. //===========================================================================
复制代码

另外还需配置IO口:

  1. GpioCtrlRegs.GPBPUD.bit.GPIO54 = 0;   // Enable pull-up on GPIO54 (SPISIMOA)  
  2.     GpioCtrlRegs.GPBPUD.bit.GPIO55 = 0;   // Enable pull-up on GPIO55 (SPISOMIA)  
  3.     GpioCtrlRegs.GPBPUD.bit.GPIO56 = 0;   // Enable pull-up on GPIO56 (SPICLKA)  
  4.     GpioCtrlRegs.GPBPUD.bit.GPIO57 = 0;   // Enable pull-up on GPIO57 (SPISTEA)  
  5. GpioCtrlRegs.GPBQSEL2.bit.GPIO54 = 3; // Asynch input GPIO54 (SPISIMOA)  
  6.     GpioCtrlRegs.GPBQSEL2.bit.GPIO55 = 3; // Asynch input GPIO55 (SPISOMIA)  
  7.     GpioCtrlRegs.GPBQSEL2.bit.GPIO56 = 3; // Asynch input GPIO56 (SPICLKA)  
  8.     GpioCtrlRegs.GPBQSEL2.bit.GPIO57 = 3; // Asynch input GPIO57 (SPISTEA)  
  9. GpioCtrlRegs.GPBMUX2.bit.GPIO54 = 1; // Configure GPIO54 as SPISIMOA  
  10.     GpioCtrlRegs.GPBMUX2.bit.GPIO55 = 1; // Configure GPIO55 as SPISOMIA  
  11.     GpioCtrlRegs.GPBMUX2.bit.GPIO56 = 1; // Configure GPIO56 as SPICLKA  
  12.     GpioCtrlRegs.GPBMUX2.bit.GPIO57 = 1; // Configure GPIO57 as SPISTEA
复制代码

想更改传输速率的自己修改SPI的时序


最新回复

SpiaRegs.SPITXBUF=(((spi_socket8)&0x00ff));   这个有什么意义呢?求解  详情 回复 发表于 2019-4-1 22:28
 
点赞 关注(2)

回复
举报

11

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
不错,学习了
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
看看学习下
 
 
 

回复

19

帖子

2

TA的资源

一粒金砂(中级)

4
 
SpiaRegs.SPITXBUF=(((spi_socket<<8)&0xff00)|((a>>8)&0x00ff));  
这个有什么意义呢?求解
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表