嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
: w" y2 ~, p' v7 N
Void UPP_TASK(Void)
# i0 C' H5 W4 k' Q4 `) E U/ ?
{
! P1 T& m" n, ]5 S! l
' s2 ?0 S7 s! ], m1 r" n' {3 b
int i,j,k,target_int_count=2;
( v R# O7 w3 ~( v
char ch[2];
3 K5 {, [& S0 a/ \$ d' _
$ y0 X9 t& S* M
2 F1 C, ]8 q, a. U
( U4 P' P( {9 C. o) U2 H
upp_interrupt_count = 0;
1 s( |- b! b& l! H6 B7 q# n4 X4 I
upp_error_count = 0;
5 r& L3 ^2 h# E) ~' J
8 k7 ]+ t4 |! f2 A' U
UARTPuts("\tResetting uPP buffers...\r\n",-2);
7 U0 Q& e$ b# ], S- y+ K d
// Initialize data buffers
* V% W {7 ^1 J
for (i = 0; i < upp_frame_size; i++)
r' O& h1 `# Q, J" D8 h
{
( B/ y8 D- S5 K6 x# \) `
upp_buffer_b
=i;
) I5 ?7 P2 `" c8 T7 P. i* _; I: Y
upp_buffer_a
= 0xDEAD;
4 m0 j- l+ X( X0 O- [- E& o
}
4 s8 d& c+ L) F! c5 J
1 M4 n* g% t! t
//for(i=0;i<1024;i++)
1 C! _- B7 n, ?# X. D* l: H6 [3 H! w
// temp
=0;
( L% ~( D3 m: S, ^* z
* q9 C; z( v! W8 t- H: r) Q
//UPPReset();
/ }$ q& ? d! Q0 I) M
/*启动UPP DMA传输*/
) s% h- n5 d9 ]' o7 K" N- s" x
UARTPuts("upp_prog_dma_i\n",-2);
1 X2 v }" s5 Z3 i" q1 h
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
- }5 |+ S0 B& @& m
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
! |6 P" |/ v- E& ^) ~+ M
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
3 \" j0 `+ g0 j/ D8 O- W
( L2 Z- x5 Q9 o0 c0 z4 R
UARTPuts("upp_prog_dma_i\n",-2);
! |% |; m' U4 D4 c' L' |6 o
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
( t# b9 @. b- Z; K$ F4 A4 Q
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
2 H7 g& M" d8 g( }
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
* p: s5 c6 Y) v4 T8 Q
$ N! \) ? S: R3 Y _
/*等待UPP传输完毕*/
/ j" D, N! k* X) J7 r4 D
//i=0;
8 x" a2 ]: v" j0 t) b# O( f
//j=0;
( D4 k4 s' h3 C) G
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
* g7 V X7 D4 n& _% T7 ?. o
{
C c3 E0 ?; d
/* 测试UPP传输的同时操作普通DDR数据
# ~$ f0 H: e, W3 B1 A8 K
temp
=i;
. e% i7 C& F. L9 F _! s2 Z# F
i++;
8 @' [; X3 x w6 H
if(i==1024)
1 B& @2 t0 x3 }: a
{
6 B& t1 O% W! j8 @9 r# K
i=0;
) @/ n. g+ x; g
j++;
, l8 ]7 J) d, s
}
0 K- m; o+ O2 K. S$ p; ^9 O
*/
: Q( I+ ]' V4 W( ]+ |; x
+ e" u; }# j1 G! D2 b: O7 H# t
asm(" nop");
, }) x, |2 v" H6 v5 r3 E* u. M
; k: c( G+ b2 A
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
: Y8 C* u( ~# k: z1 M
}
& W! @0 _, N3 ]( y
; `# e# ]) q3 g
/*检查UPP传输的数据是否正确 (loopback modes only)*/
: n7 O( ]2 l+ a5 E1 F
//UARTprintf( "i=%d\n",i);
* ?8 n' O5 |; j6 |, Z& Z1 |9 m' ~
//UARTprintf( "j=%d\n",j);
1 H* C: _- f- S: N. u2 t
UARTPuts("Data mismatch in buffers.\n",-2);
' j* O1 i! H- w+ b x$ H& ]
if (upp_interrupt_count == 2 && upp_error_count == 0)
1 r5 ? E, u0 i
{
2 S. d, Q; e% z, g' V$ D# {3 M
for (i = 0; i<upp_frame_size; i++)
1 b# X3 {7 a( {5 R, E
{
/ C- B% G, |# i
if (upp_buffer_a
!= upp_buffer_b
)
# t7 c4 u$ T% z8 D
{
6 }: d; ^( c' Y& K' p& u1 d$ r
upp_error_count++;
/ e* Y6 X6 s) d, @9 m& m
}
/ o3 `- m3 F- r; s$ |4 `
}
* H, S' {" C2 Y! r5 q6 P$ O, H; b
}
9 ]9 B! j8 {; O1 [$ P9 C+ Q/ f, d% v
, [9 s8 G8 P; t! p! Y- d
/* 报告通信结果*/
/ d. {& P1 }) U) @/ U
if(upp_error_count != 0)
: B7 p% a o- \* Q
UARTprintf( "upp_error_count=%d\n",upp_error_count);
) R1 J2 b J8 G t- Q
else
" q8 }7 G) o0 ^
UARTPuts("uPP transfers complete!\n",-2);
b7 L: c1 Z( H% q: P) O0 `
9 |1 ?* u [; _9 |
UARTPuts("Do you want to print all the data?(y/n) ",-2);
) {) F- P0 E) G8 @$ l# b
UARTGets(ch,2);
* R" s( w$ \$ R2 p( ]- S$ P
UARTPuts("\n", -2);
9 W3 n4 { z6 j/ G
9 |& C# B+ R( P
if(ch[0] == 'y')
4 n% W- p O; F: E1 X* H3 E
{
/ |, p3 J) e) U9 x
/*打印全部读到的数据*/
0 d; @8 l; M, n2 M
for(i=0; i<upp_frame_size; )
6 v9 n- \# z; O: s* s% x
{
, W) P5 P, Q4 {8 y1 h) O6 F
for(j=0; j<5; j++)
; x5 d, y, c2 t5 c7 y7 M
{
7 v; V! d1 f( Q/ ~ Y# _
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
3 ~4 c- i3 Z: `. R, f& Z/ V
i++;
( P! M d7 M ]$ j* c5 I6 `
//if(i >= 4096)
( q7 a# u) L8 S. Q! L2 `
// break;
6 x. Y) z9 h- k, q5 I5 m: p2 E
0 X+ @* i) Q5 A3 a3 H6 L8 w5 E1 a
}
$ n/ N" G9 x) D- C) ~. |8 V8 {) _
UARTPuts("\n",-2);
; {& Z4 \0 P* p# G ^
}
; ^ v% w/ m8 `+ ^. L$ c/ [
}
3 [' v/ g+ R2 f' K9 ~
2 t( \! t6 @) U( k+ A0 T
}
: [8 h# v1 }2 i0 i) ]
9 k# I0 i {- l
: h7 |4 y% F( _
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
* W4 R G A# W J6 {
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
/ z, ]0 h/ q3 X4 m
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4