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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2014-12-22 14:35:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
7 f5 B8 d! y& D. i. Z! A
Void UPP_TASK(Void)# O& r% [2 e" b- ^7 x
{1 R* K8 S: d+ Y& `0 O9 A; T
8 W. Q* p0 z+ b# Q
    int i,j,k,target_int_count=2;( W$ t" o4 r2 v1 }3 D
    char ch[2];
) a- l! J- L1 c5 V! |5 D; B
2 X. A* z9 g& j9 R: ]' w
7 S; E, ]. Z3 j  s; x- e8 ^" S  P9 |
6 x) P, J1 V! K* o. `/ C6 W    upp_interrupt_count  = 0;
7 d- \/ ~" z! H3 ~    upp_error_count = 0;5 _8 p1 j6 H/ v; C' d

3 a: ?$ |. H* W, z* F9 r1 ~& D4 L    UARTPuts("\tResetting uPP buffers...\r\n",-2);* P7 |9 e% V$ }% {3 R) h! E" ?
    // Initialize data buffers
5 Q7 K) u- L, E    for (i = 0; i < upp_frame_size; i++)1 I- C1 w( c* x; n
    {0 U$ n8 h: F# B2 O
       upp_buffer_b =i;
; R5 D4 Q  r" ?  p! g       upp_buffer_a = 0xDEAD;+ T+ o6 k1 h5 U, ~- L+ H) z& s
    }; @$ r$ w0 r+ p& W6 w: [
4 W, D8 ~5 Y, `
    //for(i=0;i<1024;i++). u, C$ K9 O; P: P; y, Z
    //    temp=0;3 U" i8 }$ r% X! n
% r0 b# K3 `. i3 z% r
    //UPPReset();
, e* R8 j3 n8 P3 \+ ]  U) _4 v: @    /*启动UPP DMA传输*/: M  u7 n) B, |; s5 r7 I0 z
    UARTPuts("upp_prog_dma_i\n",-2);# e/ }; U: v' _; X) `
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;$ r  G2 H7 ?& n
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);5 r+ h3 c% e* \. S4 e
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
. a1 N) p  r: t- Y: i8 Q; A6 |. W1 L) ]; V( {7 K* Q4 s" N* U% J
    UARTPuts("upp_prog_dma_i\n",-2);
! u# p, f9 s7 P  Y: r    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
$ k" E% R3 {" J. M/ L+ e    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
1 _0 E, ~1 i' A" b$ c' X  Q9 V  P1 m    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);: F  ]' R, z' J/ s1 W

: j" U/ S2 ?9 p) j/ `5 U    /*等待UPP传输完毕*/1 [. |6 J% j6 K7 n
    //i=0;
4 {- ?' O" ?% Z  x  x5 ], h9 ~    //j=0;9 L0 P; W: d$ q
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
4 R+ A6 `% p! \+ a, h( m+ ?    {
% G. J+ a; q; }0 T8 t9 b- |/ T        /*  测试UPP传输的同时操作普通DDR数据, A% ?1 m! x- {
        temp=i;6 a$ H9 M$ k5 c( q$ l$ t
        i++;- [! J2 M" }, u- Y" t! g
        if(i==1024)
: i" l( G; \/ D' e/ }& L- s% T        {
) A% V  A7 M- O4 Y+ E- {            i=0;
9 X, [) ~0 g, p( G2 y! N. q5 |7 {            j++;
6 r6 I: v6 U. H( i9 ]. s        }
( {/ [; e/ a# E        */
' n0 t( {. }9 k, ~
! J7 c$ d8 x6 f  W8 I       asm(" nop");
3 K% l4 r5 j# I- a4 A5 }) h" ~, }
" d% R% U, ~2 X; m; X4 i& m, H) k       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);# x9 P. _& V2 ^/ \6 J% @, s  q
    }
9 v/ L7 u0 n: c: [: m* I
# n1 x- f0 F/ D9 z. c    /*检查UPP传输的数据是否正确 (loopback modes only)*/
2 f) r' R5 E. E# c% i& Z9 ]    //UARTprintf( "i=%d\n",i);0 [2 z  Q9 R$ k0 e6 A
    //UARTprintf( "j=%d\n",j);
, I$ _8 M! ^$ o: W9 K6 ]3 E0 e    UARTPuts("Data mismatch in buffers.\n",-2);* D+ R% i. E$ z' b2 W$ s
    if (upp_interrupt_count == 2 && upp_error_count == 0)
1 R; x9 O1 F6 V; X+ x    {
! I& y! `0 `# D6 Q6 J/ t8 ]        for (i = 0; i<upp_frame_size; i++)( F" K3 [. ^6 b" ~/ s
        {
' ~7 I+ _5 h: E7 u  E( c  K" c            if (upp_buffer_a != upp_buffer_b)
  _6 Y) x, q, G1 J            {
* q! i3 g1 h$ g$ A: N                upp_error_count++;* r4 ]' J, G( ?! ~/ h
            }
8 x# J3 G3 o0 S        }, D8 E+ I% m' l2 I9 T
    }
/ i6 x5 M! z# V& I$ F6 [7 H1 w# P1 i, N$ L6 i3 z. g
    /* 报告通信结果*/
! u* H# Q1 |6 H/ ]) P$ a; s    if(upp_error_count != 0)
1 j1 W. o+ W# D# z, l: Z- ~        UARTprintf( "upp_error_count=%d\n",upp_error_count);
# H& b8 z* N  ~, {% ]    else
5 M1 {/ @; z5 k9 e% o! G        UARTPuts("uPP transfers complete!\n",-2);
0 q8 ]$ l: H8 F8 T/ V9 [$ O: W9 E8 j) f* {2 R, g
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
- u' v7 n4 N( k    UARTGets(ch,2);
- n0 p  [2 K& e. H  R    UARTPuts("\n", -2);
) y1 U# D4 e9 _8 I2 u. _& }9 y+ z3 l& ?- N- t1 `
    if(ch[0] == 'y')
/ l2 ^( M: l' n" Q0 A    {
. J0 O# N+ L5 E2 X        /*打印全部读到的数据*/1 g& n+ H9 v/ Y- X) L5 C
        for(i=0; i<upp_frame_size; )
2 s" P1 K! w5 B7 u% ?        {
) \& q) V; L) M4 a            for(j=0; j<5; j++)8 U& w4 v' O- f1 l  S/ J( q' G
            {
- `! ?# }. g& @6 r1 q! a0 X! ]: K                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
, J+ s4 P9 H. i% h2 p( p                i++;
0 ]3 Y: I& c! m1 `) \! ^                //if(i >= 4096)
  y0 X, N2 j. X  Z( q/ f                //    break;
$ U+ e1 j3 A2 y3 B0 O) A# C3 C+ W3 E5 r9 E( W7 R( u
            }* j: B# f; k7 d& X7 x+ q
            UARTPuts("\n",-2);: ?& e3 d; o, |! L8 b  e% X
        }
6 k: z4 L# u  c) f2 h    }' W' c% ?9 y; ]" K+ q" @
4 S9 E" \* o* d" N% }  i
}
" g- e" b9 K6 y- w

4 n! M8 _$ p) K/ {8 r
  v. k6 T' \- g! _4 {6 ^3 r
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

使用道具 举报

0

主题

184

帖子

1137

积分

QQ游客

积分
1137
板凳
发表于 2014-12-24 18:06:21 | 只看该作者
多次执行是没问题的,最好不要用空闲任务,优先级太低。
9 _3 Z( d% |& l# z/ }% o' q: r! F
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-10-27 20:27 , Processed in 0.039746 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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