你好,
我正在使用PRO开发板和DA14531MOD子板修改骨架示例。
我试图附上一个屏幕截图的问题,但不能弄清楚如何。我正在尝试使用SetWord32(TIMER1_CTRL_REG,value)写入TIMER1_CTRL_REG,其中value = 0x126400。Disassembly窗口显示指令STR r0,[r1,#0x00] where r0 = 0x00012640 abd r1 = 0x50004000。但是内存位置0x50004000不会从0开始改变。
当我运行此命令时,内存位置0x50004000保持为0,并且在启用时计时器不运行。我还尝试了value = 0x1A640,选择系统时钟。
如果你能告诉我为什么登记簿没有更改,我将不胜感激。
谢谢,
拉里
设备:
你好拉里,
您似乎试图将32位写入一个16位宽的寄存器(有关详细信息,请参见数据表342)。试着用SetWord16 ()相反,o)
直接写入DA14531的寄存器很少是实现任何目标的最佳方法。请查看SDK的peripheral_examples文件夹中演示计时器使用的例子。
你也可以看看如何做使用app_easy_timer(强调EASY) -检查“开始使用SDK6”教程的第9节:http://lpccs-docs.dialog-semiconductor.com/Tutorial_SDK6/index.html
/ MHv
然而,感谢您的响应,寄存器是17位,FW在sdk_driver:timer1.c使用SetWord32。我也尝试过只写低16位,结果是一样的。
以下是timer1.c中正确的内容,供您参考。
无效timer1_count_config(timer1_count_options_t *count_options, timer1_count_handler_t callback)
{
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、临时);
/*注册提供的回调。*/
timer1_count_register_callback(回调);
}
我不能使用简单的计时器,我需要分辨率比10毫秒高得多的分辨率。
peripheral_examples文件夹没有显示如何使用timer1,据我所知只有timer 0和2。
出于许多原因,我更喜欢直接写入寄存器,我确实参考了您提供的sdk_driver代码,它直接写入寄存器。
问题归结为我在我的原始帖子中引用的指令是——反汇编窗口显示指令STR r0,[r1,#0x00],其中r0 = 0x00012640和r1 = 0x50004000。但是内存位置0x50004000不会从0开始改变。
有任何内存保护或这样的,将防止16位或32位写入内存位置?
拉里
查看数据表的图10,Timer1似乎与计时器0和2处于不同的域中。在这个简单的例子中,Timer1是否有可能断电?如果是,在那个例子中我在哪里以及如何打开它?
谢谢,
拉里
得到了它,需要清除PMU_CTRL_REG中的TIM_SLEEP位
拉里