TI中文支持网
TI专业的中文技术问题搜集分享网站

TMS320F280049C: 中断__interrupt

DU BANGSONG阅读(97)

Part Number:TMS320F280049C

你好,我在使用timer_ex1_cputimers例程时,将中断前的__interrupt删除,运行程序时会出现非法中断的问题,请问是什么原因,是中断都必须使用__interrupt关键字么?

Alice:

您好,

      下面帖子讨论了同样的问题,请参考。

       TMS320F28388D: What happens if I didn't declar interrupt start with '__interrupt'? – C2000 microcontrollers forum – C2000Tm︎ microcontrollers – TI E2E support forums

TMS320F280049C: how to use the #include "DSP281x_SWPrioritizedIsrLevels.h" // Used for Software Prioritization of ISR's to change the TMS320280049 Interrupt Prioritized, Can you tell me step by step ,I want to ECAP Interrupt Prioritized to

mengshen mengshen阅读(94)

Part Number:TMS320F280049COther Parts Discussed in Thread:C2000WARE

how to use the #include "DSP281x_SWPrioritizedIsrLevels.h" // Used for Software Prioritization of ISR's   to  change the TMS320280049 Interrupt Prioritized, Can you tell me step by step ,I want to ECAP Interrupt Prioriti to ADC Interrupt,thanks.

Alice:

Hello ,

      We suggest you refer to the example code for  TMS320280049C in c2000ware.

     There is "interrupt_ex3_sw_prioritization.c" for you reference.

     interrupt_ex3_sw_prioritization

TMS320F280049: lin通讯配置文件

nini wei阅读(54)

Part Number:TMS320F280049Other Parts Discussed in Thread:C2000WARE

280049 lin实例程序,没有看到配置哪个引脚,如果我用GPIO28 29两个脚,是不是要做更改配置文件吗?

Freedom:

需要配置的,可以参考历程C:\ti\c2000\C2000Ware_5_01_00_00\driverlib\f28004x\examples\lin

,

Lydia:

您好,

上面同学已经回答了您的问题,感谢,LIN的demo资源您也可以在下方链接中查看:dev.ti.com/…/node

TMS320F28374S: 使用CLA时,采用结构体进行各种数据类型定义变量,出现变量使用不正常的问题

user1003689阅读(56)

Part Number:TMS320F28374S

CCS版本:Version: 12.1.0.00007

C编译器:TI v22.6.0.LTS

主要描述如下:

1,为了避免不必要的干扰,贴出数据类型重新定义的部分

2,创建结构体

3,声明结构体变量

4,使用结构体变量运行代码:

5,查看运行结果

结果显示不正常!!!

6,将claUSHORT数据类型改为claULONG:

7,查看运行结果:

8,数据显示正常

问题:这是怎么回事?使用CLA是需要注意些什么?

user5229665:

不是很明白你运行结果为什么那样不正常。

使用CLA是需要注意些什么?

我踩过的坑至少有三个印象深刻的

(1)CLA中int 是32bit的,一般不建议在cla中用int,要想使用16位的,用short,这可能是你换成long就行了的原因。只是可能,但具体原因我说不好

你可以把你数据类型定义中的int 换成short试试,也可以把你结构体中整形的定义放在一起,别这样和float穿插着。

试一试。

(2)IQmath库中Sqrt开方,被开方数可以是0,开方结果也是零,对0开方结果当然是零啊,这个好理解。 但是,当cla中使用哪个函数来着,我想想,好像是CLAsqrt,忘了是不是了,要是对0开方,得到的结果是无穷大!!!当时不知道啊,把程序从外环移植到cla中,导致最终计算结果不对,一开始没想到这样啊,根本没往这方面想,查了好久好久,后来发现原来是这里!

(3)一段代码,不改一个字.  .cla文件的优化等级提高,就会产生一些难以解释的奇怪现象。

当时所用平台:28377s,CCS版本10,编译器版本也不是22,三年前的事情。

,

YuanZe Wang:

#ifdef __TMS320C28XX_CLA__
typedef shortint16;
typedef longint32;
typedef unsigned charUint8;
typedef unsigned shortUint16;
typedef unsigned longUint32;
typedef floatfloat32;
typedef long doublefloat64;
typedef struct { Uint32 low32; Uint32 high32; } Uint64;
typedef struct { int32low32; int32high32; } int64;
#else // __TMS320C28XX__
typedef intint16;
typedef longint32;
typedef long longint64;
typedef unsigned intUint16;
typedef unsigned longUint32;
typedef unsigned long longUint64;

你的claUSHORT用的是unsigned int,这个在C28里面是16位,cla里面是32位。C28和CLA会用不同的方式解析你的结构体内容,最终导致错误,建议你用C99类型声明或者TI提供的类型声明。

LAUNCHXL-F280049C: XDS110人工更新固件库

阅读(49)

Part Number:LAUNCHXL-F280049C

使用XDS110烧写程序时报图中的错误,根据推荐的XDS110使用方法,在输入xdsdfu -m后,XDS110进入DFU模式后,我的电脑就识别不了XDS110了,上传 firmware_3.0.0.29也失败了,根据手册上的建议,等了很长时间也没有识别出来,请问有什么可以解决的办法吗?打扰了

YuanZe Wang:

用另一个烧录器重刷下它的bootloader吧,参考这个[FAQ] [参考译文] [常见问题解答] LAUNCHXL-CC1352P:调试器固件升级失败 – 低于 1GHz(参考译文帖)(Read Only) – 低于 1GHz(参考译文帖) – E2ETm 设计支持 (ti.com)

TMS320F28379D: Device ID is not recognized

qunfeng pan阅读(46)

Part Number:TMS320F28379DOther Parts Discussed in Thread:UNIFLASH, LAUNCHXL-F28379D

你好!手头有块28379d的核心板,在仿真时报如下错误是怎么回事?

Error connecting to the target:
(Error -1265 @ 0x0)
Device ID is not recognized or is not supported by driver. Confirm device and debug probe configuration is correct, or update device driver.
(Emulation package 12.7.0.00130)

仿真器用的是XDS100V2,也试过XDS200,情况一样。

CCS版本 v12,也试过用UNIflash,也是报这个错误。

同样的工程烧录到ti官方的LAUNCHXL-F28379D的板子可以正常使用。

Alice:

您好,

      请检查28379d核心板供电是否正常,晶振是否起振。

,

qunfeng pan:

核心板以前烧录过,是有程序的,并且可以正常运行的,指示灯可以闪烁,但现在不能仿真了。

,

Alice:

您好,

    请等待您在英文E2E论坛中发贴的回复。

     TMS320F28379D: Device ID is not recognized – C2000 microcontrollers forum – C2000Tm︎ microcontrollers – TI E2E support forums

TMS320F280039C: CCS里面双击CLB.vcd文件不能打开gtkwave软件。

zhang sir阅读(48)

Part Number:TMS320F280039C

CCS里面双击CLB.vcd文件不能打开gtkwave软件。

gtkware软件已经解压在C盘了。路径C:\gtkwave\bin

Eirwen:

Hi

感谢您对TI产品的关注!您可以参考下面链接:

https://www.ti2k.com/wp-content/uploads/ti2k/DeyiSupport_C2000_4009155

“you do "OPEN WITH" on the VCD and then click on the gtkwave.exe”

TMS320F28388D: 28388D CLA读取变量速度的问题

b T阅读(47)

Part Number:TMS320F28388D

你好,我在使用CLA中遇到了下列问题:

定义了两组变量,一组是从CLA向CPU传输结算结果,另外一组是从CPU向CLA传输数据,在CLA中进行计算

//CPU向CLA传输的数据

#pragma DATA_SECTION(CpuInPara,"CpuToCla1MsgRAM")
Cpu2_to_Cla_Calculate CpuInPara;

//CLA向CPU传输的数据

#pragma DATA_SECTION(ClaOutPara,"Cla1ToCpuMsgRAM");
CLA_to_CPU2_Calculate ClaOutPara;

在CLA中进行读取及计算、赋值,同时在CLA中定义了一个GPIO,通过高低电平来测量计算时间

//

GPIO_HIGH;

ClaOutPara.Reslut = CpuInPara.Para*0.005;

ClaOutPara.Reslut1 = CpuInPara.Para1*0.005;

GPIO_LOW;

通过对电平的测量,发现在CLA中的赋值操作时间远大于在CPU中做同样操作的时间,如上述操作,实测整个结果需要接近20us,而在CPU中只需要不到1us,这是什么原因,是变量定义有问题还是CLA需要什么的设置才能让这个操作时间变快?

user5229665:

你的意思是

GPIO_HIGH;

ClaOutPara.Reslut = CpuInPara.Para*0.005;

ClaOutPara.Reslut1 = CpuInPara.Para1*0.005;

GPIO_LOW;

就执行这四句话就有20us吗?

我们之前也测试过cla中的时间,若是的话肯定是不正常的

(1)能不能测试下,在cla中定义两个浮点变量,不用和cpu互传的变量,计算两次乘法,看一看时间。

(2)仍然是你原先的情况(即用cpu互传的变量),对于.cla文件可单独点击其文件属性,设置优化等级,可以加大优化等级后再测试时间。不过即使是优化等级没开,也不应该20us这么离谱

 (3)可没可能是GPIO翻转语句占用的时间多?鉴于双核芯片程序初始化时会设置各外设权限,一般是cpu1,你是用的cpu1.cla吗?其实你可以用cpu计数器或者pwm计算器测试时间,来验证(3)处的怀疑。

TMS320F280039C: ADC中断内执行少量代码也会影响中断速度

阅读(35)

Part Number:TMS320F280039C

我用280039C做ADC采样时,采用CPUTIMER 100KHz频率触发,ADCA 2分频且14个通道连续检测9次。发现在ADC中断终读多个检测结果时会影响中断速度,如果至读三个结果速度正常。程序初始化是由syscfg配置,中断执行代码如下,按照120MHz的主频速度,不会中断里连几行代码执行速度都会影响中断吧,麻烦帮我解答一下。

// Interrupt Settings for INT_ADC_1_1
__interrupt void INT_ADC_1_1_ISR(void)
{

if(io ==0)
io =1;
else
io =0;
inv2l_output_enable(io);
//
// Add the latest result to the buffer
//
adc1_result[0] = ADC_readResult(ADCARESULT_BASE, ADC_SOC_NUMBER0);
adc1_result[1] = ADC_readResult(ADCARESULT_BASE, ADC_SOC_NUMBER1);
adc1_result[2] = ADC_readResult(ADCARESULT_BASE, ADC_SOC_NUMBER2);
adc1_result[3] = ADC_readResult(ADCARESULT_BASE, ADC_SOC_NUMBER3);
adc1_result[4] = ADC_readResult(ADCARESULT_BASE, ADC_SOC_NUMBER4);
adc1_result[5] = ADC_readResult(ADCARESULT_BASE, ADC_SOC_NUMBER5);
adc1_result[6] = ADC_readResult(ADCARESULT_BASE, ADC_SOC_NUMBER6);
adc1_result[7] = ADC_readResult(ADCARESULT_BASE, ADC_SOC_NUMBER7);
adc1_result[8] = ADC_readResult(ADCARESULT_BASE, ADC_SOC_NUMBER8);
adc1_result[9] = ADC_readResult(ADCARESULT_BASE, ADC_SOC_NUMBER9);
adc1_result[10] = ADC_readResult(ADCARESULT_BASE, ADC_SOC_NUMBER10);
adc1_result[11] = ADC_readResult(ADCARESULT_BASE, ADC_SOC_NUMBER11);
adc1_result[12] = ADC_readResult(ADCARESULT_BASE, ADC_SOC_NUMBER12);
adc1_result[13] = ADC_readResult(ADCARESULT_BASE, ADC_SOC_NUMBER14);
//adc2_result[0] = ADC_readResult(ADCBRESULT_BASE, ADC_SOC_NUMBER0);
//adc2_result[1] = ADC_readResult(ADCBRESULT_BASE, ADC_SOC_NUMBER2);
//adc2_result[2] = ADC_readResult(ADCBRESULT_BASE, ADC_SOC_NUMBER3);
//adc2_result[3] = ADC_readResult(ADCBRESULT_BASE, ADC_SOC_NUMBER4);
//adc2_result[4] = ADC_readResult(ADCBRESULT_BASE, ADC_SOC_NUMBER5);
//adc2_result[5] = ADC_readResult(ADCBRESULT_BASE, ADC_SOC_NUMBER11);
//adc2_result[6] = ADC_readResult(ADCBRESULT_BASE, ADC_SOC_NUMBER12);

//
// Clear the interrupt flag
//
ADC_clearInterruptStatus(ADC_1_BASE, ADC_INT_NUMBER1);

//
// Check if overflow has occurred
//
if(true == ADC_getInterruptOverflowStatus(ADC_1_BASE, ADC_INT_NUMBER1))
{
ADC_clearInterruptOverflowStatus(ADC_1_BASE, ADC_INT_NUMBER1);
ADC_clearInterruptStatus(ADC_1_BASE, ADC_INT_NUMBER1);
}

Interrupt_clearACKGroup(INT_ADC_1_1_INTERRUPT_ACK_GROUP);
}

? ?:

inv2l_output_enable(io);是一个IO电平输出翻转控制,用于判断中断执行速度

,

Barbecue:

ADC Acuisition(Sample and Hold) window  (min) = 8 * Sysclk

ADC tLAT = 23 * sysclk

That's 31sysclk per channal.

31 * 14 (ch) * 9 (times) = 3906syclk,

120Mhz /3906 = 30.7kHz

The ADC SOC is triggered by CPUTIMER at 100kHz

,

? ?:

那如何解决这个问题,是降低每次采样次数吗,还是需要降低采样频率

,

Vivian Gao:

您好

感谢您对TI产品的关注!为更加有效地解决您的问题,我们建议您将问题发布在E2E英文技术论坛上(TI E2E support forums),将由资深的英文论坛工程师为您提供帮助

TMS320F28335: 不管ADC引脚接多少V,读回的值一直是2300,15个ADC口都这样。这是怎么回事呢,芯片还是新买的。

wenjie liu阅读(47)

Part Number:TMS320F28335Other Parts Discussed in Thread:C2000WARE

ADC初始化代码如下:

void ADC_Init(void){EALLOW;SysCtrlRegs.PCLKCR0.bit.ADCENCLK = 1; // Enable ADC clockSysCtrlRegs.HISPCP.all = 3; // ADC: 25MHZInitAdc();  // provide by TI//  AdcRegs.ADCTRL3.all = 0x00E0;AdcRegs.ADCTRL1.bit.ACQ_PS = 0x0F; // sequential samplingAdcRegs.ADCTRL3.bit.ADCCLKPS = 1; // 25Mhz no frequency divisionAdcRegs.ADCTRL1.bit.SEQ_CASC = 1; // 1:  Cascaded sequencer mode0:double sort modeAdcRegs.ADCTRL3.bit.SMODE_SEL = 0;// 1:Synchronous sampling0:sequential samplingAdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x0; // A0 as the sample channel  save data to results0AdcRegs.ADCCHSELSEQ1.bit.CONV01 = 0x1; // A1 as the sample channel  save data to results1AdcRegs.ADCCHSELSEQ1.bit.CONV02 = 0x2; // A2 as the sample channel  save data to results2AdcRegs.ADCCHSELSEQ1.bit.CONV03 = 0x3; // A3 as the sample channel  save data to results3AdcRegs.ADCCHSELSEQ2.bit.CONV04 = 0x4; // A4 as the sample channel  save data to results4AdcRegs.ADCCHSELSEQ2.bit.CONV05 = 0x5; // A4 as the sample channel  save data to results4AdcRegs.ADCCHSELSEQ2.bit.CONV06 = 0x6; // A4 as the sample channel  save data to results4AdcRegs.ADCCHSELSEQ2.bit.CONV07 = 0x7; // A4 as the sample channel  save data to results4AdcRegs.ADCCHSELSEQ3.bit.CONV08 = 0x8; // B0 as the sample channel save data to results5AdcRegs.ADCCHSELSEQ3.bit.CONV09 = 0x9; // B0 as the sample channel save data to results5AdcRegs.ADCCHSELSEQ3.bit.CONV10 = 0xA; // B0 as the sample channel save data to results5AdcRegs.ADCCHSELSEQ3.bit.CONV11 = 0xB; // B0 as the sample channel save data to results5AdcRegs.ADCCHSELSEQ4.bit.CONV12 = 0xC; // B0 as the sample channel save data to results5AdcRegs.ADCCHSELSEQ4.bit.CONV13 = 0xD; // B0 as the sample channel save data to results5AdcRegs.ADCCHSELSEQ4.bit.CONV14 = 0xE; // B0 as the sample channel save data to results5AdcRegs.ADCCHSELSEQ4.bit.CONV15 = 0xF; // B0 as the sample channel save data to results5//AdcRegs.ADCCHSELSEQ1.bit.CONV02 = 0x02; // A2 as the sample channelAdcRegs.ADCTRL1.bit.CONT_RUN = 1; // continuous samplingAdcRegs.ADCMAXCONV.bit.MAX_CONV1 = 0xF;  // max sample channel, CONV05 have used , so it should be 5. but actully, only two channel working. Cascaded mode max 15, double sort max 7;//AdcRegs.ADCMAXCONV.bit.MAX_CONV2 = 0xf;  // max sample channel, case only A0 is used , so 0x0;AdcRegs.ADCTRL2.all = 0x2000;//software triggerEDIS;
}

返回ADC读值的代码如下:

Uint16 Read_ADCValueResult0(void){while(AdcRegs.ADCST.bit.INT_SEQ1 == 0);// wait the end of the translationAdcRegs.ADCST.bit.INT_SEQ1_CLR = 1;//clear interrupt flagreturn AdcRegs.ADCRESULT0>>4;//return translate results, high 12bits valid, low 4bits invalid
}

Alice:

您好,

     请参考c2000ware中的ADC驱动。

     Examples (ti.com)

© 2024 TI中文支持网   网站地图 鲁ICP备2022002796号-1