upp问题,在SYSBIOS下的应用问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 6816|回复: 2
打印 上一主题 下一主题

upp问题,在SYSBIOS下的应用问题

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2014-12-22 14:35:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
# s+ g9 ~4 d, K+ k( T8 r
Void UPP_TASK(Void)
; ?. q. Y2 Y  o  e& w: O{
: I. b7 r! g2 y1 m% U/ H4 k7 Z4 e% Z2 h
    int i,j,k,target_int_count=2;0 e$ L' A5 \4 m% B8 J# R2 Z% k
    char ch[2];- G: o5 \8 e! }, C8 j

  g( s* b& X! c" Q3 |4 H% x4 |; b* k7 d5 W/ A( D8 ^

- L( o' m" e7 I6 Q    upp_interrupt_count  = 0;( y; O* b: g/ {9 @1 ?' F/ E
    upp_error_count = 0;
: j$ \9 [6 M8 c+ m1 J6 B( Y3 W' T( t
    UARTPuts("\tResetting uPP buffers...\r\n",-2);
) F( d5 h% e( b: V2 J7 l, _    // Initialize data buffers
5 \# y% Y! e9 r' S* E$ B    for (i = 0; i < upp_frame_size; i++)( M) g5 Z, d7 W( A" x8 ?
    {
) y; E% L9 |4 u6 x9 r6 |, T9 A       upp_buffer_b =i;; Y" K) k9 V& c* u9 Z
       upp_buffer_a = 0xDEAD;
. ^6 a9 j4 x" c  B    }( i; R) P7 Z4 K  j* x
7 T* u& U. A$ f' w" W
    //for(i=0;i<1024;i++)  {3 {5 J& X3 {3 ~/ I' P/ r; \5 {2 R
    //    temp=0;
- L7 b' p9 F: K8 |2 R) u5 J( B4 ~
0 }4 b; ^; P- g3 F, s    //UPPReset();$ e8 x- t0 `9 ?9 A
    /*启动UPP DMA传输*/
" h$ U0 A. ?3 Z% X' _    UARTPuts("upp_prog_dma_i\n",-2);# G# F. X" y# _/ B2 j" a
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;6 }9 C" t3 y, J- y2 @
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);' j8 P, d) ]1 w4 G, p  X
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
: ?4 N5 ~9 P( v
" X. N3 ^5 N; l" o* @    UARTPuts("upp_prog_dma_i\n",-2);
4 t* C) c0 P+ G4 t8 k8 e! A    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
4 d! C  C! ^" q& C; R+ ~* l4 S    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
1 p" C( q% m$ \% Y% J    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
" g6 @3 Q9 |( A0 e6 u. V
: G5 E7 S! F* z, i+ i3 W2 V  C7 M    /*等待UPP传输完毕*/
' X( S. t5 h0 j* m$ Y    //i=0;
- p1 Q# ?# P, r) t6 O    //j=0;
' b, @* E  L5 o  [    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
: B7 O4 h$ O9 ]0 }6 V2 }    {
( K* K) h: y7 l7 G        /*  测试UPP传输的同时操作普通DDR数据
) n4 v: D3 ^: p0 t3 [        temp=i;6 \) j/ t8 f# {" I
        i++;
/ w1 o5 b# R' X. O0 ~% D        if(i==1024)
* S" ]) t* P, D# J0 Y8 P# W0 B        {
/ b$ K+ X+ r/ E# S            i=0;! s* M  V9 q5 U% H% C6 X
            j++;
! C& J# h: D! T        }3 c/ T% M$ K% W& R) I
        */
* m; Q  C: z; }. U  d" T. N# k3 @0 N8 |7 B# U# N( D6 o
       asm(" nop");, u+ z; O3 {* t* }5 ~
' D  z3 D8 ~/ r6 K. O5 i
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);8 t( S. r% Z2 O* f
    }1 `$ `2 W0 ?: [

0 c6 `; n- P1 g' |/ u1 r    /*检查UPP传输的数据是否正确 (loopback modes only)*/
) V( m3 y9 o3 L; l1 }    //UARTprintf( "i=%d\n",i);% O# |1 @7 n* Z; K. j
    //UARTprintf( "j=%d\n",j);
# q- W% V4 i2 O* C    UARTPuts("Data mismatch in buffers.\n",-2);% L# i, \* X8 T2 g7 s
    if (upp_interrupt_count == 2 && upp_error_count == 0)
4 o( e2 C$ a( b" i$ B$ V* h" ^    {
. N. s8 U; Y9 b8 P6 Y5 [! m; t2 h        for (i = 0; i<upp_frame_size; i++)
% |# U* |) O- `        {
; u: T0 o( |5 j! D, Z            if (upp_buffer_a != upp_buffer_b)8 c: n/ n; I! l, l
            {
7 E. c" L7 V" ?. H* l                upp_error_count++;
1 V  X9 l& ~3 V: j  }            }0 j2 A* D8 }( s1 Y! N
        }
) m$ m- h* p% y% S5 |! e) @# t/ D    }
. \5 P; {+ y4 f' u2 l" _; H  |; l7 i4 a0 V9 g; a! [
    /* 报告通信结果*// I8 _; p+ v& m' s
    if(upp_error_count != 0)0 q  W4 Y$ ], [. W' J) {
        UARTprintf( "upp_error_count=%d\n",upp_error_count);! S4 [* G5 X( S6 T( ?9 n) J7 T' c
    else0 f2 O% ]% m( l" M
        UARTPuts("uPP transfers complete!\n",-2);; G. R$ X0 w6 @& j' z- [1 r

$ M- x- o4 W" [: i: i* e    UARTPuts("Do you want to print all the data?(y/n)   ",-2);7 `2 _+ p; i1 Q" ~' Z0 q" g- E8 h
    UARTGets(ch,2);1 C) X+ h9 |, t
    UARTPuts("\n", -2);0 r$ Z" x$ g3 z0 v2 M
' m( U  q1 H/ G' b: V
    if(ch[0] == 'y')
% z8 `6 U' Z( W  U    {
7 }  p- V5 }# T4 W        /*打印全部读到的数据*/
6 g/ L* r2 C+ a7 g4 z        for(i=0; i<upp_frame_size; )6 N8 v( D& S- w* d* z0 ^5 W5 ^
        {. n2 E! C$ u: `$ R, Z1 l& z
            for(j=0; j<5; j++)
% p$ H* V3 L; C* M! o            {3 a, X& j8 q# U* I. f0 Z- j
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);, X1 I* n3 i2 g/ J" ]; M5 ]
                i++;
/ V8 ]+ K) B  [$ U  p                //if(i >= 4096)7 M! P* C9 T# b% E$ k% W7 B8 ]
                //    break;
" O/ L( E: y# M  C$ t7 K1 H2 Q" _9 T
            }
5 \1 Z, e0 D; b9 d  F            UARTPuts("\n",-2);+ m8 W9 `! [1 |& {5 ]) i1 T
        }
: a- u8 f$ e/ `0 J; P    }! T# m4 Z7 @5 m7 S/ f7 s
. _5 v$ V" v6 B" c# k( |$ G
}

2 B, w) q  f% {

) q) j% ^4 C  N, {! l! @+ b  U
/ x9 z; g  X$ n3 i' D% Y
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2014-12-22 16:08:56 | 只看该作者
追加说明:任务是空闲任务,因此没有做循环。- {4 O! P1 w3 I/ M: ^
回复 支持 反对

使用道具 举报

0

主题

184

帖子

1137

积分

QQ游客

积分
1137
板凳
发表于 2014-12-24 18:06:21 | 只看该作者
多次执行是没问题的,最好不要用空闲任务,优先级太低。1 e! f% J- k3 r6 B/ _
回复 支持 反对

使用道具 举报

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

本版积分规则

点击跳转“创龙科技服务通”

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

GMT+8, 2026-1-29 11:23 , Processed in 0.050276 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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