有两个问题:
1. GPIO最高支持的切换频率是多少?
目前测试看直接通过汇编的SETB和CLR调整GPIO脚(已配置成输出)的电平,MCU工作在56MHz,从示波器观察输出大约是14MHz,从理论上讲,SETB和CLR都是单指令周期,那么输出频率应该在56/2=28MHz.
2. UART0中断使能会影响GPIO切换频率
相同的代码,一旦打开UART0的中断使能(ES = 1),GPIO的切换速率就会降低到330KHz左右。
void main()
{
CfgFsys(); // Init system clk
mDelaymS(5); // Wait the clk to be steady
CH559UART0Alter(); // Switch UART0 pin to 37/38
mInitSTDIO(); // Init UART0 for stdio
//ES = 1; // Enalbe UART0 interrupt,一旦打开UART0中断就会导致GPIO切换速度极度降低
IE_UART1 = 1;
EA = 1; // Enalbe interrupt for all
CH559GPIOModeSelt(1, 6, 6); // 配置pin1输出
while(1) pwm_pin1(255); // pwm_pin1中通过CLR/SETB切换管脚pin1电平
}
以上均是使用CH559EVT中的示例中的函数。目前验证看,UART0中断使能会影响所有端口的切换速度,而不只是UART0映射到的端口0;UART1中断使能没有此问题。
麻烦尽快确认,是否为软件配置问题,谢谢。