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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2014-12-22 14:35:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?! y4 r0 m/ C' k5 w( N
Void UPP_TASK(Void)
2 v, x# i, v7 o& J/ m{
! g0 `! @4 p$ o7 O  C9 \1 R1 R9 P/ k" F+ z  K3 t' f, V$ C
    int i,j,k,target_int_count=2;% P3 L+ o, ]$ g3 C4 h  a
    char ch[2];
! y/ Q8 |# u& r' U" f1 x8 r0 p5 {2 @# o8 l6 d/ c/ I1 c
" l0 H$ c' M. b( j4 ^
- B7 k6 W5 ~  _2 m. h5 @
    upp_interrupt_count  = 0;& |% _6 G" w8 M1 Z
    upp_error_count = 0;. |# ~' q/ G* N8 q6 y- M. s/ S
, e/ I+ }( u, N- ^, f0 N
    UARTPuts("\tResetting uPP buffers...\r\n",-2);2 Z- V* Y( `) }" t# p5 I% Q' i4 K
    // Initialize data buffers
6 Q+ B3 U( E! ~8 F/ P7 Z, ]  l    for (i = 0; i < upp_frame_size; i++), a% s! e' i1 ^5 y
    {
$ A2 W; U' {6 a* j, z9 M       upp_buffer_b =i;- Q7 j" }% V* h& I! z; S5 I
       upp_buffer_a = 0xDEAD;4 r1 m% V  l9 K7 \. [6 T- e
    }8 k' p& E2 A) V. ?

' Z7 ]2 j8 P4 y% q    //for(i=0;i<1024;i++)4 {" o5 Z  \" E
    //    temp=0;" {; O6 w3 x- }4 i0 c  Z1 ?7 o
4 W; A+ z; X: P7 Q: k1 @
    //UPPReset();0 h5 G9 @3 W& D( _
    /*启动UPP DMA传输*/4 s" b& Z1 V# T' p" Q' t- g0 b
    UARTPuts("upp_prog_dma_i\n",-2);# `. K$ @# N% p0 G
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
  Y% u. I2 r; ^( T0 b% o    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);% X! d' e2 f" l$ ^# F( P# t
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
: e  k/ d+ e$ g( A
  ~! Q7 W3 u) G4 |  B0 I1 L# l0 D    UARTPuts("upp_prog_dma_i\n",-2);2 D2 k& l+ A( S8 ~" o) R
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
( ~; Z6 m9 ^7 |% p! ~3 ^    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);% \( _% h2 |* w) {" A5 j
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);7 U  j! Y, U" K7 i# X- R1 n8 Q4 B
1 C4 b7 x) g. h3 ]
    /*等待UPP传输完毕*/
1 i% Q; b' l6 O3 ^# b9 P, |    //i=0;
5 H0 @$ G3 q" D    //j=0;' ]% x' b, h, ^
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
4 S. V7 e3 f3 ^  m- P& n) o    {* V+ @7 s2 j* i
        /*  测试UPP传输的同时操作普通DDR数据$ r0 `7 F- ^, l' {
        temp=i;9 T2 }0 C& x& H% c  }  k- z' r
        i++;
1 ~8 S8 U; F! h  _5 V        if(i==1024)
3 {  }; D0 G# s" E# X- I        {* O5 L' |" x6 U& ^7 p
            i=0;
( l9 f' r+ I$ e" ]5 ^* S$ w            j++;2 N; H9 j+ |' x- `: }
        }, C* F- d* X% B/ F
        */3 W7 f; m7 P: n6 \5 F9 g
; I9 A  E* u4 U; I+ T
       asm(" nop");4 q4 l* t* ]( Y2 z: S/ D/ Q0 N

. {' R4 v7 r8 x8 w& Z3 g- d3 @       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);6 w& o% {/ L1 t. Q
    }
9 a% N# q" Y$ A4 d5 [0 Z6 t' R3 B2 {: b5 Q5 v0 X  T: f
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
: l) D" S2 ?) E! h( W    //UARTprintf( "i=%d\n",i);0 Z% u9 E" E4 z" G' n: H
    //UARTprintf( "j=%d\n",j);' M6 j2 N7 X' h. l2 j
    UARTPuts("Data mismatch in buffers.\n",-2);
/ p- e+ T3 K  i" F& _    if (upp_interrupt_count == 2 && upp_error_count == 0)0 T" F  F8 F- C, V$ v# `$ ]* M
    {
/ x* Y$ `+ J3 x, q& g        for (i = 0; i<upp_frame_size; i++)
2 W  |  A: M+ d0 i' G+ j# g; E6 l        {! z3 Y; ~3 e. e! i
            if (upp_buffer_a != upp_buffer_b)
! @$ K2 r5 ]* Z; O* P. a            {2 y! f4 s, `- Z$ |
                upp_error_count++;
4 A: D, j. v6 |6 k            }( T7 C* p1 Q2 q& R# I" B5 e
        }
3 u5 z2 O9 h: S  |. b    }
3 H" a# f  Q7 {6 Y( H
! q$ q- g) \$ ^6 U6 w    /* 报告通信结果*/
7 T, M$ g# Q/ y  E# ~  t    if(upp_error_count != 0)
" z1 f' A- O4 B: a        UARTprintf( "upp_error_count=%d\n",upp_error_count);9 R* R; c8 }1 X" Z
    else3 k" m7 s! b: d' y, K
        UARTPuts("uPP transfers complete!\n",-2);
  L% T2 i+ S1 Z2 ?# g
$ E, i0 {5 v5 p% f9 O6 z, ?    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
! C; E2 Z! ~3 j+ y    UARTGets(ch,2);
# F9 _5 z; w8 R$ w/ e3 ~/ |# z' h    UARTPuts("\n", -2);
* f$ F8 N; j3 W3 k! F+ Q5 h/ Z0 \( n8 X, w# o6 {! _
    if(ch[0] == 'y')
0 \# L6 }% R, f1 q    {. H' B3 I1 l& {$ I' I5 u
        /*打印全部读到的数据*/5 q: @+ D" S- M% {- X) H
        for(i=0; i<upp_frame_size; )
6 x* t& z. v- L        {
9 C6 b+ ?+ Q; |. J, Q            for(j=0; j<5; j++)
) Z5 g( A8 d/ C            {& C! q5 {4 F& _
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
7 `& f2 O) ]+ `6 C/ ]& Y                i++;8 @" q8 H' L& O) T  m& {  U
                //if(i >= 4096)8 V1 B+ @8 W- f2 Y& r0 i
                //    break;
3 u) V4 Z( ]3 Z" M/ K5 e' C) \* o0 H- D4 j5 p; p( P/ Y$ O5 M$ U
            }
" [7 ], s4 `2 G            UARTPuts("\n",-2);
6 a1 y0 j# j9 D) R, m0 l8 `        }+ v$ c, g* g; }; K) j1 [& }
    }6 W6 ?* ^, M0 O$ z0 j: N1 l
  C* Z7 B# M/ k# v) J; @3 a
}

1 t& Q! s+ x. z& m) O

& F, R2 p! V4 _% }0 `( ^$ q1 x. Q2 o  ]) W; @! a5 ^' p
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2014-12-22 16:08:56 | 只看该作者
追加说明:任务是空闲任务,因此没有做循环。
1 V! s. c: a; K6 _& ]3 H! }5 e* y# O
回复 支持 反对

使用道具 举报

0

主题

184

帖子

1137

积分

QQ游客

积分
1137
板凳
发表于 2014-12-24 18:06:21 | 只看该作者
多次执行是没问题的,最好不要用空闲任务,优先级太低。
/ x) O0 @+ W) n5 |# @6 u' c7 |
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-5 17:16 , Processed in 0.038206 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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