嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
% o/ `9 q; J2 t& `; u9 m
Void UPP_TASK(Void), ~. M! I3 w9 ?0 q; G
{
5 K0 g  |) }% h( [; e: R! D
8 s! S# B7 h) C; |    int i,j,k,target_int_count=2;& |8 Y) ~3 ~6 m7 H! w
    char ch[2];
+ c0 h* q! k6 A
- R5 o1 d8 I9 ~: e
& {. R+ j% g, u- U% \) q) ^  B7 j3 K$ c: s# n# S! [
    upp_interrupt_count  = 0;
; ?0 i6 i' `1 [& G' i2 P/ m/ f4 \    upp_error_count = 0;7 a, v0 U$ w6 x( z/ f$ ~% }1 w* z5 i

! l9 A7 S2 ~/ k+ w. @. q' J    UARTPuts("\tResetting uPP buffers...\r\n",-2);, ?9 C0 d9 F* P8 l2 f
    // Initialize data buffers
3 N9 G( X% A) F0 |) c    for (i = 0; i < upp_frame_size; i++)1 u6 P, w; B+ b5 e. P: G% x
    {
9 `' q/ P9 U0 F: ?% |$ v7 J       upp_buffer_b =i;
  [( v# Q( D& r5 T1 o       upp_buffer_a = 0xDEAD;0 B9 m* a' b  n
    }
5 L2 ]5 v" a: X5 O, o. o3 j+ M
% W4 \+ s3 Z* A4 [9 C. ~' x    //for(i=0;i<1024;i++)
6 O& e0 w6 \. a! V4 X+ u; T    //    temp=0;
* N, k, ?( ?8 K7 x- y, K
) j7 R1 {* q+ u/ v% k3 i5 t* T2 X    //UPPReset();' [0 o6 C7 b$ h2 e/ l+ S
    /*启动UPP DMA传输*/' o3 S* g( S9 i+ `0 r& _% d' F
    UARTPuts("upp_prog_dma_i\n",-2);
$ ]9 I+ S! o# E    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
* D6 O3 m& J" ^$ _; f8 w( J    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);( K( L2 j1 U7 ~" L
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
( l- j% l, u7 n) f& P' t, P0 I, y4 ]3 c1 q+ p- ~1 q
    UARTPuts("upp_prog_dma_i\n",-2);
# S' K1 V) X+ G2 g. G- L* [5 Y    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;! x6 E2 |$ e: p: q+ W7 o  w. a  S3 [
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);0 _. ?# P# M6 u8 X
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);0 c6 q/ ?* S- [; X; ^+ _
( L9 x% l" t( |8 M- I% }
    /*等待UPP传输完毕*/
; f: y7 d9 q8 U$ e    //i=0;) k. j- C) A2 X
    //j=0;
' J9 c" }( L$ T" z- h3 U    while (upp_interrupt_count < target_int_count && upp_error_count == 0): ?8 E( x. x" |1 D' i& f+ A
    {
- P, S7 u0 v3 k: E$ S        /*  测试UPP传输的同时操作普通DDR数据
. R4 z# D8 H# K6 @+ b4 @, F' \' i        temp=i;
, r: @. ?$ v- u2 L! h        i++;4 B5 \6 c7 n: Q
        if(i==1024)
& o3 u6 Q/ _# T$ F' W8 p        {
# c1 U+ \2 Q- {  L2 t            i=0;1 c& n4 h0 Z- X$ S  A
            j++;% _$ b: d1 d, ?: e" c+ c
        }- k/ s# p; Y! C  L  A
        */1 B7 _) F6 ?, M9 o2 B% y
5 k# e9 F: W( i% r9 s4 Z* W9 C, o
       asm(" nop");
' u2 p. l4 \/ C+ Y9 \) d" [; V! U9 a; F9 R
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);, d* j  h" Z- i/ S0 Y) s1 q
    }
% J5 t9 q7 g. B1 B' d8 X, m* j% \: m
    /*检查UPP传输的数据是否正确 (loopback modes only)*/+ k6 y9 k& U0 L) p4 @) Y
    //UARTprintf( "i=%d\n",i);
2 H/ `  R0 J: L. d& T    //UARTprintf( "j=%d\n",j);
* g) T+ D5 x. E    UARTPuts("Data mismatch in buffers.\n",-2);
0 F- d: s4 m4 A& ?0 g    if (upp_interrupt_count == 2 && upp_error_count == 0)( @% k# Z" K" ]9 c
    {6 [+ K6 d2 H" l# X7 d& ]- f: X
        for (i = 0; i<upp_frame_size; i++)
, Q; M6 A; ?1 m& l8 g% R        {) @- N# F0 o3 x5 H  L0 C
            if (upp_buffer_a != upp_buffer_b)
3 ]$ z) k% ~# Q2 u            {" h% m" z1 d* t
                upp_error_count++;4 }+ u- d, \, p" V" h7 [; I  T
            }
2 v: a5 [* f* c% d4 d  E$ c# [        }
2 N  J: ]% ~, W) D& D+ D" h    }
5 v. a+ O5 O  F
9 ^2 }2 d/ g4 T8 y6 d& j) g    /* 报告通信结果*/* Z  R# ?  t3 X* {$ \/ o+ B; \
    if(upp_error_count != 0)
- c9 A7 o8 S3 e6 i' e% s2 l' s        UARTprintf( "upp_error_count=%d\n",upp_error_count);1 x& D4 j' W6 B, H
    else
" }/ ]  |* i  v3 _* _1 }- s: M' q0 k        UARTPuts("uPP transfers complete!\n",-2);0 Q% m" B7 t/ K

# ^9 ?) |9 r1 e# L1 k    UARTPuts("Do you want to print all the data?(y/n)   ",-2);  [; H+ x" N' y$ Y8 q
    UARTGets(ch,2);
/ U1 x, \7 b) S# J: j    UARTPuts("\n", -2);# p  c1 q( I! D5 J) _" F7 v' M( F

4 U1 ?3 L9 `9 s: ^! p/ ^0 u0 q    if(ch[0] == 'y')
, N8 l  J3 v" I& ^: w; V    {7 R. J; D0 c/ Y- G
        /*打印全部读到的数据*/
" r0 ?) I0 r4 Q, U, _2 M" V  y        for(i=0; i<upp_frame_size; ); b' {( o4 P& \  e9 V3 `
        {1 d4 r- K: U" l6 S/ R5 G1 g& j; U, v4 b
            for(j=0; j<5; j++)2 S0 }# G9 C5 e) {
            {8 |( L& O$ D* f6 L/ P
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
# c5 a2 e& e7 [* H% U0 t4 [                i++;! [* H; n) W" n2 a6 r) F
                //if(i >= 4096)
8 G' h# {" I# s9 X: g1 K0 D4 N                //    break;
* C+ h7 M+ @1 a; ?" J! m) z
& s5 e+ T; \( y4 l. k/ ]2 t            }
8 B( E# l( D# j4 w            UARTPuts("\n",-2);
; q& ^3 a6 L' g% D1 B0 M; b        }2 l6 b- V( K5 E9 o8 z7 P% ~; q2 R
    }) G5 |6 N- |! ]* M' Q/ ?6 i3 z
, h  ~8 W1 D9 i: v' L
}

) }8 o! n% G- _2 z* z, g1 B. R3 s
8 C5 {( O) W, t% o$ p

1 c: v9 A' {$ i9 j. G& S, u
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。2 @9 t8 I- }* i3 V3 @

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
2 d/ P+ W0 U& J$ W# ~1 ]* u




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