嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?% H! `& c' i* L/ g1 U. F
Void UPP_TASK(Void)5 _) W' A; q9 ?: }. Q( N) g* E- |
{  f) u" w+ V- S- E: @
8 ^$ C; i4 o8 P% }- p
    int i,j,k,target_int_count=2;5 s$ J) {/ M4 p! L6 A, G6 v& ?
    char ch[2];% |) l. w8 K- f8 v: J4 l
- B% k; z/ L6 j) v6 t6 L; y; O

; Q0 Z1 W( C- U( i* [$ d8 {' [1 c% \, W, ]. V5 h
    upp_interrupt_count  = 0;
: V" ]3 g+ ]3 _; e    upp_error_count = 0;
7 Y* ^6 b7 J$ ?: }+ D' L
# ~- U1 z$ a5 u8 P) {4 C3 y$ @    UARTPuts("\tResetting uPP buffers...\r\n",-2);
* ?" E  c7 f- ]2 h, |    // Initialize data buffers
7 a8 v% M+ H5 i# P    for (i = 0; i < upp_frame_size; i++)) K; C5 k9 b+ Z% U. D: p2 R  Y; N9 e7 e
    {
8 e8 u- O8 j! j" u! v. R       upp_buffer_b =i;6 P. `, C' z( O( c) J5 y
       upp_buffer_a = 0xDEAD;8 r. Z/ h  F, Y6 y" Q' B
    }
/ E4 x2 e3 k+ ^1 V1 u0 ~! s9 G' @; @1 l1 B
    //for(i=0;i<1024;i++)! j2 R/ c  K7 v7 e1 z
    //    temp=0;! g) n0 ^9 L$ J' n) Z  R
* r: o4 ^+ E# `  w
    //UPPReset();
* \2 ~  g8 @4 {6 W* T( m. F: y    /*启动UPP DMA传输*/8 W; z) g4 y6 Z2 [1 ~# {# c
    UARTPuts("upp_prog_dma_i\n",-2);, }( v  n* y, g9 M
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
: s& L$ N" L! c  M    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
9 d& F5 s, h% t$ }. Z    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);- j, P8 |3 u- u: F' o% G
! T  T, Y# x, Q, d( T6 M9 ~
    UARTPuts("upp_prog_dma_i\n",-2);8 I( K! g# [. N+ Y; m
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
4 G1 F$ O; {, h8 b    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);2 i1 B! c0 f( T
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
6 b& K* E& G/ Z4 u
# A* D" G& r3 v+ K5 Z9 U( b    /*等待UPP传输完毕*/
6 T3 Y" C7 d3 c    //i=0;
5 C  {7 ^  J& |/ B& w4 I, T; u    //j=0;0 p# W% {5 K( ?: D+ H
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
3 }) t: ^6 X2 I+ `% e7 F    {( X) R: F& T; H9 V+ f
        /*  测试UPP传输的同时操作普通DDR数据
! c2 P5 v" I0 T8 o+ e! ?3 G  M4 u' o        temp=i;0 }! n, F/ L9 C. t5 C" o8 p
        i++;
' R/ g* b; L" p3 ~: r3 J* Z        if(i==1024)1 B' X, s" x- a; z1 R* O
        {. e* Z0 V2 m5 Q& F9 E* a
            i=0;% U/ e: x% {' N& k
            j++;
3 g: S! N5 G1 o, k8 c. {        }
9 R: {+ i1 o9 {2 I" Z        */
2 v0 d/ ~$ i' a% d' t
2 R3 r4 I; k: z* a! B/ L3 e       asm(" nop");
+ [  [! r# R8 |* g0 c
- h9 i/ V) e9 S3 d. q5 j       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);# D+ C. a1 R% ]) o/ @1 R: _) ]
    }
+ o8 ^$ N+ @9 i) x
- L' {* @! U9 E- i, ^3 W    /*检查UPP传输的数据是否正确 (loopback modes only)*/
/ U* W( k# D  a) @    //UARTprintf( "i=%d\n",i);$ O# i7 t. x5 Q# Y5 T* j5 I, ^6 g
    //UARTprintf( "j=%d\n",j);6 T4 T7 }% b1 P7 ]+ y- E0 h! f
    UARTPuts("Data mismatch in buffers.\n",-2);
; c$ M. }6 D' |    if (upp_interrupt_count == 2 && upp_error_count == 0)
( Q8 K1 x# \7 W; J    {2 ^& |" Y- n- `
        for (i = 0; i<upp_frame_size; i++)
6 C4 S, r3 Y0 I+ j        {
( N; g( G6 g* |            if (upp_buffer_a != upp_buffer_b)
  h2 F! t' F- G8 a% x            {4 |; Z3 R4 V' n7 n4 z, j. g( t& N
                upp_error_count++;
( d5 ^5 Z5 J1 P( Y  v            }( d6 t  M( |  n: I, N3 b) W
        }6 X$ a. h/ d! w$ z- d6 Y0 e
    }& O. K; J# r/ }) m

, z  P7 b  W. a; B8 G- G    /* 报告通信结果*/
: Y2 I5 G8 k! S' `    if(upp_error_count != 0)5 \- C4 x" u* t1 `7 R" ~
        UARTprintf( "upp_error_count=%d\n",upp_error_count);! {9 k  W/ Z4 G
    else/ V, S4 d8 u# a2 `9 ]( Z
        UARTPuts("uPP transfers complete!\n",-2);
/ A' q# y6 v1 w
3 L) H3 v0 u! }' d/ J- J) }: F    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
. f) L$ W7 x3 F7 ?! w( j5 M% d    UARTGets(ch,2);
: w6 n. F, v! B% _8 ^0 w    UARTPuts("\n", -2);
* ]  `7 {# ?, n& h* H  Y  ~+ {1 a9 k+ z/ {/ F  P! W: `4 [
    if(ch[0] == 'y')
! y8 O, c) X6 s# e4 I2 c: j1 q" E    {
% @+ G: J2 p- R4 X0 H3 ]  n        /*打印全部读到的数据*/7 D6 o& b2 m* m; C0 v( F* e
        for(i=0; i<upp_frame_size; )5 d) m& _& y9 S* {" P
        {
8 g9 R( _, P. d  R7 m: D. ]            for(j=0; j<5; j++)+ m# w* c' z* M( n- P
            {' o+ }, z2 a/ v/ R
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);+ d5 L2 A+ ]9 r  B% E8 A& ^
                i++;
2 ?: N( O, A  @+ [* q! V! V9 _0 Z/ x                //if(i >= 4096)
. `% S" @( W3 |1 C2 D1 H5 a                //    break;; K: @# M; \% n9 e* i
% }" d& v, S+ A* |
            }; r7 N- S5 \0 P; \5 ?
            UARTPuts("\n",-2);
! l! n' a/ z* o" S        }9 g6 L' u* Z! E6 N7 W
    }
; h* b6 W7 s  {& V1 Z) Z4 L+ [
4 x; q2 e$ B/ H; S& x}

* Q0 @. G- f: f, J( E" y6 G! [2 w( @

+ h) f2 y! [2 X+ O  n  F$ L* `: K- R- p' u. W- H

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
$ ^4 j1 L) d$ K% G5 p
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。- r4 w1 q: ^9 B% q





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