嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
( Z- f& F7 d% z
Void UPP_TASK(Void)
3 \2 L4 Y( q0 J) |7 l2 S; {{" O7 Y0 a9 R' n, @/ y1 L8 x  \9 H

6 T) Y! P4 O5 r% ^    int i,j,k,target_int_count=2;/ P: r- Z1 G& w0 t3 l
    char ch[2];, W* x# L1 e+ n) M

/ U& |4 D7 S& `7 h; r  N# l" Y* L; M9 P  B
* m# u* i3 D1 J9 f' x
( c6 Y9 ?! S4 E7 w# k9 }# L! ^    upp_interrupt_count  = 0;
  [/ R. w, r4 V$ o    upp_error_count = 0;: n6 z! u) W" y& c5 H
% v/ Q: @, s  n
    UARTPuts("\tResetting uPP buffers...\r\n",-2);
3 U2 e/ _' S; d& M    // Initialize data buffers
( U! N! t1 G3 z# \' v% [- ?4 Q    for (i = 0; i < upp_frame_size; i++)
& r. m  A7 k, p8 J# q    {5 R; [" v# ^$ [  |; G4 p
       upp_buffer_b =i;: _/ r" ?* s6 D" r+ @: e+ M, o
       upp_buffer_a = 0xDEAD;
! t. q9 T/ q5 `5 L3 Q; p& p    }6 u" F# ^& V5 L. {

8 X, V( I! f# s/ k2 R& }  k) u    //for(i=0;i<1024;i++)5 I+ T7 ^4 D# I' [
    //    temp=0;& u  J$ j- {( F2 e3 Y* T

( R$ q6 e9 K4 ]3 K: Y3 \# g    //UPPReset();
- s8 A' n  m9 A) q! h1 M    /*启动UPP DMA传输*/
1 M$ m& g  B1 x    UARTPuts("upp_prog_dma_i\n",-2);! G; `% v% t6 C! H' |
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;* A; s* k) L/ I4 Z$ J% \$ D6 D6 n
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);1 t+ |$ s3 D- |5 V1 k4 W5 t! {
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);5 L1 v8 l, O& F! a* A# v3 B

0 }+ |6 ]0 t: x/ ?  J( p. F3 |    UARTPuts("upp_prog_dma_i\n",-2);
$ [( U$ C4 \9 _6 O/ Y    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;  U' C9 h& W0 b5 {0 L% F* K
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
; C: N- L) R8 U# O& h1 M    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
! S( W, D5 I5 f& g
/ c) Y* n. {, `+ [- {, M( Z4 T. U    /*等待UPP传输完毕*/
, U5 O1 s+ P/ R( P$ q. }1 X2 \    //i=0;% q5 m/ d  T7 b+ w; d% b# E
    //j=0;% R, z" V3 |, }0 o: r
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)1 g6 {0 Z  `. z: u3 d9 u, C
    {6 L' E0 d0 g2 ?' S" g5 T: l
        /*  测试UPP传输的同时操作普通DDR数据
0 \0 @& H3 M. M4 e# D9 Q8 E        temp=i;
2 x4 s; H/ z3 O& u        i++;# m, E2 \0 R% o* o2 z- n# O
        if(i==1024)
% O' t; l* m/ T% {6 W+ {        {
# R9 z9 `+ [% K; D! m            i=0;1 Z8 `' n1 e" _. @
            j++;+ w2 I# P- ?! y9 }" |
        }
+ P, }4 M: c& E) P% E9 ]        */
" |3 P6 c5 Q8 p  i5 E7 i2 Q
3 i8 q  S- i0 v8 b" y1 _6 [' a/ ~       asm(" nop");7 G8 ^; g# V8 c& e, V7 A/ _! \3 }2 L
& P3 u: v0 R1 g) V+ e2 V  b
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
. G! O8 o" g4 r8 o' l; I9 K. ]    }
5 S* _4 q+ U; i/ q, Z7 `1 \+ ~" t$ ^, V
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
- k# F. `+ f, `* |( R    //UARTprintf( "i=%d\n",i);
: j5 a* Q9 d; P! W' Y6 \    //UARTprintf( "j=%d\n",j);
0 _% J. I* g% o7 o$ A6 a* J    UARTPuts("Data mismatch in buffers.\n",-2);- C% b) d7 W! M! e# A2 N3 h; D" _
    if (upp_interrupt_count == 2 && upp_error_count == 0)5 b* `5 E) n% `+ k# C
    {
% b) z# x" a0 w2 A; L: w        for (i = 0; i<upp_frame_size; i++)) z3 Z) S% _2 m$ d, d# _
        {
. |$ l4 j  R6 ^0 p( h* K            if (upp_buffer_a != upp_buffer_b)
/ l8 z$ O& p$ p2 \% O            {
; R; j9 M2 X9 Y7 X1 k3 P                upp_error_count++;& {$ o* x3 `4 g7 D8 m1 S: s. h1 C' S
            }! w1 t4 Z; o) w: g
        }( z1 Z/ n$ U0 ?( h
    }' `2 A. O  H+ i0 i5 W8 E" {
9 k. A/ f4 e! j- x; ^; q
    /* 报告通信结果*/
: s9 O+ j$ w  A' f6 d  G    if(upp_error_count != 0)
/ D" a8 D; R& P) M  d3 N        UARTprintf( "upp_error_count=%d\n",upp_error_count);; o1 W( y0 ?8 n+ E8 H; w
    else
( ]  x2 u1 W9 z1 p        UARTPuts("uPP transfers complete!\n",-2);$ T: j3 d. F: O9 p; \3 R" {
8 |6 m, R! R$ W
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);- r0 e  t# ?$ B! f! ~; L
    UARTGets(ch,2);
* e& F# M$ e* l- i) w* }% a  S    UARTPuts("\n", -2);
# `0 g3 t) k$ n1 p# n* X; S3 N
    if(ch[0] == 'y')- N4 D4 Z6 X. ?4 h3 X4 t4 Y
    {
0 ?+ y& Q+ V3 H& c; w* K* l: k8 [        /*打印全部读到的数据*/
& q3 q" ^9 L$ m  i# h        for(i=0; i<upp_frame_size; )
. L+ u! c9 z& `& B5 B6 K        {: |  X' P+ |$ h3 e( E
            for(j=0; j<5; j++)
: L- h4 E  V( J: M            {/ k" m8 n) z# ?  j. P6 `
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);: U' f, ?1 n3 F3 f( C4 _
                i++;
, t; k; A) A; e2 ]) J) l) m7 }/ X/ \                //if(i >= 4096)) I& s, c5 m# H
                //    break;0 ?, q5 m( n$ A
' Z3 n7 {" P% O7 G  ^4 o* L
            }7 y& `0 t/ \0 ]
            UARTPuts("\n",-2);0 K3 P3 z; V. N3 S
        }
- \1 z# a  n! T! M    }
6 D9 k% L1 L9 g: C' ?$ `
6 Z8 g0 L8 z. o# N}
: W2 P3 M  s. g# p8 M6 f/ u
0 j5 w9 t4 S  j# S

2 i+ w% `+ g3 G: D2 B8 |7 g. w
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
5 _7 C% `. z  ~* w/ @. P
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
0 l0 v& M+ E1 `




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