upp问题,在SYSBIOS下的应用问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2014-12-22 14:35:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?6 [: ^* m9 a7 L3 Y8 C/ {$ K' v! v5 r  E
Void UPP_TASK(Void)
/ d+ n! l$ {! ?+ s+ t: }{6 d0 Q( |1 K( y" I! ?$ ^( s# K

/ S* C% W- j3 [4 P/ N* E6 ?. I    int i,j,k,target_int_count=2;
7 Z2 t- w; r( f2 w6 U    char ch[2];
, Y& w  n. h- ^/ ^! M6 L3 ^4 `2 S$ B6 t. x: V4 Q

( x: s# G' ]0 Q/ c. z, p9 W& t$ X6 C4 T& e  f  T/ y% S7 m' s
    upp_interrupt_count  = 0;- v+ ~% @7 L6 w+ A
    upp_error_count = 0;/ H: ?) U' J. r/ t5 s9 }7 @

$ S/ i2 f- S. u0 t4 u4 J1 }4 B    UARTPuts("\tResetting uPP buffers...\r\n",-2);) G3 W& _+ l- h3 s' S! G  v
    // Initialize data buffers
& H  `- f+ x- l, a8 Q. R& p    for (i = 0; i < upp_frame_size; i++)
+ \, h. w* _& i* T    {; E* S7 Q) Q' r& H
       upp_buffer_b =i;
6 t' R. L: s: }8 r# n% M       upp_buffer_a = 0xDEAD;% l4 t- B& v) p9 `
    }
4 v+ b9 C. C0 y+ S
. ^; }) B/ p* N( ]: I4 P; r    //for(i=0;i<1024;i++)/ ~+ M- X  r9 [; A
    //    temp=0;
) Q4 _& E6 q0 c9 f1 p* V5 j3 v; O, i' ?# F3 g& g
    //UPPReset();* f7 R2 c7 I5 O2 N2 A$ Y2 e; |
    /*启动UPP DMA传输*/7 E* `9 u% ?! p" B) R# x
    UARTPuts("upp_prog_dma_i\n",-2);
' N3 F- z4 T7 c5 D    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;# U4 B, |  r9 E' V
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);5 F& |: A1 Q/ ~9 u6 s! o2 @
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);/ S7 y- Y, x, N8 z  ~2 k
; I$ I7 R" o1 f. [+ `7 a- {
    UARTPuts("upp_prog_dma_i\n",-2);
( f. K1 X5 w; v    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;# ?& H0 S: @) x+ z1 I
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
! ^7 O5 R/ \) }2 {    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);' H* P" R6 ~- ~) |

& g$ A1 d; X0 l2 H8 V4 ?: b* z3 k    /*等待UPP传输完毕*/
8 w6 c# B/ L: B. v+ ^. }    //i=0;
) T. n/ I, m9 [/ \/ t( X8 I    //j=0;
; b5 q" p: W; `    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
$ o! v8 d7 c/ m) e& C/ F    {
, D5 p9 N- G) P' ]! b6 ?        /*  测试UPP传输的同时操作普通DDR数据$ M7 c! m* {% J- F
        temp=i;% T& j0 \$ Q% _5 a. b
        i++;
. n3 P7 ]5 e3 ^, w+ P8 s        if(i==1024): _2 x7 s: x( A+ |2 M
        {* u/ g6 t2 n4 q% a  |& ]
            i=0;* [) E. l! b- r
            j++;
0 \. e, i; x/ w, X! O9 T        }% `0 d% s1 V' u9 m) E
        */
! Q: N1 u# j) X/ ~% {& a
' W  }9 K3 c7 e$ n1 A3 R2 J       asm(" nop");: l* Q9 ^% ^4 F3 z3 R! _6 H, J3 A' ]

/ w  e8 Y6 u9 \1 z; U6 j1 O- h. l7 t       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
% a* ^$ ^2 O* {7 A  n  s    }
, ^3 J" w/ U* H1 g
. l* @  k1 Y) E+ E% @- p    /*检查UPP传输的数据是否正确 (loopback modes only)*/+ [9 l0 \( }" T' X& P! S! o
    //UARTprintf( "i=%d\n",i);1 ?5 s! I5 J2 x; P* b6 j6 B
    //UARTprintf( "j=%d\n",j);1 U" t$ l  l. q  \# P0 ~+ r; ^
    UARTPuts("Data mismatch in buffers.\n",-2);. Z! z5 p. U$ R6 `
    if (upp_interrupt_count == 2 && upp_error_count == 0)
- [+ u% |1 Z% j& Z    {, u1 j) U- g! Y. K, c4 x
        for (i = 0; i<upp_frame_size; i++)
  K) S$ G# }; v' e6 w        {3 V. \/ T! M* R9 R; Y, `3 U/ [. P
            if (upp_buffer_a != upp_buffer_b)
) d/ a6 T/ g) d- [0 Y            {$ \+ w) b: b) j7 v+ ]! _
                upp_error_count++;4 x6 A5 z$ {* L4 J
            }
! l# t' i. P/ z9 {8 B        }
7 N- X1 c8 Z& y' r2 [% M4 k: k    }' Z9 Q0 g$ O& P) e
. U% \7 v# c3 c# G+ Q& E, }
    /* 报告通信结果*/; ?6 f" h6 J0 v9 E, z" M; a
    if(upp_error_count != 0)! B' Q* m! n" i& G! o* Y% t- \) w! a7 `5 l
        UARTprintf( "upp_error_count=%d\n",upp_error_count);6 K8 W2 s7 M& E6 |. [
    else/ w) }; j2 z9 ~
        UARTPuts("uPP transfers complete!\n",-2);. W6 V1 K" H6 N# s! z
* v! Z5 k  K( b; @8 A
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);# L( q7 H- {& m3 s; w; g
    UARTGets(ch,2);; X4 L7 c5 {( e) B
    UARTPuts("\n", -2);  W1 e. o0 X9 m- h% H  W8 G

1 p  q5 X3 F& u. Z. B; G0 h" |    if(ch[0] == 'y')
# r8 h  e: H3 e7 c6 A1 i    {
# t6 L7 J; j7 S: G( A  e        /*打印全部读到的数据*/2 T: ~- b0 }; |; w
        for(i=0; i<upp_frame_size; ); U  W* V4 ?7 c, @" i
        {3 z# V9 x; O: G% ~6 C
            for(j=0; j<5; j++)
# W' P  {9 T4 L0 o            {7 l3 Y5 N# Y- i; e6 p% I% t3 I- o
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);; t; M, N0 s$ I5 u
                i++;
8 d# _+ M( J8 O3 T# @7 U* r2 g                //if(i >= 4096)$ P2 |* }6 d' O& T; D
                //    break;
0 N0 s# m- f8 x7 c2 k8 m( o0 w; d! F- W9 \, d
            }5 Y1 J! g5 O$ d4 z% s; h2 A! D
            UARTPuts("\n",-2);0 X4 T1 a6 G' g$ B; T9 w
        }
9 P8 v3 }5 X+ t4 w/ A# q* }$ w2 @    }8 t2 l, r- ~6 w. T

4 L% A8 T. Y4 f) w: i- G}

& n2 u4 u4 d4 Z1 S

; I& B! x* `# {4 T+ a, B1 H
# A# Y* [4 X5 g0 s# T8 z
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2014-12-22 16:08:56 | 只看该作者
追加说明:任务是空闲任务,因此没有做循环。- J8 T" A9 ]2 g
回复 支持 反对

使用道具 举报

0

主题

184

帖子

1137

积分

QQ游客

积分
1137
板凳
发表于 2014-12-24 18:06:21 | 只看该作者
多次执行是没问题的,最好不要用空闲任务,优先级太低。
- @) J9 S  K3 ~2 i. v0 I' O
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-8-5 00:49 , Processed in 0.039507 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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