This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TMS320F2.8335万:TMS320F2.8335万

Guru**** 2325560 points
Other Parts Discussed in Thread: CONTROLSUITE
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/574665/tms320f28335-tms320f28335

部件号:TMS320F2.8335万
主题:controlSUITE中讨论的其他部件

您好,

我正在处理一个需要将ADC与DMA结合使用的项目。  

我在配置DMA时遇到问题。

我使用了控制套件中的示例项目,我已经更改了位,但当我编译时,我收到错误,就像配置中使用的宏不在项目中一样。

我必须包含哪些h文件? 我尝试包括dma_definitions.h,但我一直得到链接器错误,即使我已正确链接所有内容。

请您发布一些有效DMA的简单示例(我只需要将数据从一个ADC通道传输到内存位置并使用过采样)。

我将 在下面发布我的代码。

#include "DSP2833x_Device.h"

// external function augers
extern void InitAdc (void);
extern void InitPieCtrl (
void);

extern void InitPieVectorTable (void);extern void InitCpuTimers (void);
extern void ConfigCpuTimer(struct CPUTIME_VARS *, float, float);


//针对此文件中找到的函数的prototype语句。
void gPIO_select(void);
interrupt void cpu_timer0_isr(void);
interrupt void ADC_ISR(void);		//序列结束

//全局petter pin Voltage_VR1=0; thr=0;r;r;r!<r!<r!<r!<r!<r!<r!<r!<r!<r!<r!<r!<r!<r!<ran=1000;<!<r!<r!<r!<r!<r!<r!<r!<r!<r!<r!<r!<r!<rf1;<!








volatile UINT16 *DMADest;
volatile UINT16 *DMASource;

__interrupt void local_DINTCH1_ISR(void);//########################################################################################.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#


//						主代码
//##########################################################################################
void main(void)
{
	UINT16 i1;
	int i;
	for (i=0;i<60;i++)
		tacke[i]=0;
	Initwatchdtrl();//	从DSP2833x_sysctrl.c

	EALLOW;
	PresSysRegs.wdcr= 0x00af;//	重新启用
				Watchdog Ctrl/DOSED;

					
	
	禁用所有的DOSEDINT/中断 		// GPIO9,GPIO11,GPIO34和GPIO49作为输出
					//在外设资源管理器上的4个LED)

	InitPieCtrl();		// PIE表的基本设置;来自DSP2833x_PIECTRL.c

	InitPieVectorTable();	// PIE

	InitAdc()中的默认ISR;			//基本ADC设置,包括校准

	AdcRegs.ADCTRL1.All = 0;
	Adcencrl1/CASCR1.CASCR= ADR7.CASCR1.PS= ADR1.CASCR1.CASCRQ=7;ADRC= ADR1.CASCR1.CASCR1.CASCR1.CASCR1.CASCR0.1= ADR1.CASCR1.CASCR0.Q= ADR1.CASCR1.CASCR1.CASCR0.1= 	
		
			//除以1
	AdcRegs.ADCTRL1.bit.CONT_RUN = 1;	//单次运行模式!!!!!!
	AdcRegs.ADCTRL1.bit.SEQ_OVRD = 1;//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

	AdcRegs.ADCTRL2.ALL = 0;
	AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1 = 1;	// 1=启用SEQ1中断
	AdcRegs.ADCTRL2.bit.ePWM_SOCA_SEQ1 =1;	// 1=SEQ1启动ePWM_SOCA
	触发器ADcRegs.ADCTRL2.bit.ePWM_POST_SEQ1.ADRMOD=	每个中断1

		后的串0;CADR0位数= ADRCTL2.ADDR0 FCLK = HSPCLK /2 * ADCCLKPS
										// HSPCLK = 75MHz (请参阅DSP2833x_sysctrl.c)
										// FCLK = 12.5 MHz

	AdcRegs.ADCMAXCONV.ALL = 0;//从

	

	初始化SequencRegs.ADCCHSELQ1.bit.CONDMA0转换!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
	对于(i1=0; i1<BUF_SIZE;i1+)
	{
	DMABBUF1[i1]= 0;
	}//

	配置DMA通道
	DMADest =&DMABBUF1[0]; //点DMA目标到数组
		DMASource的开头=&AdcMirror.ADCRESULT0;//点DMA源到ADC结果寄存器基址
		DMACH1AddrConfig(DMADest,DMASource);
		DMACH1BurstConfig(3,0,0);//(3-1) reci se uzima u burst,太棒了!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
		DMACH1TransferConfig(1,0,1);// broj burst-ova u transferu, ova DVA su ignorisana kada se pojavi wrap, sta god to znacilo:P!!!!!!!!!!
		DMACH1WrapConfig(10,0,10,1);// wrap posle (0+1) bursta, jedinica na kraju podize se dest adres za 1// ove desetke disable-uju wrap jer je veci size od transfera
		DMACH1ModeConfig(dma_SEQ1INT, INT_ENable, PERINT_ENable, PERSYNC_SYNC, DISAN, DISABON, DISABON, DISABON, DISABON, DISABON, DI
		OVRFLOW_DISABLE,16位,CHINT_END,CHINT_ENABLE);

		StartDMACH1();

		//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

	EPwm2Regs.TBCTL.ALL = 0xC030;	//配置计时器控制寄存器
	/*
	位15-14 11: 空闲/软,11=忽略仿真暂挂
	位13 0: PHSDIR,0 =同步事件
	位12-10后倒计时 000:CLKDIV,000 => TBCLK = HSPCLK/1
	位9-7 000:HSPCLKDIV,000 => HSPCLK = SYSCLKOUT/1
	位6 0: SWFSYNC,0 =未产生软件同步
	位5-4 11: SYNCOSEL,11 =同步输出禁用
	位3 0: PRDLD,0 =在计数器= 0
	位2上重新加载PRD 0: PHSEN,0 =相位控制禁用
	位1-0 00: CTRMODE,00 =计数模式
	*/

	EPwm2Regs.TBPRD = 299;	// TBPRD +1 = TPWM /(HSPCLKDIV * CLKDIV * TSYSCLK) 3125 je za 48kHz ovo je za 500kHz (FS je 500/16=31.25kHz)
					//			= 20 µs / 6.667 ns

	EPwm2Regs.ETPS.ALL = 0x0100;			//配置ADC以ePWM2
	/*
	位15-14启动 00: EPWMxSOCB,只读
	位13-12 00: SOCBPRD,不要在意
	11-10 00: EPWMxSOCA,只读
	位9-8 01: SOCAPRD,01 =在第一个事件
	位7-4上生成SOCA 0000:保留
	位3-2 00: INTCNT,不要在意
	位1-0 00: INTPRD,不要在意
	*/

	EPwm2Regs.ETSEL.ALL = 0x0A00;			//启用SOCA到ADC
	/*
	位15 0: SOCBEN,0 =禁用SOCB
	位14-12 000:SOCBSEL,不要在意
	第11位 1: SOCAEN,1 =启用SOCA
	位10-8 010:SOCASEL,010 = PRD事件
	位7-4上的SOCA 0000:保留
	位3 0: inten,0 =禁用中断
	位2-0 000:INTSEL,Do Do Care
	*/

	EALLOW;
	PieVectorTable.TINT0 =&CPU_timer0_ISR;
	PieVectorTable.ADCINT =&ADC_ISR;
	EDIS;

	InitCpuTimers(); 	//基本设置CPU Timer0,1和2

	ConfigCpuTimer(&Cpu1/Timer1.Bit.INTx6=1;/21ms

	PieCtrlRegs.PIEIER1.INTx7=1;TSS/		CPU Timer0
	PieclRegs.PIEIER1.INTx6=1;TM/ 0150		

	=

	
	

		Timer0; Timer0; Timer0=

	
	
		0	
		
		
			
			= 0; Timer0; Timer0; Timer0; Timer0; Timer0= 0 = 0 = Cr; Timer0; Timer0; Timer0= 0 = 0; Timer0; Timer0; Timer0; Timer0= 0 = Cr= 0; Timer0= 0; Timer0; Timer0= 0 = 0; Timer0; Timer0= 0 = 0; Timer0; Timer0; Timer0= 0; Timer0= 0= 0; 	//服务WD #1 BEZ WATCHDOGA
			SysCtrlRegs.WDKEY = 0xAA;//	服务WD #2
			EDIS
		;}
		k=1;

	}


}void gPIO_SELECT(void)
{
	EALLOW;
	GpioCtrlRegs.GPAMUX1.ALL =0;//		GPIO15... GPIO0 =一般Puroobiosystem I/O
	GpioCtrlRegs.GPAMUX2.all = 0;		// GPIO31 ... GPIO16 =通用I/O
	GpioCtrlRegs.GPBMUX1.ALL = 0;		// GPIO47 ... GPIO32 =通用I/O
	GpioCtrlRegs.GPBMUX2.all = 0;		// GPIO63 ... GPIO48 =通用I/O
	GpioCtrlRegs.GPCMUX1.ALL = 0;		// GPIO79 ... GPIO64 =通用I/O
	GpioCtrlRegs.GPCMUX2.all = 0;		// GPIO87 ... GPIO80 =通用I/O

	GpioCtrlRegs.GPADIR.ALL = 0;
	GpioCtrlRegs.GPADIR.bit.GPIO9 = 1;	//外设资源管理器:GPIO9 GpioCtrlRegs.GPBDI.GPIO11=1
	;	


			
		外围资源管理器gpiOPIO1.gPIR= 1.3gpiopiO= gpiopiO34.gPIR= gpiopiopiopiO34.gpiopiopiGPIR = gpiopiopiopiopiO34.gpiopiopiopiopiGPI = gpiopiO34.gpiopiopiopiopiopios= gpiopiopiopiop3= gpiopiopios= gpiopios
	//外围设备浏览器:GPIO49
	GpioCtrlRegs.GPCDIR.ALL = 0;//		GPIO87-64作为输入
	EDIS;
}

中断void CPU_timer0_ISR(void)
{
	CpuTimer0.InterruptCount+;
	PieCtrlRegs.PIEACX.ALL = PIEACK_AD1;
}中断void CPU_timer0_ISR1;



		
	计数
	器=0/空=
	
		
	//	if (j<1000) za svaki slucaj da ne preletimo niz, mozda i ne treba
		tacke[j]=Voltage_VR1;//samo sabiram necu da usreddnjavam, brze je
		Voltage_VR1=0;
		j++
	}*///
	重新初始化下一个ADC序列
	AdcRegs.RST_SE1 //重置SEQ1
	AdcRegs.ADCST.bit.INT_SEQ1_CLR = 1;		//清除INT SEQ1位
	PieCtrlRegs.PIEACK/ALL = PIEACK_Group1;//确认PIE
}__interrupt

void local_DINTCH1_ISR(void) // DMA通道1
{//
要接收来自此PIE组的更多中断,请确认此中断
PieCtrlRegs.PIEACK/ALL = PIEACK_group7;

//接下来的两行调试仅在此处停止处理器
//插入ISR代码
__ASM后删除(" ESTOP0");
for (;);
}//===========================================================


//源代码结束。
//===========================================================================================================================================

我经常遇到与一致的错误  

DMACH1ModeConfig (DMA_SEQ1INT,PERINT_ENABLE,OneShot_DISABLE,CONT_DISABLE,SYNC_DISABLE,
		OVRFLOW_DISABLE,CHINT_BIT,CHINT_END,CHINT_ENABLE); 

似乎代码编写器不能识别宏(PERINT_ENABLE等...)。


此致,
伊凡。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好Ivan:

    controlSUITE有"ADC_DMA"示例。 您是否研究过这一项?

    此致,
    Vivek Singh
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢,我看了一下,它很有帮助。
    此致,
    伊凡!