haishanggudao
发表于 2010-1-11 11:04:36
楼主你好,我正在用F2808做SPWM的程序,能提供个例子吗?
haishanggudao
发表于 2010-1-11 11:10:36
如果有2808的spwm程序,能麻烦你发我邮箱吗?tonghua5225@126.com,万分感谢!!!!!
zhanglei_hrb
发表于 2010-1-11 16:50:04
记号下,正着手学习,到时必有求与你啊!
simplorer
发表于 2010-1-12 16:15:55
F2812 ADC数据手册上有这么一段汇编:
MOV ADCTRL1, #01xxxxxxxxxxxxxxb; Resets the ADC (RESET = 1)
RPT #10 || NOP ; Provides the required delay between writes to ADCTRL1
这段汇编的目的是使ADC复位后,产生至少2个clock cycle的延迟(芯片要求的),用来满足ADC复位信号的要求。
这段汇编是F2812工作于150MHz,ADCCLK为25MHz的延时代码,这里为什么需要10个NOP?
根据我的观察,一条NOP指令需要3个CC执行,哪位可以给我释疑,谢谢!
kunyi
发表于 2010-1-27 20:49:49
楼主好,我是机械专业的,初次接触F2812,请教楼主,我的F2812仿真板上的DA芯片是芯片TLC7528,它有两路DA输出,精度是8位的,我可否将两路级联起来使其输出精度为16位?
kunyi
发表于 2010-1-28 18:51:49
感觉没人气了啊。。。
wavebo
发表于 2010-3-20 10:50:33
关于SPWM产生正弦波的问题
#include "DSP280x_Device.h" // DSP280x Headerfile Include File
#include "DSP280x_Examples.h" // DSP280x Examples Include File
#include "IQmathLib.h"
// Prototype statements for functions found within this file.
void InitEPwm1Example(void);
interrupt void epwm1_isr(void);
#define PI 3.1415926
_iq27 pwmsin,Pi;
unsigned intEPWM1_TIMER_TBPRD;
unsigned intflt,n,T1,counter;
floati,j,T,T0,t,t1,f,flt1;
unsigned char flat;
void main(void)
{
flat = 1;
i=0;
f=1000;
T=1/f;
T0 = T*600000;
counter = (Uint16)(T0);
EPWM1_TIMER_TBPRD=100;
// This example function is found in the DSP2802x_SysCtrl.c file.
InitSysCtrl();
// Step 2. Initalize GPIO:
// This example function is found in the DSP2802x_Gpio.c file and
// illustrates how to set the GPIO to it's default state.
// InitGpio();// Skipped for this example
// For this case just init GPIO pins for ePWM1, ePWM2, ePWM3
// These functions are in the DSP2802x_EPwm.c file
InitEPwm1Gpio();
// Step 3. Clear all interrupts and initialize PIE vector table:
// Disable CPU interrupts
DINT;
// Initialize the PIE control registers to their default state.
// The default state is all PIE interrupts disabled and flags
// are cleared.
// This function is found in the DSP2802x_PieCtrl.c file.
InitPieCtrl();
// Disable CPU interrupts and clear all CPU interrupt flags:
IER = 0x0000;
IFR = 0x0000;
// Initialize the PIE vector table with pointers to the shell Interrupt
// Service Routines (ISR).
// This will populate the entire table, even if the interrupt
// is not used in this example.This is useful for debug purposes.
// The shell ISR routines are found in DSP2802x_DefaultIsr.c.
// This function is found in DSP2802x_PieVect.c.
InitPieVectTable();
// 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 registers
PieVectTable.EPWM1_INT = &epwm1_isr;
EDIS; // This is needed to disable write to EALLOW protected registers
// Step 4. Initialize all the Device Peripherals:
// This function is found in DSP2802x_InitPeripherals.c
// InitPeripherals();// Not required for this example
// For this example, only initialize the ePWM
EALLOW;
SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 0;
EDIS;
InitEPwm1Example();
EALLOW;
SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1;
EDIS;
// Step 5. User specific code, enable interrupts:
// Enable CPU INT3 which is connected to EPWM1-3 INT:
IER |= M_INT3;
// Enable EPWM INTn in the PIE: Group 3 interrupt 1-3
PieCtrlRegs.PIEIER3.bit.INTx1 = 1;
PieCtrlRegs.PIEIER3.bit.INTx2 = 1;
PieCtrlRegs.PIEIER3.bit.INTx3 = 1;
// Enable global Interrupts and higher priority real-time debug events:
EINT; // Enable Global interrupt INTM
ERTM; // Enable Global realtime interrupt DBGM
// Step 6. IDLE loop. Just sit and loop forever (optional):
for(;;)
{
asm(" NOP");
}
}
interrupt void epwm1_isr(void)
{
// Update the CMPA and CMPB values
//update_compare(&epwm1_info);
if(i<=2*PI)
{
Pi=_IQ27(i);
pwmsin= _IQ27sin(Pi);
j=_IQ27toF(pwmsin)+1;
t=j/2.0*100.0;
flt=(Uint16)(t);
EPwm1Regs.CMPA.half.CMPA =flt;
i = i + 2.0*PI/counter;
}
else
{
i=0;
}
// Clear INT flag for this timer
EPwm1Regs.ETCLR.bit.INT = 1;
// Acknowledge this interrupt to receive more interrupts from group 3
PieCtrlRegs.PIEACK.all = PIEACK_GROUP3;
}
void InitEPwm1Example()
{
// Setup TBCLK
EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP; // Count up
// EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN;
EPwm1Regs.TBPRD = EPWM1_TIMER_TBPRD; // Set timer period
EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE; // Disable phase loading
//EPwm1Regs.TBCTL.bit.PRDLD = TB_SHADOW;
EPwm1Regs.TBPHS.half.TBPHS = 0x0000; // Phase is 0
EPwm1Regs.TBCTR = 0x0000; // Clear counter
EPwm1Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1; // Clock ratio to SYSCLKOUT
//EPwm1Regs.TBCTL.bit.CLKDIV = TB_DIV2;
EPwm1Regs.TBCTL.bit.CLKDIV = TB_DIV1;
// Setup shadow register load on ZERO
EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;
EPwm1Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;
EPwm1Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;
// Set Compare values
// EPwm1Regs.CMPA.half.CMPA = EPWM1_MIN_CMPA; // Set compare A value
// Set actions
//****************************************
EPwm1Regs.AQCTLA.bit.ZRO = AQ_SET; // Set PWM1A on Zero
EPwm1Regs.AQCTLA.bit.CAU = AQ_CLEAR; // Clear PWM1A on event A, up count
//******************************************
// EPwm1Regs.AQCTLA.bit.PRD = AQ_CLEAR;
// EPwm1Regs.AQCTLA.bit.CAU = AQ_SET;
// Clear PWM1B on event B, up count
// Interrupt where we will change the Compare Values
EPwm1Regs.ETSEL.bit.INTSEL = ET_CTR_ZERO; // Select INT on Zero event
EPwm1Regs.ETSEL.bit.INTEN = 1; // Enable INT
// EPwm1Regs.ETPS.bit.INTPRD = ET_3RD; // Generate INT on 3rd event
EPwm1Regs.ETPS.bit.INTPRD = ET_1ST;
}
我用的是改变占空比的方法产生正弦波,输入为设定的一个频率大小值,程序中以脉冲周期恒定,脉冲个数可调来实现信号周期的变化。输出为一个与输入相对应的SPWM信号,通过滤波产生正弦波。
问题:通过公式:1/f_sin/counter=f_pulse=C*(1/f_sys) ( f_sin:设定输出信号的频率值。counter:信号周期中单位脉冲个数。f_pulse:单位脉冲的频率。C:单位脉冲周期的计数值。f_sys:系统时钟。)计算出相应的各个参数,但是现在我计算出来的数据和实际的不一致
谢谢大家指教!!!
monster555
发表于 2010-3-27 17:23:59
回复【楼主位】mpuhome
-----------------------------------------------------------------------
你好,请问如何在2809上实现中断嵌套呢?能否给个例程?谢谢!
yinhua
发表于 2010-3-28 10:08:17
有问题:不明白如何用epwm来启动ADC,硬件上需要有什么要的链接呢?????
// TI File $Revision: /main/2 $
// Checkin $Date: November 7, 2008 16:33:22 $
//###########################################################################
//
// FILE: Example_2802xAdcSoc.c
//
// TITLE:DSP2802x ADC Start-Of-Conversion (SOC) Example Program.
//
// ASSUMPTIONS:
//
// This program requires the DSP2802x header files.
//
// Make sure the CPU clock speed is properly defined in
// DSP2802x_Examples.h before compiling this example.
//
// Connect signals to be converted to A2 and A3.
//
// As supplied, this project is configured for "boot to SARAM"
// operation.The 2802x Boot Mode table is shown below.
// For information on configuring the boot mode of an eZdsp,
// please refer to the documentation included with the eZdsp,
//
// Boot GPIO18 GPIO29 GPIO34
// Mode SPICLKA SCITXDA
// SCITXB
// -------------------------------------
// Flash 1 1 1
// SCI-A 1 1 0
// SPI-A 1 0 1
// I2C-A 1 0 0
// ECAN-A 0 1 1
// SARAM 0 1 0<- "boot to SARAM"
// OTP 0 0 1
// I/0 0 0 0
//
//
// DESCRIPTION:
//
// This example sets up the PLL in x12/2 mode.
//
// For 60 MHz devices (default)
// (assuming a 10Mhz input clock).
//
// Interrupts are enabled and the ePWM1 is setup to generate a periodic
// ADC SOC - ADCINT1. Two channels are converted, ADCINA4 and ADCINA2.
//
// Watch Variables:
//
// Voltage1 Last 10 ADCRESULT0 values
// Voltage2 Last 10 ADCRESULT1 values
// ConversionCountCurrent result number 0-9
// LoopCount Idle loop counter
//
//
//###########################################################################
// $TI Release: 2802x Header Files V1.00 $
// $Release Date: November 10, 2008 $
//###########################################################################
#include "DSP28x_Project.h" // Device Headerfile and Examples Include File
// Prototype statements for functions found within this file.
interrupt void adc_isr(void);
void Adc_Config(void);
// Global variables used in this example:
Uint16 LoopCount;
Uint16 ConversionCount;
Uint16 Voltage1;
Uint16 Voltage2;
main()
{
// Step 1. Initialize System Control:
// PLL, WatchDog, enable Peripheral Clocks
// This example function is found in the DSP2803x_SysCtrl.c file.
InitSysCtrl();
// Step 2. Initialize GPIO:
// This example function is found in the DSP2802x_Gpio.c file and
// illustrates how to set the GPIO to it's default state.
// InitGpio();// Skipped for this example
// Step 3. Clear all interrupts and initialize PIE vector table:
// Disable CPU interrupts
DINT;
// Initialize the PIE control registers to their default state.
// The default state is all PIE interrupts disabled and flags
// are cleared.
// This function is found in the DSP2802x_PieCtrl.c file.
InitPieCtrl();
// Disable CPU interrupts and clear all CPU interrupt flags:
IER = 0x0000;
IFR = 0x0000;
// Initialize the PIE vector table with pointers to the shell Interrupt
// Service Routines (ISR).
// This will populate the entire table, even if the interrupt
// is not used in this example.This is useful for debug purposes.
// The shell ISR routines are found in DSP2802x_DefaultIsr.c.
// This function is found in DSP2802x_PieVect.c.
InitPieVectTable();
// 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.ADCINT1 = &adc_isr;
EDIS; // This is needed to disable write to EALLOW protected registers
// Step 4. Initialize all the Device Peripherals:
// This function is found in DSP2802x_InitPeripherals.c
// InitPeripherals(); // Not required for this example
InitAdc();// For this example, init the ADC
// Step 5. User specific code, enable interrupts:
// Enable ADCINT1 in PIE
PieCtrlRegs.PIEIER1.bit.INTx1 = 1; // Enable INT 1.1 in the PIE
IER |= M_INT1; // Enable CPU Interrupt 1
EINT; // Enable Global interrupt INTM
ERTM; // Enable Global realtime interrupt DBGM
LoopCount = 0;
ConversionCount = 0;
// Configure ADC
EALLOW;
AdcRegs.ADCCTL1.bit.INTPULSEPOS = 1; //ADCINT1 trips after AdcResults latch
AdcRegs.INTSEL1N2.bit.INT1E = 1; //Enabled ADCINT1
AdcRegs.INTSEL1N2.bit.INT1CONT= 0; //Disable ADCINT1 Continuous mode
AdcRegs.INTSEL1N2.bit.INT1SEL = 1; //setup EOC1 to trigger ADCINT1 to fire
AdcRegs.ADCSOC0CTL.bit.CHSEL = 4; //set SOC0 channel select to ADCINA4
AdcRegs.ADCSOC1CTL.bit.CHSEL = 2; //set SOC1 channel select to ADCINA2
AdcRegs.ADCSOC0CTL.bit.TRIGSEL = 5; //set SOC0 start trigger on EPWM1A, due to round-robin SOC0 converts first then SOC1
AdcRegs.ADCSOC1CTL.bit.TRIGSEL = 5; //set SOC1 start trigger on EPWM1A, due to round-robin SOC0 converts first then SOC1
AdcRegs.ADCSOC0CTL.bit.ACQPS = 6; //set SOC0 S/H Window to 7 ADC Clock Cycles, (6 ACQPS plus 1)
AdcRegs.ADCSOC1CTL.bit.ACQPS = 6; //set SOC1 S/H Window to 7 ADC Clock Cycles, (6 ACQPS plus 1)
EDIS;
// Assumes ePWM1 clock is already enabled in InitSysCtrl();
EPwm1Regs.ETSEL.bit.SOCAEN = 1; // Enable SOC on A group
EPwm1Regs.ETSEL.bit.SOCASEL = 4; // Select SOC from from CPMA on upcount
EPwm1Regs.ETPS.bit.SOCAPRD = 1; // Generate pulse on 1st event
EPwm1Regs.CMPA.half.CMPA = 0x0080; // Set compare A value
EPwm1Regs.TBPRD = 0xFFFF; // Set period for ePWM1
EPwm1Regs.TBCTL.bit.CTRMODE = 0; // count up and start
// Wait for ADC interrupt
for(;;)
{
LoopCount++;
}
}
interrupt voidadc_isr(void)
{
Voltage1 = AdcResult.ADCRESULT0;
Voltage2 = AdcResult.ADCRESULT1;
// If 20 conversions have been logged, start over
if(ConversionCount == 9)
{
ConversionCount = 0;
}
else ConversionCount++;
AdcRegs.ADCINTFLGCLR.bit.ADCINT1 = 1; //Clear ADCINT1 flag reinitialize for next SOC
PieCtrlRegs.PIEACK.all = PIEACK_GROUP1; // Acknowledge interrupt to PIE
return;
}
mvp1984
发表于 2010-3-30 21:44:29
1.pwm波能控制步进电机吗?我看了一本书的例子里面用的是cputimer0中断实现的。具体的不是很明白,还有方向控制。请楼主指导,谢谢!!!我刚开始学dsp,问的问题可能比较小白,还望见谅!
2.GpioDataRegs.GPADAT.all=0x009c是什么意思?后面的数字我随便打的。
书上说GPADAT寄存器是可读/写寄存器。
具体的我没看明白什么意思。请楼主指导,谢谢!!!
mpuhome
发表于 2010-4-1 12:08:05
199楼,你开两个中断,就会发生嵌套了,比如一个1秒的定时中断,一个1毫秒定时中断
201楼,步进电机用PWM控制?我没做过哦,不要细分的话直接IO模拟,细分的话有现成模块可以用,关键是你要搞清楚控制时序
GpioDataRegs.GPADAT.all=0x009c ,就是给GpioDataRegs.GPADAT写 0x009c,你看GpioDataRegs.GPADAT的定义就明白了
wxjd87
发表于 2010-4-2 13:04:07
请问楼主:
1、对于SCI的FIFO增强功能,接收时,假如将中断触发等级设定为8,如果接收的数据没有8个,那么它是不是就不会产生中断呢?如果要他产生中断,是不是要开接收错误中断?使用超时中断这个功能。
2、对于本次接收的数据,怎样读完,而且不多读?万一上次fifo中还有数据,那么加上本次接收的数据一起读的话,那么读出来的数据就多了。如果人为控制读几个数据的话,由于不知道接收长度,所以又可能少读。请问怎么解决这个问题呢?
tiancaigao7
发表于 2010-4-2 18:03:37
每次读多少,我感觉是根据你的中断产生的条件来设计的。如果你设定成N个数据产生中断,那就FIFO里面就只会有N个数据。
wxjd87
发表于 2010-4-2 23:45:20
回复【204楼】tiancaigao7 天才杨威利
-----------------------------------------------------------------------
比如让写个modbus协议。因为接收时,返回正常和不正常两种情况的数据长度不等吧。所以不知道怎么用fifo。可以给点提示吗?
newstarce
发表于 2010-4-22 10:26:36
回复【楼主位】mpuhome
-----------------------------------------------------------------------
请教两个2812如何通过一个双口RAM通讯?包括硬件连接和软件的设置问题?谢谢啦。
fy024
发表于 2010-4-22 10:47:00
mark
scarlett2008
发表于 2010-4-22 21:28:03
跪求求2808成功烧写Flash的gel,lib,cmd文件
hhhyyy78
发表于 2010-5-26 08:40:46
我使用2808编译一个C语言程序,但是显示以下警告:
<Linking>
>> warning: entry point other than _c_int00 specified
请问是哪儿设置有问题呢?谢谢!
我编译2812的程序没问题
lvfei
发表于 2010-5-28 16:45:36
现在要产生两路PWM信号,要使用T1和T2,但是按照书上讲的三步法,即T2SWT1=1;T2CNT=XXX;SET1PR=1;设置后,启动T1,但是只有T1有输出,而T2没有,这是怎么会事啊,谢谢!!
fjl2010
发表于 2010-6-3 11:11:05
楼主你好:
看看我这个程序错在哪里?能给个28027CPU 定 时 器 的程序例子吗?
#include "DSP28x_Project.h"
#include "DSP2802x_Device.h"
#include "DSP2802x_Examples.h"
#include "DSP2802x_PieCtrl.h"
//函数声明
interrupt void cpu_timer0_isr(void);//中断服务程序
interrupt void ISRTimer0(void);//定时器0 中断服务函数
void InitSystem(void);
//全局变量定义
Uint16 count;
volatile struct {
unsigned Ft2ms :1; //4ms标志
unsigned Ft6ms :1; //6ms标志
unsigned Ft10ms :1; //10ms标志
unsigned Ft0d1s :1; //0.1s标志
unsigned Ft0d5s :1; //0.5s标志
unsigned Ft1s :1; //1s标志
unsigned Fdaca :1; //数据已改变标志
unsigned Fguozai :1; //过载标志
unsigned guozaishijian :1; //过载时间标志
unsigned Fnc10 :1; //改变量为10
unsigned Ferr :1; //故障标志
unsigned Frun :1; //运行标志
unsigned Fting :1; //停止标志
unsigned Fduan :1; //断相标志
unsigned Faurd :1; //间隔时间标志
unsigned Fstao :1; //启动结束标志
unsigned Fkey1 :1; //复位按键
unsigned Fkey2 :1; //功能按键
unsigned Fkey3 :1; //增加按键
unsigned Fkey4 :1; //减少按键
unsigned Fkey5 :1; //备用按键
unsigned off :1; //复位标志
unsigned Fgsan :1; //过载闪烁标志
unsigned Ftingzhi :1; //停止标志
//unsigned powerOn : 1;
//unsigned alarmOn : 1;
//unsigned commActive : 1;
//unsigned sysError : 1;
} myFlag;
//f28027
/***************************************************************************************************/
void main(void)
{
InitSysCtrl();//初始化系统控制寄存器,PLL,看门狗,时钟位默认状态
/* Flash初始化*/
#ifdef FLASH
MemCopy(&RamfuncsLoadStart, &RamfuncsLoadEnd, &RamfuncsRunStart);
InitFlash();
#endif
#define PIEACK_GROUP10x0001
InitSystem();
InitPieCtrl();//初始化PIE控制寄存器为其默认状态(所有PIE中断被禁止并且标志被清除 )
IER=0X0000;
IFR=0X0000;//禁止所有CPU中断并清楚中断标志
InitPieVectTable();//初始化PIE控制寄存器
EALLOW; // 关闭寄存器保护
PieVectTable.TINT0 = &ISRTimer0;//指向中断服务寄存器定时器0的地址
EDIS;// This is needed to disable write to EALLOW protected registers 开启寄存器保护
InitCpuTimers();//初始化CPU定时器
//60MHzCPU频率,每间隔一秒中断
ConfigCpuTimer(&CpuTimer0, 60, 50000);
StartCpuTimer0();//使能CPU定时器0
PieCtrlRegs.PIEIER1.bit.INTx7 = 1; // 使能位于PIE中组1的第7个中断TINT0
IER |= M_INT1; // 使能CPU级第一组中断
EINT;//使能全局中断INTM
ERTM;//使能全局realtime中断DBGM
/*配置GPB.34,OUTPUT,PUD UP*/
EALLOW; // 关闭寄存器保护
GpioCtrlRegs.GPBPUD.bit.GPIO34 = 0; // 选择上拉
GpioCtrlRegs.GPBMUX1.bit.GPIO34 = 0; // 选择普通 GPIO功能
GpioCtrlRegs.GPBDIR.bit.GPIO34 = 1; // 配置输出
EDIS; // 开启寄存器保护
for(;;)
{
if(myFlag.Ft1s==1)
{
myFlag.Ft1s=0;
GpioDataRegs.GPBDAT.bit.GPIO34 = 0;
}
else GpioDataRegs.GPBDAT.bit.GPIO34 = 1;
}
}
interrupt void cpu_timer0_isr(void)//中断服务程序
{
PieCtr1.PIEACK.bit.ACK7 = PIEACK_GROUP1 ;///响应中断寄存器清除,写1清0,进而才能接收下一外围中断
// PieCtrl.PIEACK.all = PIEACK_GROUP1;
count++; //计数器加1
myFlag.Ft2ms=1;
if(count==3)myFlag.Ft6ms=1;
if(count==5)myFlag.Ft10ms=1;
if(count==50)myFlag.Ft0d1s=1;
if(count==250)myFlag.Ft0d5s=1;
//if(count==iFnumber)myFlag.Faurd=1;//暂定为iFnumber不能大于500 //iFnumber为功能项设定值
if(count>=500)
{
myFlag.Ft1s=1;
count=0;
}
PieCtrlRegs.PIEACK.all =PIEACK_GROUP1 ;//响应中断并准备接收更多的中断
}
fjl2010
发表于 2010-6-3 11:15:43
我的邮箱:601631044@qq.com
caoyuanboy
发表于 2010-6-10 15:08:40
楼主 mpuhome 您好
-----------------------------------------------------------------------
在您的帖子里能够学到不少东西 在此非常感谢!
现在我遇到一个非常问题,想与您探讨
问题如下:
我的程序中用到了IQ的库乘除函数,程序用仿真器烧到FLASH中运行没有问题 断电几秒再上电也没有问题 但是断电0多秒后再上电 程序就进入非法中断 必须重新烧写程序才行,我通过定位查询, 发现是我一旦调用IQ库函数就进入非法中断,但是不能理解的是我带着仿真器运行和断电少于5秒以内程序都正常跑,这是什么原因呢 我目前怀疑是CMD的文件配置问题 看您能不能帮我分析一下?
如果回帖不方便 可以联系我QQ 190216034
liumaojun_cn
发表于 2010-6-19 09:59:05
楼主好久不来了。
tidsp
发表于 2010-6-19 22:28:22
213楼,应该是你硬件设计的问题,很可能是复位电路的问题
hxjhzyf
发表于 2010-7-12 15:52:43
我问一个问题
为什么装载PWM的时候,会写成EPwm1Regs.CMPA.half.CMPA = int,和 EPwm4Regs.CMPB = int。为什么A会有half,B没有啊?
谢谢了
niebinkui
发表于 2010-7-13 17:05:52
应该来个强人,把这个贴接起来
zk93608
发表于 2010-7-20 09:25:37
麻烦了,谁帮我看看,编译老是报这样的错误:
----------------------------myfirst.pjt - Debug----------------------------
"C:\CCStudio_v3.3\C2000\cgtools\bin\cl2000" -g -pdr -pdsw225 -fr"C:/CCStudio_v3.3/MyProjects/Debug" -i"C:/CCStudio_v3.3/MyProjects/DSP2802x_common/include" -i"C:/CCStudio_v3.3/MyProjects/DSP2802x_headers/include" -i"C:/CCStudio_v3.3/MyProjects/Include" -d"_DEBUG" -d"LARGE_MODEL" -ml -mt -v28 -@"../../Debug.lkf" "Example_2802xBUZZER.c"
"C:\CCStudio_v3.3\C2000\cgtools\bin\cl2000" -@"Debug.lkf"
<Linking>
undefined first referenced
symbol in file
--------- ----------------
_EPwm4Regs C:\\CCStudio_v3.3\\MyProjects\\Debug\\Example_2802xBUZZER.obj
_GpioCtrlRegs C:\\CCStudio_v3.3\\MyProjects\\Debug\\Example_2802xBUZZER.obj
_GpioDataRegs C:\\CCStudio_v3.3\\MyProjects\\Debug\\Example_2802xBUZZER.obj
_InitEPwm4Gpio C:\\CCStudio_v3.3\\MyProjects\\Debug\\Example_2802xBUZZER.obj
_InitPieCtrl C:\\CCStudio_v3.3\\MyProjects\\Debug\\Example_2802xBUZZER.obj
_InitPieVectTable C:\\CCStudio_v3.3\\MyProjects\\Debug\\Example_2802xBUZZER.obj
_InitSysCtrl C:\\CCStudio_v3.3\\MyProjects\\Debug\\Example_2802xBUZZER.obj
_SysCtrlRegs C:\\CCStudio_v3.3\\MyProjects\\Debug\\Example_2802xBUZZER.obj
code_start
error: unresolved symbols remain
warning: entry-point symbol "code_start" undefined
error: errors encountered during linking; "./Debug/myfirst.out" not built
>> Compilation failure
Build Complete,
1 Errors, 1 Warnings, 0 Remarks.
tiancaigao7
发表于 2010-7-20 09:45:13
因为A寄存器高16位是为了HPWM来设计的。平时用不到。
chenjiaminwan
发表于 2010-7-26 13:51:05
我想写个生成SVPWM的程序~~请问哪些文件该自己写,哪些文件只需改改,哪些文件可以直接用的?请给个例子。谢谢 用的板子是SEED-DTK2812实验箱
ringan865
发表于 2010-7-28 11:39:33
楼主好人,支持一个
petershi
发表于 2010-8-18 07:42:37
回复【221楼】r<FONT>in</FONT>gan865
-----------------------------------------------------------------------
请问楼主,我在我在用28335的时候,_c_int00中代码经常把我占用的程空间清0,导致程序跑飞。请问如何解决?是不是cmd问题?
yongshi01
发表于 2010-8-18 15:34:18
请问:
以前的产品,源代码弄丢了,现在想把板子里的程序读出来,板子FLASH设置了密码,但是密码还知道,如何将程序读取出来?
谢谢!
ppa2001
发表于 2010-8-30 13:08:03
请教下 ,TMS320F28335 如何从外部nor FLASH启动,
是不是使用CS6,和 BOOT JUMP TO XINTF *16 就可以了·谢谢了
ppa2001
发表于 2010-8-30 17:37:20
在顶顶
ppa2001
发表于 2010-8-30 21:36:22
顶·
ppa2001
发表于 2010-8-31 09:40:24
顶
cumtliyan
发表于 2010-9-2 11:51:27
.out文件已经编译成功,也可以下载进去,下载进去后,ccs3.3就感觉比较慢,还没开始调试,就出现这样的错误、
Trouble Setting Breakpoint with the Action "Terminate GEL_Go()" at 0x3f2fc7:
Error 0x0000000A/-1150
Error during: Memory, Break Point,
JTAG protocol reset.
Sequence ID: 7
Error Code: -1150
Error Class: 0x0000000A
用另外的程序试了下,也是报告这样的错误,麻烦楼主指点下
liwscj
发表于 2010-9-3 17:04:04
你好LZ,我在用2812做在线仿真时起初可以下载程序,但是后来不行了,下载到一半的时候就会出现load failed的情况,想尝试烧写程序进去,发现烧写界面是灰色的只有unlock一个可以用,但是无效,请问有什么解决办法吗?谢谢
liu7894
发表于 2010-9-6 13:28:34
回复【223楼】yongshi01
-----------------------------------------------------------------------
你为什么要从外部启动?
疯了。
yongshi01
发表于 2010-9-26 14:50:19
回复【230楼】liu7894
-----------------------------------------------------------------------
没有说从外部启动啊?
是想把flash里的程序读出来,再烧到别的板子上去,请赐教!
yongshi01
发表于 2010-9-26 14:59:39
回复【230楼】liu7894
回复【223楼】yongshi01
-----------------------------------------------------------------------
你为什么要从外部启动?
疯了。
-----------------------------------------------------------------------
哦知道了,这个应该问的是【224楼】
liqingzhen
发表于 2010-10-26 18:09:02
回复【楼主位】mpuhome
-----------------------------------------------------------------------
先请教一下在2808中EPwm1Regs.TBPHS.half.TBPHS = 100;中half什么意思? 本人是初学者……
zouboan
发表于 2010-10-30 23:38:20
请问楼主FIFO模式下SCI采用中断发送方式,发送中断靠什么触发呢?
如果用FIFO触发,那不是总被触发,影响正常工作吗?
谢谢!
fxfhqy
发表于 2010-11-1 08:53:14
F28335的SCI模块怎样不使用FIFO功能实践通信,我试过关闭以后不能通信,不知要注意那些地方,请指教!谢谢!
fxfhqy
发表于 2010-11-1 09:26:09
F28335的SCI模块怎样不使用FIFO功能实践通信,我试过关闭以后不能通信,不知要注意那些地方,请指教!谢谢!
superlinda07
发表于 2010-11-1 22:00:45
各位大神,请问scia和scib有什么区别啊?
pvliao
发表于 2010-11-3 15:12:56
回复【楼主位】mpuhome
-----------------------------------------------------------------------
你好,在论坛上看您做过PH值测量仪器,想和你交流下。请问你选用的是什么型号的PH值传感器呢?做这个有什么值得小心的地方,望赐教,谢谢您啦
datou819
发表于 2010-11-16 22:20:19
大家好!这个版块太火了!很感谢你们!我也提点问题,希望老大们多多指教!
我用的是2812的板子,想用数字温度传感器DS18B20做温度采集,也看了很多资料,也写了程序,但就是读不出来数据!
用过的请不吝赐教谢谢!
SPARTAN3
发表于 2010-11-19 10:34:07
楼主现在还会继续回答我们的问题吗?
那小弟在此先谢谢您了!
最近小弟接到一个任务,是用一块2812,一块FPGA(SPARTAN3),一块高速单片机(PIC32)搭建一个五轴系统,说白了就是连上5个电机,包括伺服电机,步进电机,不过不知这方案是否可行,或者有什么建议,可否相告,再此感激不尽。PS:我主要负责硬件设计与调试。
tianhaiyixian
发表于 2010-12-8 08:47:22
深刻学习了一下,很有收获,谢谢楼主和各位!!!
tianhaiyixian
发表于 2010-12-8 09:35:19
刚学SCI,有些不明白,请教一下楼主和各位大侠:
1.地址位是怎么设置的?
2.地址位的使用场景是怎么?
3.如果不使用FIFO模式,接收到的数据是否就是SCICCR中设置的字符长度的数据,并且此字符是在SCIRXBUF中获取?
期待楼主和大侠们的指点迷津。。。非常感谢!
sleet1986
发表于 2010-12-18 16:46:21
mark
cjr82123
发表于 2011-1-13 20:37:19
MARK
bliss
发表于 2011-1-15 23:32:54
顶!!
wing78
发表于 2011-1-17 14:32:47
楼主你好,我要输出2对PWM波形。为了提高精度,想在每个周期的开始和中间更新CMPR的值,可CMPR的值应该按整个周期的来算还是按半个周期?
winkle
发表于 2011-1-25 21:46:40
mark
yamxpal
发表于 2011-2-23 13:02:38
回复【163楼】carolxr
问题搞定了,是因为在任务中处理临界代码之前要关中断,而关中断的时间过长,sci fifo溢出导致数据丢失。
-----------------------------------------------------------------------
能解释的详细点吗?遇到了同样的问题,过一段时间就不进入中断
like168
发表于 2011-3-12 15:33:04
楼主你好!请问CCS在编译时出现cannot run cl2000错误,是什么问题?谢谢!
like168
发表于 2011-3-12 16:00:17
楼主你好!我在测试仿真器的连接情况时出现下面的问题,请问是怎么回事?非常感谢!!!
-------------------------
This error is generated by TI's USCIF driver.
The value is `-120' (0xffffff88).
The title is: `SC_ERR_CMD_INVALID'.
The explanation is:
This error number is used when a command is invalid.
It is likely a problem with `SC_CMD' in SMG_call()
selecting a function that has not been implemented.
C:\CCStudio_v3.3\cc\bin>PAUSE
ccbv
发表于 2011-6-3 11:10:27
struct angle_struct{
unsigned int a:8;
unsigned int b:8;
unsigned int c:8;
unsigned int d:8;
};
union angle_unon{
double all;
struct angle_struct bit;
};
union angle_unon angle_main;
这是初始定义
angle_main.all=theta_raw;
already_flag=0;
while(!already_flag)
{
if((SciaTx_Ready()==1))
{
switch(j)
{
case 0:{
Sci_VarRx=angle_main.bit.a;
SciaRegs.SCITXBUF=Sci_VarRx;
j++;
break;
}
case 1:{
Sci_VarRx=angle_main.bit.b;
SciaRegs.SCITXBUF = Sci_VarRx;
j++;
break;
}
case 2:{
Sci_VarRx=angle_main.bit.c;
SciaRegs.SCITXBUF = Sci_VarRx;
j++;
break;
}
case 3:{
Sci_VarRx=angle_main.bit.d;
struct angle_struct bit;
};
union angle_unon angle_main;
这是初始定义
angle_main.all=theta_raw;
already_flag=0;
while(!already_flag)
{
if((SciaTx_Ready()==1))
{
switch(j)
{
case 0:{
Sci_VarRx=angle_main.bit.a;
SciaRegs.SCITXBUF=Sci_VarRx;
j++;
break;
}
case 1:{
Sci_VarRx=angle_main.bit.b;
intense
发表于 2011-6-3 16:10:46
mark.
ccbv
发表于 2011-6-4 10:01:41
struct angle_struct{
unsigned int a:8;
unsigned int b:8;
unsigned int c:8;
unsigned int d:8;
};
union angle_unon{
double all;
struct angle_struct bit;
};
union angle_unon angle_main;
这是初始定义
angle_main.all=theta_raw;
already_flag=0;
while(!already_flag)
{
if((SciaTx_Ready()==1))
{
switch(j)
{
case 0:{
Sci_VarRx=angle_main.bit.a;
SciaRegs.SCITXBUF=Sci_VarRx;
j++;
break;
}
case 1:{
Sci_VarRx=angle_main.bit.b;
SciaRegs.SCITXBUF = Sci_VarRx;
j++;
break;
}
case 2:{
Sci_VarRx=angle_main.bit.c;
SciaRegs.SCITXBUF = Sci_VarRx;
j++;
break;
}
case 3:{
Sci_VarRx=angle_main.bit.d;
SciaRegs.SCITXBUF = Sci_VarRx;
j++;
break;
}
}
if(j==4)
{
already_flag=1;
j=0;
}
}
}
KickDog();
}
要发送的数据是 theta_raw。请问,数据究竟发送出去了没有?那么Sci_VarRx里面究竟是什么?Sci_VarRx=angle_main.bit.d;
这句话的意思是什么?
在线等
ccbv
发表于 2011-6-6 16:59:28
还有楼主在吗?
namemore
发表于 2011-6-7 13:37:06
楼主请问0基础的孩子,如何去写一个28335对实时时钟ds3231进行读写的程序。应该从哪几个方面去学习?才能完成任务
谢谢了lz
ljmdzyx
发表于 2011-7-8 09:07:28
MARK
ljmdzyx
发表于 2011-7-8 09:07:47
MARK
shuen729
发表于 2011-7-8 09:13:50
顶!赞LZ
xkdwangcs
发表于 2011-7-12 13:52:32
回复【楼主位】mpuhome
-----------------------------------------------------------------------
楼主,一直以来一个问题困扰着我
关于DSP的我现在用的是2812
我在想着,假如我的JTAG口上的TRST为高电平。则运行在仿真器连接状态。
这个时候,DSP是怎么进行一个上电引导过程的。
我每次测试的话,CMD文件中将.TEXT映射到RAM,我会发现.TEXT在哪个地址则我的C_INIT地址也是和.TEXT是一样的
这个是CCS自动生成的吗?
如果运行在脱离仿真器状态。我想用内部FLASH引导的话。
程序在上电复位的时候,到复位矢量,复位矢量有条指令跳到BOOT ROM 假设内部FLASH
然后调用BOOT ROM的初始化函数,开始扫描GPIOF的电平来决定 如果是FLASH内部引导。则直接跳到
0x3fff676这个地址上了。然后呢?跳到这个地址后,我想这个地址里面应该也是有跳转指令的
这个跳转指令 我怎么写进去呢?
还有了在CMD文件中有很多关键字
.text
.rest
.vector
这些又没有特定含义
比如.reset。就是代表我系统复位后,跳到.reset指定的地址吗
要是这样。我感觉我很多CMD文件都没有跳到器件的本身的复位地址。
YOYOPAOPAO
发表于 2011-7-24 21:16:10
LZ给个卖2812开发板的地址或QQ联系方式啊,最近也想用DSP开发项目,先要搞套开发板和仿真器,以及开发环境学习学习。
wellsking
发表于 2011-7-26 21:23:32
请教两个问题,
(1)TMS320F28035 中的AIO和GPIO有什么区别。AIO能不能当普通的IO使用,比如输出一个高电平或者低电平,用来驱动一个LED
(2) LIN是不是与SCI兼容,LINTXA与SCITXDA LINRXA与SCIRXDA 硬件上是不是脚对脚兼容。
guhuu
发表于 2011-8-1 21:44:51
你好楼主,麻烦能问你两个问题吗?dsp在线运行时出现如下错误提示是怎么会事?
Trouble Halting Target CPU: Error 0x00000020/-1166 Error during: Execution,Lost processor clock. Device may be operating in a low-power mode.Do you want to bring it out of this mode?
Trouble Halting Target CPU: Error 0x00000022/-2140 Error during: Memory, Execution,Cannot access memory address at 0x00000800
还有这个是怎么回事?
error: expression must have integral type
hiasme
发表于 2011-8-7 21:59:44
最近使用2812串口,FIFO模式,发现串口长时间工作后,某些情况串口会死,完全不响应中断。
检查SCIRXST寄存器,发现SCIRXST.FE,SCIRXST.BRKDT位均被置1。BRKDT被置1的原因,datasheet上说是:串口在丢失了一个停止位后连续检测到了10位的低电平...
貌似2812只要检测到BRKDT位错误,就会把串口BREAK了...此时串口完全死掉,整个系统也死了。
我很郁闷啊,接收错误了扔掉这byte数据就行了,break个什么啊..导致整个控制系统都死了。
我就是想问楼主遇到过这种问题吗?如何解决。对SCI那个什么SW_reset位写0倒是能复位,串口。但是在程序连续运行时能否这样做?
一检测到错误位BRKDT就软复位串口?会对串口带来其他影响吗?
closer
发表于 2011-8-17 21:20:20
scia_loopback_interrupts例子试一下可好?
simplorer
发表于 2011-8-26 11:57:14
回复【268楼】hiasme
最近使用2812串口,fifo模式,发现串口长时间工作后,某些情况串口会死,完全不响应中断。
检查scirxst寄存器,发现scirxst.fe,scirxst.brkdt位均被置1。brkdt被置1的原因,datasheet上说是:串口在丢失了一个停止位后连续检测到了10位的低电平...
貌似2812只要检测到brkdt位错误,就会把串口break了...此时串口完全死掉,整个系统也死了。
我很郁闷啊,接收错误了扔掉这byte数据就行了,break个什么啊..导致整个控制系统都死了。
我就是想问楼主遇到过这种问题吗?如何解决。对sci那个什么sw_reset位写0倒是能复位,串口。但是在程序连续运行时能否这样做?
一检测到错误位brkdt就软复位串口?会对串口带来其他影响吗?
-----------------------------------------------------------------------
必须加纠错处理,你只是单纯的串口还是有什么协议,我做过modbus协议的,实现比较容易,把一些错误的中断打开,发生严重错误时,复位整个串口,然后重新接受,反正modbus有校验,不会产生什么无动作。
tandaohai
发表于 2011-9-14 19:25:45
请教:F28335与PC串口通信时,遇到这样一个问题:正常发送时正常,但如果我故意少发送一个字节,就会出错,再次正确发送就仍然出错,为什么能自动恢复正常?不知何故
tandaohai
发表于 2011-9-15 16:41:46
请教:F28335与PC串口通信时,遇到这样一个问题:正常发送时正常,但如果我故意少发送一个字节,就会出错,再次正确发送就仍然出错,为什么能自动恢复正常?不知何故
另外请问中断方式接收字符串到底是怎么做的,如果有成功的例子,麻烦大家一定给传个,先谢谢了!
F28335的也行!
2538470246@qq.com
pwcpp
发表于 2012-4-1 14:49:56
mark一下,以后学习
干杯吧99
发表于 2012-4-10 14:24:24
您好,看到你的帖子非常激动。作为DSP初学者,有很多问题,非常诚心想跟您请教,如若方便能否加下QQ,方便交流一些,2543928830,期待您的答复,谢谢!!
Y-Edison
发表于 2012-6-13 00:24:26
好人,中国就需要你这样的。
jiaxiingzou
发表于 2012-7-17 23:02:38
ahlj
发表于 2012-7-19 15:24:43
准备学习了.
shuxmpx123
发表于 2012-7-25 14:00:51
楼主,我以前没接触过DSP,现在想先了解一下,有比较容易入门的资料介绍吗?
lixinpeng1007
发表于 2012-8-1 09:26:56
赞~~ 学了很多东西~
longfeixue
发表于 2012-8-2 16:28:47
我想问一下28035的ePWM模块输出的PWM信号如何有效关断。2407A这个手册上讲得比较明确,事件管理器里有比较器使能位和比较器输出使能位或禁止为高阻态位。但是28035的ePWM模块应该怎么设置啊。好像不可以直接操作某个寄存器的某一个位域实现上述功能。??
Hawk_ICBM
发表于 2012-8-24 08:41:03
自己在主函数里写了一个名称为ad()的中断子程序,在主函数里想进入这个中断程序,得加上PieVectTable.ADCINT=&ad;让向量表知道从哪里进入。
但是如果是不自己在主函数里写,而是在DSP28_DefaultIsr.c里的ADCINT_ISR里写中断子程序,那是不是就只用初始化PieVectTable就行了,不用指明入口?请教下自己得理解是否正确
&ad中的ad有什么固定的定义吗
lulihmt
发表于 2012-9-5 14:35:16
楼主,你好,请问28系列的DSP是否有唯一的序列号?
498487989
发表于 2012-9-27 20:02:47
楼主,,咋学dsp呀,,之前只是学了一点点51,这学期就直接到了学dsp。。。给点方法呀!!感谢!!
jiaxiingzou
发表于 2012-10-20 08:52:37
xjch
发表于 2013-1-18 10:25:02
楼主好人
mpuhome
发表于 2013-1-18 11:58:17
好久没看这个帖子了
关于如何学习的问题,28XX其实就是个普通的CPU,如果有使用其他CPU的经验,熟悉并使用28XX还是比较容易的,现在好像也有中文的手册了,条件比以前好多了哦
看数据手册,然后实际操练一下,应该不会花太长时间
CPU就是个工具,大家不要将其看得太过神秘,熟悉这工具的使用,并用这个工具做出有价值的产品,才是我们需要追求的
Hustrong
发表于 2013-1-20 10:46:08
Mpuhome大侠:TI的控制板TMDSCNCD28335作为电机控制就比较好用,就是那个象内存插槽的形式的,个人偏爱,但是额络盟太贵580元,淘宝上怎么也不便宜啊,是不是TI专利的原因,不敢生产啊?
bsyang
发表于 2013-2-28 18:22:42
学习,学习,顶
siriux
发表于 2013-3-1 00:30:32
水印。。。
suneleo
发表于 2013-3-1 13:23:12
楼主还在么?我能问个问题么,想学一下28335的高级的编程知识怎么入手啊?我现在只会把它当做单片机用。。。。。
yuchi0902
发表于 2013-7-10 17:49:50
楼主厉害 学习
youpeng
发表于 2013-8-7 21:02:44
楼主,TI的DSP有专门的电源芯片,请教不用他的芯片,自己diy是否可行?多谢指点。
yinci325
发表于 2013-8-9 16:56:28
335中CAN模块怎样发送大块数据(多余8字节),并接收识别为一个数据块 呢?
yzaka
发表于 2013-8-20 13:34:49
很多年前的帖子了。。。mark
My_Cheeses
发表于 2013-10-25 22:40:24
刚接触F28335,在此贴中看到了希望啊
caihongbao
发表于 2013-10-26 11:12:12
你好楼主,我在主程序中定义了几个全局变量,为什么我在sci的中断服务程序中使用这些全局变量的时候,编译会出错啊,说变量未定义,求解啊,急。。。