请问da14531的硬件当时最小可口定时机,我想定时1us进一次中断,但实际测试发行进行IO翻转时,高电平1.8-2us,低电平2.2-2.4us。我的谎是♥的:
静态Tim0_2_CLK_DIV_CONFIG_T CLK_DIV_CONFIG =
{
.clk_div = tim0_2_clk_div_1 // 16MHz / 1
};
void timer0_general_user_callback_function(void)
{
if((getword16(gpio_base +(gpio_lex_port << 5))&(1 << GPIO_LED_PIN)))
setword16(GPIO_Base +(GPIO_LED_PORT << 5)+ 4,1 << GPIO_LED_PIN);//低的
否则if((getword16(gpio_base +(gpio_led_port << 5))&(1 << GPIO_LED_PIN))== 0)
setword16(GPIO_Base +(GPIO_LED_PORT << 5)+ 2,1 << GPIO_LED_PIN);//高的
}
void timer0_interrupt_init(uint16_t reload_1us)
{
//停止计时器输入设置
timer0_stop();
//寄存SWTIM_IRQN IRQ的回调函数
timer0_register_callback(timer0_general_user_callback_function);
//启用Timer0 / Timer2输入时钟
timer0_2_clk_enable();
//将Timer0 / Timer2输入时钟分割因子设置为8,因此16 MHz / 1 = 16 MHz输入时钟
timer0_2_clk_div_set(&clk_div_config);
//清除PWM设置寄存器未生成PWM
timer0_set_pwm_high_counter(no_pwm);// timer0_reload_m_reg = 0
timer0_set_pwm_low_counter(no_pwm);// timer0_reload_n_reg = 0
//设置具有2MHz源时钟的定时器除以10所以FCLK = 16MHz / 1 = 16MHz
timer0_init(tim0_clk_fast,pwm_mode_one,tim0_clk_no_div);
// T = 1 / 16MHz *(Reload_100us + 1)= 0.000000000625 * 16 = 1US RELOAD_100US = 16
timer0_set_pwm_on_counter(reload_1us);// timer0_on_reg = 1600
//启用SWTIM_IRQN IRQ
timer0_enable_irq();
//启动Timer0.
timer0_start();
}
是在里里面了吗?请问如何才能精密的1us进一次中间呢
期间回复,非常感谢
你好,
1Us中间是可以。
你最终想实现的是什么呢,我帮你用来什么式好。
你好,我正在一起一个通信协议,尝试过很多方法,目前感觉只能通话多次进入时代中来来实现.t_clock理论是100us,实际测试80-100us之间,需要具体,目前的守法是硬件当时果1US,多重进入累积判断。但我设置硬件时代传派发出者发出并不仅仅是精灵到1us,请问我的问题在这里?协议见附件文章,可直接参考最终档的时尚图
我的这个当时的问题现在
我按按这个,3us进中间(3us也并不准),次数多重程会崩掉。我如果想精神1Us多次呢若多能进多少次
从协议文库看,一个tcycle最大是1ms左右,这种情况建议直接用物
io操作业,可以是具体说明一下吗,我之迹是直接控制io口模拟这个协议电平,用力克做阻塞延时,但是实际效果并不好。建议是不再有阻塞,我是用来时代器去调用,但实际发表定时效果不精确,不再知道ー出ー580起,发出的时代会发出更多个,繁体,最最甚至达到2-3s。
请问这个定时机不精确的问题原因是什么
当把定时代的时代配置为高层时代16MHz后,逐时时代方的数码因数是精锐的。
而当你想实现1us中间一串,并且并且用中间断数来自进,出中间的时,这个就很很保证了。这个开口的开采。在MS级别的临时精密上可以忽略,1US级别,就很难忽略。
并且外设的中间优先优先优先不仅仅是高度的,还会受到蓝牙中间的影响。
好的,_