嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?/ H" _" H. B( b/ `4 f% R( ^* v
Void UPP_TASK(Void)& A0 d' X6 V$ V4 W5 ]7 f3 X
{4 a0 Z/ }4 e( [6 i8 n( J& `" D

$ F+ p8 E( K" O, {  L    int i,j,k,target_int_count=2;, A* l3 E0 g" F+ u
    char ch[2];
; [  V: |/ J( R, s
" {& e2 P: Z& {0 q- F- |* W% _! j) G" p6 I0 s3 C

4 t- ~- u. U, q( [+ T3 Z: N0 ^    upp_interrupt_count  = 0;
: ]+ \7 g& }9 p2 U& A    upp_error_count = 0;8 i! }: z( l" x/ w

% h, d+ y7 N. c9 i! t6 ^    UARTPuts("\tResetting uPP buffers...\r\n",-2);
7 E4 W  ^0 `$ {& P4 J; |    // Initialize data buffers) `) C  _( e. i; b2 e+ r. k
    for (i = 0; i < upp_frame_size; i++); [' f3 G7 P- B/ `  Y
    {
/ A- P7 j: D) K. Q. e       upp_buffer_b =i;, \" [! n- `( Z' j+ [
       upp_buffer_a = 0xDEAD;
5 j- U! ^# z% I. V* T5 \; D    }$ ~9 u$ I  k8 I1 e2 M7 F5 v
" A" A9 ^5 P: n5 w
    //for(i=0;i<1024;i++)
3 s6 Z/ X  k# P6 \, E, K    //    temp=0;
% \: s  F3 N  ~
! g1 R. w. ^, E    //UPPReset();
7 G- h# q8 u' W    /*启动UPP DMA传输*/# }/ e2 W/ C9 }" s
    UARTPuts("upp_prog_dma_i\n",-2);
' f( ]/ ^7 n) F5 a9 G3 I8 K' Y    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
, n% z! _% q, b    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
4 v6 T6 ^# a5 x$ r: n: D& d' ]' m    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);, a  f/ ], v  N2 F6 Y: J

& [+ H! `9 ]0 q- |/ F6 t1 {    UARTPuts("upp_prog_dma_i\n",-2);5 F( e, t: O, q6 c! `
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;5 g$ e# E1 I$ S7 b
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);# |( ]  C. y5 ]" B7 V7 {/ |, @
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);- A! d4 U5 [: Y

4 a3 C* {! Q1 J) ]    /*等待UPP传输完毕*/* h7 }7 P# n- j# b. O8 n
    //i=0;' d* w3 i4 Z  h) X+ {
    //j=0;, J4 e! A1 m. H' _$ F8 T( U
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)* p4 S7 Z8 S. t8 a
    {: B- ]) l0 K8 a! a" I
        /*  测试UPP传输的同时操作普通DDR数据6 [, ~  ^+ p# X' v$ N/ D5 b- p
        temp=i;% ^* z" O; ~8 \$ B
        i++;
1 H5 ?$ f, _' m- A% v2 P( R        if(i==1024)% G5 w: U5 d1 B" b
        {* K# B4 T3 D, i/ o+ P; \0 `2 N
            i=0;8 r1 S  W/ U5 ?8 m3 }
            j++;8 s; Q8 S% u7 O2 F
        }
3 \7 ?0 L) I* Q        */
; C8 ?# U$ v/ F7 \3 U
% o- N6 ?! Q! D! m) a! S       asm(" nop");2 O3 j: F* x/ ]* r
6 M' r& M' G0 j+ K
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
, I+ ~& K. i: S- [6 p5 U) W    }6 P6 O: \% _' ?. D
2 y+ g: l" ~, u  _
    /*检查UPP传输的数据是否正确 (loopback modes only)*/7 w, g/ ]5 j5 j- J  s0 M( `
    //UARTprintf( "i=%d\n",i);6 Y! S4 p- g$ N4 m
    //UARTprintf( "j=%d\n",j);1 P# K. C, B6 r4 k, M0 X! s- X
    UARTPuts("Data mismatch in buffers.\n",-2);+ Z  c5 O+ [% v# p- B* c
    if (upp_interrupt_count == 2 && upp_error_count == 0)6 M3 O2 e- n: L, [  J! J+ t
    {" _+ `% T. X7 x6 D" \, V$ y# d
        for (i = 0; i<upp_frame_size; i++)
( }3 M/ m4 R) w: u        {9 A! B( o) I% Y# [6 S! K8 _
            if (upp_buffer_a != upp_buffer_b)9 b' C# L0 Z, V- ~; r/ K0 y& p4 ^
            {
" B5 d  I( H# c+ g                upp_error_count++;1 U/ x& C  ?( ]- |+ @1 ?2 m, r
            }: H, {& p9 n' _9 h3 l
        }" R4 r9 i4 y. ?! N' {; ~7 N
    }3 M+ o5 b( d" Z/ J% I! A9 x9 S/ Q

9 y+ A5 @  P+ O! x    /* 报告通信结果*/
- j4 o7 \! A' X( s9 Y8 l    if(upp_error_count != 0). h3 y% E1 o/ d; N
        UARTprintf( "upp_error_count=%d\n",upp_error_count);3 e) e4 a0 |$ O' K+ `/ n$ A; n
    else9 \0 i$ q7 @. D0 d. _8 q* A
        UARTPuts("uPP transfers complete!\n",-2);& `" u4 C. j: U4 p: U7 I; R

) E. M5 R/ u# h* Q: E    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
! Y/ D: ~7 J) k    UARTGets(ch,2);
; Y" f# [; [" z# W8 K; p- m    UARTPuts("\n", -2);+ x2 n& ?: t" m
* w$ B" i; F+ H- e* P# q( `
    if(ch[0] == 'y')
& v% Y( ]$ p4 Q& v# T/ x    {
, X( E; l: ^, H3 \        /*打印全部读到的数据*/
) J8 V! `5 p$ V        for(i=0; i<upp_frame_size; ): d. C6 P& x% p/ l" O4 t
        {  p% m$ O; e, ]1 @/ ]
            for(j=0; j<5; j++)
: G* \6 i8 o, H0 W. b% ?            {
+ j4 F: W3 a, }, u7 C' N                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
) X: \- k9 z0 V2 `5 p' `                i++;( _# a/ g4 b* I1 L4 Y7 T3 n2 F/ o
                //if(i >= 4096)
  D" b4 Y, y& t6 d2 _                //    break;
1 s0 X- n) H& H4 g
+ n, U' n$ c) ^; _0 c- \3 K, @6 D            }
, i1 K  [5 h! z- ~- c            UARTPuts("\n",-2);
0 ^) {, U  Y" d# m% b        }0 e% v( e& H6 m& t
    }4 e" S( }- ~3 K. S( T" u) B

" B. E% O, P) j}
4 J. f6 |" {  f, g6 W/ y' l
  V( Y2 e( x% x. c
$ T5 n8 r3 n! T9 s; |8 z+ H5 b

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
* b2 d: C; E2 p1 B8 ]! f
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
* V, r/ W+ c" Y4 ?3 ^




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