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.
你好,在app配置ADC DMA采样用,跳到boot或在flash擦除期间CPU卡死导致看门狗复位,请问是什么原因? ADC DMA配置(功能对两通道ADC搬移到buf1[ ] buf2[ ])有什么问题?
DMA_configAddresses(DMA_CH1_BASE, (const void*)0x0000D978U, (const void*)0x00000B03U);
//DMA_configAddresses(DMA_CH1_BASE, uwAdc1DmaBuf, &AdcaResultRegs.ADCRESULT3); //(const void*)0x00000B03U
DMA_configBurst(DMA_CH1_BASE, ADC1_BURST_LENGTH=2, 1, ADC1_DMA_SIZE=4);
DMA_configTransfer(DMA_CH1_BASE, ADC1_DMA_SIZE=4, -1, -3);
DMA_configWrap(DMA_CH1_BASE, ADC1_DMA_SIZE=4, 0, ADC1_DMA_SIZE=4, 0);
DMA_configMode(DMA_CH1_BASE, DMA_TRIGGER_EPWM8SOCA, DMA_CFG_ONESHOT_DISABLE | DMA_CFG_CONTINUOUS_ENABLE | DMA_CFG_SIZE_16BIT);
DMA_enableTrigger(DMA_CH1_BASE);
DMA_startChannel(DMA_CH1_BASE);
ADC1_RAMGS1 : origin = 0x0000D978, length = 0x0000004
ADC2_RAMGS1 : origin = 0x0000D97C, length = 0x0000004
是否连接了调试器? 您能否尝试逐步查看代码并验证问题发生在哪里? 我看不到您的配置有任何直接问题,但您的链接程序cmd文件可能有问题。 为了在GSRAM中创建缓冲区,建议在链接程序cmd文件中使用用户定义的部分,并使用data_section pragma将数组分配给这些区域。 C2000ware示例中有一个很好的示例:[C2000ware install]/driverlib/f28003x/examples/dma/dma_ex1_gsram_transfer
1.没有连接调试器
2.出现后用调试器读,停在非法中断函数, 分析下什么原因?
3.指定定义如下, 看下什么原因?
1:你如何跳到boot的,用的软件复位吗?还是直接跳转到boot程序里?
2:boot和app是分开的工程吗?你看下boot的cmd文件里,有没有用到RAMGS1这片内存。
而不是使用内存范围来定义主文件中的data_section,您应该从内存范围中创建用户定义的节,并将其用于data_section pragma。 有关此示例,请参阅前面提到的示例的链接程序cmd文件中的"ramgs0"用户定义部分。
1.跳转指令,直接跳转到boot程序
2.boot和app是分开的工程
boot cmd中 对应区域没有特殊被指定使用: RAMGS_Prog : origin = 0x0000D200, length = 0x00002DF8
尽量用软件复位进BOOT,可以自动把所有外设复位;不用复位直接跳转的话在进BOOT前主动复位ePWM和DMA外设。
RAMGS_Prog应该用到了吧,你再仔细看看,FLASH擦除要把代码搬到RAM中运行的,这个名字难道不是用来存放RAM运行代码的吗?如果RAMGS_Prog有被用到的话应该就是被DMA擦除了代码。
你好,FLASH擦除要把代码搬到RAM中运行的,如下:
#pragma CODE_SECTION(Upgrade_CmdOrder45H, ".TI.ramfunc");
Uint16 Upgrade_CmdOrder45H(Uint16 *pDataRx, Uint16 *uiTxLen, Uint16 *pDataTx)
{
Flash_ClearFlashBack();
}
#pragma CODE_SECTION(Flash_ClearFlash, ramFuncSection);
Uint16 Flash_ClearFlash()
{
oReturnCheck = Fapi_setActiveFlashBank(Fapi_FlashBank0);
}
.TI.ramfunc : LOAD = FLASH_APP,
RUN = RAMGS_Prog
LOAD_START(_RamfuncsLoadStart),
LOAD_SIZE(_RamfuncsLoadSize),
LOAD_END(_RamfuncsLoadEnd),
RUN_START(_RamfuncsRunStart),
RUN_SIZE(_RamfuncsRunSize),
RUN_END(_RamfuncsRunEnd),
ALIGN(4)