嵌入式开发者社区

标题: upp问题,在SYSBIOS下的应用问题 [打印本页]

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?0 K+ H; ]* R) N; ~9 w# v  |' o
Void UPP_TASK(Void)
# g! R. c4 n4 z{
2 s4 k3 e+ a& K' h, l6 l" S$ Y( a, H
    int i,j,k,target_int_count=2;8 c9 ]9 v3 H: X' S# q
    char ch[2];$ }' S  [. V$ m$ V, w$ @5 g, n' z8 e
/ u. n5 u- Q6 y+ ]$ p& M

# N# k1 n  p8 h2 \
# D0 t, C2 y: w+ V6 R# [    upp_interrupt_count  = 0;  u% Z  @) P/ L4 y- Y  Y
    upp_error_count = 0;" B3 ~/ m9 n+ J4 T& g

$ d9 W- \+ u5 ]7 F0 O: [& J    UARTPuts("\tResetting uPP buffers...\r\n",-2);
5 a7 H, `7 M! B1 |1 E! H7 D" r2 L    // Initialize data buffers  v4 @7 l9 S6 }) u: A3 R  S
    for (i = 0; i < upp_frame_size; i++)
6 @/ {8 u( W$ v8 X/ |  k    {
/ }2 @  A$ Q; z, H       upp_buffer_b =i;
: C' c* z! |7 C4 l/ \$ D       upp_buffer_a = 0xDEAD;
4 L3 x+ F& p3 v$ ^- V+ A, b    }
/ _' b9 I$ Y1 j5 y" p, j9 A5 K' M* {& m
    //for(i=0;i<1024;i++)- R& M+ }& D1 L, `' D- R0 f+ e$ w
    //    temp=0;
% Y( d9 y8 I, J" G8 U; J+ n0 x
; }0 A: B9 D4 m    //UPPReset();/ C8 \% w  ]8 z* w3 t
    /*启动UPP DMA传输*/1 ~# [; b  @, {6 i5 {; c
    UARTPuts("upp_prog_dma_i\n",-2);/ s' Y( T( e. d& I
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;3 S+ m: g, d6 Q" S& Q: ~
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
; s/ _% G0 `) }3 z    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);8 P$ I. c: A- F4 G/ T* {
. k( p! O0 d; J0 u! k
    UARTPuts("upp_prog_dma_i\n",-2);
/ S4 V/ }. d3 O" }    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;4 s1 j% v- ?  G
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
5 K! L  Z4 }- J% O# \; A) t4 ~( e5 T    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
1 D0 j* J( T6 S$ f- ^( u
& H4 d$ C' f8 {: a    /*等待UPP传输完毕*/
- Q7 P2 H9 E2 l: k' u1 `% e0 z    //i=0;; q  w5 K) A. p0 b- b; J" F4 \
    //j=0;
2 N( v; i& a) v; H    while (upp_interrupt_count < target_int_count && upp_error_count == 0)$ p3 d2 @2 v) t
    {
/ c2 Y8 K4 ?2 e$ u5 G        /*  测试UPP传输的同时操作普通DDR数据
3 o3 M, c- Z, w  W+ _7 A        temp=i;6 g8 k* H% d" I# M9 c
        i++;
0 r. j) n" u$ k$ {; Z        if(i==1024)5 o# S+ p4 z  c. ~
        {
, n) f: @* P* ]2 X2 n/ n            i=0;
. f" U$ ^5 }8 `- ^+ C% M            j++;
4 o& @* t2 w3 r; @        }
( L1 V1 P) t" B7 t+ c        */8 |' K, X, n5 V  Q! F
# L1 P  X6 C- p6 z) @) S& s
       asm(" nop");+ |/ S' i- j$ d; i/ f4 {; F

6 g" c* x1 N' V, K       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
$ |$ W# _$ g  t* N" X& t  K    }
- K( j# |+ v# U: Q9 v
- y8 d2 B3 z* o8 u- G    /*检查UPP传输的数据是否正确 (loopback modes only)*/
: [6 j' h; v& x" G    //UARTprintf( "i=%d\n",i);6 U* ^- i- R8 S& `* D+ F
    //UARTprintf( "j=%d\n",j);( M9 D" S4 O% \( M
    UARTPuts("Data mismatch in buffers.\n",-2);, O! Y4 I1 m3 r
    if (upp_interrupt_count == 2 && upp_error_count == 0)& `5 L) w% q) x0 W( J. R
    {
% c4 X6 W: S7 L1 L, v7 `& x5 _        for (i = 0; i<upp_frame_size; i++)
' e) y! i" W5 L! l, i3 g# U% A" c        {
) C$ x& n0 o' k            if (upp_buffer_a != upp_buffer_b); v2 ^% ?( Z0 T* D: N
            {
# \4 V; a5 N5 {5 k                upp_error_count++;
0 o# T4 k0 y8 S            }% d8 k  t/ h+ y% X( o7 b5 n- R# ]- `
        }; {9 ?7 U& ^1 ^3 b+ y& v
    }! m6 x6 d" [2 `8 m& P/ K' k/ n8 P" `. E

  @0 J! v" k7 ?, I    /* 报告通信结果*/! C2 X) a' L( D: b4 N
    if(upp_error_count != 0)
' |2 p# @8 H3 P' A7 S" ^( `        UARTprintf( "upp_error_count=%d\n",upp_error_count);+ d( L$ M+ k  h$ j. h
    else
2 v! j9 |# S6 h0 ^, |9 S        UARTPuts("uPP transfers complete!\n",-2);
  F/ u1 W; w3 E  }0 x
4 o" w0 E1 j3 I    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
! Y4 l/ Z* l2 G- z! _    UARTGets(ch,2);
! q- s/ H* O4 n7 O3 |8 T  F- I' J% O    UARTPuts("\n", -2);
* Q$ K: y, A4 N/ x$ r6 w4 M! r8 W; {" T+ A  a8 ~8 f
    if(ch[0] == 'y')
' ?( X& w2 K& P8 Z* ?    {
0 E+ c1 c5 l- Q* r: S3 O        /*打印全部读到的数据*/- n  W# @$ T( O  o* z# w& @$ x0 D
        for(i=0; i<upp_frame_size; )4 R: ^; B; [6 I. r. N4 @4 j
        {
0 e+ p  ^( j: r7 g6 `4 a3 o            for(j=0; j<5; j++)
0 D& V2 _7 @+ a            {
, `. S6 R) K9 r2 t                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
% p' Y/ ]& \# M/ _) |                i++;) F8 D2 m& H9 k9 B$ X
                //if(i >= 4096)5 }, b1 e) H% X  A" O! L
                //    break;! p- J2 E* r! Y1 q
2 x- Z1 A8 k5 z$ E0 C/ n& G, L7 n: ]
            }
( B) W4 Z4 g4 d2 Q            UARTPuts("\n",-2);( _0 \$ d% o) G0 `2 l; X
        }9 ]* M  ^5 t# Q8 R# `; O, h
    }( A* Y+ y: [5 o
7 N8 N3 _! y7 l6 b' r, p
}

- Y5 e; J; ]' l: l: [4 I

: o/ P0 x; N* @) J- y: J) P
# Q: r- b! E/ r9 }+ m# b6 ?
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
! T1 g& d1 x3 m5 ~
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。6 _( ^' o/ e: ~. m' d





欢迎光临 嵌入式开发者社区 (https://51ele.net/) Powered by Discuz! X3.4