嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
e! w, q3 n- p! Q* d" M( p
Void UPP_TASK(Void)
* \4 c. X' d8 ]! X) N. v, V& }
{
. ?& |" K+ j$ g
8 i7 |: P, B7 y1 S
int i,j,k,target_int_count=2;
( ~$ m7 x) W7 @3 |+ j) s
char ch[2];
- Q4 {# W; {& [. C0 Y B% v* J& z
# F/ e" V- G! O
( [. a" R8 L4 m8 Y" S2 S1 Z
% t# d* b! R8 W! ^9 u/ p
upp_interrupt_count = 0;
+ M: p6 @. E2 _* J% k* `
upp_error_count = 0;
( z+ X3 N5 a* O* m$ P; r
$ Y5 l( j6 @6 G
UARTPuts("\tResetting uPP buffers...\r\n",-2);
% a* M% Z/ Y- }/ |5 f+ F# r) e4 @
// Initialize data buffers
( L" a @0 \! N. l+ v! Y
for (i = 0; i < upp_frame_size; i++)
( k1 `& G0 ]0 Z/ G) H& k9 A
{
$ `: b: k$ i A% m' v
upp_buffer_b
=i;
/ k( T5 R9 E' f' J+ h, `
upp_buffer_a
= 0xDEAD;
- W( w3 G: E# L! P0 ?& n) ?
}
1 [. g& t% g" Y K5 [" T! e
2 h9 r+ E2 N2 `7 k
//for(i=0;i<1024;i++)
! q: h! s' _7 ~$ {# ^
// temp
=0;
8 O v4 ^* @/ E* a0 z
4 R6 j4 w' Z3 ?. S
//UPPReset();
- C6 H3 ^. G5 V* C# v, s
/*启动UPP DMA传输*/
?2 ]% r8 K9 B' f/ @4 n
UARTPuts("upp_prog_dma_i\n",-2);
% [ m8 Z) V* A# p9 H" a& H! c
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
9 n: ^. ^- {, ^ n. |
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
0 A8 h9 n' N3 b- Y5 G
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
; _% W% m; f3 c" G" L, j
! Y6 o6 t$ j: k
UARTPuts("upp_prog_dma_i\n",-2);
$ Z3 {! y" I7 z; d( H% t
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
1 a# J2 F# v& D- ^: P4 I
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
& q! g4 j( _- x6 s
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
: F# d! h% T+ L1 C2 M
$ `8 Y3 X J1 G ?. @7 f9 t
/*等待UPP传输完毕*/
# P( i2 a+ ~! h% v _
//i=0;
' R4 {3 F/ X. D" h
//j=0;
1 J6 y6 Y ~7 W6 G: t7 C. c' g" U
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
; G# g* [ n% D w. d
{
4 g2 |( f9 l/ E, w
/* 测试UPP传输的同时操作普通DDR数据
- [9 ?( d" ]2 v
temp
=i;
- u S; {5 E# ~' P) y6 C% z0 E
i++;
; _: Q+ `" M6 ]% \. L
if(i==1024)
! W9 i8 Y, h& `3 C( P
{
' h4 e8 o# h: u
i=0;
6 n4 Z f; C& E/ K0 B
j++;
9 T; D0 K$ e& `1 N1 Q3 C
}
( U- q2 ?& \' D6 }
*/
! }4 Q- x7 J! f' J% r) n6 g
7 @& P6 \, w0 X
asm(" nop");
3 a* Z' ~& y, @' i6 E
9 b/ o0 }$ r) B" |! r
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
) J4 E( M: N1 b9 f6 Q
}
; x% h. w! [ E% s2 m
- @+ r' G4 z6 b/ E
/*检查UPP传输的数据是否正确 (loopback modes only)*/
; w3 T0 f. `& e6 r6 E* x; D" H
//UARTprintf( "i=%d\n",i);
4 j( ^9 {# r; g+ x1 S4 B7 m
//UARTprintf( "j=%d\n",j);
+ p* K/ x+ O" s! f; p$ l
UARTPuts("Data mismatch in buffers.\n",-2);
) |3 ^1 P! L; Y% u- f
if (upp_interrupt_count == 2 && upp_error_count == 0)
* L. Y" J6 \( e5 a+ v
{
3 T' K& `# n/ V. o
for (i = 0; i<upp_frame_size; i++)
+ ~9 |$ {1 `) Q% E
{
& j8 b `: V+ M
if (upp_buffer_a
!= upp_buffer_b
)
# p! e# \. I/ O* N& E
{
9 V' q9 w: Y, ~# S) O: x. Z6 b
upp_error_count++;
+ L* b8 H# C' k
}
; U7 r/ Y. |2 z; Y; ], [& J& B. U4 _6 ^
}
! h5 {' P& n0 p% | _0 v+ C, z
}
- q8 K$ v% U' i6 y. e: q
$ a1 [1 L9 A" R# ~, _
/* 报告通信结果*/
4 p) d# H }' ~. U8 P- L8 v' O7 y
if(upp_error_count != 0)
6 e( v& y6 G* W
UARTprintf( "upp_error_count=%d\n",upp_error_count);
9 G) c$ b; |# M, h' Z! S' @% c
else
7 x* j7 ]0 q9 X' _8 F
UARTPuts("uPP transfers complete!\n",-2);
1 E7 g/ t" {8 f: e, I
" g, C$ X* \4 x% b; N- } M N2 [# \
UARTPuts("Do you want to print all the data?(y/n) ",-2);
; g+ p0 C$ `/ ?- G2 k& ]
UARTGets(ch,2);
/ u1 z2 ?+ ^" a
UARTPuts("\n", -2);
) R6 p# i. c) j& V- I3 m
* F" p0 r! p% n+ q2 X
if(ch[0] == 'y')
( P' d2 O: O8 H
{
2 Q" j8 r: W/ G
/*打印全部读到的数据*/
( d% D6 X6 _9 R4 p
for(i=0; i<upp_frame_size; )
+ p7 m' d% u" X, X% U+ `& o! z
{
: N Y3 Z. d) l* t+ _; u7 s1 n
for(j=0; j<5; j++)
9 M3 | n/ s% R1 D2 P/ k/ i
{
s4 @. g" o" C( v' D
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
9 M m" G# {' X9 m/ [3 C7 v, \1 D
i++;
+ l I( O" v. v; ]5 w) V8 i
//if(i >= 4096)
. T& W1 A% ^" ]( d
// break;
1 o4 Q. `$ R4 T h( }2 C2 Q7 h
/ W+ ~" k! Z6 W2 N0 }* [" R: L/ o9 S
}
8 n* Z* A; t7 Z! X) n% b- q: M P
UARTPuts("\n",-2);
# K' X+ K* M9 F
}
/ _% c! R7 P. \5 Y( n F
}
% z! t- O( {' `+ H5 O+ j, M: G
' s; B" i, k7 Z& r
}
% ?5 `( G" G; J/ B1 U; G4 n
4 I7 M& M8 w+ ]# x
4 j9 F& ~' W6 r. W/ C8 _
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
6 m. g4 E; Y: q7 _+ T) C$ Y
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
) j+ x6 g' y0 Z1 B1 [
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4