簡單來說就是底層C語言GPIO拉高拉低,但是精度要求苛刻,脈沖寬度為0.5us。卡住啦 做一半卡住啦
uj5u.com熱心網友回復:
使用硬體定時器uj5u.com熱心網友回復:
timer_config_t config;
config.divider = 4; //分頻值,默認時鐘是80mhz
config.counter_dir = TIMER_COUNT_UP;
config.counter_en = TIMER_PAUSE;
config.alarm_en = TIMER_ALARM_EN;
config.intr_type = TIMER_INTR_LEVEL;
config.auto_reload = 1; //使能自動裝載
timer_init(TIMER_GROUP_0, TIMER_0, &config);
timer_set_counter_value(TIMER_GROUP_0, TIMER_0, 0x00000000ULL);
timer_set_alarm_value(TIMER_GROUP_0, TIMER_0, 5);
timer_enable_intr(TIMER_GROUP_0, TIMER_0);
timer_isr_register(TIMER_GROUP_0, TIMER_0, timer01_isr,
NULL, ESP_INTR_FLAG_IRAM, NULL);
timer_start(TIMER_GROUP_0, TIMER_0);
請問這個就是硬體定時器了吧 這個我所能達到的極限是3.4us,這是為什么呢。
到達極限之后,分頻與timer_set_alarm_value()在修改已經不起作用了。
uj5u.com熱心網友回復:
timer01_isr 里的處理時間必須小于定時時間間隔, 你的時間間隔只有0.5us,uj5u.com熱心網友回復:
static int a = 0;
STATIC void IRAM_ATTR timer00_isr()
{
a += 1;
if(a % 2 ==0) {
GPIO.out_w1ts = (1 << TEST); //拉高電平
}else{
GPIO.out_w1tc = (1 << TEST); //拉低電平
}
0.5us時間間隔我覺得應該能完成這些事情了吧
uj5u.com熱心網友回復:
應該完成不了,進入中斷函式前后,還有隱含的保護現場的壓堆疊和彈堆疊操作,應該遠遠不止4條指令轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/18891.html
標籤:嵌入開發(WinCE)
