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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2014-12-22 14:35:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
1 e$ b& Y4 _' S1 V
Void UPP_TASK(Void)( H8 }  ]$ \# p& b8 ^. o
{7 }# Y! e, ~# W2 s

% Y# j* B7 z3 t$ I) t+ W8 u    int i,j,k,target_int_count=2;
& Y# g; s1 ?6 z* A    char ch[2];: V/ J  _( `9 m3 C' g8 ^3 Y9 s
- f8 j5 [, R+ q" A1 s8 u% f9 l

. |2 m' @" E  C+ C/ d2 j) o/ q+ ~( o/ L$ }1 \8 E
    upp_interrupt_count  = 0;8 \, G2 X9 Y/ i5 n. S% g) S* C
    upp_error_count = 0;
7 P1 `( ~; e+ l/ M+ B) B$ K  R, H  Z, I/ g
    UARTPuts("\tResetting uPP buffers...\r\n",-2);* o7 e! B7 [$ b7 b8 E
    // Initialize data buffers
' i& O5 [2 H' P    for (i = 0; i < upp_frame_size; i++)
, F" i9 r1 G# D/ w# z! C    {+ W, A& {# ^$ A, f4 k
       upp_buffer_b =i;, q( u: u  j; U# {
       upp_buffer_a = 0xDEAD;2 K* H* A' H8 G1 S
    }
0 _* ~4 O; V% K+ F7 G9 h* b: |1 ]2 f9 ?# T6 x, @8 i
    //for(i=0;i<1024;i++)
. }' U1 D7 d8 V, B! e$ K- U    //    temp=0;* K0 a2 @: F' _6 _5 {3 H
$ A5 J& g0 R) [. q
    //UPPReset();
6 s. j) z# Q5 h2 Q% B4 y  ^    /*启动UPP DMA传输*/
7 F3 o8 ]% ?; @! f5 B. K6 Q    UARTPuts("upp_prog_dma_i\n",-2);# s+ H: t" M/ N! d4 \. ]+ D
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
! E* L& q3 H" {6 v, J9 g3 e( Z: Y4 A    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
) ], E* L/ Q2 b* Q2 {; o    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
! r+ S4 `1 `) x# t  C  k% F/ C1 b
5 S; i  F& S( q. P    UARTPuts("upp_prog_dma_i\n",-2);
- L4 s( L: [2 k# i3 b. T& ]4 F5 e0 u    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
$ A5 K) C$ Q: ]/ W/ H    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
0 u. f, h) U  d! @% V    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
2 a% v8 x, p" `  ]5 M1 N( ]
' @) q( y. H* ]) h( h; M    /*等待UPP传输完毕*/, a. E( ^5 Y( @3 Z' Q
    //i=0;7 a' B$ @2 Y8 J. |5 ?. j
    //j=0;% a1 C/ l- t' L4 N9 g% K2 L% q3 C
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)( i$ `6 i- h! {  |
    {3 q( K; j! a, F3 F0 K$ M$ ]
        /*  测试UPP传输的同时操作普通DDR数据; f  m$ j( t' X) |, }7 l3 t
        temp=i;5 q) ?/ b$ Z0 B# t" J
        i++;9 B9 ^% L  P1 v
        if(i==1024)
1 g% {  e* \6 J8 C% f        {) A) ~8 T, u* V- A" H2 \
            i=0;9 E- H  p: h" p& o: j+ L) t! J
            j++;5 t4 V3 L9 f$ h( `) ]
        }
) R" Y7 Q6 A. W        */# _$ Q1 @% f% J& Q) b
8 K3 L8 n; T) {5 s/ B( E7 @
       asm(" nop");# v- P" e% t- g# S6 p6 f) p

- |2 D. O0 c5 X7 x4 C( M       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
* d  Z- r- H1 o9 o! l- d3 z    }
/ m) Y5 ]& T# b, p5 U9 F4 g  X  }8 {; o* b: F9 p% }
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
1 z5 V' S. f, R# ^* o    //UARTprintf( "i=%d\n",i);0 b7 f' I8 m# F. u; E
    //UARTprintf( "j=%d\n",j);
4 ~- G! t! H- V: j( j. `% N6 L    UARTPuts("Data mismatch in buffers.\n",-2);$ G( n  _( P( k" t# v& ?
    if (upp_interrupt_count == 2 && upp_error_count == 0)
7 w% O9 G# l! F' \3 N4 u    {5 f+ D7 Z) d# s0 t' e$ K8 v
        for (i = 0; i<upp_frame_size; i++)* Q5 O& N! x0 B* d+ e% O$ Z! @; P
        {
$ ]3 e& E% F, H9 g            if (upp_buffer_a != upp_buffer_b)
+ s2 s  o8 x5 e8 G& F1 Y9 o            {( v" i* _  x4 j  [* M
                upp_error_count++;
' c/ \7 a/ J/ Q, e8 T$ O5 j+ ~            }( b/ Z' W4 P+ d8 I
        }
2 P- G% E/ [/ v) n2 S! w* n1 D6 H4 t9 s    }* Q2 x* A" Q! o
* N: i0 e5 @3 n& t  r
    /* 报告通信结果*/
0 V, J: O; }4 p+ r" ~    if(upp_error_count != 0)9 r0 \3 ?& ]- ~" c/ O
        UARTprintf( "upp_error_count=%d\n",upp_error_count);- A! d0 a0 d; l1 m; b8 l  A
    else6 C  C; n! f7 T# A5 E
        UARTPuts("uPP transfers complete!\n",-2);. o0 G( [6 L; Q% f! S% Z6 h
  E: o2 x' V# t
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
8 i/ [7 d$ _- T) w4 @) I    UARTGets(ch,2);3 M5 s& |) b! |  C; f8 e
    UARTPuts("\n", -2);6 c5 R  @$ x% G1 B! a
$ K2 }5 r  f/ g8 x
    if(ch[0] == 'y')
2 ^; f- N" b# p6 L( M$ J1 `    {% n0 R. ]$ I  O, R, J: H
        /*打印全部读到的数据*/
  z2 C4 y$ l. N0 S        for(i=0; i<upp_frame_size; )2 K8 m2 f! G! e( ]4 D
        {
4 M$ y0 b- v2 R3 G8 Q" Q            for(j=0; j<5; j++)5 @! m) k9 D5 L: @
            {% z& P. n( i7 [$ E" h- p4 l3 i
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
' q1 f/ y5 {2 o0 ]' ^  m0 T                i++;
2 J/ g7 E/ |$ w( l& E                //if(i >= 4096)% c5 k3 ?* ]5 ~7 [9 N, v, G
                //    break;
9 J, C+ x  A6 W" m, j2 ?. \- z8 w+ H5 \$ |$ A
            }
3 D/ s. a3 m' \) e            UARTPuts("\n",-2);
9 J0 f/ F/ w- m1 e        }
. e* C& S2 J) M9 `8 K+ d3 d3 K    }
& M& S! w/ O/ h6 p+ e6 y3 e+ `# r, x
}

7 Q9 q" }6 R" g* _" ?3 B2 k

  L4 _9 V' j( k$ h
, Y* }  q" o' ~$ t. v
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2014-12-22 16:08:56 | 只看该作者
追加说明:任务是空闲任务,因此没有做循环。, E& X( S  p8 ^0 S
回复 支持 反对

使用道具 举报

0

主题

184

帖子

1137

积分

QQ游客

积分
1137
板凳
发表于 2014-12-24 18:06:21 | 只看该作者
多次执行是没问题的,最好不要用空闲任务,优先级太低。3 S' b! Y1 v+ h
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-11 06:30 , Processed in 0.039855 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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