說起來也很奇怪 按照V208的例程寫了個鍵盤程序
從按鍵到出字會產(chǎn)生肉眼可見的延遲 而且似乎這個概率隨著上電時間增加
但是在CH582和592上寫的程序似乎就沒有這樣的問題
如果可以復(fù)用,是否可以提示一下有哪些改寫的注意點(diǎn)
說起來也很奇怪 按照V208的例程寫了個鍵盤程序
從按鍵到出字會產(chǎn)生肉眼可見的延遲 而且似乎這個概率隨著上電時間增加
但是在CH582和592上寫的程序似乎就沒有這樣的問題
如果可以復(fù)用,是否可以提示一下有哪些改寫的注意點(diǎn)
你好,這個現(xiàn)象沒有碰到過,可以拉個IO看一下,按鍵按下到進(jìn)入USB IN完成中斷之間的時間間隔,推薦在V208EVT中的鍵鼠例程上修改。
確實是按照例程改的
我試過在按鍵上綁一個LED 燈看起來和按鈕沒有問題
所以我感覺更像是USBFS_Endp_DataUp在掉包或者中斷有問題
void Device_USB_Protocol(void)
{
??? if (USBFS_DevEnumStatus)
??? {
??????? if (Flag_EP1)
??????? {
??????????? USB_Status_EP1 = USBFS_Endp_DataUp(DEF_UEP1, Report_EP1, sizeof(Report_EP1), DEF_UEP_CPY_LOAD);
??????????? if(USB_Status_EP1 == READY)
??????????? {
??????????????? Flag_EP1 = 0;
??????????? }
??????? }
??? }
}
void Matrix_Scan(void)
{
??? Scan_Result = GPIO_ReadInputData(Scan_Col_Port) & Scan_Col_Mask;
??? if (Scan_Result != Scan_Buffer[0])
??? {
??????? if (temp == 0)
??????? {
??????????? Report_EP1[2] = 0x04;
??????? }
??????? else
??????? {
??????????? Report_EP1[2] = 0x00;
??????? }
??????? temp = 1 - temp;
??????? Scan_Buffer[0] = Scan_Result;
??????? Flag_EP1 = 1;
??? }
}
void TIM3_IRQHandler(void)
{
??? if(TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET)
??? {
??????? TIM_ClearITPendingBit(TIM3, TIM_IT_Update);
??????? Matrix_Scan();
??? }
}
你好
可以對比一下例程的響應(yīng)速度。
USB的機(jī)制:設(shè)備需要先裝載數(shù)據(jù),等主機(jī)發(fā)IN令牌,然后再上傳數(shù)據(jù),如果描述符的間隔是10,全速就是10ms 1個IN。
變量在中斷和主函數(shù)中同時使用,加上volatile修飾。
如果找不到問題,代碼可以發(fā)我郵箱zc@wch.cn