嵌入式开发者社区

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

作者: piliyouke    时间: 2017-4-7 16:58
标题: omapl138中 dsp端time_create问题 定时时间不准确
[color=inherit !important] 我们这边用的你们的开发板,测试双核功能,目前遇到的问题是:
) k, k- [+ R8 Z' F& l[color=inherit !important]1.ARM端Linux 系统正常进入到文件系统中
" E1 t( Z0 \' ^/ n& c+ y' Z5 v[color=inherit !important]4 c. }) ]$ X' {2 G* G
, J$ O0 \2 S0 ~$ [' a; f) @3 E
[color=inherit !important]2.DSP端运行基于sysbios的工程,在工程中通过如下设置定时器2
5 [8 |1 Q0 u9 k5 T% l$ Q[color=inherit !important], I9 q7 \  k! }7 U* x9 d% p% m
# t5 G5 N* E# k8 a+ L; Z- C5 K
timerParams.period = 500;
: z$ M! f; {" I! Z% _timerParams.periodType = Timer_PeriodType_MICROSECS;

) P. F1 `2 ]% m" ]2 x& NTimer_create(2, Timer2Proc, &timerParams, &eb);
* r. M5 B( V, W9 l! x! R8 z$ h
; E! x) I! \3 Y% U

; K' E' `- A! `& u3.然后在定时器Timer2Proc()中断函数中进行翻转GPIO的操作,然后用示波器去看GPIO的波形,发现产生的波形周期为960us(正常应该是1000us);
* w* o' P2 S' Z% {: Y产生了定时器定时周期和我预设的周期值不一样。附件是我dsp.cfg文件(只能上传一部分)。请教一下这个问题是什么原因导致的,如何解决,谢谢。7 @0 f. i0 o* J& O+ ?% p9 I- D
, T# e# q: s0 z4 u2 x/ R: f4 |, r

1 O* h' L/ T( {1 o/ P" p$ g5 [/ f: t2 h; U( \* ^6 a# p
/*$ M5 q; e, m! ~9 _) S
*  ======== Dsp.cfg ========
$ g6 d9 ~1 p4 v. t2 U *; u  H) F' ], e0 Q8 k; B
*/5 w0 @0 j" P+ O. w3 N1 }0 ^/ ~

7 A8 Z, l& j3 e8 G! U7 _

7 D; U0 g- W+ K6 M$ Q/* root of the configuration object model */
0 Z) j# Z  K! y5 Y6 Hvar Program = xdc.useModule('xdc.cfg.Program');  m% \& ]! k& w5 Z2 H
5 `2 q( }. p1 c0 K9 e+ V
; E! o/ I/ p# [8 A
/* application uses the following modules and packages */
* P2 H" _5 _7 _: q& Q" Exdc.useModule('xdc.runtime.Assert');
' r9 d, i; P! @/ p8 fxdc.useModule('xdc.runtime.Diags');
' ?. i; B. N* O3 w9 Lxdc.useModule('xdc.runtime.Error');; M4 z# w! G6 o& n' D/ f" _
xdc.useModule('xdc.runtime.Log');
9 L! m' h) W! E9 Q. y# M$ X' zxdc.useModule('xdc.runtime.Registry');% D3 X3 ]* |! H0 I( D5 W4 a
1 n# ~- `4 ^$ t
- X# z/ j' S' P4 ]
xdc.useModule('ti.sysbios.gates.GateHwi');
0 Q( ]0 x) }0 |6 \xdc.useModule('ti.sysbios.knl.Semaphore');& r0 X$ {. N& ^2 V- t9 F
xdc.useModule('ti.sysbios.knl.Task');
  P$ m. d, l" M& y; D8 u1 {( P/ _: d2 D$ c7 `7 s9 E

) X, V8 e7 h+ R5 V& ], w
2 }2 P# l+ P# p0 K8 [
3 A% ?( \9 L1 [8 a+ Q2 X2 I
2 }6 W0 N# b8 D+ e5 [; m- e8 [$ q" x- O4 s; H( j) n* r; g0 V$ P
5 s4 b) d4 A0 w* o3 i4 }* F
var BIOS = xdc.useModule('ti.sysbios.BIOS');7 C( @9 x' f; E7 E5 ^9 d
BIOS.libType = BIOS.LibType_NonInstrumented;0 @5 n! C3 m; z( v

; {: U, u. D2 q' C' Q3 a: [) z

$ u& k% t( I" [' \# N6 _" C2 o( d5 ^
xdc.useModule('ti.syslink.ipc.rtos.Syslink');
' F* x* s+ B' _& \( D6 p
4 G; ^* G' l  o5 ~, A
: Q5 ?! c: ~& A8 w; E* s5 J$ }) X

$ G/ p/ E1 P- mvar MultiProc = xdc.useModule('ti.sdo.utils.MultiProc');: ~) s8 O3 L) _. m& B( s$ v  a
var procNameAry = MultiProc.getDeviceProcNames();5 N& u/ N0 j2 ?- n3 J) x- a
MultiProc.setConfig("DSP", procNameAry);
- x% L3 v. E9 J' d2 }3 h  M+ R( I- s1 B7 }6 n& M0 l, N
, F) ^$ R  f& ]7 g( y( i; h3 M. X
+ t" a; S- S6 N: T
var Ipc = xdc.useModule('ti.sdo.ipc.Ipc');: s' |! V* p* J; M' R+ `7 \" V4 J& r

8 O, Q$ U, C: o7 N$ T, |

$ H+ D# u% I( u! V4 n" z1 i! f2 a8 {1 W3 `, F8 n% Z/ b
Ipc.sr0MemorySetup = false;
6 g0 `6 B& n7 E- R# k2 P
, j# u. G3 q3 O. a
3 \5 q4 Y: _) l9 _" @- [$ o
. ~7 K, o' d% J" T/ J2 g
Ipc.procSync = Ipc.ProcSync_PAIR;& a' l5 T7 j/ q3 m
' H# L9 r- O4 {# W# X

5 O3 ?5 x- C- W5 y* `  l/* define host processor */
- Z( z/ {) H% rIpc.hostProcId = MultiProc.getIdMeta("HOST");
6 m4 G8 V% R& W6 p2 e. W( ~3 |, v) a: d
1 ^9 S' O7 ?* b5 _* W
/* shared region configuration */$ J( b1 q% G9 p/ F8 A# Z. U
var SharedRegion = xdc.useModule('ti.sdo.ipc.SharedRegion');$ {0 s" Y) h% O3 P/ T

1 g; }  H% \3 a& X# M- w2 }

* N6 l( Q8 D) P( j3 Q& e% V4 D/* configure SharedRegion #0 (IPC) */
/ S. g3 Z1 F3 H5 R5 G( ~- O2 gvar SR0Mem = Program.cpu.memoryMap["SR_0"];: o& h$ v, Q+ @# {
& m- _4 E: Q! H# U

% z  s, o- ?2 \7 F& H9 C* ]3 ?SharedRegion.setEntryMeta(0,
1 d) e/ n+ G9 }& B2 E5 P0 {: f    new SharedRegion.Entry({' h" I7 z& a$ m/ B
        name:           "SR0",
& z" d* h/ U% B. M        base:           SR0Mem.base,# Z1 r! e4 [; Y* P* O1 a
        len:            SR0Mem.len,
9 h) S- y( L  `% c2 @4 i        ownerProcId:    MultiProc.getIdMeta("HOST"),
, [; c; I5 {2 A: Y/ f$ R5 F2 \        cacheEnable:    false,( E3 r2 ]. s* ^# {( R3 T. n
        isValid:        true/ Z" r7 n" e; e" s2 b$ {, L
    })
" N, v7 O" y; T+ l7 v  t# n5 x);6 g4 Q! d/ L% B$ N4 x
8 O8 ]8 X  a7 S. N

9 ~# F0 [7 r5 Q# X" g7 Z
& G1 U7 Q. T( v; T$ D0 F2 H% d" o8 ^2 x  X

& P+ L/ f6 [  k. ]* j' |Cache = xdc.useModule('ti.sysbios.family.c64p.Cache');
) ^* e+ V3 @6 m' R0 o/ LCache.MAR192_223   = 0x00000008;  /* xxxx xxxx xxxx xxxx xxxx xxxx xxxx 10xx */4 w' `7 h7 S$ [
; A/ {% A* |' n% J1 V9 r
3 l, h% d8 u. d" v, K

( O6 \4 Q: M5 B; b4 C
0 {0 r2 a4 k" s7 W& b: s
/*
2 \6 w. R  p, F! x/ N *  ======== Operating System Configuration ========
5 \# `8 B/ a! s! V/ A" C! D2 X */
7 h, s5 ~% ^8 I) Z% W. A/ {4 V# m# ?8 v% G# ^: `; c& k

2 N! N% ^. ~2 f/* no rts heap */# e( [; |( }2 ~. G/ h
Program.heap = 0;
9 m9 K2 R8 b. G* x; S$ fProgram.argSize = 100;  /* minimum size */
8 w( m6 N( Y  e: RProgram.stack = 0x1000;
+ I2 v" [. y4 b& @& ^  P8 v$ o) }; i  y

! n/ e& E- Q, H/* create a default heap */
2 X! n8 p( L) Z; x, q, J5 yvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');, @5 a, Z7 H& Q
var heapMemParams = new HeapMem.Params();! `' Z, E2 n8 W8 L
heapMemParams.size = 0x4000;. v% D4 _* g! n" o

$ \! G3 C8 ~' t- `
* e& V2 K2 j8 p% H/ M# e
var Memory = xdc.useModule('xdc.runtime.Memory');% h5 x/ s* H; Q, l
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
8 k: r2 t+ ]( [$ Q0 V0 p
/ T$ Z  ?4 ]% `6 H

: Y) R$ z' ^% V3 g3 a/* configure System module */
; H6 o8 z. ^8 o. }# D( Lvar SysMin = xdc.useModule('xdc.runtime.SysMin');
0 Q* ?4 z! h8 J1 F$ R/ qSysMin.bufSize = 0x1000;
3 e' Y% D" b2 Z, W& p' f( q9 DSysMin.flushAtExit = false;0 N* e  m2 b* o0 r

& w3 C7 H3 c! M- E1 o

5 r8 Y* D$ g4 [var System = xdc.useModule('xdc.runtime.System');) R) X% ~0 [7 L: n. c1 `) h
System.SupportProxy = SysMin;
6 T! q3 h& g- R; q7 c4 s
1 Q/ V! m6 z  S* y

. O% \$ v: ~4 w4 }: ~/ z( O/* configure SysBios to use the lower half of Timer 1 */
9 ~1 x5 I  x2 C; pvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');' ^0 H! S# c! _( u/ _: X
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
6 A/ G" d  @8 y# mTimer.timerSettings[1].master = true;8 N6 d0 J" T2 u. r. y
Timer.defaultHalf = Timer.Half_LOWER;
( i& r- k2 D0 T" z; ?! tClock.timerId = 1;# K% K/ \  \0 i5 e! C

! x+ S! r, g  c7 |0 D5 {$ w# g7 `- Q# |) X! Z' E
1 Z" s( Z% _. O) `2 j
& K7 F, j# {8 w1 [0 u% R6 e" B

作者: human    时间: 2017-4-10 12:01
ARM 端将定时器2/3 输入时钟配置为 156MHz 需要修改 DSP 端 CFG 文件配置




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