嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
4 s5 \5 Z0 }( Y6 P9 i7 n
Void UPP_TASK(Void)
- W% R' c. c' |7 ~3 | y2 f
{
( M) a' q2 ~. w* m( e; Q9 L
0 }- ^0 H' `! ~3 I8 [, [' F7 T, h
int i,j,k,target_int_count=2;
3 w8 g: Y) l4 z; [/ M" K' n8 P) n; ]
char ch[2];
. H- B* N# n7 L7 }3 q9 g" Y
! x7 `4 i" o; L4 J8 L7 _
% `( S6 o( a& S" N" T
" M0 ^; |; t: V
upp_interrupt_count = 0;
3 |) K6 t+ y& n6 d% Z& v0 x# P
upp_error_count = 0;
! f8 X) J3 B) j8 `" E. q
0 I' B" r4 |. n+ E
UARTPuts("\tResetting uPP buffers...\r\n",-2);
1 b* j) O1 F) H5 V
// Initialize data buffers
8 v; _; G. K7 Q! i( u0 b
for (i = 0; i < upp_frame_size; i++)
( S: T7 L' t* F( Y0 i- D
{
7 C* w! ^. N' O
upp_buffer_b
=i;
) a1 ]+ Q6 C+ U' Q6 b: `: a
upp_buffer_a
= 0xDEAD;
/ [# X. e" z7 Z) E
}
. d2 D; ^6 z: u
2 O2 v( {) T1 ?4 j
//for(i=0;i<1024;i++)
) T" g% y, q4 O' S* @, Q
// temp
=0;
, m- \0 Z5 \; s2 p
+ s5 f# V! d4 J+ Y* j
//UPPReset();
- Z5 m. A3 J5 S
/*启动UPP DMA传输*/
; n, v+ D' | t7 [
UARTPuts("upp_prog_dma_i\n",-2);
D+ Y1 z9 N# @; h% G
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
4 y4 c% n& D6 {! m5 J% q
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
0 y3 Z6 w" b. E, G5 W! B
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
b$ O7 G/ g) d
& u! r3 ]" i9 H- T/ v/ A& I% Y, v
UARTPuts("upp_prog_dma_i\n",-2);
3 K* d9 f9 N# Q/ N( v$ ]
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
& C9 q' |6 @: W% O( U
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
) w9 v, m+ P* u
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
% {2 s) U v: B% v( W" |% C9 p. A
3 @! L0 U6 L; }2 M
/*等待UPP传输完毕*/
! Z. L5 E7 A. r$ N
//i=0;
- f# v, i x1 e& `, y' V' Q
//j=0;
" {' Q8 l6 s+ D. Z5 k
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
. y2 T+ ^* w p0 Y1 R
{
1 A! a4 J5 m. z. d
/* 测试UPP传输的同时操作普通DDR数据
2 e! g/ R) o8 h; f
temp
=i;
# V4 ]8 H7 U. J8 p/ G. F+ g( z& W
i++;
' @4 R: k% |; d; L
if(i==1024)
% Z% W6 p" ]3 N2 z4 s4 e" t+ z
{
6 H3 G4 {' c+ w+ x8 o6 X
i=0;
1 T* x/ U1 ?4 M) S: J
j++;
) _2 r3 e9 |7 a! j; R
}
( P, g, p+ @* W9 q- A
*/
\. s; y& v9 @) v3 K$ l: U0 K6 s
2 Q! R$ ^1 U' ~1 F& U3 y6 c
asm(" nop");
, x; M. M& j# d: X: M& Z
4 K1 |* I6 m" v: O; [
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
5 F# b* P, e6 {. u
}
8 f& C6 q7 G5 ^. ?2 ~
/ B0 l) h3 A2 p% P; ]. v9 I9 o' m
/*检查UPP传输的数据是否正确 (loopback modes only)*/
" q2 U; n0 s0 C, {: }
//UARTprintf( "i=%d\n",i);
9 B/ c) V$ D* l7 c) W! G
//UARTprintf( "j=%d\n",j);
! M c$ D/ I+ Q: ^) }. ^0 S4 T
UARTPuts("Data mismatch in buffers.\n",-2);
/ {) V- I" T# c3 f0 O8 _3 x/ x( w
if (upp_interrupt_count == 2 && upp_error_count == 0)
5 S( B% V7 @: L+ R6 O: J4 i% m
{
9 k! f2 R5 n: K# y# P3 Y
for (i = 0; i<upp_frame_size; i++)
- c' I" X% i f: }0 H4 G1 K
{
* S. W; R; S" A6 ?* D; T
if (upp_buffer_a
!= upp_buffer_b
)
( M" S/ n. U. L6 A
{
/ d* l9 ~. J% E% _
upp_error_count++;
B) ], y# T3 S( n
}
' ]$ l# T% ?5 A- H6 d6 m7 C
}
* p/ s5 \6 H! t8 P- p
}
& p7 l* Y: O( d! t, p f
# L3 r2 ]+ c" y# _" e, b
/* 报告通信结果*/
5 O9 u/ \6 w9 \+ S, C% l8 y
if(upp_error_count != 0)
. d6 H! L' H+ I! e6 v& K
UARTprintf( "upp_error_count=%d\n",upp_error_count);
0 t7 T( D0 g! F: i
else
0 M5 H- x3 I2 E4 I' o- A
UARTPuts("uPP transfers complete!\n",-2);
; U4 d0 M0 h: S
5 b% ^* _& N# ^6 v4 D6 R
UARTPuts("Do you want to print all the data?(y/n) ",-2);
% T8 s% A5 ~8 Y) }7 o
UARTGets(ch,2);
3 Z7 U6 p* V' t& P4 d
UARTPuts("\n", -2);
! l' M4 |1 v' H
$ h( S8 }9 C2 M! |7 i* `
if(ch[0] == 'y')
9 w7 x5 g. v; I+ o
{
; h, i8 n* `# R, `8 g/ M
/*打印全部读到的数据*/
, m! C- w$ V, G1 j" \, T( L3 n$ W
for(i=0; i<upp_frame_size; )
% ?! B9 k3 k0 c+ A5 ?
{
1 g8 R3 @4 U) R7 x/ [+ D4 Q
for(j=0; j<5; j++)
( ?9 f; [+ G0 Z
{
1 b& G* X6 X" e- o: m
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
) d/ v X! A6 G. x% S" q
i++;
/ W/ T6 r: X; `: j: X9 u
//if(i >= 4096)
: V6 V6 g3 C0 B& J
// break;
0 ] y$ \7 o/ E! `: j
( Y) L* ]5 ^ o e! J4 S
}
( E7 `* `! `$ d9 H$ P
UARTPuts("\n",-2);
1 Z. W" p D- D
}
3 i) v( C& K/ J, c- J& h
}
G% i4 R1 V! O# L& J% R
: {, ~$ p: c B, i9 A* ]6 M
}
) w. F I+ b; `6 \* k$ {$ F# ?
' V" \4 ~" i! N- E( J
1 g* v) P+ S2 K* K) g2 E9 ~* {5 P
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
+ x* [8 E9 h+ c; R8 X
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
5 s9 ~! a- B' F) l0 i' }& q& p* N( ~
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4