打印

如何在AD程序中添加串口程序

[复制链接]
2813|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tiger2010|  楼主 | 2010-2-7 13:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
想利用利用串口把AD采集的数值发给上位机,但是自己添加了几次都不成功,希望高手指点一下该如何设置程序,不胜感激,AD主程序如下,除了在主程序中需要改动外,想问下还需要改动或者添加哪些文件?现在很是苦恼,希望高手给多多指点啊
#include "DSP281x_Device.h"     // DSP281x Headerfile Include File
#include "DSP281x_Examples.h"   // DSP281x Examples Include File

// Prototype statements for functions found within this file.
interrupt void adc_isr(void);

// Global variables used in this example:
Uint16 LoopCount;
Uint16 ConversionCount;
Uint16 Voltage1[1024];
Uint16 Voltage2[1024];


main()
{
InitSysCtrl();//初始化cpu

   DINT;//关中断

   InitPieCtrl();//初始化pie寄存器
   

   IER = 0x0000;//禁止所有的中断
   IFR = 0x0000;


   InitPieVectTable();//初始化pie中断向量表
     
// Interrupts that are used in this example are re-mapped to
// ISR functions found within this file.      
   EALLOW;  // This is needed to write to EALLOW protected register
   PieVectTable.ADCINT = &adc_isr;
   EDIS;    // This is needed to disable write to EALLOW protected registers
   AdcRegs.ADCTRL1.bit.RESET = 1;                // Reset the ADC module
        asm(" RPT #10 || NOP");                                // Must wait 12-cycles (worst-case) for ADC reset to take effect
   AdcRegs.ADCTRL3.all = 0x00C8;                // first power-up ref and bandgap circuits
   
   AdcRegs.ADCTRL3.bit.ADCBGRFDN = 0x3;        // Power up bandgap/reference circuitry

   AdcRegs.ADCTRL3.bit.ADCPWDN = 1;                // Power up rest of ADC

// Enable ADCINT in PIE
   PieCtrlRegs.PIEIER1.bit.INTx6 = 1;
   IER |= M_INT1; // Enable CPU Interrupt 1
   EINT;          // Enable Global interrupt INTM
   ERTM;          // Enable Global realtime interrupt DBGM

   LoopCount = 0;
   ConversionCount = 0;
   
// Configure ADC
   AdcRegs.ADCMAXCONV.all = 0x0001;       // Setup 2 conv's on SEQ1
   AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x0; // Setup ADCINA3 as 1st SEQ1 conv.
   AdcRegs.ADCCHSELSEQ1.bit.CONV01 = 0x1; // Setup ADCINA2 as 2nd SEQ1 conv.
   AdcRegs.ADCTRL2.bit.EVA_SOC_SEQ1 = 1;  // Enable EVASOC to start SEQ1
   AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1 = 1;  // Enable SEQ1 interrupt (every EOS)

// Configure EVA
// Assumes EVA Clock is already enabled in InitSysCtrl();
   EvaRegs.T1CMPR = 0x0080;               // Setup T1 compare value
   EvaRegs.T1PR = 0x10;                 // Setup period register
   EvaRegs.GPTCONA.bit.T1TOADC = 1;       // Enable EVASOC in EVA
   EvaRegs.T1CON.all = 0x1042;            // Enable timer 1 compare (upcount mode)

// Wait for ADC interrupt
   while(1)
   {
      LoopCount++;
   }

}


interrupt void  adc_isr(void)
{

  Voltage1[ConversionCount] = AdcRegs.ADCRESULT0 >>4;
  Voltage2[ConversionCount] = AdcRegs.ADCRESULT1 >>4;

  // If 40 conversions have been logged, start over
  if(ConversionCount == 1023)
  {
     ConversionCount = 0;//breakpoint
  }
  else ConversionCount++;

  // Reinitialize for next ADC sequence
  AdcRegs.ADCTRL2.bit.RST_SEQ1 = 1;         // Reset SEQ1
  AdcRegs.ADCST.bit.INT_SEQ1_CLR = 1;       // Clear INT SEQ1 bit
  PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;   // Acknowledge interrupt to PIE
  
  return;
}

相关帖子

沙发
llljh| | 2010-2-7 13:24 | 只看该作者
把串口通信例程加上,然后,在AD采到数据后,调用串口发送程序,就可以了!

使用特权

评论回复
板凳
linhai1986| | 2010-2-8 00:28 | 只看该作者
楼上说的对,在AD采到数据的最后加上发送程序就行了

使用特权

评论回复
地板
xiaoxin1986| | 2010-2-8 00:57 | 只看该作者
LZ说添加了几次都没成功,不知LZ是加了什么程序没成功?

使用特权

评论回复
5
tiger2010|  楼主 | 2010-2-8 12:43 | 只看该作者
原来这样,我下午试试

使用特权

评论回复
6
tiger2010|  楼主 | 2010-2-8 12:43 | 只看该作者
谢谢楼上几位达人

使用特权

评论回复
7
thf2008| | 2010-2-8 13:04 | 只看该作者
这个很简答啊,LZ还是要多看看例程

使用特权

评论回复
8
liliang9554| | 2010-2-9 00:36 | 只看该作者
期待结果

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

32

主题

338

帖子

0

粉丝