TI论坛
直播中

肖舒

8年用户 189经验值
私信 关注
[问答]

执行DELAY_US()语句后进入defaultIsr.c中断?

我交替采样两个通道。两个通道采样完毕,下一个循环采样时执行DELAY_US()后进入defaultisr.c的DATALOG_ISR(),这是为什么?
部分程序:
        AdcRegs.ADCTRL2.all=0x2000;
        for (;;)
        [
                while(AdcRegs.ADCST.bit.INT_SEQ1==0)
                []
                AdcRegs.ADCST.bit.INT_SEQ1_CLR=1;
        SampleTable[array_index++]=((AdcRegs.ADCRESULT0)>>4);
                DELAY_US(4000);//the sample rate is 250hz
                if (array_index>=1024)
[



]
]

回帖(16)

李晶

2018-11-19 15:09:38
楼主程序是跑在RAM还是FLASH?如果是跑在FLASH里,是否有调用memcpy?芯片是什么型号,楼主可以讲工程放上来,我们分析一下!
举报

肖舒

2018-11-19 16:26:37
引用: Ehunt 发表于 2018-11-19 07:24
楼主程序是跑在RAM还是FLASH?如果是跑在FLASH里,是否有调用memcpy?芯片是什么型号,楼主可以讲工程放上来,我们分析一下!

我使用CCS3.3对F28335进行烧写,
该程序的目的是交替对ADCINA0和ADCINB0通道采样,对采集到的信号进行处理。
该程序未使用中断,利用DELAY_US决定采样率。
出现问题的语句为DELAY_US(sr_tl)   sr_tl为采样时间间隔
代码段如下:
        for (;;)
        [
                while(AdcRegs.ADCST.bit.INT_SEQ1==0)
                []
                AdcRegs.ADCST.bit.INT_SEQ1_CLR=1;
        SampleTable[array_index++]=((AdcRegs.ADCRESULT0)>>4);
                DELAY_US(sr_tl);////the sample rate is 250hz
                if (array_index>=ls)
                [
                    。
                    。//以下是算法部分
                    。
                    。//以下部分是根据算法结果选择ADCINA0或ADCINB0
                   if(k_rs==1)
                           [
                                     flag=0;
                                        AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x08;
                                        for(index=0;index                                         [
                                          SampleTable[index]=0;
                                          ]
                                ]
                           if(k_rs==0)
                                  [
                                     flag=1;
                                        AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x00;
                                        for(index=0;index                                         [
                                          SampleTable[index]=0;
                                          ]
                                        ]
                            .
                            .
                            .
                   ]
       ]
DELAY_US在在第一次交替采样时正常工作,但是在第二次交替采样时出现问题。
第二次采样到第一个数据点时,执行到DELAY_US后,程序跳到DSP2833x_DefaultIsr.c中去了。
我单步进入usDelay.asm中,发现在执行SUB ACC,#1后进入DSP2833x_DefaultIsr.c去的。
进入的是DSP2833x_DefaultIsr.c的以下中断区:
interrupt void DATALOG_ISR(void)   // Datalogging interrupt
[
  // Insert ISR Code here
  // Next two lines for debug only to halt the processor here
  // Remove after inserting ISR Code
  asm ("      ESTOP0");
  for(;;);
]
举报

肖舒

2018-11-19 16:40:59
引用: Ehunt 发表于 2018-11-19 07:24
楼主程序是跑在RAM还是FLASH?如果是跑在FLASH里,是否有调用memcpy?芯片是什么型号,楼主可以讲工程放上来,我们分析一下!

程序轮廓如下:
#include "DSP2833x_Device.h"
#include "DSP2833x_Examples.h"
#include "math.h"




void main(void)
[



InitSysCtrl();
//        InitXintf();
        InitGpio();////it is important
        InitXintf16Gpio();
        EALLOW;
        SysCtrlRegs.HISPCP.all=ADC_MODCLK;////////clock preset for ADC clock
        EDIS;
        DINT;
        InitPieCtrl();
        IER=0x0000;
        IFR=0x0000;
        InitPieVectTable();
   memcpy(&RamfuncsRunStart,&RamfuncsLoadStart,(&RamfuncsLoadEnd - &RamfuncsLoadStart));
        InitFlash();



        AdcRegs.ADCTRL2.all=0x2000;
        for (;;)
        [
                while(AdcRegs.ADCST.bit.INT_SEQ1==0)
                []
                AdcRegs.ADCST.bit.INT_SEQ1_CLR=1;
        SampleTable[array_index++]=((AdcRegs.ADCRESULT0)>>4);
                DELAY_US(sr_tl);////the sample rate is 250hz
                if (array_index>=ls)
                [



]
]
]
F28335的cmd文件:
MEMORY
[
PAGE 0:    /* Program Memory */
          /* Memory (RAM/FLASH/OTP) blocks can be moved to PAGE1 for data allocation */
  RAML0       : origin = 0x008000, length = 0x001000     /* on-chip RAM block L0 */  
  FLASHH      : origin = 0x300000, length = 0x008000     /* on-chip FLASH */
  FLASHG      : origin = 0x308000, length = 0x008000     /* on-chip FLASH */
  FLASHF      : origin = 0x310000, length = 0x008000     /* on-chip FLASH */
  FLASHD      : origin = 0x320000, length = 0x008000     /* on-chip FLASH */
  FLASHC      : origin = 0x328000, length = 0x008000     /* on-chip FLASH */
  FLASHB           : origin = 0x330000, length = 0x008000     /* on-chip FLASH */
  FLASHA      : origin = 0x338000, length = 0x007F80     /* on-chip FLASH */
  CSM_RSVD    : origin = 0x33FF80, length = 0x000076     /* Part of FLASHA.  Program with all 0x0000 when CSM is in use. */
  BEGIN       : origin = 0x33FFF6, length = 0x000002     /* Part of FLASHA.  Used for "boot to Flash" bootloader mode. */
  CSM_PWL     : origin = 0x33FFF8, length = 0x000008     /* Part of FLASHA.  CSM password locations in FLASHA */
  OTP         : origin = 0x380400, length = 0x000400     /* on-chip OTP */
  ADC_CAL     : origin = 0x380080, length = 0x000009     /* ADC_cal function in Reserved memory */
  IQTABLES    : origin = 0x3FE000, length = 0x000b50     /* IQ Math Tables in Boot ROM */
  IQTABLES2   : origin = 0x3FEB50, length = 0x00008c     /* IQ Math Tables in Boot ROM */  
  FPUTABLES   : origin = 0x3FEBDC, length = 0x0006A0     /* FPU Tables in Boot ROM */
  ROM         : origin = 0x3FF27C, length = 0x000D44     /* Boot ROM */        
  RESET       : origin = 0x3FA000, length = 0x000002     /* part of boot ROM  */
  VECTORS     : origin = 0x3FFFC2, length = 0x00003E     /* part of boot ROM  */
PAGE 1 :   /* Data Memory */
          /* Memory (RAM/FLASH/OTP) blocks can be moved to PAGE0 for program allocation */
          /* Registers remain on PAGE1                                                  */
  BOOT_RSVD   : origin = 0x000000, length = 0x000050     /* Part of M0, BOOT rom will use this for stack */
  RAMM0       : origin = 0x000050, length = 0x0003B0     /* on-chip RAM block M0 */
  RAMM1       : origin = 0x000400, length = 0x000400     /* on-chip RAM block M1 */
  ZONE7       : origin = 0x200000, length = 0x002000
  RAMM2       : origin = 0x009000, length = 0x007000     /* on-chip RAM block L1 */
   FLASHE      : origin = 0x318000, length = 0x008000     /* on-chip FLASH */
]
/* Allocate sections to memory blocks.
  Note:
        codestart user defined section in DSP28_CodeStartBranch.asm used to redirect code
                  execution when booting to flash
        ramfuncs  user defined section to store functions that will be copied from Flash into RAM
*/
SECTIONS
[
  /* Allocate program areas: */
  .cinit              : > FLASHB      PAGE = 0
  .pinit              : > FLASHB,     PAGE = 0
  .text               : > FLASHB      PAGE = 0
  codestart           : > BEGIN       PAGE = 0
  ramfuncs            : LOAD = FLASHD,
                        RUN = RAML0,
                        LOAD_START(_RamfuncsLoadStart),
                        LOAD_END(_RamfuncsLoadEnd),
                        RUN_START(_RamfuncsRunStart),
                        PAGE=0
  csmpasswds          : > CSM_PWL     PAGE = 0
  csm_rsvd            : > CSM_RSVD    PAGE = 0
  /* Allocate uninitalized data sections: */
  .stack              : > FLASHE       PAGE = 1
  .ebss               : > RAMM2       PAGE = 1
  .esysmem            : > RAMM1       PAGE = 1
  /* Initalized sections go in Flash */
  /* For SDFlash to program these, they must be allocated to page 0 */
  .econst             : > FLASHB      PAGE = 0
  .switch             : > FLASHB      PAGE = 0      
  /* Allocate IQ math areas: */
  IQmathTables     : > IQTABLES,  PAGE = 0, TYPE = NOLOAD
  IQmathTables2    : > IQTABLES2, PAGE = 0, TYPE = NOLOAD
  FPUmathTables    : > FPUTABLES, PAGE = 0, TYPE = NOLOAD
  ZONE7DATA        : > ZONE7        PAGE = 1    
  .reset              : > RESET,      PAGE = 0, TYPE = DSECT
  vectors             : > VECTORS     PAGE = 0, TYPE = DSECT
  /* Allocate ADC_cal function (pre-programmed by factory into TI reserved memory) */
  .adc_cal     : load = ADC_CAL,   PAGE = 0, TYPE = NOLOAD
]
/*
//===========================================================================
// End of file.
//===========================================================================
*/
举报

李晶

2018-11-19 16:48:31
引用: WNTWCW417 发表于 2018-11-19 08:56
程序轮廓如下:
#include "DSP2833x_Device.h"
#include "DSP2833x_Examples.h"

楼主请将整个项目打包一下传上来,我帮你看一下!
举报

更多回帖

发帖
×
20
完善资料,
赚取积分