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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2014-12-22 14:35:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
5 s* P% J" R; i4 p: u+ S/ p6 k( _
Void UPP_TASK(Void)
1 ~. _3 J6 S5 _: l# a! n6 w) N7 k{
" B; g* i7 f4 }8 b3 x! N) S  |% t2 N/ `; `' T
    int i,j,k,target_int_count=2;
% z4 G$ M3 _, Q' |& Z    char ch[2];
( s, ~( ~& B7 N' A
; P8 P" }) f' N7 e
; A( z( v" _+ _- y7 y$ g; V# r9 n- w# T- `4 F; W! ]
    upp_interrupt_count  = 0;
+ B; T) _' l. S9 O, H    upp_error_count = 0;
; ]* L8 `+ `0 q) l- r
7 w5 }2 \: I8 z9 G1 q& J    UARTPuts("\tResetting uPP buffers...\r\n",-2);8 H# M* i8 U8 a( \) T
    // Initialize data buffers& B. h" J( O# V  {
    for (i = 0; i < upp_frame_size; i++)
+ e' E- k) L! y$ o# ?2 F% X    {
6 f! V+ g+ k2 B2 Q, J* J5 v       upp_buffer_b =i;, S/ V: [+ ~/ }6 a- D
       upp_buffer_a = 0xDEAD;
. J, w. V: p8 S9 [4 }1 D* M    }! @( P: G# M1 H  T# ]* `/ t

6 \6 }  @( ~2 |1 Z0 B1 T    //for(i=0;i<1024;i++)1 M. m) z: x+ q. F* v8 I: u( ^
    //    temp=0;
8 b) J( T" f( d' T
$ y* }7 ]( l; m" H. Y# u$ y, P    //UPPReset();7 x5 D. u; j: @8 i4 k( b0 z5 o7 W7 b
    /*启动UPP DMA传输*/1 U+ ]9 q' b: w: |8 d6 N& M
    UARTPuts("upp_prog_dma_i\n",-2);
6 G) s& W) t4 I% \* ^    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;$ O) G( s) W# V9 C' L( n/ ^5 O
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
3 Z0 c6 S1 u! \6 U    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);* T" X3 j) i" M0 K2 ^

3 Z+ q! e& x; s. L    UARTPuts("upp_prog_dma_i\n",-2);
  H& `; a. P1 d2 s# d; X    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
1 s% F; @: m/ T& R, b& Z; X2 H    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
  s3 i9 Q1 K0 N! d    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
8 i9 o6 \0 N' E. w  T
% K8 e6 E# _5 ~# |2 d3 ~    /*等待UPP传输完毕*/
3 J, J# V- x8 e  |! u2 D    //i=0;- ^% m1 p2 w, |  T
    //j=0;7 N7 ^# }. J2 d; m( r3 B; L* E
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
# i: |7 v% T! m. z: i% n    {
' `- w. a+ I: U- X7 e; T) W' m        /*  测试UPP传输的同时操作普通DDR数据; V  |% A1 w+ {7 g0 g& L
        temp=i;
8 c) A& f% g2 s0 {+ K$ r$ t        i++;" |# o: l3 t9 N
        if(i==1024)
8 L$ e- o: P8 w. M( @. V        {; K1 ]2 ?" N) L" w' G6 ^
            i=0;
/ E7 a% X1 x2 F1 L# |1 I7 P* b" C2 `            j++;9 O  \1 w' I. i( I" q
        }
4 {- @% W0 Z, P- Z! h# k8 }3 R$ `" G# |        */
8 ?# V( y! c5 l7 z0 T# R1 j$ m; R5 z& E( y& f% v6 M6 i
       asm(" nop");
1 ^# Q' z( ^: t8 `
* g1 d* ^$ I7 s/ a, P4 R       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
$ t5 Z. a& \$ b4 p    }
' v1 x4 h1 F. f$ F/ Q, j% U' V4 ]
( P8 n# m( `* `" h# q' E    /*检查UPP传输的数据是否正确 (loopback modes only)*/) N/ y$ A; [" o3 M; n; i( Z
    //UARTprintf( "i=%d\n",i);
* W: d3 B' z9 @% X0 }% B    //UARTprintf( "j=%d\n",j);
( |/ h5 \$ {( U& p0 v% J  D    UARTPuts("Data mismatch in buffers.\n",-2);
3 ?1 k/ `; s7 b) c& p( h$ q8 T' w    if (upp_interrupt_count == 2 && upp_error_count == 0)' ]( o7 G5 K8 o) S! l. p9 k
    {( G$ z# i  e6 I! e$ b6 E8 `
        for (i = 0; i<upp_frame_size; i++)9 O2 x. p" f2 D- f# l* N) c; u
        {4 @, s: X( L3 ?. _
            if (upp_buffer_a != upp_buffer_b)
" ^7 ^3 o9 ?7 J            {. S9 q2 w; L- U$ Z" d% u
                upp_error_count++;! O0 q" ?6 L' I1 f
            }
8 \. j  y0 y+ Y$ ^        }
( B8 V$ h6 @4 Q. c    }
4 M: I: z. C! ^4 e8 D/ Z+ j" \) }
( T* t% e! w6 _    /* 报告通信结果*/
( c. {$ o0 p  K  E+ V+ m0 g    if(upp_error_count != 0)
. s8 ?0 D! y% L" b        UARTprintf( "upp_error_count=%d\n",upp_error_count);
" w& Z: m! R- k% a    else$ H( W. Q1 t  t) p& g7 @
        UARTPuts("uPP transfers complete!\n",-2);  r8 d1 s( }: i) j9 n( G

' `! k6 a7 U5 ]/ j0 X) c    UARTPuts("Do you want to print all the data?(y/n)   ",-2);0 D0 N+ e: U: H) ?, s9 |7 u
    UARTGets(ch,2);
& @2 J: T3 f. ^% o. n4 f; D2 B    UARTPuts("\n", -2);
. M; z( L, x4 q& k, P% X8 B2 I+ E; i4 L
    if(ch[0] == 'y')
& `; i1 Z- H" S9 Z/ [    {
- O* l- W& }  E1 ~        /*打印全部读到的数据*/$ {* a4 n+ X# z  O4 S4 f
        for(i=0; i<upp_frame_size; )  f. M6 V7 `- ]; N% F
        {
- m, q- x* {& b6 i9 b            for(j=0; j<5; j++): b! J! }- k/ S6 g  q6 I
            {
* H4 o3 [: P; {( H6 k; x& k9 a                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
- T9 |" s( C+ d6 r" d( i, P                i++;
6 d* `' D" F# T) _& F- T                //if(i >= 4096)
# z$ ?5 |  D8 V& b# J                //    break;
; C  a9 }  Z: ]/ A; u
7 ~/ Z7 K  r/ k! \# Y8 y            }
+ f' b2 m7 j  U6 F1 r            UARTPuts("\n",-2);
: }! F: n% {0 O; D        }3 W. U0 o: c6 L
    }
, F/ r- F5 H2 u, i+ g
* N4 ?& Y/ R9 z! ^, }/ J, u. i; q' f}

/ q4 @$ \8 N8 E/ u8 O. ^

" D  @4 ]# \2 Z% e. {  I
& O+ N' z! I" _4 p6 Q# Y
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2014-12-22 16:08:56 | 只看该作者
追加说明:任务是空闲任务,因此没有做循环。8 L* U# I6 ~+ F/ I! c
回复 支持 反对

使用道具 举报

0

主题

184

帖子

1137

积分

QQ游客

积分
1137
板凳
发表于 2014-12-24 18:06:21 | 只看该作者
多次执行是没问题的,最好不要用空闲任务,优先级太低。: m) H- Y+ i% N4 k2 Z
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-9 12:14 , Processed in 0.043162 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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