```c
请教下 profibus dp开发,使用spc的替代产品 CPC3芯片开发,波特率设置为自适应
产品在低波特率下通讯正常,提高到1.5M后就无法通讯,仿真查看到是收到 New_Cfg_Data进入中断进行应答一直不通过,
无法配对成功,这时候把芯片的系统时钟从原来的100Mhz提高到168Mhz就可以正常通讯,
但是把波特率提高到3M最无法进行通讯,此时把中断里面的处理函数屏蔽掉,
不做处理直接对New_Cfg_Data应答又可以正常通讯, 通过示波器查看中断花费的时间在400-500us之间。
```0请问下:高波特率下的应答时间要求是这么短的吗?这个时间是否可以设置加大
或者是有什么我没有考虑到的。求大神指点下迷津,或者给个思路
if(CPC3_GET_IND_NEW_CFG_DATA())
{
dp_sys.CPC3_con = CPC3_CFG_FINISHED;
do
{
switch( user_chk_new_cfg_data() )
{
case CPC3_CFG_OK:
{
#ifdef DP_MSAC_C1
msac_c1_do_cfg_ok();
#endif
dp_sys.CPC3_con = CPC3_SET_CFG_DATA_OK();
break;
}//case CPC3_CFG_OK:
case CPC3_CFG_FAULT:
{
#ifdef DP_MSAC_C1
msac_c1_do_cfg_not_ok();
#endif
dp_sys.CPC3_con = CPC3_SET_CFG_DATA_NOT_OK();
break;
}//case CPC3_CFG_FAULT:
case CPC3_CFG_UPDATE:
{
// Calculate the length of the input and output using the configuration bytes
if(DP_OK!=CPC3_calculate_inp_outp_len(CPC3_GET_CFG_BUF_PTR(),CPC3_GET_CFG_LEN()))
{
#ifdef DP_MSAC_C1
msac_c1_do_cfg_not_ok();
#endif
dp_sys.CPC3_con = CPC3_SET_CFG_DATA_NOT_OK();
}//if( DP_OK != CPC3_calculate_inp_outp_len (cfg_ptr,CPC3_GET_CFG_LEN()) )
else
{
// set IO-Length
CPC3_set_io_data_len();
#ifdef DP_MSAC_C1
msac_c1_do_cfg_ok();
#endif
dp_sys.CPC3_con = CPC3_SET_CFG_DATA_UPDATE();//这里进行应答
}//else of if( DP_OK != CPC3_calculate_inp_outp_len (cfg_ptr,CPC3_GET_CFG_LEN()) )
break;
}//case CPC3_CFG_UPDATE:
default:
{
break;
}//default:
}//switch( user_chk_new_cfg_data() )
}
while ( dp_sys.CPC3_con == CPC3_CFG_CONFLICT );//这里读取的配置一直不通过
【以下回答由 GPT 生成】
根据你提供的代码示例,无法确切确定问题出在哪里,因为其中的函数调用和变量定义没有提供。但是根据你的问题描述,我可以给出一些思路和建议来解决该问题:
确定问题出现的原因:在高波特率下通信无法正常进行,并且中断处理函数收到New_Cfg_Data后无法应答。问题可能出现在中断响应时间过长,或者在高波特率下中断处理函数的处理时间超过了允许的时间。可以通过测量中断处理函数的执行时间来进一步确定问题所在。
优化中断处理函数:如果中断处理函数的执行时间超过了允许的时间,可以尝试优化该函数的代码,减少执行时间。例如,可以采用更高效的算法或数据结构来加快处理速度,或者删除一些不必要的操作。
调整系统时钟频率:你已经提到将芯片的系统时钟从100MHz提高到168MHz后通信恢复正常。这表明在高波特率下,较高的时钟频率可以增加中断处理函数执行的时间窗口。你可以尝试进一步提高系统时钟频率,看看是否可以解决通信问题。
设置更长的应答时间:根据你的描述,高波特率下的应答时间要求较短,需要在400-500us之内完成。你可以尝试通过配置或修改相关的寄存器来设置更长的应答时间。具体的操作取决于所使用的芯片和开发工具,请参考芯片手册或相关文档。
检查是否遗漏了其他操作或配置:你可以仔细检查代码是否遗漏了其他需要进行的操作或配置。例如,是否需要进行特定的初始化、配置或使能操作来支持高波特率通信。
综上所述,你可以尝试优化中断处理函数的代码,调整系统时钟频率,设置更长的应答时间,并检查是否遗漏了其他操作或配置。如果问题仍然存在,建议参考芯片手册或与芯片厂商联系以获得更详细的支持和指导。由于没有完整的代码和更多的上下文信息,我无法给出更具体的解决方案。