嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?/ N( q  |! ?/ p" Y# `/ o' Y$ F' w
Void UPP_TASK(Void)
4 {3 V4 [9 G/ Y8 m* I{0 @5 f2 W+ `: u. D. e+ ~
; m1 [7 H9 v6 s/ }9 o9 Z
    int i,j,k,target_int_count=2;- {& I& G5 x& e/ ^' q) h
    char ch[2];
0 x/ M( l6 ]2 c4 }3 `6 T
! a# {! a+ H* @0 ~, V7 w1 O
& r2 _8 j3 ?/ p/ @. H) |4 d8 P7 Y* [9 C  _; ?
    upp_interrupt_count  = 0;! d0 w( b. R& K$ ^% T' b
    upp_error_count = 0;2 B6 ]* A% I# P# ]5 Q4 k

, o6 K1 C, }" k% y2 {2 j0 _    UARTPuts("\tResetting uPP buffers...\r\n",-2);! F7 s+ [2 e* Z# }  C  G, }
    // Initialize data buffers
% C# d& @. }8 R9 s& K; `, ]0 z, g  B    for (i = 0; i < upp_frame_size; i++)
, x- e7 ]  q* o* F- v2 h  n    {
3 \* j( J. u' ^- W" p4 |       upp_buffer_b =i;9 y, ]8 }, e( R
       upp_buffer_a = 0xDEAD;
9 i# E3 E5 c8 H% y  j9 B    }
! Z$ P+ E! x0 h' Q( B1 R
+ a& ^/ y0 P" h: O* o/ f& I+ E+ |; e    //for(i=0;i<1024;i++)
. O0 ?$ g7 T# a7 k    //    temp=0;
  `. ?5 f* C& Z& ?" U/ ~  i) b9 y
, I! L! G6 O7 ?2 [    //UPPReset();. f( T1 i& }0 c/ ?* a
    /*启动UPP DMA传输*/  f# x4 R, m- Z) O3 m3 Q0 n4 N
    UARTPuts("upp_prog_dma_i\n",-2);
8 b/ {8 F; S, X( W7 g: j0 X+ m    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
* u# j7 b" z2 w0 E5 k    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);& k% L* w; E9 c% E
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
  \) D" h+ f1 u& }9 V: N- y
7 c, Z; H. r& J* N    UARTPuts("upp_prog_dma_i\n",-2);
# f6 [  f1 r) ^3 |, W4 b( r    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
2 ^# ?: z( l1 l9 a+ h    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
& q( ]  E+ ]1 |' ~    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);; H; D8 K% R, \! D8 _/ M! `7 H
/ ]# V3 ?3 `6 n/ \" `2 T% ]% A
    /*等待UPP传输完毕*/7 x& i5 |! o1 O" ?7 k$ x. d3 N
    //i=0;9 t' w9 l9 S1 v2 ?+ L; U$ ~
    //j=0;2 h: y( f  O  }( e' ^
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)3 M# o! n- M, p+ s. g- P, R
    {5 b7 T4 K) E) |3 n* i
        /*  测试UPP传输的同时操作普通DDR数据
6 y+ b( A& O$ V; g' Z        temp=i;/ E0 I6 N5 Y2 R( F/ u; f
        i++;
% r: [6 ~' k8 |; i! F        if(i==1024)
( v: q% f  P( [  a6 S        {2 c& t3 c# C6 X* ]+ l
            i=0;
  Q  [* ]" @  M+ Y1 B: R- {            j++;0 d: J7 ?8 a7 Z' ^$ e5 _! B
        }" r+ k1 S+ R2 Z# b
        */
9 p& L& ?* E  f# A3 p) i% w
8 T2 s5 C4 e) w# y; N& O       asm(" nop");" c* f1 p: K6 w4 I# B! R

/ z1 w; o* D% D. N) h0 m       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);  _. X. K, g( Q! M3 M
    }
2 F) f; _  A# G
- l' L$ x1 ?3 J5 a5 {+ `7 R    /*检查UPP传输的数据是否正确 (loopback modes only)*/8 Z* S, y( u3 s# V, \. ], ]
    //UARTprintf( "i=%d\n",i);% y; {: N7 D( b% S7 l9 S; X
    //UARTprintf( "j=%d\n",j);
+ ]8 L0 H% Q9 Q# A    UARTPuts("Data mismatch in buffers.\n",-2);; Y( |+ L5 V% j! C, a. K
    if (upp_interrupt_count == 2 && upp_error_count == 0)3 Y8 I" L% n7 e3 \) y7 p9 `
    {
% ~* {' J5 t5 F* _6 z        for (i = 0; i<upp_frame_size; i++)
$ p& z5 t2 @) _; p        {0 m) \( I, W5 K* m0 T
            if (upp_buffer_a != upp_buffer_b)& [  c% L0 \6 j; J7 W& |
            {
; g; O* C" h: }- C1 M                upp_error_count++;" `* I, B0 B3 Y  s: T
            }
; `  H0 W( J6 m7 w! L7 Z        }- ~; C# g* B3 n# O. R( A
    }: T9 p; M' _$ t  l! R* T/ Z6 y3 ]
2 a2 s" `+ s  i1 }# D5 }( a
    /* 报告通信结果*/
( G6 t& \; J$ x    if(upp_error_count != 0)! K( V+ p! f) L4 ~+ U$ \
        UARTprintf( "upp_error_count=%d\n",upp_error_count);4 H9 m# H& U2 X0 k! k
    else) V/ R& n5 ^3 @6 K& I( f# a
        UARTPuts("uPP transfers complete!\n",-2);; r+ f* _& }6 h- S  S

  G- ~' ~; k5 X6 p5 S/ g$ j    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
8 w, L  M  |9 l. u2 o3 }8 I! }  v    UARTGets(ch,2);
- K( B. c2 L) f" {    UARTPuts("\n", -2);8 V+ c, C3 F& v: \+ x
+ `% z; o8 o+ C" D! }4 v  r% p
    if(ch[0] == 'y')' P+ \' _: o- V5 s5 {" H
    {
1 v- g- R& f' V5 b        /*打印全部读到的数据*/) e) N( V, H" ]" u
        for(i=0; i<upp_frame_size; )$ J9 B2 G) Y5 h: c+ U" ^& r+ s; i
        {
/ F- D1 h( Z/ r2 w$ u; F            for(j=0; j<5; j++)6 v! {, {! c( x, L) e
            {7 L& S5 k, W) o& i
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);( g  G; r8 {5 c# r: k" g( v
                i++;8 N" L$ d2 R& p
                //if(i >= 4096)
$ P8 ^* _, j1 \6 Z. ]                //    break;
$ S7 Z( S3 H* b# G7 I. o- I/ A/ H9 r4 i9 W/ m
            }' @  r' _' z1 H
            UARTPuts("\n",-2);  z. I; |+ R& ?( g: o- s5 d* f, ~- J
        }, H+ ?! w6 K1 V: @, h0 Z8 b# e/ f2 S
    }
+ L* g) }  ^$ `& u" |. c
1 l, ^; f, K& L/ j. [1 k+ T}
/ j/ f2 J( Z5 }

8 f7 e; \# t, v/ [- Q, @3 B: f7 ^) i
, f$ \# K+ W! y5 N
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
/ Z6 Y1 j. ?: {' B! P$ m
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。: @! V% `+ z& \7 ]5 O* W4 Z





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