嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
1 |3 T9 g& J7 N+ v3 h j( V
Void UPP_TASK(Void)
+ w# j: N/ t0 P2 w) k
{
4 `, h, b8 X& n! U
9 X4 e8 y3 P) W" t
int i,j,k,target_int_count=2;
2 V: C( R( t; Z6 Q
char ch[2];
( ^3 x2 ^( F& C' m: j7 ?3 d
# Q4 D4 ?) \3 s; n. C" A, n( s
3 B. k: J! C0 x/ H2 |
8 ?$ F# O+ ] F; A
upp_interrupt_count = 0;
( z( h9 u9 ]: T/ q, Z' ? X6 z
upp_error_count = 0;
4 X; J/ ?! C1 f6 j9 N4 B7 r
, ~' J& I0 y6 u) v9 E5 S# s3 U+ e( C
UARTPuts("\tResetting uPP buffers...\r\n",-2);
' W' I4 K0 x* h! I. k$ s7 p6 D
// Initialize data buffers
, i" w" X! Y- w2 B u
for (i = 0; i < upp_frame_size; i++)
! } Q7 Y8 W) J
{
, Q; ]) w5 w8 s% Z, n
upp_buffer_b
=i;
; W+ Y0 r E/ z; G! V; @! o
upp_buffer_a
= 0xDEAD;
Z9 C' x7 X8 G4 U, x
}
- o+ N' x- T: d- D! R3 W3 }
* ?7 `+ A/ A! }- a
//for(i=0;i<1024;i++)
7 J; ?/ l% c8 ?- o& a0 O. O6 b" B( t0 D
// temp
=0;
0 c, I7 Z) U/ m
1 y3 u- }3 M! X
//UPPReset();
$ j0 R+ O9 I# A1 o. @2 |+ Q
/*启动UPP DMA传输*/
. u6 T* r7 T. t! _1 F$ }
UARTPuts("upp_prog_dma_i\n",-2);
, g8 Z7 {& [' q+ `$ v
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
) E D- D- Z& X+ q* v( M
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
! O4 _ h* b$ X9 X* K% k
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
; I |# a' w& T D1 s X) w
3 b0 S7 s( M: {+ _" R
UARTPuts("upp_prog_dma_i\n",-2);
3 d; P) H5 Q: H1 \* m
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
" \9 n* F! R5 Z, d w
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
0 h# J4 D! N- {7 h# d! g
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
/ Z1 B/ Y" G) V
b r5 _& g; v z q
/*等待UPP传输完毕*/
9 Y) P3 v7 o) M. R2 `8 q
//i=0;
* W5 g& _5 A6 F, b
//j=0;
: y" g1 B% H/ l6 j& J2 K4 g8 A
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
% c2 u9 C" m( E+ |
{
\6 _% i- t3 V1 Z
/* 测试UPP传输的同时操作普通DDR数据
- p7 d8 u/ t7 f
temp
=i;
& g- I; d' e: u5 ^0 m
i++;
" ]' e2 H( N. P% Q6 g4 j
if(i==1024)
$ [) d& f3 W# p3 _
{
3 x$ T- W& |! M* F& l* t/ F
i=0;
- N$ |5 G5 L, {8 F& k2 R! r( v; F
j++;
^; [* M& i6 a2 i
}
x- f# W% x& l, I9 }. O
*/
$ W) Y9 G9 p9 `+ g$ A! u# _
3 |9 {' I* s) _) l% k' T7 N% V: b
asm(" nop");
+ i7 ~4 a. g; ~
- l5 C9 C' w- ^8 A4 Y! Q6 _, U+ g
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
, |0 g+ n3 a n
}
9 q# Q- B0 ]8 R. t: \+ S
: B/ T+ f W. u7 M) I( t; g
/*检查UPP传输的数据是否正确 (loopback modes only)*/
0 x2 C- v B+ c
//UARTprintf( "i=%d\n",i);
' A' _2 X: b& J$ p
//UARTprintf( "j=%d\n",j);
2 ]! u: t% y; v
UARTPuts("Data mismatch in buffers.\n",-2);
& a K+ O: Z2 z/ c
if (upp_interrupt_count == 2 && upp_error_count == 0)
+ @: J/ k6 X0 |; t
{
J3 ]' K5 \0 h' e, l% w
for (i = 0; i<upp_frame_size; i++)
5 w5 A- t# ~+ i+ m' W) {* h
{
. G" g* p" i4 u) W/ X4 }' m( I% n- s9 I
if (upp_buffer_a
!= upp_buffer_b
)
" _$ d+ i& @: s7 m0 F, {: z$ l
{
6 f4 B6 X8 w! Z* z: Q
upp_error_count++;
, Z" k3 k G( x
}
# Q, Y- n" {* O
}
' E2 ~+ i2 a/ D
}
4 C- t8 M/ D" Q9 H6 ?) ~
) Q9 L) a J4 f8 x* T/ _# f* i% S
/* 报告通信结果*/
/ h7 A" @! Q+ D
if(upp_error_count != 0)
6 |: B# r& ~# a, v3 ^2 w; o6 Y
UARTprintf( "upp_error_count=%d\n",upp_error_count);
0 T5 S' d- ]3 K, k) m
else
1 M- s+ w, g4 ?, k3 E
UARTPuts("uPP transfers complete!\n",-2);
/ K( ?! \; b2 Y" S9 \
( I$ G3 i) p7 _: f; a" w' B4 T
UARTPuts("Do you want to print all the data?(y/n) ",-2);
6 q4 a$ m% V$ u1 s
UARTGets(ch,2);
' m9 p1 [8 C8 S( W3 V
UARTPuts("\n", -2);
8 b7 d( N9 w$ r& y. n( `6 Q* r
. a: B* N9 o+ z" s% W
if(ch[0] == 'y')
2 D- `9 g% \' ~" b; G0 x( [8 D# r. r
{
: A/ C3 h! ?0 F5 J
/*打印全部读到的数据*/
- v' i2 W/ m, L& |/ i1 ~
for(i=0; i<upp_frame_size; )
) @' K: U+ H2 b0 H! A1 E7 F0 }4 \
{
1 h- Z4 {" v, k0 @& o" a7 V
for(j=0; j<5; j++)
* @8 x2 J' C% G; Y$ _" o9 L
{
( J4 F, R. h! w }& ^
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
* W5 R" C$ [* g
i++;
1 c7 k$ p- r) Y9 d8 q0 r
//if(i >= 4096)
0 f$ N* m! g, E: J+ L; J
// break;
" }: n7 |9 a# ~. c
% B/ M0 Q' o/ d
}
* X/ D2 V! A: y! i( O" L1 n
UARTPuts("\n",-2);
$ [$ m9 _3 I6 f& ~
}
: O& q' J1 f6 q* |* R( b1 x
}
( _ Q: ?/ k8 s X8 a) K
% u+ ]4 W; z. o7 L; F* R- v
}
/ \( z L; o" B
& o3 Z4 g: c2 F
. d* ]+ \: h" k1 y; N
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
* T+ `9 ?" F) H. j( }# m4 D
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
$ U. _6 X, G w1 g! t* p
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4