嵌入式开发者社区

标题: omapl138中 dsp端time_create问题 定时时间不准确 [打印本页]

作者: piliyouke    时间: 2017-4-7 16:58
标题: omapl138中 dsp端time_create问题 定时时间不准确
[color=inherit !important] 我们这边用的你们的开发板,测试双核功能,目前遇到的问题是:
6 [, p. @! ~6 h' u- i: f/ x[color=inherit !important]1.ARM端Linux 系统正常进入到文件系统中
( J; Y  a" T+ S( R% `: F3 `[color=inherit !important]
- [' Q7 [9 [( X) {: l( h
" m4 F2 q) M" _6 u; r( M. E" Y5 S
[color=inherit !important]2.DSP端运行基于sysbios的工程,在工程中通过如下设置定时器2
8 y" h) E. N# |4 V5 C2 U[color=inherit !important]
) x" m- h; K& y# o# D6 j

+ V) v' S% j2 s6 `! p/ OtimerParams.period = 500;
+ z( N7 ^% U: p& S, wtimerParams.periodType = Timer_PeriodType_MICROSECS;

9 N1 p! v+ z' P' BTimer_create(2, Timer2Proc, &timerParams, &eb);
+ N% {) t! d( b& m
" n0 ^5 f! m6 A4 \/ T, d* q
& E5 ]* A4 _+ a7 Z" Q
3.然后在定时器Timer2Proc()中断函数中进行翻转GPIO的操作,然后用示波器去看GPIO的波形,发现产生的波形周期为960us(正常应该是1000us);) i# e9 _  B5 O8 o
产生了定时器定时周期和我预设的周期值不一样。附件是我dsp.cfg文件(只能上传一部分)。请教一下这个问题是什么原因导致的,如何解决,谢谢。$ k4 n. d+ h1 L/ Y

' m2 p. K2 F8 H

$ K0 K5 Z4 F' h0 w! i+ F3 m" |
# k! W0 w, v% r, Q* |/*
3 x' c5 {# Y! p5 [# P *  ======== Dsp.cfg ========" M$ Z7 o( O) c, f  I2 l
*
  [! j  @1 X( a- T6 W# _" G0 \ */0 P% P0 w* [8 H  o# _" |' M

" |7 v: C7 q' S3 }" P
' g1 e5 Z" A$ i- g8 B
/* root of the configuration object model */! @2 |$ [# l! t3 `. \
var Program = xdc.useModule('xdc.cfg.Program');! \1 l0 ^% A, k9 V5 F* d0 w9 u6 U

- n  P1 g8 \- o: E& U; v, x
4 E! @2 Y! Q; A! i, W7 \. L
/* application uses the following modules and packages */8 p' i( y/ f. `" D& {
xdc.useModule('xdc.runtime.Assert');
: U* i# e& ?1 n& p! C. F& Bxdc.useModule('xdc.runtime.Diags');
. d$ Q  {0 J1 V* Gxdc.useModule('xdc.runtime.Error');
% K: ~$ A: [. N4 }& Pxdc.useModule('xdc.runtime.Log');
. L5 w. G8 }6 h0 a8 pxdc.useModule('xdc.runtime.Registry');
& V$ v. O! B8 d* m/ X8 K/ T
# ^5 X4 o7 t/ A) a' v

; U5 v4 b$ k3 u+ Gxdc.useModule('ti.sysbios.gates.GateHwi');4 E. A" j/ v- D( _4 `
xdc.useModule('ti.sysbios.knl.Semaphore');
, ~) J9 ]! c% h+ E6 S0 C1 w, Lxdc.useModule('ti.sysbios.knl.Task');0 G0 e: Z6 V6 ^. U

% U: W( n) I3 a8 A0 {  q
# l$ ]& v0 ~! L- @" c' f
7 t6 l+ \( ?& k' n
6 y1 R7 E1 e8 s8 L; D

" Z* Z, W7 U& y# q; u; q. z3 @) _

* ?& D( G, }) G0 X( Mvar BIOS = xdc.useModule('ti.sysbios.BIOS');5 v7 Z6 ^% z" T4 g- [# {0 K
BIOS.libType = BIOS.LibType_NonInstrumented;/ h4 X  M9 ]- y5 d: z: U( i

' ^3 f" C. O- z: W+ M. H6 C5 u

) A& k/ W( B% d, F3 ~/ |9 w7 n+ n" P) X. d! z) T; {8 X
xdc.useModule('ti.syslink.ipc.rtos.Syslink');
. J. v2 \  Y( L$ C6 h8 e; t8 _0 F4 y6 l# @

+ P, ^4 S4 p; T# y2 T- a1 y8 t
: f% _7 _0 `7 s; u& b0 bvar MultiProc = xdc.useModule('ti.sdo.utils.MultiProc');
7 r- D4 N  ~; Q: zvar procNameAry = MultiProc.getDeviceProcNames();! X5 u' r" y6 \2 ]& z+ s4 I: o
MultiProc.setConfig("DSP", procNameAry);5 U% a- d0 T$ l# k  A6 i6 g2 h
0 y+ Z  O$ s) p. H
9 F3 {$ M6 U, {- v% f7 Q8 l! b, B
* i' _7 c. r4 t4 Q
var Ipc = xdc.useModule('ti.sdo.ipc.Ipc');
6 t9 b: m- w" ?# v+ Z
9 {1 Q' Y4 O5 L& h

; Y8 C( G  v" ^4 f0 q) S5 _
9 I6 Q; _; l7 N5 S+ ^/ KIpc.sr0MemorySetup = false;( s2 x6 P- [0 n3 W2 j7 @/ H5 C: F6 H8 \

+ }1 i' n  e* E# }/ m. \
5 p$ e  ]  j3 T. P7 j# |7 Z8 B

+ s5 U$ Q" k" n) bIpc.procSync = Ipc.ProcSync_PAIR;
  p) i. o. }, N4 z0 M: q9 C/ X% K2 W+ Z- Y) U" }
, H% w. Y& T. E# a- M2 L
/* define host processor */
5 M1 l* L' T( T) f3 k+ }Ipc.hostProcId = MultiProc.getIdMeta("HOST");
" k( @# }0 t; S% H
5 f+ U) m% Q$ I+ R0 m4 U
8 w! h8 Y1 b4 G) p9 T
/* shared region configuration */
2 ], Y4 G* r# l) e2 s: D1 yvar SharedRegion = xdc.useModule('ti.sdo.ipc.SharedRegion');0 K! h- \/ T6 X7 j' p% x
* V+ P# q( S: \' ?( R

2 {2 [4 Q4 U; t/* configure SharedRegion #0 (IPC) */1 J& o' ]- ~$ {+ Q/ k/ `
var SR0Mem = Program.cpu.memoryMap["SR_0"];  F+ `# y7 A2 s4 n5 Y$ U) C

+ U$ d4 V& `$ w, i

3 s8 w3 h. S$ I: l1 YSharedRegion.setEntryMeta(0,: B' H- |7 u& F
    new SharedRegion.Entry({) C3 I6 J1 Z4 q8 k6 |
        name:           "SR0",
2 P0 g! ?$ `) t  s        base:           SR0Mem.base,9 H4 x" }0 P* `; S0 {
        len:            SR0Mem.len,
( V1 j6 M- i9 w  i1 x- C2 ?        ownerProcId:    MultiProc.getIdMeta("HOST"),- r, W" k3 p5 h
        cacheEnable:    false,+ V6 a+ w; d$ ^- U7 g
        isValid:        true" N# l* ~5 n7 `  S0 l" ^6 B
    })8 J1 h) t5 Z- ~4 O! M6 c" l* r3 Q
);/ H8 i1 \& c  [3 o  z# y

) {2 m$ A& w3 |" }3 q6 [
6 L5 c6 _' ^9 _7 `/ r# _8 d$ {

3 K( O- P; n2 g9 ~0 s  v9 ^, F1 G+ u. B8 E8 }" T& W

) T+ n7 x( D, U' g) {$ \Cache = xdc.useModule('ti.sysbios.family.c64p.Cache');$ h- c8 c' S  m. C
Cache.MAR192_223   = 0x00000008;  /* xxxx xxxx xxxx xxxx xxxx xxxx xxxx 10xx */
! B, A  h, b6 R) o. ?) Q; I2 B* K8 o0 i6 }# m6 [1 @; f) u# I
- l' x, J) Q$ S+ Z

- p$ Y# I! p! H0 r

# V2 T0 p( o1 t1 E6 u( |8 N/*7 B5 j" z/ m* R9 m) i1 H6 r4 ]6 u
*  ======== Operating System Configuration ========2 K# o5 M) o  T: o0 l3 T, Z- D
*/1 l7 j. Y7 l' K( T  |7 v5 P# T

# u/ s# o: b0 ]/ b
: p! T0 y; E4 K  H$ Y! N
/* no rts heap */
. }# Y8 z0 o: [$ C% ^Program.heap = 0;+ F) j3 i# T$ }0 u4 g( u
Program.argSize = 100;  /* minimum size */
2 a: v( k% f4 P( w3 bProgram.stack = 0x1000;. `7 B4 Y& K1 f- J

. E3 G% `# d  `& r8 F" P8 {

. t+ e& L6 V8 A2 }7 S, Y/* create a default heap */  |& V0 ~2 w1 `
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');( I2 q+ b& X& }& g2 x
var heapMemParams = new HeapMem.Params();
: T9 u( E3 ^  V: y/ F" _. lheapMemParams.size = 0x4000;
- A* f7 |' ?, ?+ P8 U
* U) n# E1 _* T: i7 T6 \

" O4 F& b6 F. Y2 I4 xvar Memory = xdc.useModule('xdc.runtime.Memory');1 \' D' z& X9 a4 `4 `+ N
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);+ d$ K6 w# s5 g
7 A+ o9 A: m% E

/ @8 k2 ^* w, Z" y$ X8 W5 i. R+ P( R5 g/* configure System module *// Y5 G; {  \. E+ x, o, m) S- w
var SysMin = xdc.useModule('xdc.runtime.SysMin');
* i* Z* e) A+ Z% ?2 ]SysMin.bufSize = 0x1000;
. \7 R, v0 q* D& l9 }SysMin.flushAtExit = false;9 j0 ?$ j9 {+ I4 L

9 v0 [8 o. m- i6 @; o; P7 W
- |. x& S8 c; Z7 x( ?2 p, K$ Y
var System = xdc.useModule('xdc.runtime.System');1 i! G/ Z# c: Q8 e7 m
System.SupportProxy = SysMin;# P$ Y3 p& t+ ~" ^* p5 n7 E

4 x( L3 Y+ A, X! Z: B
" c6 ]. j7 z" G3 k8 ]+ {: O
/* configure SysBios to use the lower half of Timer 1 */
) ], l* P( F$ zvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');7 M# ~( N1 |8 u( o( o  p: ~( S, V. s
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
" F! B3 x- x2 r; s9 {6 \. ~Timer.timerSettings[1].master = true;: a+ |7 u+ C- k
Timer.defaultHalf = Timer.Half_LOWER;1 F7 U0 L  c9 a# F8 R: ?
Clock.timerId = 1;
* a: s  O, C. S" |# M) w% O! h2 q* W' _  @4 X! F  P
) l" D9 U: F5 v" o- m% B/ N* ?
" c& ]9 b- D" t1 g

- [. W1 {) ]1 w' N6 Z
作者: human    时间: 2017-4-10 12:01
ARM 端将定时器2/3 输入时钟配置为 156MHz 需要修改 DSP 端 CFG 文件配置




欢迎光临 嵌入式开发者社区 (https://www.51ele.net/) Powered by Discuz! X3.4