9942|3

1

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

DSP28335软件实验研究--DA_AD模块功能详解 [复制链接]

选择实验板为00ic_DSP_TMS320F28335,仿真器为100v3,编译器为ccsv6.1

关于28335的DA输出模块,主要硬件由DSP和TLV5620组成,DSP提供了SIMO和SCLK、C3TRIP 信号给TLV5620,且C3TRIP信号是用来做片DAC信号的更新和锁 **
存的,这里大家要参照我们所提供的TLV5602的手册,4个信道 的DAC输出分别引了出来,方便大家来检测.这里还要说明的一点的是我们用了其中的两个信道DACA和DACB作为ADC的输入,  大家看电路便知。

实验结果:用万用表测试TLV5620的输出电压值0.8,然后输出的电压通过ACINA1转换后,通过观察发现Vin=0.8V  

  1. //    As supplied, this project is configured for "boot to SARAM"  
  2. //    operation.  The 2833x Boot Mode table is shown below.  
  3. //  
  4. //       $Boot_Table:  
  5. //  
  6. //         GPIO87   GPIO86     GPIO85   GPIO84  
  7. //          XA15     XA14       XA13     XA12  
  8. //           PU       PU         PU       PU  
  9. //        ==========================================  
  10. //            1        1          1        1    Jump to Flash  
  11. //            1        1          1        0    SCI-A boot  
  12. //            1        1          0        1    SPI-A boot  
  13. //            1        1          0        0    I2C-A boot  
  14. //            1        0          1        1    eCAN-A boot  
  15. //            1        0          1        0    McBSP-A boot  
  16. //            1        0          0        1    Jump to XINTF x16  
  17. //            1        0          0        0    Jump to XINTF x32  
  18. //            0        1          1        1    Jump to OTP  
  19. //            0        1          1        0    Parallel GPIO I/O boot  
  20. //            0        1          0        1    Parallel XINTF boot  
  21. //            0        1          0        0    Jump to SARAM       <- "boot to SARAM"  
  22. //            0        0          1        1    Branch to check boot mode  
  23. //            0        0          1        0    Boot to flash, bypass ADC cal  
  24. //            0        0          0        1    Boot to SARAM, bypass ADC cal  
  25. //            0        0          0        0    Boot to SCI-A, bypass ADC cal  
  26. //                                              Boot_Table_End$  
  27.   
  28.   
  29. #include "DSP2833x_Device.h"     // DSP2833x Headerfile Include File  
  30. #include "DSP2833x_Examples.h"   // DSP2833x Examples Include File  
  31.   
  32. /*这里使用了宏定义来控制更新锁存信号的功能,重点就是在时序上*/  
  33. #define SetLOAD GpioDataRegs.GPADAT.bit.GPIO17=1;   //将LOAD置高  
  34. #define ClrLOAD GpioDataRegs.GPADAT.bit.GPIO17=0;   //将LOAD置低  
  35.   
  36. void WriteDAC(unsigned char add,unsigned char rng,unsigned char vol);  
  37. void delay(unsigned int t);  
  38. void spi_xmit(Uint16 a);  
  39. void spi_fifo_init(void);  
  40. void spi_init(void);  
  41.   
  42. // ADC start parameters  
  43. #define ADC_MODCLK 0x5   // HSPCLK = SYSCLKOUT/2*ADC_MODCLK2 = 150/(2*4)             = 15MHz  
  44.                          //    for 60 MHz devices:    HSPCLK =  60/(2*4)             = 7.5 MHz  
  45. #define ADC_CKPS   0x1   // ADC module clock = HSPCLK/2*ADC_CKPS   = 15MHz/(1*2)   = 7.5MHz  
  46.                            
  47. #define ADC_SHCLK  0xf   // S/H width in ADC module periods                          = 16 ADC clocks  
  48. #define AVG        100  // Average sample limit  
  49. #define ZOFFSET    0x00  // Average Zero offset  
  50. #define BUF_SIZE   2048  // Sample buffer size  
  51.   
  52. // Global variable for this example  
  53. Uint16 SampleTable[BUF_SIZE];  
  54. float Vin=0;  
  55.   
  56.   
  57. void main(void)  
  58. {     
  59.    int temp;  
  60.    Uint16 i;  
  61.    Uint32 Sum=0;  
  62.      
  63.       
  64.     /*初始化系统*/  
  65.     InitSysCtrl();  
  66.   
  67.     // Specific clock setting for this example:  
  68.    EALLOW;  
  69.    SysCtrlRegs.HISPCP.all = ADC_MODCLK; // HSPCLK = SYSCLKOUT/(2*ADC_MODCLK)=15MHZ  
  70.    EDIS;  
  71.   
  72.     /*初始化GPIO;*/  
  73.     InitSpiaGpio();  
  74.   
  75.     ///初始化IO口  
  76.       
  77.     EALLOW;  
  78.     GpioCtrlRegs.GPAMUX2.bit.GPIO17 = 0; // 配置GPIO17为GPIO口  
  79.     GpioCtrlRegs.GPADIR.bit.GPIO17 = 1;      // 定义GPIO17输出引脚  
  80.     GpioCtrlRegs.GPAPUD.bit.GPIO17 = 0;      // 禁止上啦 GPIO17引脚  
  81.     EDIS;  
  82.       
  83.     /* 关中断 */  
  84.     DINT;  
  85.     IER = 0x0000;  
  86.     IFR = 0x0000;  
  87.       
  88.     /* 初始化PIE控制寄存器 */  
  89.     InitPieCtrl();  
  90.       
  91.     /* 初始化PIE参数表 */  
  92.     InitPieVectTable();   
  93.       
  94.   
  95.     // 步骤 4.初始化片内外设:  
  96.    InitAdc();  // For this example, init the ADC  
  97.     ///初始化SPI  
  98.    
  99.     spi_init();       // 初始化SPI  
  100.   
  101.     EINT;       // Enable Global interrupt INTM  
  102.     ERTM;       // Enable Global realtime interrupt DBGM  
  103.   
  104.     // Specific ADC setup for this example:  
  105.    AdcRegs.ADCTRL1.bit.ACQ_PS = ADC_SHCLK;//设置采样窗口时间:(15+1)*ADCCLK  
  106.    AdcRegs.ADCTRL3.bit.ADCCLKPS = ADC_CKPS;//ADC内核时钟分频:HSPCLK/2=6.25MHZ  
  107.    AdcRegs.ADCTRL1.bit.SEQ_CASC = 1;        // 1选择级联模式  
  108.    AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x1;  //通道选择ADCAIN1  
  109.    AdcRegs.ADCTRL1.bit.CONT_RUN = 1;       // 设置为连续运行  
  110.   
  111.    // 采样表清0  
  112.    for (i=0; i<BUF_SIZE; i++)  
  113.    {  
  114.      SampleTable[i] = 0;  
  115.    }  
  116.       
  117.     SetLOAD;    //把刷新锁存控制信号拉高  
  118.               
  119.     temp=47;//REF=2.2V;VO(DACA|B|C|D) =REF* CODE/256  
  120.    
  121.       
  122.               
  123.             WriteDAC(0,0,temp);     //0.4V  
  124.          
  125.             WriteDAC(1,0,temp*2);   //0.8V  
  126.   
  127.             WriteDAC(2,0,temp*3);   //1.2V  
  128.   
  129.             WriteDAC(3,0,temp*4);   //1.6V  
  130.   
  131.       // 软件启动SEQ1  
  132.    AdcRegs.ADCTRL2.all = 0x2000;  
  133.       
  134.     for (i=0; i<AVG; i++)  
  135.      {  
  136.         while (AdcRegs.ADCST.bit.INT_SEQ1== 0) {} // 等待中断  
  137.         AdcRegs.ADCST.bit.INT_SEQ1_CLR = 1;  
  138.         SampleTable[i] =((AdcRegs.ADCRESULT0>>4) );  
  139.      }  
  140.      for (i=0;i<AVG;i++)  
  141.      {  
  142.       Sum+=SampleTable[i];  
  143.       Sum=Sum/2;  
  144.      }  
  145.      //输入电压和AD值之间的关系Vin/Sum=3/4096;  
  146.      Vin=(float)(Sum*3)/4096;      //采样的电压值  
  147.   
  148.             delay(1500);    //在此设断点,观察变量Vin的值,另外可以用万用表直接测量ADCA1电压值  
  149.       
  150.   
  151. }     
  152.   
  153.       
  154. void WriteDAC(unsigned char add,unsigned char rng,unsigned char vol)  
  155. {     
  156.     unsigned short int data;  
  157.     data=0x0000;  
  158.     ///大家要知道这里所定义的各个变量的含义,add是4个通道的地址(00,01,10,11)  
  159.     ///                                     RNG是输出范围的倍数,可以是0或1。  
  160.     ///                                     VOL是0~256数据  
  161.       
  162.      data = ((add<<14) | (rng<<13) | (vol<<5));  
  163.      //注意这里的有效数据是11位,SPI初始化中也进行了定义  
  164.    
  165.     while(SpiaRegs.SPISTS.bit.BUFFULL_FLAG ==1);            //判断SPI的发送缓冲区是否是空的,等于0可写数据  
  166.       
  167.        SpiaRegs.SPITXBUF = data;    //把发送的数据写如SPI发送缓冲区  
  168.   
  169.     while( SpiaRegs.SPISTS.bit.BUFFULL_FLAG==1);        //当发送缓冲区出现满标志位时,开始琐存数据  
  170.            
  171.     delay(1500);//同通过一负跳变琐存要发送的数据,看TLV5620数据手册即可得知  
  172.     ClrLOAD;  
  173.       
  174.     delay(150);  
  175.     SetLOAD;  
  176.       
  177.     delay(1500);      
  178. }  
  179.   
  180. void delay(unsigned int t)  
  181. {  
  182.    
  183.     while(t>0)  
  184.         t--;  
  185. }  
  186. //初始化SPI函数  
  187. void spi_init()  
  188. {      
  189.     SpiaRegs.SPICCR.all =0x0a;///进入初始状态,数据在上升沿输出,自测禁止,11位数据模式  
  190.                                  
  191.     SpiaRegs.SPICTL.all =0x0006; // 使能主机模式,正常相位,使能主机发送,禁止接收  
  192.                                 //溢出中断,禁止SPI中断;  
  193.                                     
  194.     SpiaRegs.SPIBRR =0x0031;    //SPI波特率=37.5M/50   =0.75MHZ;                             
  195.     SpiaRegs.SPICCR.all =0x8a; //退出初始状态;   
  196.     SpiaRegs.SPIPRI.bit.FREE = 1;  // 自由运行      
  197. }  
  198.   
  199.   
  200.   
  201.   
  202.   
  203.   
  204. //===========================================================================  
  205. // No more.  
  206. //===========================================================================  
复制代码



最新回复

1月1日1时1分1秒,幸福卫星跟踪你,快乐导弹瞄准你,财富枪支指向你,祝福子弹围剿你,看你还能往哪躲。祝楼主元旦快乐!  详情 回复 发表于 2017-12-24 09:59
 
点赞 关注(4)

回复
举报

9797

帖子

24

TA的资源

版主

沙发
 
好贴,
发点现场的图片来
 
个人签名虾扯蛋,蛋扯虾,虾扯蛋扯虾
 

回复

39

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
硬件上参考电压接的是3.3V,为什么程序上说参考电压为2.2V
 
 
 

回复

142

帖子

0

TA的资源

一粒金砂(中级)

4
 
1月1日1时1分1秒,幸福卫星跟踪你,快乐导弹瞄准你,财富枪支指向你,祝福子弹围剿你,看你还能往哪躲。祝楼主元旦快乐!
 
个人签名静坐得幽趣,清游快此生。
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
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
快速回复 返回顶部 返回列表