嵌入式开发者社区
标题:
omapl138中 dsp端time_create问题 定时时间不准确
[打印本页]
作者:
piliyouke
时间:
2017-4-7 16:58
标题:
omapl138中 dsp端time_create问题 定时时间不准确
[color=inherit !important]
我们这边用的你们的开发板,测试双核功能,目前遇到的问题是:
/ @* O" f% |) V! v3 g5 s- M
[color=inherit !important]
1.ARM端Linux 系统正常进入到文件系统中
3 Y; t" n& p" V z+ c
[color=inherit !important]
% `7 a, j, o- x, j9 p% R
0 ]! A) g5 o, W9 v0 h
[color=inherit !important]
2.DSP端运行基于sysbios的工程,在工程中通过如下设置定时器2
& E8 H( M3 W0 {& ]0 g. C: P
[color=inherit !important]
$ r7 d$ y- Q: e
( x' o5 d2 {4 H0 c/ i5 Z; X
timerParams.period = 500;
0 ^5 C; }! v$ E" [$ A
timerParams.periodType = Timer_PeriodType_MICROSECS;
4 }/ z* W$ L) |% d# w& @
Timer_create(2, Timer2Proc, &timerParams, &eb);
2 u' t* C& m3 ^! w* \
3 Y0 ]0 O2 G \' o2 D8 p/ T/ Q
9 s" P! Z* t1 d
3.然后在定时器
Timer2Proc()中断函数中进行翻转GPIO的操作,然后用示波器去看GPIO的波形,发现产生的波形周期为960us(正常应该是1000us);
/ u2 N9 [4 S9 c4 z. n! K
产生了定时器定时周期和我预设的周期值不一样。附件是我dsp.cfg文件(只能上传一部分)。请教一下这个问题是什么原因导致的,如何解决,谢谢。
' x, U4 e" S' s+ @
+ k* O- q* y9 L8 o4 b5 |( s( U# \. q0 _
% m+ ]- t5 `! K6 I
8 n* C+ T! L8 m0 Q) d2 {6 C& k
/*
. W! d% L& j i( v! G7 { d, B
* ======== Dsp.cfg ========
" _2 n$ z* p7 \4 r0 ^
*
- m$ m" s$ B0 S% u
*/
6 Q5 D* U' C' A1 v# W, j
@% I" [, Q( ]8 G1 X! ^
! U$ c7 A3 f0 R
/* root of the configuration object model */
2 P' r0 \" x3 _" X9 C
var Program = xdc.useModule('xdc.cfg.Program');
; o' |% {: ]: J7 _3 C
. Z% t( F% Q, q9 [9 k' y8 z
2 P/ L8 l0 J( K3 x, V
/* application uses the following modules and packages */
5 Y+ X" l( k1 i" ], h q
xdc.useModule('xdc.runtime.Assert');
- b7 i( P" [ \9 F2 j
xdc.useModule('xdc.runtime.Diags');
- p6 L! k4 @+ |2 j- C
xdc.useModule('xdc.runtime.Error');
. Q5 m0 E8 K! |" F! P! q( d
xdc.useModule('xdc.runtime.Log');
* V. H" P" m( X$ D, J. N0 V
xdc.useModule('xdc.runtime.Registry');
9 y2 r0 G) C a4 l
1 C( B& d+ @( p+ W9 T
# K: V) d, Y- p& ^- Y
xdc.useModule('ti.sysbios.gates.GateHwi');
/ G' ^# q& o( G" y; Y8 G. b$ o
xdc.useModule('ti.sysbios.knl.Semaphore');
& V& A1 _2 U9 p1 J5 f: X
xdc.useModule('ti.sysbios.knl.Task');
, f: w3 Y0 m8 T* c( ?
* u# o7 W k- m- C% r( O# |6 G( O
U5 M0 x0 X! a9 {0 E5 {* O9 d7 v2 q
; r% o5 N; b* l; _# G- ]
/ a) |+ W1 S e' @% t1 z
2 E! o3 E" H5 N- u" H' H
+ Z9 N& A, L2 V( [
6 n- f$ K/ B5 o* A/ O
var BIOS = xdc.useModule('ti.sysbios.BIOS');
& |0 Z+ @' ^2 D6 i6 g" k" B0 Z4 U' J I0 {
BIOS.libType = BIOS.LibType_NonInstrumented;
7 ^: G9 }- N- O, i; C# V! Q3 h1 W
! [" Z7 t! z4 e5 X$ }
$ w7 W3 T: Q* d: c
1 f8 h! c6 I+ q- Q0 {5 |2 c3 x- V
xdc.useModule('ti.syslink.ipc.rtos.Syslink');
; d8 |: E. ]# D t4 C
0 z( O2 c$ f6 a# k5 `+ C
; N2 ~; }& ?) v8 D
! l1 `+ I8 A6 w4 Z! B# e8 m
var MultiProc = xdc.useModule('ti.sdo.utils.MultiProc');
/ N! l3 h" _: T1 c! @4 m
var procNameAry = MultiProc.getDeviceProcNames();
+ |, ]0 u9 H% m
MultiProc.setConfig("DSP", procNameAry);
5 d& y* h/ L0 ~: N! Y& \
$ W+ R! g1 j+ @5 K" j8 h
2 @0 i' l! G! u" Q3 X: E3 r
+ r( F0 X/ f2 L. T; T/ O
var Ipc = xdc.useModule('ti.sdo.ipc.Ipc');
. I3 i. c: {* a# l
2 ]3 ^5 K) Y* W
8 @" G: T+ A% x, c9 k3 k3 L
; v" b; P0 a/ X! }
Ipc.sr0MemorySetup = false;
6 j) J+ z' \- ]% z$ Z7 b' U* u
" K# P8 K+ n, i' I; L. z
" \: r. K3 g) W2 B* w2 J% [+ z9 j
9 T$ M' @ W4 w5 k2 K2 T8 p2 r
Ipc.procSync = Ipc.ProcSync_PAIR;
% Y5 Y; A1 o9 j- [
2 ]0 ] j" `; a$ V5 S' }
% v0 i- W4 }0 C" t+ ^2 \/ Z+ g0 G
/* define host processor */
4 @9 k. I; ^* A3 O& C: f4 ?5 \
Ipc.hostProcId = MultiProc.getIdMeta("HOST");
0 l) C4 j2 Y) {2 K" L
8 W* d2 i4 Y+ ^
$ S& S" q+ \ j, Q0 B& W+ e
/* shared region configuration */
5 x& t, T2 _& |
var SharedRegion = xdc.useModule('ti.sdo.ipc.SharedRegion');
& ?1 m% ` V3 V0 u3 O: Z
+ D+ h7 I/ y B4 }, O
3 g" n( Y. }8 h# u. i
/* configure SharedRegion #0 (IPC) */
& h4 D& C2 E* R; r7 q% a
var SR0Mem = Program.cpu.memoryMap["SR_0"];
1 ]8 X& X3 u6 }! U$ S
1 c/ x, J g$ t
+ B2 K& b: v* l% n
SharedRegion.setEntryMeta(0,
; ^$ {; `. B! B! f; t7 q% K, n
new SharedRegion.Entry({
% c9 y1 R J2 i
name: "SR0",
( S/ p" y6 O$ {# X1 p9 z
base: SR0Mem.base,
9 `- b$ [" A# T( ^: l/ Q2 D
len: SR0Mem.len,
9 U& \; C: D# q& p" Z
ownerProcId: MultiProc.getIdMeta("HOST"),
3 a7 }( r7 z9 b# C6 _" z" }
cacheEnable: false,
) o, W3 \+ {" ?8 U
isValid: true
' M& I1 C5 C" [' x" ~
})
# t f4 g6 W: B( p
);
1 z9 J$ e" r' b2 [( R! r' `
. N& A: C; J a' G1 k# p, X \
% i P, D9 j5 n7 p7 j; n# o4 _, p
2 _4 e: W+ b9 b. Y7 E9 c" I
2 ]2 r4 ~1 [ p, L
+ w, }8 D; I; s X3 x; ]# y
Cache = xdc.useModule('ti.sysbios.family.c64p.Cache');
K' v% u! \7 ?9 b$ f$ K" Y
Cache.MAR192_223 = 0x00000008; /* xxxx xxxx xxxx xxxx xxxx xxxx xxxx 10xx */
2 |" u6 h; \* i4 H
! g* M# O6 [3 a; ?% P) ?
; f$ P6 V( X' Y& d j
8 `5 J0 U2 e2 l" Z' U
+ t' e* `" O% I0 P
/*
9 C6 H( _* C; `% q/ u
* ======== Operating System Configuration ========
/ W7 x, B Q& I# I
*/
# s# {. H" a0 F# ?, h& g ^" p- D
* g7 [" ~! i& _0 B) B1 Z1 M$ z r- ?
. j: d+ O) ~- Y7 P8 C) R+ X- w
/* no rts heap */
q6 A2 U( u* k* a
Program.heap = 0;
; ~4 q1 I6 l* a4 g
Program.argSize = 100; /* minimum size */
2 _6 E0 f3 I4 E( ]
Program.stack = 0x1000;
: {$ \0 s! @: Y- g
! {2 b( F) [6 w7 U, }- I* C
9 ?: n' l( m; M9 R) q8 y
/* create a default heap */
* E0 e% C5 @- a5 @' \1 b
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
) e* Q* `, q, f/ w% B
var heapMemParams = new HeapMem.Params();
6 F$ ^2 k+ e2 T/ M
heapMemParams.size = 0x4000;
1 I$ ^5 L8 L8 B5 }
b+ }/ D! O3 B$ C
0 ~9 T5 l" m2 f \, l
var Memory = xdc.useModule('xdc.runtime.Memory');
5 l( J' W. e6 c3 W _, C( T' a
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
) L7 M& _; q# J; e
1 ^: T! X7 A. R) n( c1 l" Y
. v1 _/ }7 x% X8 g2 g: R
/* configure System module */
: ~1 O7 k1 y% _+ i& y& k2 M' f
var SysMin = xdc.useModule('xdc.runtime.SysMin');
$ C6 C/ M6 B [
SysMin.bufSize = 0x1000;
! q- [: A7 S2 L. j& R4 ~+ n
SysMin.flushAtExit = false;
9 {' h6 K% k, [, H7 i/ o3 [
2 m' i3 v- h5 F- N/ _7 v" U V
3 [' y; x8 ^* W1 u! O$ J+ a
var System = xdc.useModule('xdc.runtime.System');
9 m. F+ `& z- y6 N& O9 j' M* a
System.SupportProxy = SysMin;
- Y: q# }7 k. f+ y
1 O/ X* W4 j; H& h$ w" T; K$ C
; b* B* g4 ^2 [" u" {+ t: e
/* configure SysBios to use the lower half of Timer 1 */
$ K9 v/ |7 x6 T* o* k
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
3 s5 e4 `; j- A. W/ A0 h( E; c; i- O
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
C' V7 K9 R. @% Q% Q( ~
Timer.timerSettings[1].master = true;
, o2 c8 V5 }6 r0 y; |; B
Timer.defaultHalf = Timer.Half_LOWER;
8 E2 _" D1 H& s- Y6 _% S, D; X
Clock.timerId = 1;
9 K- g0 A& h6 V( x M0 E s: Q8 r
) e7 u9 f1 X, r+ [
- y3 s' K2 w/ A- q/ L" v$ j6 e) S
! {3 O+ i- ~" u* C% ~0 F
* K' R. D: S3 V- Q# }
作者:
human
时间:
2017-4-10 12:01
ARM 端将定时器2/3 输入时钟配置为 156MHz 需要修改 DSP 端 CFG 文件配置
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4