你好,
我正在使用Pro开发板和DA14531Mod子板修改鞍柱示例。
我试图附上一个问题的屏幕镜头,但无法弄清楚如何。我尝试使用setword32(timer1_ctrl_reg,值)写入timer1_ctrl_reg,其中值= 0x126400。拆卸窗口显示指令str r0,[r1,#0x00],其中r0 = 0x00012640 abd r1 = 0x50004000。但内存位置0x50004000不会从0变化。
运行此命令时,内存位置0x50004000仍然为0,并且在启用时无法运行计时器。我还尝试了value = 0x1a640,选择sys clk。
我会感谢您对寄存器写入时未更改的原因。
谢谢,
拉里
设备:
嗨拉里,
您似乎尝试将32位写入16位宽寄存器(有关详细信息,请参阅数据表的表342)。尝试使用setword16()而不是; o)
直接写入DA14531的寄存器很少是实现任何东西的最佳方式。请查看SDK的Peripheral_examples文件夹,了解用于使用计时器的示例。
你也可以看看你的方式使用app_easy_timer.(强调简单) - 检查“使用SDK6入门”的第9部分教程:http://lpccs-docs.dialog-semiciondiond.com/tutorial_sdk6/index.html.
/ mhv.
感谢您的回复然而,寄存器是17位,SDK_Driver中的FW:Timer1.c使用setword32。我还尝试只用相同的结果写入下游16位。
以下是Timer1.c的权利供您参考。
void timer1_count_config(timer1_count_options_t * count_options,timer1_count_handler_t回调)
{
assert_warning(count_options-> reload_val <= tim1_reload_max);
uint32_t temp =(count_options-> input_clk << 15u)+(count_options-> free_run << 14U)+
(count_options-> irq_mask << 13u)+(count_options-> count_dir << 12u)+
(count_options-> reload_val);
/ *重置当前定时器值。* /
//注意:以下操作序列不得更改!!
setbits32(timer1_ctrl_reg,timer1_clk_en,tim1_clk_on);
setbits32(timer1_ctrl_reg,timer1_use_sys_clk,tim1_clk_src_sys);
setbits32(timer1_ctrl_reg,timer1_count_down_en,count_options-> count_dir);
setbits32(timer1_ctrl_reg,timer1_enable,tim1_off);
/ *写下提供的配置。* /
setword32(timer1_ctrl_reg,temp);
/ *注册提供的回调。* /
timer1_count_register_callback(回调);
}
我不能使用简单的计时器,我需要分辨率小于10毫秒。
隐身_examples文件夹未显示如何使用Timer1,只有我发现的计时器0和2。
我更愿意出于许多原因直接写入寄存器,我会引用您提供直接写入寄存器的SDK_Driver代码。
问题归结为我在原始帖子中引用的Inclation的验收,这是 - 拆卸窗口显示指令str r0,[r1,#0x00],其中r0 = 0x00012640和r1 = 0x50004000。但内存位置0x50004000不会从0变化。
是否有任何铭文保护,或者这将阻止16位或32位写入该内存位置?
拉里
查看数据表的图10,似乎Timer1位于不同的域中,而不是定时器0和2.在鞍柱示例中可以在Timer1关闭时是否有可能?如果是这样,在该示例中将打开它的地方以及如何打开它?
谢谢,
拉里
得到它,需要清除pmu_ctrl_reg中的tim_sleep位
拉里