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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 5776|回复: 1

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

[复制链接]

4

主题

9

帖子

56

积分

注册会员

Rank: 2

积分
56
发表于 2017-4-7 16:58:50 | 显示全部楼层 |阅读模式
[color=inherit !important] 我们这边用的你们的开发板,测试双核功能,目前遇到的问题是:
" F4 X" M" V% O, U7 m6 {[color=inherit !important]1.ARM端Linux 系统正常进入到文件系统中+ n+ T  j1 m+ H" {0 l6 R$ E9 U
[color=inherit !important]: u* l$ b2 T3 _* V7 `$ b! b' Y& A
/ d; }. a) o7 J" M( u
[color=inherit !important]2.DSP端运行基于sysbios的工程,在工程中通过如下设置定时器2! c+ V( x2 x3 I
[color=inherit !important]
8 c( C9 p3 ]# E( V9 l# y

- E$ z+ Y4 a+ f$ {( k" {* y3 [timerParams.period = 500;
) \8 w4 M" K: l5 ]9 B  N3 ZtimerParams.periodType = Timer_PeriodType_MICROSECS;

4 _) r+ p* k5 P- C. pTimer_create(2, Timer2Proc, &timerParams, &eb);9 n- @! \  N% D& ]

1 N& Z' Y! n" m- P. ~8 c- U

3 B/ B# w# R0 R4 X/ l3.然后在定时器Timer2Proc()中断函数中进行翻转GPIO的操作,然后用示波器去看GPIO的波形,发现产生的波形周期为960us(正常应该是1000us);: j: y+ M# v' ?4 v1 G5 T9 g) ?
产生了定时器定时周期和我预设的周期值不一样。附件是我dsp.cfg文件(只能上传一部分)。请教一下这个问题是什么原因导致的,如何解决,谢谢。
8 `* L3 }  I$ w6 }+ G! u# m5 [" _9 n% v
  |/ X4 {& l" a8 l  j

0 f2 b: ]7 Z9 \- `7 ]2 r3 D+ D3 y& _% K( v8 g9 G
/*7 u% H; _  \5 A3 @
*  ======== Dsp.cfg ========3 I6 b% ^9 E! O9 x
*
+ A' B9 h7 k7 ~0 ?* {% _, i; C) c */
/ Z: X* b1 f( J( _2 \, \* A% D; s% ?& ^7 l+ B; E; n# k( ]

! q5 R7 J! `: d5 e. g. H1 Q' h/* root of the configuration object model */
7 F) h3 ?9 x% v/ s" m) Zvar Program = xdc.useModule('xdc.cfg.Program');- P- P2 H- A3 X& M( b" W, ~

: d5 d3 r. S* B

& [$ j$ b  \' H% E$ d/* application uses the following modules and packages */
' ]" i3 k+ P; k4 t5 Y  Vxdc.useModule('xdc.runtime.Assert');
  }: [: f9 X1 }; `% rxdc.useModule('xdc.runtime.Diags');- p1 f+ e- e( r9 S8 s$ a$ O9 ^
xdc.useModule('xdc.runtime.Error');
' R. v, I8 w& C  h4 r" ^: ^xdc.useModule('xdc.runtime.Log');1 y7 c4 c/ g) `$ c; {/ y
xdc.useModule('xdc.runtime.Registry');% v5 H( q' E- w- l" Q% O( x
  l* B) [0 g6 Z3 l# X: j

, v+ S1 S$ U! ~9 Wxdc.useModule('ti.sysbios.gates.GateHwi');
; y7 [6 d* j/ n  J7 I; A' zxdc.useModule('ti.sysbios.knl.Semaphore');
/ b3 r! }" C: x" ?0 K7 k" R5 Mxdc.useModule('ti.sysbios.knl.Task');& g* S6 v5 z' @0 F

+ s8 u# |. v8 k5 u9 ~* P8 ?! T( q

9 l+ R& J5 U' r
. n& W3 W6 I' A& W/ I# Y: |1 j' \; l3 f- _3 {5 Z! U6 o
7 w4 ?" M( o" N3 P- O: Z  T4 {
' |+ u# D, ^' P3 u1 S3 V; l

  ]/ a" f/ p/ v7 uvar BIOS = xdc.useModule('ti.sysbios.BIOS');
* A% \1 K' y2 _5 S3 O, g$ F$ ^BIOS.libType = BIOS.LibType_NonInstrumented;* |: t5 e9 Z8 r* A

: n6 d6 K9 _" K" f
. v0 y) M! k; P6 C: j5 t: J! q

; ?6 X9 \3 N8 r! H3 F: Hxdc.useModule('ti.syslink.ipc.rtos.Syslink');' B" h8 v( }' _2 v4 `

5 C6 \4 w3 I, B3 w- s
) `, O' h( k2 `, J" O
4 g3 K: D. A3 H, D+ R. K7 i2 q
var MultiProc = xdc.useModule('ti.sdo.utils.MultiProc');
3 Q& T2 t& y0 Q* S) i+ d+ [var procNameAry = MultiProc.getDeviceProcNames();
% K9 E( ]% g6 W& Y2 T) {MultiProc.setConfig("DSP", procNameAry);+ i. x! S. O2 t4 I: r3 Y
% |" x2 I4 N# y6 F

7 d2 z! N; N( q5 }. [' E: Y
/ I5 r% w* B+ {) evar Ipc = xdc.useModule('ti.sdo.ipc.Ipc');5 G* V3 n" F5 {

  }+ T' e: f* J' L

8 h8 z8 P$ `( i- b1 O
8 x& m% s4 `4 j8 M3 _Ipc.sr0MemorySetup = false;
+ i. s3 Y) Y* ]4 c/ d
4 p. o4 P3 D+ G) Z8 q

8 T" g% R  _' |- f+ _5 N9 I
: `4 w2 W# M1 k' Z* K. PIpc.procSync = Ipc.ProcSync_PAIR;
& q5 ^* V: I* P' F' O5 E3 M8 ^9 n1 L* v5 B% ^' j* x
$ B  |! ]7 ?$ \# n4 a
/* define host processor */  a6 H1 F% a) f  X( Y3 [
Ipc.hostProcId = MultiProc.getIdMeta("HOST");/ Z- B5 n8 [1 r+ m" Q4 w+ b5 v

6 S4 z6 X- B  H$ h; d1 |. q
3 ~' n. t% s/ ]  Q! |- M
/* shared region configuration */
0 u; Y% |% B$ x0 k9 }- Qvar SharedRegion = xdc.useModule('ti.sdo.ipc.SharedRegion');
9 d0 S2 ?5 g$ H* |) H" n; S3 d% l9 @5 y; L& M7 n9 [! q1 p4 J

6 F0 Q  i$ d+ Y- [. i7 A/* configure SharedRegion #0 (IPC) */% B3 _. y' t6 e. t5 `& W: O
var SR0Mem = Program.cpu.memoryMap["SR_0"];' w9 O/ V! l" I9 ]
; R' `. v! ]& Y2 E& g4 [
$ Y# F3 U: I3 D% O8 x) [2 ?6 j
SharedRegion.setEntryMeta(0,/ j& k& c$ t+ f3 s  m+ L0 D
    new SharedRegion.Entry({/ b+ ^$ s( R* X9 _1 v
        name:           "SR0",
" ^( v7 W+ d9 L) _: g* O        base:           SR0Mem.base,# k' F% ?! V7 O7 b! s
        len:            SR0Mem.len,
  B; C2 S+ S) X; [2 S" U        ownerProcId:    MultiProc.getIdMeta("HOST"),) n$ R# V  I- ?- w
        cacheEnable:    false,8 p' w1 c1 h% X6 w& N/ j, ~
        isValid:        true
' X; n; D6 I8 e# R    })' F5 J! V$ w  Z. h4 N
);9 T; y% r, J6 \7 w# [, L5 ]
, J* y# e: L- R0 J+ H5 S
6 t6 u; _1 D9 v) k3 @- m( i1 `

0 R9 b, {, Y4 t% y5 t1 F5 J5 Q) s

: f5 j3 u! x$ t8 y+ Q2 dCache = xdc.useModule('ti.sysbios.family.c64p.Cache');; h1 @; Y5 s! l, R  O+ H
Cache.MAR192_223   = 0x00000008;  /* xxxx xxxx xxxx xxxx xxxx xxxx xxxx 10xx */
6 @; d/ Q, H$ e3 N0 [/ C5 s; n) H- i" O
' J" a9 n0 y9 P( z" ^

: x7 O' L. L3 d+ ~$ `/ {

- j9 B* o3 E' {# J0 q# X9 U/*& {9 \# y0 X! ]0 a' F5 s( A% h
*  ======== Operating System Configuration ========# Z% D4 ?* U( c1 j1 s9 i( r  \) }
*/
4 R' z: G; Y% u1 w4 Z% K2 ]# A, y3 w1 d4 S! y  Z
* m/ H. `2 T# N' b
/* no rts heap */
# h, y' r: e: L  T1 ]Program.heap = 0;
+ n6 D. T1 k0 PProgram.argSize = 100;  /* minimum size */
. `- q% S+ k) q& gProgram.stack = 0x1000;
+ w: ^: R: z) x1 G: k
0 C. x7 T  X9 C4 }

8 U/ A" y( ~, F- T3 `; \% ~2 O! _/* create a default heap */
# F7 @* O0 Q! T2 V: N& Vvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
2 B+ Z. @/ p# ?3 }; I/ Uvar heapMemParams = new HeapMem.Params();
! h  z# M' s% a; wheapMemParams.size = 0x4000;
4 k6 Y5 n/ E% v( f& @" w
4 [% Q+ z8 B( P! @; g( T6 Y5 A

' w( [- b# O9 L, S- k9 \var Memory = xdc.useModule('xdc.runtime.Memory');
2 ^; }/ o7 `) \0 z3 u$ |2 F! ~. NMemory.defaultHeapInstance = HeapMem.create(heapMemParams);/ n8 A  \! g1 G6 s, x3 M0 G

( O0 g- _5 `1 F2 t$ Y
" Y: p# ~  T" f( j4 n3 _
/* configure System module */
( S! u/ |3 v0 Kvar SysMin = xdc.useModule('xdc.runtime.SysMin');% s( {3 t  W/ S" \' C! E3 C9 ^! ?
SysMin.bufSize = 0x1000;( E% Y1 ]) y# r
SysMin.flushAtExit = false;
! ^& v& x( Y3 D+ G# t
) L7 j% T7 p; h; X. a' q8 Y

. y, c, @1 [0 avar System = xdc.useModule('xdc.runtime.System');! B# _- ]9 \( D8 |* H
System.SupportProxy = SysMin;# Z3 D; R# m" h  o9 R) Q

% _8 v0 f: ~. C
& c! I( H1 v! }+ @
/* configure SysBios to use the lower half of Timer 1 */+ f1 M4 l  ~* ?( g" j
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');+ w' `' }& }: z2 i) v7 T. S! p
var Clock = xdc.useModule('ti.sysbios.knl.Clock');$ y: K: e0 ^0 l& q. {
Timer.timerSettings[1].master = true;' s3 n3 @# n4 D0 \: w/ z5 O- k
Timer.defaultHalf = Timer.Half_LOWER;: D) a& d" r- q! i* L
Clock.timerId = 1;
7 }+ T4 @' g* K  B2 m  o/ ^/ x$ g% L7 V" ]) M

; P4 O  ~3 [2 E6 b! @
* Y# X4 ]# Y: z0 m9 S. X( G. o% C& H
回复

使用道具 举报

3

主题

852

帖子

3538

积分

创龙

Rank: 8Rank: 8

积分
3538
发表于 2017-4-10 12:01:20 | 显示全部楼层
ARM 端将定时器2/3 输入时钟配置为 156MHz 需要修改 DSP 端 CFG 文件配置
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-19 03:33 , Processed in 0.041622 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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