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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2014-12-22 14:35:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
! E: J& ~' h! i7 C! D2 E
Void UPP_TASK(Void)
# G  G  B/ J' A( p{* o( @: {/ W# Q# G4 y

# a* ~9 u" M+ F4 b) E    int i,j,k,target_int_count=2;2 B0 d" j  D/ x( g
    char ch[2];
1 F1 Q! ]! ^8 ~; X* c$ n7 j6 L' d$ R1 N; P7 ~8 k# B8 ^
" |2 F. T7 l+ b) i. ]: G  l
$ \# c/ y. r' j
    upp_interrupt_count  = 0;
. z0 b+ x4 }! i* }  h    upp_error_count = 0;/ n2 w; X( E8 O" ^

. W& N! y+ C5 N: J& j( K    UARTPuts("\tResetting uPP buffers...\r\n",-2);( q& f$ h* J3 H- F6 J) x
    // Initialize data buffers: v( z6 X( y& [/ ?
    for (i = 0; i < upp_frame_size; i++)
1 n9 i8 {5 ]' |; k9 D    {0 B! t* R( ?& W3 B
       upp_buffer_b =i;
) V: Y; q) t5 a0 o; f       upp_buffer_a = 0xDEAD;
1 C( z: M; h0 @# }7 [0 _7 z: }+ g    }
" i7 q+ S6 J6 m0 |) e/ m! [
; O6 H# c: c# c) B/ y    //for(i=0;i<1024;i++)& r4 v, V0 O( e6 P" n
    //    temp=0;
3 v% ]5 T! n* n: Q! ?9 P2 {5 |) ~* x% E
    //UPPReset();
0 O) r2 e: }9 D  B5 C2 [6 p2 h$ B# Z    /*启动UPP DMA传输*/+ s) J" F# Y. o3 ~
    UARTPuts("upp_prog_dma_i\n",-2);  N% N% v; Q" v* e' j% S
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
# x4 r- h, H5 Z- G2 T  \$ R- V. D* e  G    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
) F9 V, j& s/ s1 g' ]4 H- G    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
! i0 g  i. z- J* n$ Q
  _9 G6 d# k! @. x& S    UARTPuts("upp_prog_dma_i\n",-2);; x8 w- a+ U9 y# B3 f9 Z" x7 I6 N- o
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;0 ]! N1 k+ K3 _7 m5 l
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);3 a0 V8 _4 y. ]* G8 b7 [) x
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);8 l7 R  i# e/ w# o: y2 b  y9 X# l

8 W( e( h" _" P% v' X  Z, U    /*等待UPP传输完毕*/1 `9 H7 t$ _9 K7 \6 e" @  U. k' ?$ S
    //i=0;) z! u/ [! E1 T% r1 J1 T  V; _
    //j=0;+ T) @& [6 p2 B# y) j
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
2 x! m" j, S; ]& d1 T, P    {2 Q! V" _" e% r# U* P
        /*  测试UPP传输的同时操作普通DDR数据4 v0 J7 @; t2 r2 u! \
        temp=i;" N# Q# ~5 q9 ]' H0 D
        i++;2 ^2 |5 Y2 S2 @& u2 n: F
        if(i==1024)! z' g4 Z$ F  F9 k% g0 {) O
        {
/ C% i2 T8 H  G. j            i=0;
9 n- i. B. _" {2 M6 W/ A            j++;% h9 G4 X3 \- k. Q+ t
        }* k- \- U0 ~: [
        */6 b' A- ^9 {9 G% y" \0 T4 f
1 m6 z3 l# A# \1 Y! k. b
       asm(" nop");
- z6 k/ [) l% D5 f7 N
% T6 f% P/ B( `6 ~       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
( F% t1 V6 G' D9 @* B    }
& `1 R) `+ l5 c) H2 f. A  b+ F4 k9 j0 a# u8 U1 F4 Y# b* h
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
# T" p6 [7 [1 w    //UARTprintf( "i=%d\n",i);
. _1 b* c' H  J- D8 M2 I. p2 f    //UARTprintf( "j=%d\n",j);7 L7 k2 w  L* n$ }
    UARTPuts("Data mismatch in buffers.\n",-2);
# P9 a4 k3 R4 B( _" U8 g7 G    if (upp_interrupt_count == 2 && upp_error_count == 0)
4 g! u) G3 r! |* _2 @. M; W3 b    {
& j5 ~& ^# h, b0 [! w0 i& Q        for (i = 0; i<upp_frame_size; i++)7 F+ H* Y6 n" k+ M$ u9 v4 K
        {
/ |& l% i% h( L! N+ O            if (upp_buffer_a != upp_buffer_b)
& y' Z" ?3 J0 N5 i' r+ H+ }            {/ h, e2 s! B$ ~# h+ [
                upp_error_count++;, i2 A4 U- i, b* \5 B
            }
/ K  H4 Y8 ]" B7 J: D" {        }4 H0 O- A. J$ m; j! h! K1 ~
    }
; |- v1 b1 s6 y! K
& ?) B& f! X- \  ?" q! v% n1 G& V    /* 报告通信结果*/* T" x6 j& x0 A& R- X5 ~. Q
    if(upp_error_count != 0)
3 Q- T7 h. ?, e& N5 }        UARTprintf( "upp_error_count=%d\n",upp_error_count);' ?, _9 ~" \8 h% Z! E% W
    else1 \8 i0 b: d5 @* k5 y! R$ w3 e/ S
        UARTPuts("uPP transfers complete!\n",-2);1 F% f/ T2 K) F- r' p

# a- N; O( s2 I    UARTPuts("Do you want to print all the data?(y/n)   ",-2);, s7 D$ {" E/ h" ]# l
    UARTGets(ch,2);
( T: r* U2 q2 L  L    UARTPuts("\n", -2);9 Z: T: K/ `9 i
' P5 e: ]. {+ I, ^9 A8 s' c' p0 n# n
    if(ch[0] == 'y')5 o1 P7 U' ]2 v* H2 @$ y
    {) v; X3 @( D! T5 m* U1 F* }# R
        /*打印全部读到的数据*/) l+ j- X; T( m1 S' e- k: f
        for(i=0; i<upp_frame_size; )+ A) d8 A$ a6 l
        {6 Y! D- [6 b( n6 V1 d/ B: g) n* l
            for(j=0; j<5; j++)
" s- w/ u* @5 U3 _2 l- e" J+ m            {
) j1 f4 t, y3 b! N4 S; Z                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
1 `* T# T9 ^6 Y' q5 `2 X                i++;
9 W/ ?; o/ Q+ d2 t& b9 ]                //if(i >= 4096)
6 \% x2 M2 l7 e& u4 O                //    break;
, x5 C1 N3 V; A, F8 E% o- D
! E: N! Z2 W7 F$ u$ u4 R            }; {& [6 E( i/ K. j& ?" a5 ~
            UARTPuts("\n",-2);$ [; g& ?- s! ]! S5 L' c3 L# g
        }
+ X+ K9 Z) i( Z! T4 \4 g" w    }
7 h9 q/ X% Z5 D8 y; o5 r5 j  K2 L# \6 I' f* @" r
}
; A$ Y5 I( R9 |# k2 Q5 z. c; y

# I- W3 X% i5 S+ _: x7 ^, m5 E! J6 ?( u1 X9 ^
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2014-12-22 16:08:56 | 只看该作者
追加说明:任务是空闲任务,因此没有做循环。
' s  B8 f8 B0 j
回复 支持 反对

使用道具 举报

0

主题

184

帖子

1137

积分

QQ游客

积分
1137
板凳
发表于 2014-12-24 18:06:21 | 只看该作者
多次执行是没问题的,最好不要用空闲任务,优先级太低。
8 O  J: p; L4 a/ Y$ p
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-19 20:00 , Processed in 0.041651 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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