嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
4 k! m, g. U. R! H' Q$ A c0 B, X
Void UPP_TASK(Void)
, b( d2 X3 y: _& h8 J
{
& t( U6 a1 ~# X8 E% ^. k3 P
M$ m2 t# B4 u3 Y
int i,j,k,target_int_count=2;
6 s( M0 J) V: q7 t; X' ]
char ch[2];
8 o& h$ i) w( j3 \8 c3 d
4 M8 A& C8 y5 [$ a9 l
' C/ E% b9 o! h$ Z6 H2 K! X9 r; t' X
* V3 F7 f. \! @" j6 g6 {% |3 w. X
upp_interrupt_count = 0;
% M; d' e( O5 a5 {/ R4 G
upp_error_count = 0;
0 E1 \0 r) ~2 ]8 U
& X$ Q5 n# e, J k, O/ W& |
UARTPuts("\tResetting uPP buffers...\r\n",-2);
* _ Y. `1 i) x5 Q' f+ _
// Initialize data buffers
3 j+ o, d5 ^! O9 ^: B: c* _0 w5 r
for (i = 0; i < upp_frame_size; i++)
0 T; q9 \; }: r* y" G) @: J1 u1 D" B) i
{
! H8 V2 V* |- u x h/ K
upp_buffer_b
=i;
9 S2 f: a* p" t; S% u. n
upp_buffer_a
= 0xDEAD;
/ O9 ~" k. g% k8 T/ [1 m4 d5 I
}
' m& E ^5 W m, S* q8 j
" C) U6 N2 |- V
//for(i=0;i<1024;i++)
4 n3 i, |. k! y: C* M
// temp
=0;
. Q; v5 }" }( q' T+ P8 l3 S* e l) B
, p" u/ t, N. z1 q
//UPPReset();
( c! L% _- d% C; Z
/*启动UPP DMA传输*/
2 R0 c- w: M+ _ ], Y- y$ z
UARTPuts("upp_prog_dma_i\n",-2);
+ s: N, k: i2 h, K; s! o2 K/ ]' k
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
# S" L+ m0 R _; s6 y3 V
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
& N8 t* s6 ]4 ^4 I
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
6 `4 y1 D- v C% `
6 Z9 {( k7 U; z$ C9 s$ F
UARTPuts("upp_prog_dma_i\n",-2);
1 [: @. h) e3 h# o( S, l0 X* |
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
V% \) Z( a/ X% @
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
) d- L6 d8 v" d/ N
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
$ a' a+ K, _6 s8 M8 C% @. A
! \8 O' ~8 v: T6 l$ P. T: x
/*等待UPP传输完毕*/
* R6 d' l$ h+ t9 @4 F4 N" t* z& n9 y
//i=0;
0 R) k1 H9 v2 O1 I$ d0 U" K; p2 |
//j=0;
7 g G- S: W. b u) O! n* i
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
9 ]1 r6 v8 d' A1 d& q
{
- ?( ^% P5 \( Y3 J7 @
/* 测试UPP传输的同时操作普通DDR数据
. u' D! N7 L7 W, S) A& r. w
temp
=i;
' ~- C b: O. T! p3 [
i++;
' a3 F6 `. M1 A% O6 S9 J+ {1 C
if(i==1024)
0 r7 a0 Z* d3 y6 `* I9 U4 a
{
9 H7 V1 p6 g/ l0 A3 `
i=0;
( t0 Z0 g% Q( _- i' {5 |2 l0 Q
j++;
; x( x5 u9 _9 d4 x
}
0 {4 E3 c6 N1 U
*/
/ s- C6 t+ Z! z2 k4 l
, X- L6 i$ b+ x
asm(" nop");
" `; o% q( D3 s( ~( Q8 |( A" j c
, G# z5 X4 C# @2 T
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
E8 I" F# Z. o8 ?" a$ T, K5 a. ?5 I
}
% Y8 n# k7 O3 s5 t" z
, T! B4 M8 d2 X9 [' D
/*检查UPP传输的数据是否正确 (loopback modes only)*/
2 a( p" }+ V* _; ?
//UARTprintf( "i=%d\n",i);
* d% a5 j, W3 _, R2 j4 n
//UARTprintf( "j=%d\n",j);
0 O1 }- b& d: m$ e2 b) W
UARTPuts("Data mismatch in buffers.\n",-2);
. p; f6 x6 w: Q# O1 C l2 w, M
if (upp_interrupt_count == 2 && upp_error_count == 0)
/ }) f/ S- w& ]; E% b1 q2 N
{
; c8 {7 t( |$ `$ Z1 e
for (i = 0; i<upp_frame_size; i++)
+ a9 |: }4 D' P: Z# z0 v9 f# }3 C' v
{
( x1 X' [: W0 s; w) w5 p1 R
if (upp_buffer_a
!= upp_buffer_b
)
1 {$ k$ \, y9 w7 L
{
! i# c$ P" {; c% A& c# F. H8 N" {
upp_error_count++;
8 L, Z5 r1 d5 d+ S: k* T, O
}
6 [" R. @) ]2 z. \; Y) @: r* Z
}
$ K' f! J, x" u- |2 t
}
+ r: R/ W$ W6 D P$ n& k/ ?+ L
, I `4 g& N6 ]2 Z
/* 报告通信结果*/
8 T1 w5 G q" p, U- K3 B" t
if(upp_error_count != 0)
& a0 S U, M1 v$ k3 j
UARTprintf( "upp_error_count=%d\n",upp_error_count);
: |) v5 D4 ?- m$ B$ {: K% [! R
else
7 n6 R0 ^* f/ w* y- e0 O, p' K: r: a
UARTPuts("uPP transfers complete!\n",-2);
8 W0 w( V6 G* x
. v- q4 |, ]6 |8 q
UARTPuts("Do you want to print all the data?(y/n) ",-2);
& Y J& C0 \. T
UARTGets(ch,2);
+ s; ~' u8 l- W7 Z$ n3 Q
UARTPuts("\n", -2);
" {2 ^! O9 S4 m: l5 V# _
3 f) R7 N2 b; Z A
if(ch[0] == 'y')
; M% d* I, c+ l8 O$ c
{
$ f" Y U n% N& ~4 K2 Y
/*打印全部读到的数据*/
0 D2 m1 |3 J8 V5 T" ]4 t4 G) A
for(i=0; i<upp_frame_size; )
; E5 y# f4 p' @+ p: w4 r
{
1 ~- T: D4 x, ^8 w
for(j=0; j<5; j++)
7 I5 p, g" |8 Z" ?) v& p% f3 t
{
; Y; u; i4 H, x' l* T
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
+ s% M$ ?6 L! a' p2 M& m
i++;
' r! D8 D$ z& r" ]
//if(i >= 4096)
3 i* o! S! w% _9 [
// break;
1 j! ~" [% |; c |
5 M0 D2 n5 \/ {7 A' A
}
" l) s" `. I0 n0 F+ ^- c
UARTPuts("\n",-2);
, U8 T, ]: I" @
}
2 V! p0 d8 Z8 `3 g. |8 V! u
}
! t+ S- |2 F5 \8 }0 \; G6 ]
/ _ X, a- V5 b% C( O& U$ a
}
4 D$ t A' j8 E
, P: N3 b3 c- ]
! `* b5 b. Q3 c" `' y4 L0 i
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
" R2 f& [1 m% W' E& x3 ?, r
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
" k6 J* Z% k! g! J% b _
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4