文章目录

  • 前言
  • 1 SCIA FIFO 串口通信配置
  • 2 DAC 数模转换 配置
    • 2.1 TLV5620芯片简介
    • 2.2 TLV5620初始化函数
    • 2.2 DAC 输出函数
  • 3 ADC 模数转换 配置
  • 4 MAIN
  • 5 实验分析
  • 总结

前言

使用ADCINA0检测DAC的DB通道输出的电压值,并将DAC的DB输出电压值与ADCINA0检测的电压值通过串口输出。

SPI将DSP的指令发送给DAC实现DA转换
SCI将DSP存储的DAC转换结果和ADC采样结果发送给上位机

特此记录,加深印象~


1 SCIA FIFO 串口通信配置

博客TI DSP 28335 SCI FIFO中断 串口232通信已仔细介绍过SCIA配置。
此处不再详细展开介绍。

void UARTa_Init(Uint32 baud)
{unsigned char scihbaud=0;unsigned char scilbaud=0;Uint16 scibaud=0;scibaud=37500000/(8*baud)-1;scihbaud=scibaud>>8;scilbaud=scibaud&0xff;EALLOW;SysCtrlRegs.PCLKCR0.bit.SCIAENCLK = 1;   // SCI-AEDIS;InitSciaGpio();//Initalize the SCI FIFOSciaRegs.SCIFFTX.all=0xE040;SciaRegs.SCIFFRX.all=0x204f;SciaRegs.SCIFFCT.all=0x0;// Note: Clocks were turned on to the SCIA peripheral// in the InitSysCtrl() functionSciaRegs.SCICCR.all =0x0007;   // 1 stop bit,  No loopback// No parity,8 char bits,// async mode, idle-line protocolSciaRegs.SCICTL1.all =0x0003;  // enable TX, RX, internal SCICLK,// Disable RX ERR, SLEEP, TXWAKESciaRegs.SCICTL2.all =0x0003;   SciaRegs.SCIHBAUD    =scihbaud;  // 9600 baud @LSPCLK = 37.5MHz.SciaRegs.SCILBAUD    =scilbaud;
//  SciaRegs.SCICCR.bit.LOOPBKENA =1; // Enable loop backSciaRegs.SCICTL1.all =0x0023;     // Relinquish SCI from Reset}// Transmit a character from the SCI'
void UARTa_SendByte(int a)
{while (SciaRegs.SCIFFTX.bit.TXFFST != 0);SciaRegs.SCITXBUF=a;
}void UARTa_SendString(char * msg)
{int i=0;while(msg[i] != '\0'){UARTa_SendByte(msg[i]);i++;}
}

2 DAC 数模转换 配置

2.1 TLV5620芯片简介

TLV5620是一个四通道8位数模转换(DAC)器件,3V-3.6V单电源供电,3线串行总线。
它具有11位命令字,包括八位数据、两个DAC选择位和一个范围位,后者允许进行选择1或2倍的输出范围。

通道选择位 输出范围位 数据位
A1A0 RNG D7D6D5D4D3D2D1D0

DAC寄存器是双缓冲的,允许一组完整的新值写入到设备, 然后所有的DAC输出通过控制LDAC同时更新。

本开发板TLV5620芯片进行DAC转换时,数据的加载才用的方式为,将LDAC脚接地,通过LOAD脚控制转换及更新。
当进行DAC转换时,在CLK的每个下降沿数据被锁存到数据终端。当所有数据位送入之后,LOAD为低脉冲将数据从串行输入寄存器转移到选定的DAC输出通道。

2.2 TLV5620初始化函数

void TLV5620_Init(void)
{EALLOW;// 开启SPIA时钟SysCtrlRegs.PCLKCR0.bit.SPIAENCLK = 1;   // SPI-AEDIS;// 初始化SpiaGPIOInitSpiaGpio();// DAC LOAD脚GPIO配置EALLOW;GpioCtrlRegs.GPAMUX2.bit.GPIO26 = 0;     // GPIOGpioCtrlRegs.GPADIR.bit.GPIO26 = 1;      // 输出GpioCtrlRegs.GPAPUD.bit.GPIO26 = 0;      // 上拉EDIS;// Spia配置SpiaRegs.SPICCR.all =0x0a;     // 进入初始状态,数据在上升沿输出,自测禁止,11位数据模式SpiaRegs.SPICTL.all =0x0006;   // 禁止溢出中断,普通SPI时钟,主机模式,使能发送,禁止SPI中断SpiaRegs.SPIBRR =0x0031;      //SPI波特率=37.5M/50=0.75MHZSpiaRegs.SPICCR.all =0x8a;     //退出初始状态,配置生效SpiaRegs.SPIPRI.bit.FREE = 1;  // 自由运行,忽视仿真中断// DAC LOAD脚拉高GpioDataRegs.GPASET.bit.GPIO26 = 1;
}

2.2 DAC 输出函数

channel是4个通道的地址(00,01,10,11),rng是输出范围,dat是0~256数据

void DAC_SetChannelData(unsigned char channel,unsigned char rng,unsigned char dat)
{Uint16 dacvalue=0;//注意这里的有效数据是11位,SPI初始化中也进行了定义dacvalue = ((channel<<14) | (rng<<13) | (dat<<5));while(SpiaRegs.SPISTS.bit.BUFFULL_FLAG ==1);      //判断SPI的发送缓冲区是否为空SpiaRegs.SPITXBUF = dacvalue;                      //把发送的数据写入SPI发送缓冲区while( SpiaRegs.SPISTS.bit.BUFFULL_FLAG==1);      // DAC LOAD脚拉低 传递数据给DACGpioDataRegs.GPACLEAR.bit.GPIO26=1;DELAY_US(2);// DAC LOAD脚拉高GpioDataRegs.GPASET.bit.GPIO26 = 1;DELAY_US(10);}

3 ADC 模数转换 配置

博客TI DSP 28335 ADC ePWMSOC启动和Timer0启动已仔细介绍过ADC配置。
此处不再详细展开介绍。

该例程ADC采用软件触发。

注:不同于之前的ePWMSOC启动Timer0启动,本例程采用连续采样模式(无需再次启动,但需要及时读取AD转换值)

AdcRegs.ADCTRL1.bit.CONT_RUN = 1;       // Setup continuous run

完整ADC配置如下:

void ADC_Init(void)
{EALLOW;SysCtrlRegs.PCLKCR0.bit.ADCENCLK = 1;    // ADCEDIS;// Specific clock setting for this example:EALLOW;SysCtrlRegs.HISPCP.all = 3; // HSPCLK = SYSCLKOUT/ADC_MODCLKEDIS;InitAdc();  // For this example, init the ADC// Specific ADC setup for this example:AdcRegs.ADCTRL1.bit.ACQ_PS = 0x0f;AdcRegs.ADCTRL3.bit.ADCCLKPS = 1;AdcRegs.ADCTRL1.bit.SEQ_CASC = 1;        // 1  Cascaded modeAdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x0;AdcRegs.ADCTRL1.bit.CONT_RUN = 1;       // Setup continuous run// Start SEQ1 软件触发AdcRegs.ADCTRL2.all = 0x2000;}Uint16 Read_ADCValue(void)
{while (AdcRegs.ADCST.bit.INT_SEQ1== 0);AdcRegs.ADCST.bit.INT_SEQ1_CLR = 1;return AdcRegs.ADCRESULT0>>4;
}

4 MAIN

//使用一根短接线,将DAC模块的DB输出口与P8排针的ADA0管脚连接。#include "DSP2833x_Device.h"     // DSP2833x Headerfile Include File
#include "DSP2833x_Examples.h"   // DSP2833x Examples Include File#include "uart.h"
#include "stdio.h"
#include "tlv5620.h"
#include "adc.h"void main()
{int i=0;Uint16 dacvalue=64;float dac_vol;Uint16 dac_temp=0;char dacbuf[6];float adc_vol;Uint16 adc_temp=0;InitSysCtrl();InitPieCtrl();IER = 0x0000;IFR = 0x0000;InitPieVectTable();LED_Init();TIM0_Init(150,200000);//200msUARTa_Init(4800);TLV5620_Init();ADC_Init();while(1){i++;if(i%1000==0){DAC_SetChannelData(1,0,dacvalue*2);dac_vol=dacvalue*2*1.9/256;dac_temp=dac_vol*100;dacbuf[0]=dac_temp/100+0x30;dacbuf[1]='.';dacbuf[2]=dac_temp%100/10+0x30;dacbuf[3]=dac_temp%100%10+0x30;dacbuf[4]='V';dacbuf[5]='\0';UARTa_SendString("\r\nCH2_VOL=");UARTa_SendString(dacbuf);adc_vol=(float)Read_ADCValue()*3.0/4095;adc_temp=adc_vol*100;dacbuf[0]=adc_temp/100+0x30;dacbuf[1]='.';dacbuf[2]=adc_temp%100/10+0x30;dacbuf[3]=adc_temp%100%10+0x30;dacbuf[4]='V';dacbuf[5]='\0';UARTa_SendString("\r\nADC_CH1_VOL=");UARTa_SendString(dacbuf);}DELAY_US(1*1000);}
}

5 实验分析

dac_vol=dacvalue*2*1.9/256=64*2*1.9/256=0.95V

ADC采样电压为0.94V

总结

第42篇

21年第一更
要继续加油啊,战死为止
Flag完不成了,春节前肯定学不完DSP了

个人水平有限,有问题欢迎各位大神批评指正!

TI DSP 28335 ADC连续采样检测SPI控制的DAC输出 SCI串口232通信相关推荐

  1. STM8S系列基于IAR开发单通道ADC连续采样示例

    STM8S系列基于IAR开发单通道ADC连续采样示例

  2. STM8单片机ADC连续采样模式

     STM8S003单片机内部ADC为12位,A/D转换的各个通道可以执行单次和连续的转换模式.  单次转换模式的意思就是,ADC每次转换一次数据后,就会停止转换,如果还需要继续转换的话,就需要手动开启 ...

  3. TI DSP 28335 ePWM实现单路带死区PWM

    文章目录 前言 1 PWM简介 2 死区简介 3 ePWM模块结构原理图 4 PWM 输出配置步骤:EPWM1_Init() 4.1 使能ePWM外设时钟,失能时间基准TB时钟 4.2 ePWM I/ ...

  4. TI DSP 28335 SCI FIFO中断 串口232通信

    文章目录 前言 1 SCIA FIFO 串口通信配置步骤 1.1 使能SCIA外设时钟 1.2 初始化SCIA对应GPIO 1.3 SCI工作方式 1.3.1 数据格式 1.3.2 波特率 1.3.3 ...

  5. TI DSP 28335 看门狗(WatchDog)及通过看门狗实现中断

    文章目录 前言 1 看门狗(监控芯片) 2 相关寄存器 2.1 WDCR看门狗控制寄存器 2.2 WDCNTR看门狗计数器寄存器 2.3 WDKEY看门狗复位寄存器 2.4 SCSR系统控制和状态寄存 ...

  6. STM8单片机ADC带缓存的连续采样模式

      在上一篇文章中说了STM8的ADC连续采样模式,为了提高采样的精度和速率,STM8单片机还提供了带缓存的连续采样模式,也就是说ADC会连续采集8个数据,放在缓存中,读取数据时可以一次从缓存中读取8 ...

  7. stm32F4的ADC+DMA+Timer,实现2MHz连续采样。1LSB分辨率,极低噪声。

    1. ADC+DMA+Timer的实现原理 stm32F407/405的ADC为12位逐次逼近型ADC,有着高达2.4MHz的采样率,分辨率 1LSB.这样参数的ADC放在市面上单卖,也起码是¥10+ ...

  8. STM32F4系列探究1——三重ADC扫描连续采样+DMA双缓冲区存储

    文章目录 前言 一.STM32F4的ADC理论知识学习 1.基础知识 2.扫描模式与连续模式 3.单ADC模式下双缓存机制的实现 4.三重同步采样模式 二.由定时器触发的单缓冲区模式 1.时钟树配置 ...

  9. 如何使用S32K1的PDB模块触发多个ADC通道连续采样

    文章目录 1. 外设模块介绍 1.1 PDB模块简介 1.2 ADC通道 1.3 ADC触发源 1.4 PDB触发多个ADC通道的两种方式 2. 例程 2.1 例程功能介绍 2.2 例程编写 2.2. ...

最新文章

  1. 越南一难倒博士的趣味数学题
  2. 计算机安全监控系统,关于计算机安全监控系统的关键技术
  3. 华为芯片设计面试题_未来想去华为海思做芯片设计,应该做哪些努力?
  4. Linux文本转语音合成教程,〔教程〕使用TTS将文本转语音输出
  5. 6.业务架构·应用架构·数据架构实战 --- 双轮驱动的技术架构设计
  6. html两个自然段怎么写,春天作文二个自然段
  7. delphi dll 使用
  8. Office 之将 PPT 图片完美插入 Word
  9. oracle 通过同义词创建视图
  10. 随机效应估算与固定效应估算_短面板数据学习手册(固定效应与随机效应等汇总)...
  11. Cecil学C#界面编程——配置环境和入门
  12. 【JavaScript】时间与时间戳相互转换
  13. mysql是大端小端_大端和小端 - HackerVirus - 博客园
  14. 如何使用 dlv 结合 Goland 进行程序 debug 调试
  15. 【SystemVerilog基础】关于随机化约束solve...before的深入探究
  16. CH3NH3PbI2Cl (MAPbI2Cl) 甲胺氯基钙钛矿 1446121-07-8
  17. Lumerical官方案例、FDTD时域有限差分法仿真学习(九)——布拉格光栅(Bragg gratings)
  18. 建站宝超级站群版 v1.4
  19. [DP46题] HDU 1864 最大报销额
  20. Go语言 一级函数 --- 匿名函数、高阶函数、闭包

热门文章

  1. Android 进阶——Framework 核心之Android Storage Access Framework(SAF)存储访问框架机制详解(一)
  2. 从黑箱到企业: 管理,JMX 1.1 样式
  3. 用CSS实现段落前面缩进两个字
  4. 轻松判断放大电路的负反馈类型(电压反馈,电流反馈等有实例)
  5. 手写板行业调研报告 - 市场现状分析与发展前景预测
  6. 微信小程序_文档_08_组件_媒体组件_地图_画布_开放能力
  7. redis-shake 同步redis数据
  8. 基于BlueZ的C语言蓝牙编程
  9. 【Windows批处理】常用命令解析
  10. shineblink SYN6288语音输出