嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
; _" t3 ]+ T& X# @- r" Q
Void UPP_TASK(Void)
( n" ?* z2 N7 G2 F7 Q{
! y1 L3 l- C- o1 ]
; i; C5 ^+ L: t" k0 {/ K    int i,j,k,target_int_count=2;2 _' O$ D* |4 V$ x$ I
    char ch[2];
7 l! @  a% h/ }4 {5 Q6 @4 Q, v7 d; h- a: ^

0 ^* T! _* M: x, u/ ~. v/ ^8 X; m, v1 U3 ]: _& p
    upp_interrupt_count  = 0;
- i  N& a7 |' k% O    upp_error_count = 0;
: ^' y; |2 P& a" d% ~4 s% \( D
/ F9 V$ g5 W8 G: B    UARTPuts("\tResetting uPP buffers...\r\n",-2);
3 C; H# S$ s: M' ]& C3 Z: B    // Initialize data buffers& v/ c& n' i0 a- w" f
    for (i = 0; i < upp_frame_size; i++)4 S. x, r/ _" P
    {
: Q" }2 T! w# Y7 T+ A( m: |       upp_buffer_b =i;! c( E9 W$ [. {6 l- p
       upp_buffer_a = 0xDEAD;- @% J& Y' l+ E/ p
    }$ m) j2 k) q, B1 f' S- j, v6 B5 @8 z

/ `; Y. z2 E1 z' k( \    //for(i=0;i<1024;i++)! ^) x, J6 z6 U9 f# `
    //    temp=0;
/ f2 Y  x. s4 a3 o. P6 I  q
: {8 R0 W- V6 C/ Z/ r9 z- }    //UPPReset();  B2 P; C& K- y" B0 Y1 D
    /*启动UPP DMA传输*/  T0 E1 a3 T" ~
    UARTPuts("upp_prog_dma_i\n",-2);: M0 Z2 N+ v$ _/ E) U- X
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
+ ]6 ?& g& ?- ~  x3 n: T    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
% ^+ ]5 @+ j  n0 g; ^  F' D    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);! G) M2 B. n% r! O1 }( N* h* ]  k

2 U+ h# Y8 L! W9 {$ r) I  C7 d, O    UARTPuts("upp_prog_dma_i\n",-2);
( Q! s' d5 e1 K  Z; H    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
% M2 h$ V7 w2 P: |, m! G    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);- x3 p  o2 c+ W# {
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);" s& w# D% N* o4 ~. B5 N4 _: i

. T3 C  K3 J7 k. Z  H( E6 l    /*等待UPP传输完毕*/
6 y: [% v3 s$ R9 T7 G! \    //i=0;
- O4 i, L; K& ?- o) o5 P6 ~3 X    //j=0;
' `' W1 `! u9 C% O* w    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
* C: m  u5 N) L5 i; w6 m1 m# z    {
) D  P( b* G8 Y  a- o0 x' P        /*  测试UPP传输的同时操作普通DDR数据3 p" i& \3 ]* O$ F6 G( }& ?. E
        temp=i;: g7 M! |1 ?5 `8 o; B+ \4 w7 K
        i++;
: t, K6 T! H# v/ u6 r- M# m( R+ E        if(i==1024)
4 t3 R, q+ `" B( l0 ^        {
9 J2 S3 h8 ]1 e2 R            i=0;1 G" G" Q# G- X# G, G$ X$ A! K4 h
            j++;
3 I. z) q4 C; }0 d2 f9 n1 w        }
! \# F4 m* T( Q1 w4 M1 E# Z; }1 i        *// s7 U. W0 j1 L4 u6 o+ f6 M
$ w7 t" L( V) f6 c' U: A5 K
       asm(" nop");
8 r& c% o  m5 M7 R; _: g- @
4 z" j9 o( U2 ?$ A# a       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
7 S! B1 T# C1 ~0 Z& \6 b    }+ F, Z% E1 q/ T, {

1 Y5 G% y9 E" N# k  F9 }6 L, w    /*检查UPP传输的数据是否正确 (loopback modes only)*/
( ~8 M9 C1 h6 n' C- b    //UARTprintf( "i=%d\n",i);
# l- _* I/ {+ M5 j* I: V    //UARTprintf( "j=%d\n",j);" X' K9 K" t# E2 `" ]
    UARTPuts("Data mismatch in buffers.\n",-2);
  h; U3 z7 V" I. M/ V- t1 u! V    if (upp_interrupt_count == 2 && upp_error_count == 0)
0 I4 X# [1 T8 \- u, X    {: L: Z0 k- U# f8 ~9 H  i1 X5 z9 `
        for (i = 0; i<upp_frame_size; i++)
' U, f3 F! o+ \+ c- D        {
* l: X/ E; l# `  ^6 `7 ?            if (upp_buffer_a != upp_buffer_b)( i9 y' u+ T' ]
            {
! L9 i# T) O! H* N% c9 |                upp_error_count++;, I+ K/ o: N! _/ d1 Z  ]7 C5 y6 S
            }! P" H( }) w5 R0 J: @4 W
        }
# e3 @/ G) D+ R4 V: I  m, r4 a, t    }
4 l9 t8 ~# w6 F: U! z9 c( ]8 ^# k
# p7 d+ s4 X( }! a9 [! G& x) }    /* 报告通信结果*/
7 e6 x  ]- {3 d# S* G; l9 {% k  n    if(upp_error_count != 0)! F" Y/ H: q" Y2 j% u
        UARTprintf( "upp_error_count=%d\n",upp_error_count);2 Z5 G0 x: R9 S2 s
    else; c: }! s3 L& t) R- x5 W" U
        UARTPuts("uPP transfers complete!\n",-2);
  z7 U  N2 K, O# W9 r9 v. X* ~2 A
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
- v/ s/ c0 s5 m- G9 c% o0 f9 W+ V    UARTGets(ch,2);* D) I/ a6 [5 Q+ E. n  H: }
    UARTPuts("\n", -2);
+ v8 s( q& ^  V3 e
) x' c* t& x6 M1 K, Z& @    if(ch[0] == 'y')7 M6 p+ M5 A; }9 v
    {' N: A# }! L% T7 N+ ^/ b& X' u; s
        /*打印全部读到的数据*/7 i6 C1 \0 n- @! }
        for(i=0; i<upp_frame_size; )
$ W- V9 i' y- X6 U; W: T: Q        {
6 F, ?! v; t7 n! @+ I2 r            for(j=0; j<5; j++)
, j# Z$ A' |% X  R! {            {- V# b! K% r5 Q8 @- q7 T+ V# d
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
( {1 Q$ q! e* |- h% L                i++;
" A) J7 R- ^- E2 j" R! O                //if(i >= 4096)
# ]* V7 P! Q- n8 B* o8 A, s6 ^                //    break;
5 l0 K" @$ {8 N' L! I; V
% l# B8 Z: \" Q! p4 E2 i            }) |/ K" M( \7 G8 ~& M+ B6 m. ]
            UARTPuts("\n",-2);! R* x9 ?* G7 c9 P1 S
        }
  f) ?7 C( G7 l+ U; ?    }9 z. g8 {! K2 W  b
1 n: d6 C( O# v* x
}
0 k2 A) ~$ ]! p( }  r, p
) z9 j1 Y7 K6 `$ z3 i

7 O: I( F' Z- m9 [/ S# b7 k3 I
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
8 p; H% {: w9 C7 ?# a" R+ ~
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。, R( H$ @5 e7 I( u





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