跪求高手指教(2812定时器0) - 一起学2812专区- likyo的专栏- DSP交流 ...
金钱
54
技术分
0
{zh1}登录
2010-2-27
likyo 你好,书上关于DSP2812定时器CPUTIMO,我感觉说的很模糊,你能详细点给我说明下啊,尤其是CpuTimer0Regs.PRD.,CpuTimer0Regs.TPR.all ,CpuTimer0Regs.TPR.all 这几个寄存器能详细说明点吗,针对以下指令你能告诉我定时器的定时时间与CpuTimer0Regs.PRD.all = 0x249;CpuTimer0Regs.TPR.all = 0xFFFF;CpuTimer0Regs.TPR.all = 0;有说明关系吗?他们之间应该怎么换算
0 i. n. H/ Q' D/ b: c
$ g% D9 ~. k7 k8 ~
指令:
9 g0 Z) I1 p! X! W& R5 u
CpuTimer0Regs.PRD.all = 0x249;//周期寄存器
2 Z# Q$ r0 C( m& Q* m6 W5 M% {
6 C: H; L& D' n1 E! @& J9 @" }! q/ x
CpuTimer0Regs.TPR.all = 0xFFFF;//预定标寄存器
0 D1 l" ]) Z/ y% oDSP交流网 DSP学习{dy}论坛 DSP技术应用与推广平台 DSP开发服务平台
CpuTimer0Regs.TPR.all = 0;
金钱
9631
技术分
683
{zh1}登录
2010-2-27
楼主的问题解说起来确实不容易,呵呵,首先,我想楼主的程序是不是有问题的。
* C3 B; Z$ j/ y+ a$ z. a# i) H) BDSP交流网 DSP学习{dy}论坛 DSP技术应用与推广平台 DSP开发服务平台
CpuTimer0Regs.TPR.all = 0xFFFF;//预定标寄存器
; b; b i( K% y( @7 M* C' k9 t
CpuTimer0Regs.TPR.all = 0;
# T& s% t; W! m" m
这两句话其实是给一样的寄存器来赋值的,因为CPU定时器0的预定标计数器的寄存器是由两个构成的,一个是TPRH,一个是TPR,所以上述的两个语句中是否有一个是TPRH。好,抛开这个问题不谈,我们来简单谈一下CPU定时器0各个寄存器之间的关系。
( v2 l3 [3 G" r5 @9 ^
1 Z# D! a, N+ V+ x! n4 a0 Z
CPU定时器有寄存器:计数器寄存器TIMH:TIM,周期寄存器PRDH:PRD,控制寄存器TCR,预定标计数器TPRH:TPR。这里,AH:A的形式表示是一个32位的寄存器是由两个16位的寄存器构成的,AH是高16位,A是低16位。
: o( D% m% w& S6 j: [/ {
x0 M1 A a Y. E4 Q% M
CPU定时器计数方式是复位时,计数器寄存器TIMH:TIM内装载周期寄存器PRDH:PRD的值,经历一个计数器时钟时,TIMH:TIM内的值就减1,一直减到0,这时产生定时器周期中断事件,并重新装载PRDH:PRD的值,开始计数。这里就讲到了,计数器寄存器在一个计数器时钟时减1,那么计数器时钟是多少呢?或者说是每隔多少时间,定时器的计数器才会减1呢?这个就由预定标寄存器TPRH:TPR来决定了。
7 d$ r Q( d5 V2 o! w
' Q3 d( g0 b9 p s- i0 _
先来了解一下预定标寄存器的结构了,TPRH和TPR这两个寄存器都由两部分构成,高8位为定时器预定标计数器PSC,低8位是定时器分频TDDR。也就是说,TPRH是由PSCH和TDDRH构成,而TPR是由PSC和TDDR构成的。这个工作的原理其实和前面的定时器计数类似的,复位时,PSCH:PSC重新装载TDDRH:TDDR的值,然后经历一个CPU时钟时,PSCH:PSC就减1,PSCH:PSC的值减为0时,重新装载TDDRH:TDDR的值,并且产生一个计数器时钟,TIMH:TIM的值减1。
% i Q+ o' I% o* o+ Q' ~
# ^( q8 B o) D+ [
上面的解释不知楼主能明白没?
金钱
54
技术分
0
{zh1}登录
2010-2-27
回复
likyo
7 A& i0 ?3 q5 E. @& e3 m
' h5 V# b4 h$ _: I
DSP交流网 DSP学习{dy}论坛 DSP技术应用与推广平台 DSP开发服务平台 1 m! V4 }4 g" r
谢谢版主的解答,以上问题我以弄懂,但还是有疑问,我看书上介绍没有写到,如果CpuTimer0Regs.TPR.all = 0,CpuTimer0Regs.TPR.all = 0;怎么办,还能减1吗,我想是不能的,你在用定时器时,经常能看到InitCpuTimers();和ConfigCpuTimer(&CpuTimer0, 150, 1000000);同时出现,而InitCpuTimers();函数的内容为void InitCpuTimers(void)
0 t2 `, ^$ H% ?% @5 W, X
{
$ ]/ J& J4 [7 L9 S. y
// CPU Timer 0
. ~$ Z8 P9 W/ n. p7 P8 J
// Initialize address pointers to respective timer registers:
www.hellodsp.com7 {3 C+ X G2 ~2 P
CpuTimer0.RegsAddr = &CpuTimer0Regs
;
9 G- L0 \0 y9 o( ~DSP交流网 DSP学习{dy}论坛 DSP技术应用与推广平台 DSP开发服务平台
// Initialize timer period to maximum:
, _# s: R3 r" o3 m4 g: _# s
CpuTimer0Regs.PRD.all = 0xFFFFFFFF
;
0 X: A& S; ?' q {: ^6 qDSP交流网 DSP学习{dy}论坛 DSP技术应用与推广平台 DSP开发服务平台
// Initialize pre-scale counter to divide by 1 (SYSCLKOUT):
www.hellodsp.com. G6 s5 Z( o" [" `# _4 ~
CpuTimer0Regs.TPR.all = 0;
0 e* \ w5 p% U* P* i' I
CpuTimer0Regs.TPRH.all = 0;
// Make sure timer is stopped:
$ @3 [8 U1 r6 I" w6 W, M8 @! ~
CpuTimer0Regs.TCR.bit.TSS = 1;
8 s8 O' s; G/ n
// Reload all counter register with period value:
# ?" w/ m$ f5 s; R. n3 I7 _$ K4 pwww.hellodsp.com
CpuTimer0Regs.TCR.bit.TRB = 1;
// Reset interrupt counters:
( a U0 |, t$ F/ ~
CpuTimer0.InterruptCount = 0;
' W& z6 }- L$ b& [$ r# ?
其中 CpuTimer0Regs.TPR.all = 0;
4 x* N E g% f+ O; J9 cwww.hellodsp.com
CpuTimer0Regs.TPRH.all = 0; 这两两条语句有用吗,还有CpuTimer0Regs.PRD.all = 0xFFFFFFFF;写成CpuTimer0Regs.PRD.all = 0x00000000;不行吗,还有这个ConfigCpuTimer(&CpuTimer0, 150, 1000000);函数,内容为:oid ConfigCpuTimer(struct CPUTIMER_VARS *Timer, float Freq, float Period)
" R# h5 S7 ^" M
{
DSP交流网 DSP学习{dy}论坛 DSP技术应用与推广平台 DSP开发服务平台 ) C0 K" m5 T/ z8 W& c6 B$ d' w! P
Uint32 temp;
$ z4 R7 ?$ e/ g% p. {# p
www.hellodsp.com u$ x7 f) G$ u P$ D, M
// Initialize timer period:
DSP交流网 DSP学习{dy}论坛 DSP技术应用与推广平台 DSP开发服务平台 : a0 z- x9 b5 P
Timer->CPUFreqInMHz = Freq;
$ J6 f6 h; [5 k* |% O
Timer->PeriodInUSec = Period;
4 I) I; r& c& Q8 O; A( w/ y7 K
temp = (long) (Freq * Period);
0 f( R" g" b% q# n1 hwww.hellodsp.com
Timer->RegsAddr->PRD.all = temp;
3 H1 {7 \3 M; C6 C7 S- i
# @6 z- ?0 j! `7 y: q. {6 p0 H
// Set pre-scale counter to divide by 1 (SYSCLKOUT):
+ T- f, h. j; [; K# t# M! k4 T
Timer->RegsAddr->TPR.all = 0;
5 G; n( _4 G+ e" J; f
Timer->RegsAddr->TPRH.all = 0;
& L) o9 ^; B4 o* D3 ?www.hellodsp.com
www.hellodsp.com0 s' N+ u5 Q0 K6 K0 L
// Initialize timer control register:
* l# G! m7 q2 z5 h( Y
Timer->RegsAddr->TCR.bit.TSS = 1; // 1 = Stop timer, 0 = Start/Restart Timer
& M3 y7 ?" ?5 I4 `+ N
Timer->RegsAddr->TCR.bit.TRB = 1; // 1 = reload timer
0 i! h \1 F5 M' c* w+ C1 w
Timer->RegsAddr->TCR.bit.SOFT = 1;
DSP交流网 DSP学习{dy}论坛 DSP技术应用与推广平台 DSP开发服务平台 ! \6 @) h$ v7 Y1 [
Timer->RegsAddr->TCR.bit.FREE = 1; // Timer Free Run
% ?1 N6 v5 t8 o$ \) t7 i
Timer->RegsAddr->TCR.bit.TIE = 1; // 0 = Disable/ 1 = Enable Timer Interrupt
. s! r/ e, d; c/ z/ ?: s
! {; z' g: {% ^& G% k
// Reset interrupt counter:
3 K2 W+ O7 V. g4 T/ h
Timer->InterruptCount = 0;
www.hellodsp.com; k. U9 |: F5 s1 O* n
},你看这两个函数是否涉及重复定义啊
郑重声明:资讯 【跪求高手指教(2812定时器0) - 一起学2812专区- likyo的专栏- DSP交流 ...】由 发布,版权归原作者及其所在单位,其原创性以及文中陈述文字和内容未经(企业库qiyeku.com)证实,请读者仅作参考,并请自行核实相关内容。若本文有侵犯到您的版权, 请你提供相关证明及申请并与我们联系(qiyeku # qq.com)或【
在线投诉
】,我们审核后将会尽快处理。
——
相关资讯
——
缠绕式垫片哪家好
2018/2/14
合肥回收VISHAY威世不整盘电容电阻ic
2022/9/19
番禺南村去哪里割包皮好
2015/11/26
新会治早泄
2015/11/5
xx早泄的正规医院
2016/3/15
hr人事管理软件(厦华,银鹭,ABB) - 银行信息- Georgias - 和讯博客
2010/1/19
引用屏风--国画- 寻梦人的日志- 网易博客
2010/4/28
生吃花生的营养价值每天吃10颗花生轻松瘦10斤_求生存再谋发展的空间_ ...
2010/5/1
飘柔柔亮顺直免洗润发乳护发素50ml 清仓价_护肤美容_爱肤网
2010/5/4
牛嘴说大盘.牛股早知道(2010年5月31日)_股城一牛_新浪博客
2010/6/2
【运动xx{zj0}时间】-xxxxxx:运动xx{zj0}时间
2013/3/1
[转载]论练法_东阳龙_新浪博客
2010/5/29
付亮» 联通五一资费调整宣传败笔明显
2010/5/12
专家揭密木门行业五大黑幕- sy_rzb的日志- 网易博客
2010/4/22