请教香主一个SysTick的问题

asterli   2008-12-17 16:06 楼主
香主,请教一个SysTick例程的问题:
/* SysTick end of count event each 1ms with input clock equal to 9MHz (HCLK/8, default) */
  SysTick_SetReload(9000);

void SysTickHandler(void)
{
  TimingDelay_Decrement();
}

也就是1ms计数一次,1ms进入一次中断? 
我现在不想频繁进入中断,打算计数到20ms后进入一次中断,然后处理一些事务,应该怎么修改呢?  Reload数值改成450?

回复评论 (5)

自己试验一下应该很简单的

                                  
点赞  2008-12-17 16:28

只是想确认一下这个疑问

我只想确认一下是不是Reload改了之后进入中断的时间就是这个Reload。

比如:9000 是代表1ms进入一次SysTick中断,那么如果我改成180000 ,那应该是20ms进入一次SysTick中断,是不是呢?
点赞  2008-12-17 16:39

SysTick,俺也有点迷糊

好像技术参考手册中没讲“SysTick”这个东东
Cortex-M3上讲了点点...
还不太清楚,有待试验...
香版主可否说说?
点赞  2008-12-18 09:37

SysTick

:SysTick 是一
个 24 位的倒计数定时器,当计到 0 时,将从 RELOAD 寄存器中自动重装载定时初值。只要
不把它在 SysTick 控制及状态寄存器中的使能位清除,就永不停息  SysTick 定时器还可以用作闹钟,作为启动一个特定任务的时间依据。例如,如果需要
在 300 周期后执行一段代码,就可以在 SysTick 异常服务例程中设置执行那段代码的软件标
志。使用 SysTick 时,清零 CURRENT再编程 RELOAD 寄存器,以使它在 300 周期后产生异常,
如下述代码所演示: 
 
LDR   r0,  =15      
LDR   r1,  =SysTickAlarm  ; SysTick异常服务例程为SetupExcpHanler 
BL   SetupExcpHandler  ; 调用前面章节讲到的子程来建立向量 
LDR   R0,  =0xE000E010  ; SysTick寄存器组的基地址 
MOV   R1,   #0     ; 编程前先除能SysTick 
STR   R1,   [R0] 
STR   R1,   [R0,#0x8]   ; 清零CURRENT 
LDR   R1,   =(300-12)   ; 设置装载值。减去12是为了补偿中延迟  
STR   R1,  [R0,#0x4]  ; 写入RELOAD 
LDR    R4,   =SysTickFired   ; 在RAM中的一个变量,指示是计时到期 
MOV   R5,   #0     ; 初始为0 
STR   R5,   [R4] 
MOV   R1,   #0x7    ; 使用FCLK,使能SysTick,使能SysTick异常 
STR   R1,   [R0]    ; 启动计时 
LDR   R4,   =SysTickFired 
WaitLoop 
LDR   R5,   [R4]    ; 循环查询软件标志 
点赞  2008-12-18 10:38

3L,正确!

                                  
点赞  2008-12-18 23:19
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复