发新帖我要提问
12
返回列表
打印

dsp2812 加载程序时出现错误:data verification failed at address 0x9001

[复制链接]
楼主: sunsundsp
手机看帖
扫描二维码
随时随地手机跟帖
21
sunsundsp 发表于 2013-7-18 14:22
那比如说我只用了一个管脚,单路输入的,那我看ADResult的寄存器显示的话是什么呢?
有点不好表达。我就 ...

2812的AD采集结果是一个寄存器对应一个AD口  所以你的模拟量从哪个AD口输入你应该去查看这个AD口对应的寄存器    它的转换方式有并行和串行  并行的话是一次转换两个AD口  串行的是按顺序转换

使用特权

评论回复
22
sunsundsp|  楼主 | 2013-7-19 09:03 | 只看该作者
zhangmangui 发表于 2013-7-18 22:54
2812的AD采集结果是一个寄存器对应一个AD口  所以你的模拟量从哪个AD口输入你应该去查看这个AD口对应的寄 ...

我可能知道为什么采集到的数据有负数了,使用ADS85561采集的,是双极性的,16位的,如果输入范围是10V的话,那我那个算电压的公式是不是要改成----采集到的数据/65534再*10了??

使用特权

评论回复
23
zhangmangui| | 2013-7-19 09:05 | 只看该作者
sunsundsp 发表于 2013-7-19 09:04
我可能知道为什么采集到的数据有负数了,使用ADS85561采集的,是双极性的,16位的,如果输入范围是10V的 ...

你用双极性的那就有负数了  嗯  公式是对的

使用特权

评论回复
24
zhangmangui| | 2013-7-19 09:06 | 只看该作者
sunsundsp 发表于 2013-7-19 09:04
我可能知道为什么采集到的数据有负数了,使用ADS85561采集的,是双极性的,16位的,如果输入范围是10V的 ...

你用双极性的那就有负数了  嗯  公式是对的

使用特权

评论回复
25
sunsundsp|  楼主 | 2013-7-19 10:45 | 只看该作者
zhangmangui 发表于 2013-7-19 09:06
你用双极性的那就有负数了  嗯  公式是对的

每个通道采集都是128次,就是我想看看每次采集之间的时间应该在程序哪看呢?
这是这个AD程序的代码

/**********************************************************************
* File: nain_nonBIOS.c
* Devices: TMS320F2812, TMS320F2811, TMS320F2810
* Author: Saber, ICETEK.
* History:
*   2010/04/07 - original
**********************************************************************/
#include "DSP281x_Device.h"
#include "example_nonBIOS.h"      
//if you want to run in FLASH:
//1.Enable the define "EXAMPLE_FLASH"
//2.Remove "F2812_nonBIOS_RAM.cmd"
//3.Add the "F2812.cmd"
//#define EXAMPLE_FLASH   
#define StartCpuTimer0()  CpuTimer0Regs.TCR.bit.TSS = 0
#define ADSmple 128
#define AD_CONVST   (*((Uint16 *)0x2800))
#define AD_CHIPSEL0 (*((Uint16 *)0x2200))
#define AD_CHIPSEL1 (*((Uint16 *)0x2000))
#pragma DATA_SECTION(ADSampleResult0,"GlobalVar");
#pragma DATA_SECTION(ADSampleResult1,"GlobalVar");
#pragma DATA_SECTION(ADSampleResult2,"GlobalVar");
#pragma DATA_SECTION(ADSampleResult3,"GlobalVar");
#pragma DATA_SECTION(ADSampleResult4,"GlobalVar");
#pragma DATA_SECTION(ADSampleResult5,"GlobalVar");
#pragma DATA_SECTION(ADSampleResult6,"GlobalVar");
#pragma DATA_SECTION(ADSampleResult7,"GlobalVar");
#pragma DATA_SECTION(ADSampleResult8,"GlobalVar");
#pragma DATA_SECTION(ADSampleResult9,"GlobalVar");
#pragma DATA_SECTION(ADSampleResult10,"GlobalVar");
#pragma DATA_SECTION(ADSampleResult11,"GlobalVar");
int ADSampleResult0[ADSmple];     //AD通道0数据
int ADSampleResult1[ADSmple];     //AD通道1数据
int ADSampleResult2[ADSmple];     //AD通道2数据
int ADSampleResult3[ADSmple];     //AD通道3数据
int ADSampleResult4[ADSmple];     //AD通道4数据
int ADSampleResult5[ADSmple];     //AD通道5数据
int ADSampleResult6[ADSmple];     //AD通道0数据
int ADSampleResult7[ADSmple];     //AD通道1数据
int ADSampleResult8[ADSmple];     //AD通道2数据
int ADSampleResult9[ADSmple];     //AD通道3数据
int ADSampleResult10[ADSmple];     //AD通道4数据
int ADSampleResult11[ADSmple];     //AD通道5数据
void User_Init(void);
interrupt void cpu_timer0_isr(void);
Uint16 Count = 0;
/**********************************************************************
* Function: main()
*
* Description: Main function for F281x example.
**********************************************************************/
void main(void)
{
    /*** CPU Initialization ***/
    InitSysCtrl();  //Initialize the CPU (FILE: SysCtrl.c)
    DINT;
    IER = 0x0000; // Disable CPU interrupts
    IFR = 0x0000; // Clear all CPU interrupt flags
    InitXintf();  //Initialize the external memory interface (FILE: Xintf.c)
    //InitGpio();  // Initialize the shared GPIO pins (FILE: Gpio.c)
    InitPieCtrl();  // Initialize and enable the PIE (FILE: PieCtrl.c)
    InitEv();   // Initialize the EV(FILE: Ev.c)--And initialize the Timer1
    InitCpuTimers(); // Initialize the time (FILE: DSP281x_CpuTimers.c)
   
    #ifdef EXAMPLE_FLASH
    MemCopy(&RamfuncsLoadStart, &RamfuncsLoadEnd, &RamfuncsRunStart);
    InitFlash();
    #endif
   
    EALLOW;    // This is needed to write to EALLOW protected registers
    PieVectTable.TINT0 = &cpu_timer0_isr;//timer0中断服务子程序重定位
    EDIS;      // This is needed to disable write to EALLOW protected registers
    IER |= M_INT1;  // EV Interrupt
    IFR &= 0x0000;  //Clear all interrupt flag
    // Enable TINT0 in the PIE: Group 1 interrupt 7
    PieCtrlRegs.PIEIER1.bit.INTx7 = 1;
   
    //SetDBGIER(IER);  // Configure the DBGIER for realtime debug        
    EINT;    // Enable global interrupts and realtime debug
    //asm(" CLRC INTM, DBGM");
    StartCpuTimer0();
   
    /*** Main Cycle ***/
    while(1)  
    {
      ;
    }
}// End of main
interrupt void cpu_timer0_isr(void)
{
    if(Count < ADSmple)
   {
        AD_CONVST=0xf;//停止AD转换 准备读出AD通道数据
        ADSampleResult0[Count]=AD_CHIPSEL0;
        ADSampleResult1[Count]=AD_CHIPSEL0;
        ADSampleResult2[Count]=AD_CHIPSEL0;
        ADSampleResult3[Count]=AD_CHIPSEL0;
        ADSampleResult4[Count]=AD_CHIPSEL0;
        ADSampleResult5[Count]=AD_CHIPSEL0;
        
        ADSampleResult6[Count]=AD_CHIPSEL1;
        ADSampleResult7[Count]=AD_CHIPSEL1;
        ADSampleResult8[Count]=AD_CHIPSEL1;
        ADSampleResult9[Count]=AD_CHIPSEL1;
        ADSampleResult10[Count]=AD_CHIPSEL1;
        ADSampleResult11[Count]=AD_CHIPSEL1;
         
        AD_CONVST=0x0; //重新启动AD转换
        Count++;
   }   
   else
   {
       Count = 0;
   }
   
   PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;
}
/*** end of file ***/

使用特权

评论回复
26
zhangmangui| | 2013-7-19 10:49 | 只看该作者
sunsundsp 发表于 2013-7-19 10:45
每个通道采集都是128次,就是我想看看每次采集之间的时间应该在程序哪看呢?
这是这个AD程序的代码

程序可以看出是你的cup定时器触发并启动AD转换  说明是周期性采集  采集时间就是cpu_timer0的定时时间

使用特权

评论回复
27
刘思雨| | 2015-12-20 16:36 | 只看该作者
请教:load program时出错 显示data verification failed at address 0x3fffc0,应该怎么解决?
说明:我的是2812的板子,仿真器是XDS510 USB(连接没问题),正在做一个正弦波来着,库文件用的是rts2800_ml.lib。
下面是我的CMD文件内容:
/****************************************************************************/
/*   volume.cmd - Sample linker command file for F28xx devices              */
/*                                                                          */
/*   Description: This file is a sample F2812 linker command file that can  */
/*                be used for linking programs built with the TMS320C2000   */
/*                C Compiler. Use it as a guideline; you may want to change */
/*                the allocation scheme according to the size of your       */
/*                program and the memory layout of your target system.      */
/****************************************************************************/

MEMORY
{
   PAGE 0 : BOOT(R)     : origin = 0x3f8000, length = 0x80
   PAGE 0 : PROG(R)     : origin = 0x3f8080, length = 0x1f80
   PAGE 0 : RESET(R)    : origin = 0x3fffc0, length = 0x2

   PAGE 1 : M0RAM(RW)   : origin = 0x000000, length = 0x400
   PAGE 1 : M1RAM(RW)   : origin = 0x000400, length = 0x400
   PAGE 1 : L0L1RAM(RW) : origin = 0x008000, length = 0x2000
}

SECTIONS
{
   /* 22-bit program sections */
   .reset   : > RESET, PAGE = 0, TYPE = DSECT
   .pinit   : > PROG,  PAGE = 0
   .cinit   : > PROG,  PAGE = 0
   .text    : > PROG,  PAGE = 0

   /* 16-Bit data sections */
   .const   : > M0RAM, PAGE = 1
   .bss     : > M1RAM, PAGE = 1
   .stack   : > M1RAM, PAGE = 1
   .sysmem  : > M0RAM, PAGE = 1

   /* 32-bit data sections */
   .ebss    : > L0L1RAM, PAGE = 1
   .econst  : > L0L1RAM, PAGE = 1
   .esysmem : > L0L1RAM, PAGE = 1

   .boot > BOOT
   {
      -lrts2800_ml.lib<boot.obj> (.text)
   }
}

clip_image002.jpg (25.47 KB )

clip_image002.jpg

使用特权

评论回复
28
刘思雨| | 2015-12-20 16:37 | 只看该作者
具体怎么改呀

使用特权

评论回复
29
刘思雨| | 2015-12-20 16:39 | 只看该作者
求大神回答,不胜感激

使用特权

评论回复
30
刘思雨| | 2015-12-20 20:48 | 只看该作者
鄙人初学,茕茕孑立;书啃已久,不逮浅义。不求一席,唯为片言;不厌讥讽,但求赐教!

使用特权

评论回复
31
xihaijie| | 2016-12-9 17:09 | 只看该作者
sunsundsp 发表于 2013-7-16 15:07
谢谢.我在tools点了unlock,就没这个问题了。

我在CCS3.3中Tool菜单中没有看见unlock选项啊

使用特权

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

本版积分规则