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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2014-12-22 14:35:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
- [; a9 t) f  a! o9 S
Void UPP_TASK(Void)# s( y* n. I( ~- s
{
+ Q  }" Z# p5 ~# F7 m  K; @* \
. k) O6 H8 h: _; V6 }$ W1 `5 Y- s    int i,j,k,target_int_count=2;
; K' u+ d8 e/ j3 q3 i, I5 \8 A    char ch[2];
- b. L' x5 A; l9 _3 _: W& h/ Z' t& o
0 [3 S6 C  N3 j  S$ q' D8 F# i4 |6 \7 ]( X

  r  ?/ m) w2 _+ {6 G    upp_interrupt_count  = 0;
" `5 D0 m. p- p0 Y% }8 i, u5 }    upp_error_count = 0;
9 l1 H" |& R6 I* X/ V4 m0 H
0 A# ?2 {: B' @0 l; f/ p3 M5 {    UARTPuts("\tResetting uPP buffers...\r\n",-2);7 b5 T, v* m( Q+ g
    // Initialize data buffers
$ g9 d) j. N4 e% d7 c    for (i = 0; i < upp_frame_size; i++)) L. Q( G& k- c3 n' |
    {
9 K. n, s- e2 x: Z: {       upp_buffer_b =i;
$ C9 G' E- c5 {4 c2 b! K$ U' b       upp_buffer_a = 0xDEAD;& L8 T1 i: U" a6 D5 e8 {
    }
6 `* T5 R) `. h6 l8 |3 o3 R2 ]) \3 V6 v' T* p  E& c8 q' D, C
    //for(i=0;i<1024;i++)2 L) t1 Z6 ?7 Z5 O
    //    temp=0;& F7 ^3 Z9 P6 t1 H. z6 P$ }# `1 m- _
" K- J( z- j6 \- k5 ]8 P) t  s  W, a
    //UPPReset();; L$ {- n* }, N) K
    /*启动UPP DMA传输*// J5 J) b1 g  Q
    UARTPuts("upp_prog_dma_i\n",-2);$ E/ s5 }+ E3 I9 Z1 R) ?
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;9 t% m& k" s6 l
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
" t& V4 p5 ^9 U, T( R- B) t# A    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);) I: h$ \6 B6 N1 r6 a& a+ `2 t

! F- C+ ]" T2 X    UARTPuts("upp_prog_dma_i\n",-2);
2 R; y$ z3 V1 e6 s$ @/ [    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;; t/ I# F9 |8 Q
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);( F. _8 a! P! b! ~
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
* p, J1 |' n0 p# ?9 L: c  }
% ]" ], B/ E: R2 H, |5 w    /*等待UPP传输完毕*/
) f/ x; a4 R& S5 W) f    //i=0;
3 M1 Y: M0 N$ r/ J. q    //j=0;
  L! U% R( P' j3 l3 ~' i, L9 b    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
$ l3 L, s6 e% P# W2 ?* K) Q    {
# K( o; G# s) X/ X& ]8 ^$ Z        /*  测试UPP传输的同时操作普通DDR数据
% C6 \" F& O) C' f+ G0 @        temp=i;
( K. Q: H( f" n6 ?/ C9 }        i++;
3 F" S' A9 E4 ^1 v3 T        if(i==1024)
2 Y& G3 Y4 \; x6 q        {
3 |. R6 r5 h( I, O            i=0;
* I9 k% b; z+ q- j. o            j++;
# d) z; [4 k2 z5 P, j. |/ E        }
3 `. v- @8 B* U! X        */
: a- n) A4 O3 ]+ i3 V& s8 E  S# d' X; O3 ~. f
       asm(" nop");" P) P! \& x9 ~. d! D  A
7 k' o9 O4 a$ A, B" t2 X9 w8 E: L& M
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);; X% l) v5 N: Q- v; Y
    }& s4 S+ X2 A) p; c: H5 }
1 o5 V: C0 c  \$ T/ y+ v
    /*检查UPP传输的数据是否正确 (loopback modes only)*/  f6 K: D% ~4 l. ?& v7 `, {& D  q
    //UARTprintf( "i=%d\n",i);2 ?# d/ T7 K5 j0 g/ d2 j
    //UARTprintf( "j=%d\n",j);* T, R9 F5 ^7 l# G8 N( ]
    UARTPuts("Data mismatch in buffers.\n",-2);
" w/ r( S& L. ?7 {8 M" r+ u) D    if (upp_interrupt_count == 2 && upp_error_count == 0)
$ f- t, q+ T0 o0 n. z- h    {. u- x' u' q, `% s. R& K
        for (i = 0; i<upp_frame_size; i++)- ^/ {0 C& a2 N! N
        {) w" X9 {5 V; s# c2 ], ?  [
            if (upp_buffer_a != upp_buffer_b)
  m5 Z7 T* h, e  }+ K5 I% Y0 Z% I) Z            {) j, q5 R$ n! R; E
                upp_error_count++;$ w1 q  Y8 d% F8 ^6 g( P' @
            }
) K* E9 D5 ^' N7 f1 x4 I        }& `# E0 T, v7 r" J/ W1 E" N0 e
    }  B4 Z" U' _( [( F' y
6 r7 }) Q, v: O1 L' y9 p& ^# K
    /* 报告通信结果*/
5 w3 K8 {8 Y9 t/ `+ Y- n- {% l    if(upp_error_count != 0): c# \+ \& ?% \' W
        UARTprintf( "upp_error_count=%d\n",upp_error_count);! k9 \: v: ~% R% P4 k8 S
    else
, F2 w+ e" @) z8 \# p5 C- a        UARTPuts("uPP transfers complete!\n",-2);; ]) q* a5 Q% f2 u: K6 l4 P
) ^- F$ k0 B7 h  Q, ^
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);+ @. b+ Y8 A/ D1 K+ ?9 C" U" M( _+ Z. D
    UARTGets(ch,2);) k+ F9 B& ^2 A/ O" @$ x7 ^
    UARTPuts("\n", -2);
$ e/ T0 P! a6 W/ Y1 `1 n3 j0 \1 G" r( |$ W5 w1 N
    if(ch[0] == 'y')
+ T$ [# s* M8 t4 C  P- C% |    {& l6 {2 V3 z. P! z+ N
        /*打印全部读到的数据*/
% C) }% `8 K9 A9 z' s2 I. ^        for(i=0; i<upp_frame_size; )0 i/ I: Q. N% t; a5 L1 K2 x; H
        {
! X6 d8 B# G8 h3 |8 ?: D& z            for(j=0; j<5; j++)
$ S! {6 `( m# b( H            {
6 a3 v/ q8 n2 T) Q2 u9 W0 e/ J. s, ]                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
* \% m0 k8 T6 Z! T' Q$ t                i++;
* _% a2 k5 h) x: U3 F5 F/ d( @' L                //if(i >= 4096)& s- x4 f& b" Z7 R9 z6 P- P7 X: u$ x
                //    break;, \# T0 T* `! |4 z/ A$ J

& Z# O. M9 i. r! r+ {- `            }
* F- @# ], p! |5 {5 c* m8 G8 w0 `            UARTPuts("\n",-2);* |+ U4 j2 u* Y) [" c7 r3 \7 b  ~
        }
# o4 b' ]4 U) t# f' H4 _- u1 H    }
6 X3 t8 B+ o8 m. T8 ?5 u  V( ?: y  }. k: c  @, o1 d1 _5 ^
}

  c* t$ L; [* B% m' x. K
- E) M3 |- c* x$ k# F" s1 j5 ?* |
7 i8 o* I% p$ S* J+ g
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2014-12-22 16:08:56 | 只看该作者
追加说明:任务是空闲任务,因此没有做循环。% P: I, F& N2 P3 t" n& o: N+ |1 q
回复 支持 反对

使用道具 举报

0

主题

184

帖子

1137

积分

QQ游客

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-1 17:53 , Processed in 0.039991 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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