嵌入式开发者社区
标题:
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& N
Timer_create(2, Timer2Proc, &timerParams, &eb);
* r. M5 B( V, W9 l! x! R8 z$ h
; E! x) I! \3 Y% U
; K' E' `- A! `& u
3.然后在定时器
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$ g
5 [/ 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 H
var 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" E
xdc.useModule('xdc.runtime.Assert');
' r9 d, i; P! @/ p8 f
xdc.useModule('xdc.runtime.Diags');
' ?. i; B. N* O3 w9 L
xdc.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' z
xdc.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 u
1 {( 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- m
var 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% r
Ipc.hostProcId = MultiProc.getIdMeta("HOST");
6 m4 G8 V% R& W6 p
2 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 g
var 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/ L
Cache.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$ f
Program.argSize = 100; /* minimum size */
8 w( m6 N( Y e: R
Program.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 y
var 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( L
var SysMin = xdc.useModule('xdc.runtime.SysMin');
0 Q* ?4 z! h8 J1 F$ R/ q
SysMin.bufSize = 0x1000;
3 e' Y% D" b2 Z, W& p' f( q9 D
SysMin.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; p
var 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# m
Timer.timerSettings[1].master = true;
8 N6 d0 J" T2 u. r. y
Timer.defaultHalf = Timer.Half_LOWER;
( i& r- k2 D0 T" z; ?! t
Clock.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