omapl138中 dsp端time_create问题 定时时间不准确 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 6893|回复: 1
打印 上一主题 下一主题

[未解决] omapl138中 dsp端time_create问题 定时时间不准确

[复制链接]

4

主题

9

帖子

56

积分

注册会员

Rank: 2

积分
56
跳转到指定楼层
楼主
发表于 2017-4-7 16:58:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
[color=inherit !important] 我们这边用的你们的开发板,测试双核功能,目前遇到的问题是:& W: [. E" v* z( K0 W
[color=inherit !important]1.ARM端Linux 系统正常进入到文件系统中+ }, G/ f* {1 B
[color=inherit !important]* u; D  }5 O, E' D5 b5 r

7 j* l; [* r' \. M$ r! x[color=inherit !important]2.DSP端运行基于sysbios的工程,在工程中通过如下设置定时器2
( v6 S, Z" M- f3 \; A: }[color=inherit !important]
( ]% K. H2 G' Z/ L

8 p: i" c" O1 Q( OtimerParams.period = 500;
3 h+ u( x% R! [: KtimerParams.periodType = Timer_PeriodType_MICROSECS;

7 j; C+ X! y7 g% bTimer_create(2, Timer2Proc, &timerParams, &eb);
+ t8 D- \# l4 a$ P/ |4 z: k$ T* ]/ j* M0 R7 _
1 D9 _: t" v, m" t
3.然后在定时器Timer2Proc()中断函数中进行翻转GPIO的操作,然后用示波器去看GPIO的波形,发现产生的波形周期为960us(正常应该是1000us);: ?7 P$ I& N: D; B
产生了定时器定时周期和我预设的周期值不一样。附件是我dsp.cfg文件(只能上传一部分)。请教一下这个问题是什么原因导致的,如何解决,谢谢。6 k9 [, S' m6 I1 A

# B: l/ t/ F. @
6 c9 O$ s$ w1 W5 B: s
5 R% x7 j4 S5 l
/*
. Q; ^8 p/ s1 j *  ======== Dsp.cfg ========2 }! w5 E( _0 o9 s6 X; ^
*9 n( b- g$ ~1 g" W
*/" [0 _, N# S; c4 R
& c* ^+ y) n. b2 i' k* c, e* A

0 K( h% G# _: }! x7 E, Q/* root of the configuration object model */9 }, H! s' J8 c1 g* i# F7 }- Z
var Program = xdc.useModule('xdc.cfg.Program');" f6 j0 r( ^0 B
" F/ _/ `" }5 k' d; A  m6 I

9 L" i0 ?9 P  W3 E4 @1 u" V/* application uses the following modules and packages */
( O  i9 ~9 p5 R* z4 m4 Ixdc.useModule('xdc.runtime.Assert');
( i! S# L, F' }  j- `xdc.useModule('xdc.runtime.Diags');
% h$ I4 G3 c; E% x; N( A" Vxdc.useModule('xdc.runtime.Error');
8 X6 N& j3 T% d3 lxdc.useModule('xdc.runtime.Log');
; t; C$ H" b1 Fxdc.useModule('xdc.runtime.Registry');
9 a4 |& T; X. B# a
: ~2 @5 J  v# k/ a/ ~) T3 u
& d- Q! J/ z! h* ?" S
xdc.useModule('ti.sysbios.gates.GateHwi');2 a7 S. ~8 r  k2 u$ Q4 w
xdc.useModule('ti.sysbios.knl.Semaphore');$ F( v& O0 L0 J
xdc.useModule('ti.sysbios.knl.Task');  S7 A0 t. |' ~

/ b/ K# w  Z& K& ]6 R2 {& g+ y
+ D9 c# r, S& r8 k; n3 `6 j
) p/ h  i* ~2 B/ Q( D2 B& \7 O9 U
1 I5 M; @! s0 ]1 r- i& T7 l4 _6 D

; I0 X; o8 R, H! S0 f! U* t) Z7 G! B' s+ i
9 R% Z4 w. I& b5 b1 R" g
var BIOS = xdc.useModule('ti.sysbios.BIOS');
+ h8 q. y4 F( l- wBIOS.libType = BIOS.LibType_NonInstrumented;1 J5 ]8 H9 c7 u$ e
- |2 k) ]' ?3 Y1 N- A" I  c
* h0 R+ S$ N' r7 ?& @. x8 R4 ?

5 X# ?3 U8 X  Z& N3 Qxdc.useModule('ti.syslink.ipc.rtos.Syslink');9 N; g  C9 n7 m; b

! t9 u* S( X0 G5 `. k" C

+ `6 [9 S& [5 s% e: M) k* n$ G1 L! M3 R0 O+ O( H  s7 F6 m7 H
var MultiProc = xdc.useModule('ti.sdo.utils.MultiProc');
9 f* t9 A+ L% ]! w3 {var procNameAry = MultiProc.getDeviceProcNames();
9 H2 f, F% H# O* b- L$ t# VMultiProc.setConfig("DSP", procNameAry);
( e) L9 s$ m0 e$ `: n! F/ O6 u9 _: E7 f/ v6 _5 m7 c+ w9 b
& w% b$ f/ l7 E

$ c4 l0 F3 n/ J+ U  I% Vvar Ipc = xdc.useModule('ti.sdo.ipc.Ipc');0 ^2 o- A# f0 r( v2 `! M
& h, x9 h* H* x8 g5 O" I( \/ [! B

/ C- z/ ~) H4 ^) n9 C0 r4 O6 ?+ H: O
Ipc.sr0MemorySetup = false;; p1 [. O6 H2 U! ?9 M

. ~+ o" x. n) D" u

. A: ?1 X* ^" E  V! ^) y8 Z5 l$ l
' G; c, Y: J/ t+ t  O  _, e, z( B' OIpc.procSync = Ipc.ProcSync_PAIR;9 O9 [7 K4 {0 {; L( r( q  N% `

+ q$ j1 R6 B/ U8 Y* q. N

& }: t8 I" L0 [6 I5 p# I' u/* define host processor *// M8 s& x# j  ]2 u2 k- T
Ipc.hostProcId = MultiProc.getIdMeta("HOST");
7 @1 m6 p, p6 [7 t$ G/ }2 Q7 W& h! F" U
! l1 {9 z! U9 P
/* shared region configuration */4 x! e8 }. w$ m& ~: j, C
var SharedRegion = xdc.useModule('ti.sdo.ipc.SharedRegion');; _8 n1 G+ L; o9 K9 @
5 t, K7 a; V/ E% a: m
* G2 \8 h! _! _' V
/* configure SharedRegion #0 (IPC) */# Q6 n$ I4 D9 y7 p" U  ^
var SR0Mem = Program.cpu.memoryMap["SR_0"];9 c3 m) r! S0 y8 l- F
. c7 F7 G; w& `4 i. X! e6 o' g
( O& k" r- n; }) U1 Q; j+ p
SharedRegion.setEntryMeta(0,
4 S& v% U+ k# g0 H    new SharedRegion.Entry({3 D3 O) q3 ~0 h5 L5 N, m
        name:           "SR0",4 a- ?4 _8 N6 c0 s$ p: G  I
        base:           SR0Mem.base,  B0 _9 y: ?4 m1 `
        len:            SR0Mem.len,
4 {& Z: g' X+ G+ I        ownerProcId:    MultiProc.getIdMeta("HOST"),
# n1 s; D9 S( h* X2 t$ X7 U        cacheEnable:    false,. Z' y" z# f% F6 g
        isValid:        true
# H7 w3 ^. B: b3 I* o    }); E: [& M1 ^' D. i. K& V
);
! |. N$ t; w; \( ~/ J% K( Z4 v* k
9 M3 h6 M. P2 `  n6 T5 _8 ^  T, s
5 d* e1 S. F8 J# H

) P; j9 e& x, @7 `$ M0 T- a1 F
* u! b% b) u/ B4 u; S7 `: ?
! }* _: J' j& G6 t1 A* b
Cache = xdc.useModule('ti.sysbios.family.c64p.Cache');* ]! \4 ]' E6 a4 n$ \; R" E& T7 U
Cache.MAR192_223   = 0x00000008;  /* xxxx xxxx xxxx xxxx xxxx xxxx xxxx 10xx */( N- t3 k$ R! q* P* q0 G

, ]! m( g3 i- ^; }
* w5 t; x( v2 `3 v! t4 M
1 T- G( W. R  C6 i7 {5 ^3 q, F8 P

, A" x. L8 a8 I1 R' a* N* j  w/*, d2 f/ |# x' ?: U
*  ======== Operating System Configuration ========& v7 K3 q/ g5 z2 N. V
*/  h' z9 o# Q) P/ J* P( r1 o3 \

  S& a7 Y: i9 J9 o# F& o

2 Y9 p  m. |5 g/* no rts heap */
) X3 G: P7 b# z6 }$ OProgram.heap = 0;: T: f" t  [; @% n- i6 t
Program.argSize = 100;  /* minimum size */" z5 j5 }- N- Y$ F
Program.stack = 0x1000;, [0 F$ S  S, z

/ K1 T7 l9 N# i" M2 |
7 A5 r+ r8 v! R$ G
/* create a default heap */
2 k& O; K: }: w$ G& Y1 R$ V% G; Vvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');1 c4 B  D% D$ V4 @3 r
var heapMemParams = new HeapMem.Params();" o5 H: Q3 G! j- m$ B& F1 p" b# a( R) H! ]
heapMemParams.size = 0x4000;
! ^8 ], y4 Y6 t8 y* U. a; E
5 |+ Y. e' @. }
  a0 R6 D; f. j
var Memory = xdc.useModule('xdc.runtime.Memory');& m8 ?5 ?9 E: @0 U* {6 ]8 S
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
' c2 |/ Z& i/ C8 D
3 g) y+ o- D( _6 Q5 Q5 z

( H$ d- o4 \" v! u  m/* configure System module */4 V; L% ?5 w& j1 O9 `+ ^
var SysMin = xdc.useModule('xdc.runtime.SysMin');& ^- {! v! q6 o  `5 M/ f4 J! o
SysMin.bufSize = 0x1000;3 b  [4 X( B' i6 L
SysMin.flushAtExit = false;
! E; q, }: n3 z: X
& h5 \% m# `2 A3 }( I

  r/ ^5 Q5 g; a! `  x7 c; m' svar System = xdc.useModule('xdc.runtime.System');
/ ]. m, e" W, k4 R1 ~System.SupportProxy = SysMin;9 R' i8 A# k+ g* ~
. l7 z+ G$ w; L  W$ e8 J
# D# q% h( f8 C! `) ~: {% g
/* configure SysBios to use the lower half of Timer 1 */+ J0 V5 T6 d# R
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');5 m( J/ F& C7 q. D# M" Q
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
  B' k+ w% [7 V6 S" n8 ]Timer.timerSettings[1].master = true;4 ^8 |: r) a, t# k
Timer.defaultHalf = Timer.Half_LOWER;3 }" L: S  r; P9 ?9 D+ w' V
Clock.timerId = 1;/ C8 h, b1 M4 k) A' ^. u4 v; P
$ x- ]1 E% G$ V" k
2 ?, b) d3 m7 }: Z2 u* r* E

8 ~$ T* _  A  @6 I1 ^( m% w& I1 `- J+ x2 {% i; f
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

3

主题

852

帖子

3538

积分

创龙

Rank: 8Rank: 8

积分
3538
沙发
发表于 2017-4-10 12:01:20 | 只看该作者
ARM 端将定时器2/3 输入时钟配置为 156MHz 需要修改 DSP 端 CFG 文件配置
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2025-8-3 03:00 , Processed in 0.040233 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

快速回复 返回顶部 返回列表