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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2014-12-22 14:35:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
- G- q7 Z4 S+ f. t$ K) Q/ z
Void UPP_TASK(Void)) G6 L6 ~. a' O! a& _: T3 O! s
{1 @7 }1 Y; X% N. D/ H: W
& E$ m+ a4 U5 M4 P7 U
    int i,j,k,target_int_count=2;0 n9 _& [9 `- g% C: W
    char ch[2];  \! I0 I+ H; A, I% I7 w# |

: O$ |# |& z1 N  p; h" ~5 T3 }# S7 V9 P' t( ~' A7 C* m! }

3 N0 _- ^9 l- y  h+ e* O    upp_interrupt_count  = 0;" [5 N) j/ q; l4 a
    upp_error_count = 0;
3 w2 |% v. m: _+ n
( t& p6 q4 a& O  W+ K% T6 t    UARTPuts("\tResetting uPP buffers...\r\n",-2);
2 s7 W. O3 [8 N" ?9 L6 l    // Initialize data buffers  b/ O- W1 z" F) c  w- _
    for (i = 0; i < upp_frame_size; i++), \1 }& q3 Q0 x
    {# O) b" I9 X3 c/ P
       upp_buffer_b =i;8 m- f" S/ D9 a1 M, E6 ~; G# }, s
       upp_buffer_a = 0xDEAD;. J1 Q+ r! Z; c5 E' m, U. P
    }
* Q- E- L: [8 g
5 X/ N. V# s% z0 Y& F2 O' m0 F    //for(i=0;i<1024;i++)/ A6 I) p* {: |) ]5 h& k1 {# D- Z
    //    temp=0;
; t/ j+ @1 M" Z* \8 m7 F8 g4 `' E: Y5 d/ \3 b% M
    //UPPReset();5 h5 i( \/ H. T8 j% _, c5 D% b
    /*启动UPP DMA传输*/0 w. L' r! h9 `' f  z
    UARTPuts("upp_prog_dma_i\n",-2);
( R( J3 f6 q5 }4 v2 p" I    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
( s+ L6 X. z+ U2 E6 ^    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);2 v- f' o8 U1 S. N: R, u
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
% R1 ]& h8 E2 o3 E' D; ?" M! X  \# V; o# r- D. n% q6 |% n- ^. P
    UARTPuts("upp_prog_dma_i\n",-2);, T9 \1 O( P6 x' w& v
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
- z4 N. S$ c# J  E0 K    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
, m/ W7 o* C6 f6 g' S$ P8 S6 R    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
) y/ |4 Z0 h& H& I' e9 W8 j
* ^" |  z+ \8 N4 T6 I- R    /*等待UPP传输完毕*/( M# U- x% f. \1 Y. }
    //i=0;
' D& d7 r6 M" k    //j=0;* G+ u7 \! U! J- @
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
6 ^, j$ O/ K, W; w$ k    {
/ S$ g  O* z5 ?- Z. F; W        /*  测试UPP传输的同时操作普通DDR数据
! H' N4 \2 i/ D9 z9 ^) H        temp=i;: V' X9 _3 j2 d" d6 j! C
        i++;6 D4 \  @. ?- q6 P& d% F5 D
        if(i==1024); g0 z2 M& k5 g
        {/ E, ~% u0 ]) p6 k$ R: o
            i=0;- h! q( E9 F1 Y' b- _- m
            j++;
% O8 Z. c, w* @- k& x" y' }& F5 J        }
$ z* I; v) z/ L+ d0 P        */2 d( ?, D  `. c6 }$ O( c# R- ]  t4 E
, W  P: b5 h" }) w3 S
       asm(" nop");$ q$ k+ M$ l6 p" Q0 ?: [

/ @0 M' m8 O; i6 _6 Y       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
; S3 D7 ~# p3 ]7 B1 L+ y- Z    }
  j+ B) W5 f3 \  A8 i# k- Y8 Z
5 U6 H# ]3 T/ M& G- v    /*检查UPP传输的数据是否正确 (loopback modes only)*/4 A! s* r& B- ]! z& R7 }! j
    //UARTprintf( "i=%d\n",i);% g* o# w& Q( {4 F' e$ ?  x
    //UARTprintf( "j=%d\n",j);, L: B# p; n7 Z% G
    UARTPuts("Data mismatch in buffers.\n",-2);
) y+ C1 P) [' p9 F- c* V    if (upp_interrupt_count == 2 && upp_error_count == 0)5 f" b# n$ u8 L, o) r( c
    {
. Q/ d6 i! P: Y, o! e- h* g        for (i = 0; i<upp_frame_size; i++)
9 b# n8 Y$ K4 a1 j' k" c        {$ g" C* ?+ L+ f
            if (upp_buffer_a != upp_buffer_b)
! _% Z& v1 b5 G            {
: `' S7 o- x  t. K  M: Q2 |                upp_error_count++;
; J7 M' g+ [' M            }7 s$ p( o* [1 z
        }
  k1 y5 B/ ^/ Y' C6 i/ Y    }
$ p0 z) V# n+ t$ l6 C3 j6 z
& E- L- s; B& k  M7 w  j    /* 报告通信结果*/) S; Z# `$ o6 v- Z* m
    if(upp_error_count != 0)
+ ?7 i2 d- e4 U' O+ @        UARTprintf( "upp_error_count=%d\n",upp_error_count);
1 X% x0 u. M1 P& ~1 F3 K& x" B) j( W    else/ K1 s  H4 f# }/ @2 J+ A# G0 }  h
        UARTPuts("uPP transfers complete!\n",-2);4 ^/ \3 Y2 g  q$ ~* Z  x
/ i" v! y9 ^7 ^/ F  O6 k  H/ X3 U
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
3 j; @* D. H0 o9 i- |- D: l; a    UARTGets(ch,2);
" W/ y  V& i$ o    UARTPuts("\n", -2);6 r! ]# |8 t6 [7 p$ O

+ R8 E: D% P+ V7 a9 I    if(ch[0] == 'y')9 v+ r" g2 c! t2 i& a' f
    {
% M/ ~+ t6 G) A; }        /*打印全部读到的数据*/
6 i' W- n1 h) a; L7 \; ~2 l        for(i=0; i<upp_frame_size; )
5 D, L. P+ Z0 \6 S; ]/ m        {
% z% U  m& @. n% B1 K8 G/ }            for(j=0; j<5; j++)6 m- W1 P" t& w6 `1 Y4 m8 N. Q
            {
) y8 A8 N- a3 f                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);2 s) t% Q9 K4 h6 {4 m. I
                i++;) b  ]$ A+ P' i$ I9 J
                //if(i >= 4096)! \. k0 f6 O# y7 Z& r
                //    break;
& i+ k  ^$ l$ D
6 L& A) b9 R$ p. R  U' r: |/ z            }
4 _1 [# y/ q7 H8 W- J$ m  }; m            UARTPuts("\n",-2);- a' S! ~9 c4 d- @  u! c( w% [# ^$ z
        }! c; ?: \- h* ?8 M4 M9 U5 g
    }; ^9 i' \  @* R5 d
& \, c3 N5 X4 j  t. s/ S* }
}
, y8 c4 b5 ]' d* z

* b# I1 p9 U+ S' Q; b* I6 g1 P( ]( b0 ~# F
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2014-12-22 16:08:56 | 只看该作者
追加说明:任务是空闲任务,因此没有做循环。2 G" V- p# h# E. T; K; q- p! K
回复 支持 反对

使用道具 举报

0

主题

184

帖子

1137

积分

QQ游客

积分
1137
板凳
发表于 2014-12-24 18:06:21 | 只看该作者
多次执行是没问题的,最好不要用空闲任务,优先级太低。
. [/ h0 Q( u/ c+ _2 D+ \
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-7 07:35 , Processed in 0.040612 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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