有兩個(gè)問題:
1. GPIO最高支持的切換頻率是多少?
目前測(cè)試看直接通過匯編的SETB和CLR調(diào)整GPIO腳(已配置成輸出)的電平,MCU工作在56MHz,從示波器觀察輸出大約是14MHz,從理論上講,SETB和CLR都是單指令周期,那么輸出頻率應(yīng)該在56/2=28MHz.
2. UART0中斷使能會(huì)影響GPIO切換頻率
相同的代碼,一旦打開UART0的中斷使能(ES = 1),GPIO的切換速率就會(huì)降低到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中斷就會(huì)導(dǎo)致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中的示例中的函數(shù)。目前驗(yàn)證看,UART0中斷使能會(huì)影響所有端口的切換速度,而不只是UART0映射到的端口0;UART1中斷使能沒有此問題。
麻煩盡快確認(rèn),是否為軟件配置問題,謝謝。