Quantcast
Channel: C2000™︎ 微控制器论坛 - 最近的话题
Viewing all 12268 articles
Browse latest View live

关于C2000 DSP位域操作

$
0
0

首先在PFC程序中定义了一个故障标志结构体变量SystemFaultFlag,后级通过一个光耦传递一个硬件故障位给PFC,程序中是这么写的

...

#define LLCFaultState GpioDataRegs.GPADAT.bit.GPIO13

...

PFC程序直接利用位域操作进行赋值:

SystemFaultFlag.bit.LLCFault = LLCFaultState;

这样程序执行异常(这个硬件位实际却是存在干扰),PFC无端关闭驱动,但是没有任何标志位,改用if条件语句判断之后,能够正常执行。

DSP用的28035

请问,这样操作有什么问题?位域操作是怎么编译的?有没有相应的手册?


CLA一堆问题请教?

$
0
0

1、F2837X的CLA是否与F2806X的CLA不一样?在F2806X中要把task程序Memcpy到RAM中,在F2837X的例子中没有看到这一步,直接设置LSxMSEL和LSxCLAPGM就可以了吗?是不是程序只能限制在LSx空间中?

2、*.cla文件的include文件,是否可以不在cla中,使用其他文件共用的*.h文件?

3、CLA ROM Tables中每个的函数含义有没有文档链接一下?

4、CLA介绍文档好多(如注意事项、数据规则等),有没有最新的文档?

非常感谢

28377如何将一个数组或结构体定义到内存固定区域

$
0
0

最近在学习28377,想将一个数组或结构体定义到内存固定区域。

看了controlSuite中RAM_management的例程,该例程对数组的内存映射操作如下:

CPU1中:

uint16_t c1_r_array[256];   // mapped to GS0 of shared RAM owned by CPU02
uint16_t c1_r_w_array[256]; // mapped to GS1 of shared RAM owned by CPU01
#pragma DATA_SECTION(c1_r_array,"SHARERAMGS0");
#pragma DATA_SECTION(c1_r_w_array,"SHARERAMGS1");

CPU2中:

uint16_t c2_r_w_array[256];   // mapped to GS1 of shared RAM owned by CPU02
uint16_t c2_r_array[256];     // mapped to GS0 of shared RAM owned by CPU01
#pragma DATA_SECTION(c2_r_array,"SHARERAMGS1");
#pragma DATA_SECTION(c2_r_w_array,"0x0000c100");

看了两个CPU的map文件:

CPU1:

0000c000  _c1_r_array                          
0000d000  _c1_r_w_array

CPU2: 

 0000c000  _c2_r_w_array                  
0000d000  _c2_r_array

c1_r_array 和 c2_r_w_array的地址分配正好是一样的,c1_r_w_array和c2_r_array的地址正好是一样的,所以例程未做其他操作就可以在两个CPU间交换读写内存数据。

我不知道编译器的内存分配原则是什么,但是按照我的理解这样分配内存空间有“讨巧”的嫌疑,因为程序只是将c1_r_array分配到了SHARERAMGS0,而SHARERAMGS0是从 0x000c000开始的4K内存空间,照理说将c1_r_array随机分配到SHARERAMGS0中的任意位置应该都是合理的。只是因为这个程序中只定义了一个唯一的c1_r_array数组在GS0空间,所以在编译器中看上去无论怎么分配都是从0000c000开始。

我的疑问是:

1、以#pragma DATA_SECTION(c2_r_array,"SHARERAMGS1");语句为例,这样分配内存空间是否能保证每次c2_r_array分配的内存空间都是固定的?多次编译后会定义到该内存区段别的地方吗?(当然目前看,GS1中就这一个数组,每次都是从地址起始位置开始分配)

2、如果我加一个数组,比如c3_r_array,也定义到SHARERAMGS1,这样c2_r_array,c3_r_array的内存地址还会每次编译都一样吗?会不会出现不一样的情况?(我理解就算编译器每次分配的地址都一样,但是从理论上这俩数组的地址是可以随机改变的)

3、我可以用RAM_management中这种讨巧的内存分配方式吗?如果RAM_management中的内存定义操作不严谨,我应该如何操作才能将一个数组定义到内存的一个固定区域?

28335参考程序推荐,谢谢!

$
0
0

要用28335做一个载波移相SPWM调制的双环控制的单相级联整流器,由于第一次使用DSP编程,都不太熟悉,请问有没有合适的程序推荐参考的?我大概看了一下control suite没有合适的貌似。。新手求指导。载波100KHZ,主要看调制部分的程序

28379程序烧写进Flash后运行到自带的延时函数就进interrupt void ILLEGAL_ISR(void)非法中断

$
0
0

28379程序烧写进Flash后运行到自带的延时函数就进interrupt void ILLEGAL_ISR(void)非法中断。在RAM中运行正常,烧写到Flash单步运行到延时函数DELAY_US(1)就进入非法中断interrupt void ILLEGAL_ISR(void)。我在进入main函数后的第一条初始化InitSysCtrl();中就已经加入了 memcpy函数。请问大家有玉带过这样的情况吗?都是怎么解决的?

28377s SCI发送问题

$
0
0

28377s使用SIC_ECHOBACK_CPU01例程,只是修改下端口,使用串口助手没有数据,修改的地方如下:

GPIO_SetupPinMux(9, GPIO_MUX_CPU1, 1);
GPIO_SetupPinOptions(9, GPIO_INPUT, GPIO_PUSHPULL);
GPIO_SetupPinMux(8, GPIO_MUX_CPU1, 1);
GPIO_SetupPinOptions(8, GPIO_OUTPUT, GPIO_ASYNC);

硬件方面已经排查,没有问题,但一直都没数据发出,以上配置是否正确?

利用epwm模块产生不对称三角波的问题

$
0
0

我的问题是想要产生一个频率固定,两边不对称的三角波,

一般是在epwm初始化里面进行   (*ePWM[ch1]).TBPRD   

                                                     TIMER_CNT_UPDN                                                     

                                                    HSPCLKDIV_PRESCALE_X_1 
                                                    CLKDIV_PRESCALE_X_1 

   这样的话就会产生固定且对称的三角波,那我能把  HSPCLKDIV_PRESCALE_X_1 ,CLKDIV_PRESCALE_X_1 ,两句放到中断中,并且在时钟基准计数器等于时间基准周期寄存器TBPRD的时候,改变基准时钟TBCLK,从而产生不对称三角波吗?                   

用28335芯片如何输出一组频率可调的PWM脉冲波形?

$
0
0

如题,我想用28335芯片输出一组PWM脉冲信号,脉宽一定,脉冲频率10Hz-20kHz可调,请问该如何实现呢?


28335 的CMD文件

$
0
0

最近在看dsp的cmd的文件,查了很多资料基本上都是一个意思,大家都将page0看作程序空间,page1则认为是数据空间,仔细看了下ti提供的F28335.cmd文件,里面有的flash分配到了 page0 有的分配到page1 ,但事实上分配到page0 还是page1 好像并没有改变他 还是flash存储性质,还是只能读不能写(除非调用api函数),是不是就是说page0 page1只是让使用者更好的去区分,去管理分配自己的内存?而所谓的程序空间和数据空间也只是大家的约定俗成。我想很多人都没有去考虑过这个问题。或者有过疑问但是懒得去想太多,能用就行。

在使用cmd文件时候我发现个小问题,ti提供的cmd文件一般我们要加两个进去工程,DSP2833x_Headers_nonBIOS.cmd 还有一个就是,F28335.cmd, 在里面我看F28335.cmd 都加了这句话,dsp的密码的存储区,

CSM_PWL     : origin = 0x33FFF8, length = 0x000008 

一个把他分配到了page1 一个把他分配到了 page0 两个加进来编译,也不会报错,那最终编译后 会把它分配到 哪个区域? 看了下map文件结果page1 和page0两个区域都生成了这么一块区域,地址是一致的,(page0 和page1 定义的 内存区域 可以重名???就像结构体一样,结构体变量不能重名,内部元素却是可以重名的。)

如果为了简单,可不可以将所有的区间都定义为 page1 或者 都定义为page0 ?

有关C2000系列DSP批量程序在板烧写问题 - 是否有 相关编程器进行支持?

$
0
0

目前公司使用的DSP型号为TMS320F28335,程序烧写方式采用的是使用仿真器,进行在板烧写。

但是目前由于产品生产变动,不再适合将bin文件(*.out)直接开放给工厂使用,需要进行控制。

1. 目前使用的方式建议为,首先将DSP芯片焊接在PCB板上后再进行程序的烧写。

2.编程口为JTAG口。

3. bin文件(*.out)不能让他人方便获得,不能直接放置在电脑中联机烧写,希望放置在烧写器内部,离线进行烧写。

4.希望限制烧写次数。

 

经过相关资料查询,结果如下:

1. 使用仿真器可以进行在板烧写,但是需要连接PC使用,不能独立脱机进行,因此不符合要求。

2.使用国内第三方的批量烧写工具,大部分是直接对芯片进行烧写,然后再进行焊接,不符合本公司产品的使用需求。

3.使用TI C2000-Gang,简单看了一下,可能可以满足我公司的要求,但是没有相关的技术人员可以直接沟通?

因此希望能够得到答复,谢谢。

同时希望可以给出其他在板烧写的解决方案,谢谢。

28035 pwm 为何计数器>周期值?

$
0
0

请问,有没有遇到现在的情况:pwm 移相 ,pwm2移相120°,增计数

                    pwm2的 计数器等于相移值后,计数到相移值+周期值后,再降到相移值,然后再计数到周期值,循环往复,计数器>周期值,而且计数器不清零,我知道是和移相配置有关,但是不知道是哪块地方?

ccs查看 MR0 MR1

$
0
0

请问如何在ccs3.3下如何看CLA中汇编指令的值,如MR0,MR1等,我用右键Add to WATCH WINDOW查看,但是不知道显示?

28335,ccsv6, xds200无法连接,用xds100v3是一切正常,但连上xds200,重新配置连接文件,点test connection后 ,就如下图所示。

使用28377D的DMA进行数据传输

$
0
0

有人使用过28377D的CPU2的DMA功能吗,可不可以分享一个简单例程,不胜感激!

请问一下使用F28035的TIDM-SOLARUINV光伏逆变器的简单信息

$
0
0

1、尺寸及大小

2、配套的源代码可以不可以提供

3、套件买回来可以不可以直接并网使用


F28M36X BOOT ROM问题请教

$
0
0

请教一下专家,最近在做F28M36X BOOT ROM 下载hex有几个问题咨询一下,以下是我理解的

1: 芯片内部时钟振荡器(internal zero-pin oscillator) 不能用于PLL输入做系统主时钟.

2: M3的默认UART管脚是PA0_GPIO0,PA1_GPIO1. c28的SCI管脚是PF3_GPIO35,PF4_GPIO36,不能共用M3的串口pin脚,
要想用boot rom烧录程序必须两套串口接口.

3: M3如何启动c28进入SCI BOOT模式,发的啥IPC指令,有没例程?

4: controlSUITE里面例程没有像别的芯片例程的F28m36x_sci_flash_kernel,这个哪里搞的到?

感谢!

win7 64位 安装CCSv8和v7失败

$
0
0

我的电脑是win7 SP1 64位 。安装CCSv7和V8均失败。停在下面的界面,报错。附带install_log.

希望TI工程师帮忙分析下原因。谢谢。

(请访问站点以查看此文件)

TI的Arc Dtection的板子中,使用一个SM73201的16位ADC芯片,请问可不可以直接用DSP内部的ADC代替?

$
0
0

SM73201的价格非常高,实际应用中很难接受,DSP内部虽然精度差点,但是只要修改前面滤波器的放大倍数,我个人觉得效果是一样的。但是TI给定官方软件是一个库文件形式,如果我想把16位ADC芯片去掉,应该怎么使用现在的库文件,或者库文件里面的关键源码可否提供给我参考?

有关ADC延时函数的调用

$
0
0

DELAY_US(ADC_usDELAY);这个是延时多久啊?我知道是rom里固化的?就是不清楚延时多久啊历程里面是#define ADC_usDELAY  1000L

CAL中使用const数据的问题请教!

$
0
0

在CLA程序中,需要使用const   short   Table[] = {0,1,2...},CMD的CLA部分定义如下:

CLAscratch       :
                     { *.obj(CLAscratch)
                     . += CLA_SCRATCHPAD_SIZE;
                     *.obj(CLAscratch_end) } >  RAMLS0,  PAGE = 1

   .scratchpad      : > RAMLS0,       PAGE = 1
   .bss_cla         : > RAMLS0,       PAGE = 1
   .const_cla       :  LOAD = FLASHB,
                       RUN = RAMLS0,
                       RUN_START(_Cla1ConstRunStart),
                       LOAD_START(_Cla1ConstLoadStart),
                       LOAD_SIZE(_Cla1ConstLoadSize),
                       PAGE = 1

程序编译后出现下面报警:

"../FLASH_lnk_cpu1.cmd", line 274: error #10265: no valid memory range(NULL) available for placement of ".const_cla"
"../FLASH_lnk_cpu1.cmd", line 274: error #10099-D: program will not fit into available memory.  load placement with alignment/blocking fails for section ".const_cla" size 0x20 page 1

变量Cla1ConstRunStart、Cla1ConstLoadStart、Cla1ConstLoadSize也没有看到在哪里定义,例程中也没有发现哪里用const数据的;

盼复!!!

Viewing all 12268 articles
Browse latest View live


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>