profibus dp SPC3


```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 生成】

根据你提供的代码示例,无法确切确定问题出在哪里,因为其中的函数调用和变量定义没有提供。但是根据你的问题描述,我可以给出一些思路和建议来解决该问题:

  1. 确定问题出现的原因:在高波特率下通信无法正常进行,并且中断处理函数收到New_Cfg_Data后无法应答。问题可能出现在中断响应时间过长,或者在高波特率下中断处理函数的处理时间超过了允许的时间。可以通过测量中断处理函数的执行时间来进一步确定问题所在。

  2. 优化中断处理函数:如果中断处理函数的执行时间超过了允许的时间,可以尝试优化该函数的代码,减少执行时间。例如,可以采用更高效的算法或数据结构来加快处理速度,或者删除一些不必要的操作。

  3. 调整系统时钟频率:你已经提到将芯片的系统时钟从100MHz提高到168MHz后通信恢复正常。这表明在高波特率下,较高的时钟频率可以增加中断处理函数执行的时间窗口。你可以尝试进一步提高系统时钟频率,看看是否可以解决通信问题。

  4. 设置更长的应答时间:根据你的描述,高波特率下的应答时间要求较短,需要在400-500us之内完成。你可以尝试通过配置或修改相关的寄存器来设置更长的应答时间。具体的操作取决于所使用的芯片和开发工具,请参考芯片手册或相关文档。

  5. 检查是否遗漏了其他操作或配置:你可以仔细检查代码是否遗漏了其他需要进行的操作或配置。例如,是否需要进行特定的初始化、配置或使能操作来支持高波特率通信。

综上所述,你可以尝试优化中断处理函数的代码,调整系统时钟频率,设置更长的应答时间,并检查是否遗漏了其他操作或配置。如果问题仍然存在,建议参考芯片手册或与芯片厂商联系以获得更详细的支持和指导。由于没有完整的代码和更多的上下文信息,我无法给出更具体的解决方案。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^