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.
工具/软件:Code Composer Studio
大家好,
我正在使用TMS320F28x的EVAL套件。 我正在尝试在 我的开发板中实施PWM+ADC。 我的开发板上的ADC引脚无法正常工作。 PWM在同一开发板上工作。
我的代码:
//配置ADC
EALLOW;
SysCtrlRegs.PCLKCR0.bit.ADCENCLK = 1; // ADC
AdcRegs.ADCCTL1.bit.ADCREFSEL = 0; //使用内部bandgap
AdcRegs.ADCCTL1.bit.ADCBGPWD = 1; //加电带间隙
AdcRegs.ADCCTL1.bit.ADCREFPWD = 1; //启动参考
AdcRegs.ADCCTL1.bit.ADCPWDN = 1; //为ADC的其余部分加电
AdcRegs.ADCCTL1.bit.ADCENABLE = 1; //启用ADC
AdcRegs.ADCCTL2.bit.ADCNONOVERLAP = 1;//不允许样本重叠
(i = 0;i < 5000;I++)
{
}// 等待6万个周期=1ms (每次迭代为12个周期)
AdcRegs.ADCCTL1.bit.INTPULSEPOS =1;//在输出锁存之前创建1个周期的int脉冲
//将S/H窗口设置为6个clk周期(112.5ns)
AdcRegs.ADCSOC0CTL.bit.ACQPS = 8;
AdcRegs.ADCSOC1CTL.bit.ACQPS = 8;
AdcRegs.ADCSOC2CTL.bit.ACQPS = 8;
AdcRegs.ADCSOC4CTL.bit.ACQPS = 8;
AdcRegs.ADCSOC5CTL.bit.ACQPS = 8;
AdcRegs.ADCSOC6CTL.bit.ACQPS = 8;
AdcRegs.ADCSOC9CTL.bit.ACQPS = 8;
AdcRegs.ADCSOC8CTL.bit.ACQPS = 8;
AdcRegs.ADCSOC10CTL.bit.ACQPS = 8;
AdcRegs.ADCSOC12CTL.bit.ACQPS = 8;
AdcRegs.ADCSOC14CTL.bit.ACQPS = 8;
// AdcRegs.INTSEL1N2.bit.INT1SEL = 12; // ADCCH12 (ADC-B4) EOC导致ADCInterrupt 1
// AdcRegs.INTSEL1N2.bit.INT1CONT = 1; //将ADCInterrupt 1设置为auto CLR
AdcRegs.INTSEL1N2.bit.INT1E =0; //禁用ADC中断
//请注意,SOC3,7,11,13和15是有效的,但这些SOC未配置
//因为这些ADC输出在controlSTICK上不存在。 配置
//配置为可读性。
//EOC =转换事件结束;SOC =转换事件开始
AdcRegs.ADCINTSOCSEL1.bit.SOC0 = 0;//没有选择ADC Inrupt 1导致SOC0
AdcRegs.ADCINTSOCSEL1.bit.SOC1 = 0;
AdcRegs.ADCINTSOCSEL1.bit.SOC2 = 0;
AdcRegs.ADCINTSOCSEL1.bit.SOC4 = 0;
AdcRegs.ADCINTSOCSEL1.bit.SOC5 = 0;
AdcRegs.ADCINTSOCSEL1.bit.SOC6 = 0;
AdcRegs.ADCINTSOCSEL2.bit.SOC8 = 0;
AdcRegs.ADCINTSOCSEL2.bit.SOC9 = 0;
AdcRegs.ADCINTSOCSEL2.bit.SOC10 = 0;
AdcRegs.ADCINTSOCSEL2.bit.SOC12 = 0;
AdcRegs.ADCINTSOCSEL2.bit.SOC14 = 0;
AdcRegs.ADCSOC0CTL.bit.TRIGSEL = 1;// ADC中断中由CPU timer0选择
AdcRegs.ADCSOC1CTL.bit.TRIGSEL = 1;
AdcRegs.ADCSOC2CTL.bit.TRIGSEL = 1;
AdcRegs.ADCSOC4CTL.bit.TRIGSEL = 1;
AdcRegs.ADCSOC5CTL.bit.TRIGSEL = 1;
AdcRegs.ADCSOC6CTL.bit.TRIGSEL = 1;
AdcRegs.ADCSOC8CTL.bit.TRIGSEL = 1;
AdcRegs.ADCSOC9CTL.bit.TRIGSEL = 1;
AdcRegs.ADCSOC10CTL.bit.TRIGSEL = 1;
AdcRegs.ADCSOC12CTL.bit.TRIGSEL = 1;
AdcRegs.ADCSOC14CTL.bit.TRIGSEL = 1;
//选择接收SOCx时要转换的通道
AdcRegs.ADCSOC0CTL.bit.CHSEL = 0;//接收到SOC0时转换ADC-A0 (CH0)
AdcRegs.ADCSOC1CTL.bit.CHSEL = 1;//接收SOC1时转换ADC-A1 (CH1)
AdcRegs.ADCSOC2CTL.bit.CHSEL = 2;
AdcRegs.ADCSOC4CTL.bit.CHSEL = 4;
AdcRegs.ADCSOC5CTL.bit.CHSEL = 5;
AdcRegs.ADCSOC6CTL.bit.CHSEL = 6;
AdcRegs.ADCSOC8CTL.bit.CHSEL = 8;
AdcRegs.ADCSOC9CTL.bit.CHSEL = 9;//接收SOC9时转换ADC-B1 (CH9)
AdcRegs.ADCSOC10CTL.bit.CHSEL = 10;
AdcRegs.ADCSOC12CTL.bit.CHSEL = 12;
AdcRegs.ADCSOC14CTL.bit.CHSEL = 14;
EDIS;
你们能帮我解决吗?
此致,
Ranjit Chennamchetty
Tommy,
我真的 是这个微控制器的初学者。 如何将正在执行的程序从闪存更改为RAM,反之亦然?
这是我的.cmd文件。
内存
{
第0页:
/* BEGIN用于“引导至SARAM”引导加载程序模式*/
BEGIN:Origin = 0x0万,length = 0x0.0002万
RAMM0:原点= 0x0.005万,长度= 0x0003B0
RAML0_L3:原点= 0x0.8万,长度= 0x0.2万 /* RAML0-3组合为.text */的大小
/* in example_F2806xSWPrioritezedInterrupts */
重置:原始= 0x3FFFC0,长度= 0x0.0002万
FPUTABLES:ORIGIN = 0x3FD860,LENGTH = 0x0006A0 /*引导ROM中的FPU表*/
IQTABLES:ORIGIN = 0x3FDF00,LENGTH = 0x000B50 /*引导ROM中的IQ数学表*/
IQTABLES2:原始= 0x3FEA50,长度= 0x0.0008万C /*引导ROM中的IQ数学表*/
IQTABLES3:Origin = 0x3FEADC,length = 0x0000AA /* IQ Math Tables in Boot ROM */
BootROM:Origin = 0x3FF3B0,length = 0x000C10
第1页:
BOOT_RSVD:Origin = 0x0.0002万,length = 0x0.0004万E /* M0的一部分,boot ROM将对stack */使用此选项
RAMM1:原点= 0x0.04万,长度= 0x0.04万 /*片上RAM块M1 */
RAML4:原点= 0x00A000,长度= 0x0.2万 /*片上RAM块L4 */
RAML5:原点= 0x00C000,长度= 0x0.2万 /*片上RAM块L5*/
RAML6:原点= 0x00E000,长度= 0x0.2万 /*片上RAM块L6*/
RAML7:原点= 0x1万,长度= 0x0.2万 /*片上RAM块L7 */
RAML8:原点= 0x1.2万,长度= 0x0.2万 /*片上RAM块L8 */
USB_RAM:原始= 0x4万,长度= 0x0.08万 /* USB RAM */
}
章节
{
/*“引导至SARAM”模式的设置:
codegstart部分(可在DSP28_CodeStartBranch.asm中找到)
将执行重定向到用户代码的开头。 */
codegstart:> begin,page =0
ramfuncs:> RAMM0,页=0
text:> RAML0_L3,页=0
.cinit:> RAMM0,page =0
.Pinit:> RAMM0,页=0
.switch:> RAMM0,page =0
.reset:> reset,page =0,type = DSECT /* not used,*/
.stack:> RAMM1,页= 1
.ebss:> RAML4,页= 1
econst :> RAML4, page =1
esysmem:> RAML4,页面= 1
IQMath:> RAML0_L3,页=0
IQmathTables:> IQTABLES,page =0,type = NoLoad
/*分配FPU数学区域:*/
FPUmathTables:> FPUTABLES,page =0,type = NoLoad
DMARAML5:> RAML5,页面= 1
DMARAML6:> RAML6,页面= 1
DMARAML7:> RAML7,页面= 1
DMARAML8:> RAML8,页面= 1
/*如果调用IQNexp()或IQexp(),则取消注释以下部分
从IQMath.lib库中执行函数,以便利用
引导ROM中的相关IQ Math表(这可节省空间和引导ROM
为1等待状态)。 如果此部分未取消注释,请使用IQmathTables2.
将加载到其他存储器(SARAM,闪存等)中并将占用
打开空间,但0等待状态是可能的。
*/
/*
IQmathTables2:> IQTABLES2,page =0,type = NoLoad
{
IQMath.lib<IQNexpTable.obj>(IQmathTablesRam)
}
*/
/*如果调用IQNasin()或IQasin(),请取消对以下部分的注释
从IQMath.lib库中执行函数,以便利用
引导ROM中的相关IQ Math表(这可节省空间和引导ROM
为1等待状态)。 如果此部分未取消注释,请使用IQmathTables2.
将加载到其他存储器(SARAM,闪存等)中并将占用
打开空间,但0等待状态是可能的。
*/
/*
IQmathTables3:> IQTABLES3,page =0,type = NoLoad
{
IQMath.lib<IQNasinTable.obj>(IQmathTablesRam)
}
*/
}
/*
//===========================================================================================================================================
//文件结束。
//===========================================================================================================================================
*/
Ranjit
兰吉特
在我看来,您的RAM似乎已不足。 使用controlSUITE示例进行区分的简单方法是,"_RAM"位于.CMD文件的名称中,用于执行RAM外的操作。 另一种方法是将.CMD文件中的"原始"地址位置与数据表中的内存映射位置进行比较。
从RAM切换到闪存的常用方法是:
汤米
Tommy,
清理RAM空间的解决方案是什么?
此致,
Ranjit