嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
' T# `- k( }4 F9 P; H1 e
Void UPP_TASK(Void)
# q3 F+ r9 J# z7 [
{
$ {4 J1 M% V2 O$ Z& p% \
( a7 a% ^7 C$ K7 \0 l: g- u
int i,j,k,target_int_count=2;
" s$ n: b! J3 b x4 }. D9 V. ?9 ?0 j
char ch[2];
! z9 I& B# Z0 O4 A3 B
' v/ f- n/ s$ \
2 q# z, u5 @ Z+ C
1 }7 a& H9 `6 I+ @2 v/ n" Q
upp_interrupt_count = 0;
$ T3 q' M4 c& _
upp_error_count = 0;
# e/ I% I, P: [* g
9 `, p0 q- @$ n, }2 c4 D8 R: r
UARTPuts("\tResetting uPP buffers...\r\n",-2);
- e4 N0 h, z# |) @8 r! R
// Initialize data buffers
: V. k9 k4 S$ D
for (i = 0; i < upp_frame_size; i++)
% M2 C* f5 ~. R) e f X5 ]- p' P
{
- e: v/ A6 ~% b+ g3 L# A5 Y
upp_buffer_b
=i;
/ T# g. }0 i/ C# j/ v, W
upp_buffer_a
= 0xDEAD;
. T m- W# P* |; V) t
}
; R$ ?. j9 W( D6 j R V
! o& B8 c; ~! X h
//for(i=0;i<1024;i++)
3 _; I! X2 }% C4 _+ l; i$ x
// temp
=0;
/ V! l2 }3 w, w4 G
! R/ ^# v9 H' Y" U; x' I( o _
//UPPReset();
; ~2 ?7 |* g7 k5 e! r6 n2 F
/*启动UPP DMA传输*/
, {9 C' z, a! t
UARTPuts("upp_prog_dma_i\n",-2);
: n) @! K) w. N8 M; @' t9 n% Q. X" V
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
d8 q7 g5 w9 k) Y0 I
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
o0 L. l6 o8 x4 ]( w4 S8 @. M: E
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
; L v, `" u4 g8 y1 B
8 b D# V2 K- g& ^' h* R- m V
UARTPuts("upp_prog_dma_i\n",-2);
, J+ w, F* R0 I( i; R- q' G; B) F
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
4 ]2 o9 V% W: k, B; X% S2 S& M9 S7 I
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
' l/ h1 B5 L8 D7 i- S
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
# }2 i) Y2 `( X+ {- P- b6 j; d
4 A o' C5 x3 ^0 z5 C0 l+ U
/*等待UPP传输完毕*/
/ l" Q$ ]2 A0 D* J. y+ X
//i=0;
# P2 B3 i- c' n. D8 F( q* n
//j=0;
* r" n0 s, z' R
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
+ M Z# G! L) U; d( P6 ?& d7 a5 [
{
! }8 t7 X6 A/ I& n3 j9 |1 K& y# c. U
/* 测试UPP传输的同时操作普通DDR数据
2 p! E( S* E8 f; G' L$ x
temp
=i;
; Q$ l6 Q! z, S C9 g
i++;
, n1 z4 }% I3 L% W {
if(i==1024)
\& j M" V" w: u; @/ }9 P! @+ L
{
4 D6 l8 m: @. U) V0 Y% [3 i
i=0;
% ?6 F# j# Z3 w
j++;
' \* h7 K! R8 k2 b, A
}
( a! P4 r% R9 e: h' z, `
*/
0 [! H/ V3 A2 N- h8 E2 ~7 @, p
' J" Y& B* C. W' P, T. J
asm(" nop");
- {: E$ x- L. K3 Y* V z) a" G9 z
+ a1 s$ I/ m' e2 T7 h$ U
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
( G/ P+ `) L6 T. I
}
; [/ b: y, e' r( [7 G/ [
2 j3 U" o- P q; ]4 u, N+ Y, X
/*检查UPP传输的数据是否正确 (loopback modes only)*/
# ~, l* @3 D+ t5 k8 |5 X
//UARTprintf( "i=%d\n",i);
9 N+ v4 B, O9 q, h
//UARTprintf( "j=%d\n",j);
0 {, `. c, Y$ g* S8 d, V
UARTPuts("Data mismatch in buffers.\n",-2);
* ?4 `+ J! o$ ]/ q
if (upp_interrupt_count == 2 && upp_error_count == 0)
( ^3 B7 ]3 k G# Z
{
; m/ M0 ?: _, m3 H+ [
for (i = 0; i<upp_frame_size; i++)
" W( X, p" N3 r5 d, y
{
$ M! x7 {/ \2 g) }, X
if (upp_buffer_a
!= upp_buffer_b
)
* l( d g6 [% B `) q9 y
{
& L1 [8 o5 G( f9 x! a2 W
upp_error_count++;
Z3 `# H; q$ o$ F+ X
}
. O5 c% Z4 w' e) F( _+ `) j
}
) p6 {* x4 X5 u: _
}
b* D# B+ G' L! n1 y5 G; {
; @9 D {! n% F0 b& O) x* N) I2 l* C
/* 报告通信结果*/
* R6 D' I. a0 v- V6 M. h
if(upp_error_count != 0)
* X2 b j8 Q+ \7 ~2 j) c* X' s; G
UARTprintf( "upp_error_count=%d\n",upp_error_count);
/ j) ~/ Q e* }1 p0 Z
else
( F- R- i* w* S3 `9 x
UARTPuts("uPP transfers complete!\n",-2);
9 E0 b) @: @3 P6 F7 G/ f# I
7 v+ G, d I3 C: S4 s' W: z
UARTPuts("Do you want to print all the data?(y/n) ",-2);
\8 K S# S! y' s
UARTGets(ch,2);
/ {6 N7 O. M- J$ b8 I0 k9 f
UARTPuts("\n", -2);
. L5 _8 k9 U' n' l& i1 \/ J7 w
' v! [# D- u( Q# l2 `/ L* Z. m8 H8 Z
if(ch[0] == 'y')
" M. e4 u a# k" @4 Y
{
: k! y0 ?3 V: l) `5 T/ s m
/*打印全部读到的数据*/
% b) S" ^" D& P8 G Z5 A
for(i=0; i<upp_frame_size; )
) { R' q8 G B; `# U7 \* c! {+ _
{
, X/ a+ P# s o% r% v( b) u
for(j=0; j<5; j++)
$ K! u3 q3 L6 M4 B# t
{
2 D. A/ @8 \8 t! y
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
; U! B8 v! ~: o/ X7 q
i++;
) z H) Q6 M7 M6 \
//if(i >= 4096)
$ ]4 {* Y- T2 c+ j, v$ R$ W6 y
// break;
" i6 j% |. T8 `9 m3 t' a$ X; q
# F& A B* _- c( f' m
}
0 k I. |1 A4 a5 o2 I7 A' L$ J
UARTPuts("\n",-2);
$ ^) n' V% s% u, a8 l/ d' L
}
4 r E( H8 j7 c' p, F9 i7 U
}
+ \# T& ~* w- W$ @+ N% H# n
& f/ i) h# k2 ?+ m9 q6 R' P
}
9 Q! b7 B8 t# I Z, ~, w; d
! S2 d. G! ^, {# n
5 i0 o, ~, |: G' R
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
+ i, Q' T$ B/ {9 d0 z { e% A
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
; Y6 D' E" ~2 N( _4 r
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4