嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
5 |4 z6 b* k+ ~
Void UPP_TASK(Void)
7 ]7 Q# h: o; ] D) k
{
% k5 A+ W$ o, b" K' ^1 M* d4 z
* p; O9 G% h7 a
int i,j,k,target_int_count=2;
/ q7 }5 V9 ?6 b+ `0 A1 `5 y/ C
char ch[2];
2 C; i8 a$ p4 E& [) u4 i
2 W# }2 _9 w) g$ {7 }* X' g" P) F
( X0 i$ X6 f1 Y* S; }5 r( j" v& j
5 m. r7 d+ o) g* A
upp_interrupt_count = 0;
! j, v0 P) s1 ^5 s
upp_error_count = 0;
" ]" r8 G& d8 z* t
1 { f2 D. B- v$ _7 k0 K, x0 E
UARTPuts("\tResetting uPP buffers...\r\n",-2);
# D& s, u0 j, T! P* P5 E, E
// Initialize data buffers
7 N, d; r+ B0 M) U+ U" v
for (i = 0; i < upp_frame_size; i++)
~8 r6 l3 {7 q4 k; @
{
* w" ^+ |2 r% t( u% @4 m0 p
upp_buffer_b
=i;
1 b7 q Z& }2 O) S7 @6 n
upp_buffer_a
= 0xDEAD;
: z3 V# `4 `" f) N9 W/ P3 S
}
2 e) A8 ]2 i7 E6 G) L4 |5 k
3 w# ~0 A$ N3 o: `
//for(i=0;i<1024;i++)
7 U+ p( Q$ t& K& ?% M" o9 M, N+ v
// temp
=0;
3 v) b5 e, R1 ?" v+ ^! G, }! P
* k4 O( f/ q+ s8 C2 e$ N
//UPPReset();
1 |( \5 c- i: A" i0 @
/*启动UPP DMA传输*/
; N1 F( u3 L" K6 R- e0 _' Y: Y; o
UARTPuts("upp_prog_dma_i\n",-2);
% R* {( k7 I6 y& f
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
9 N% y- W1 O" v$ b
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
- W* u# w3 X% |2 y" a* j
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
! \! O9 e& |, ?/ W" L a/ B9 a% c
- ]7 h, |( A8 Z' {/ X1 l
UARTPuts("upp_prog_dma_i\n",-2);
0 `$ f% l1 H4 n1 F5 W+ _
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
7 E+ d2 ]- F: H8 @+ s
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
* e: [0 _+ O4 x0 j( v5 c
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
" y+ [ }) i6 I/ Q
. e' s, @: D8 l
/*等待UPP传输完毕*/
6 `; {6 _5 `$ e# k
//i=0;
& x6 n6 A+ d. ?/ A; p8 z
//j=0;
: n* i9 j: }, Z% r5 R
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
5 x& b% L U3 n0 ^7 p
{
& ^& n2 w0 ~# k6 b
/* 测试UPP传输的同时操作普通DDR数据
2 j0 j, R) ]7 n( h0 Q% e* j% q. n
temp
=i;
8 a4 A- J8 w* G* I0 Y# Z
i++;
: V7 n; Y- H* J2 k) M! p( q9 w
if(i==1024)
, L8 \: I' Q3 S" p* G9 _
{
5 _. W3 R1 w3 u/ ?# Z+ Q2 ^, t
i=0;
" A# s5 T2 J y% Z3 I$ B
j++;
8 i* m- V- Z* j/ v
}
! X7 k3 t- V d: G
*/
9 k' a. T3 g: V- Q- [ [
; n8 P! b/ |* N7 k1 `9 g
asm(" nop");
, D# c' p/ |0 b" H4 u6 F/ `
4 ^1 A, R4 w: i( W% ~9 b2 @: b
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
- w5 H# B2 a& z b4 L) ^
}
9 u$ t$ l' T: D) h6 b- S" h y
* H) p9 t7 s. X* m
/*检查UPP传输的数据是否正确 (loopback modes only)*/
9 [6 }' P4 E( l* U
//UARTprintf( "i=%d\n",i);
" E% ]' }/ H1 |3 S s7 F1 b
//UARTprintf( "j=%d\n",j);
6 |# H( h2 U1 ^3 x# k5 k# }
UARTPuts("Data mismatch in buffers.\n",-2);
" z6 M" {; a( u2 E# U
if (upp_interrupt_count == 2 && upp_error_count == 0)
. z! y0 M$ ^. s3 M; \: d4 i0 @! k G; E
{
; ?% c& V# T0 y9 d, z3 }
for (i = 0; i<upp_frame_size; i++)
, v$ M- W3 p4 k) m! T- R1 C" }
{
8 Q' B/ u1 e! X5 ]0 Q4 H3 J
if (upp_buffer_a
!= upp_buffer_b
)
5 T' A2 i" f$ j9 ?' l) v5 s! }) r
{
6 k0 J3 e6 w2 i k
upp_error_count++;
D* g q+ D/ R6 |4 ^9 {
}
7 k# X! ^* M! h7 Z
}
9 B* X" _/ l+ ~6 {
}
; {$ v" \) u8 g# p8 t
. `* @! }- Z* z- R8 J& x9 U
/* 报告通信结果*/
1 r' M/ t/ s! S2 ?- t& M2 D1 V
if(upp_error_count != 0)
. ?' Z! w2 ~7 f$ y2 H" I& L
UARTprintf( "upp_error_count=%d\n",upp_error_count);
0 C! f. s( t' A# N( K* \5 h/ p
else
$ A1 J4 [) _+ L' _
UARTPuts("uPP transfers complete!\n",-2);
! [$ d# l# Q/ O4 A3 i
# c: L# C. _2 n$ e6 |# k
UARTPuts("Do you want to print all the data?(y/n) ",-2);
+ e$ u) ?! {( P7 S
UARTGets(ch,2);
; P( z6 G$ h8 \. E& [0 E8 X0 L
UARTPuts("\n", -2);
) @' e3 S# D& t6 ~
o' w; f( t D" ?9 L n
if(ch[0] == 'y')
8 d# C+ F ]# O9 X" |# M
{
0 g8 G. z1 U+ ~/ e7 ~
/*打印全部读到的数据*/
$ L8 s7 K1 }/ K7 ?8 a7 v/ d; B
for(i=0; i<upp_frame_size; )
& u' `0 f% t5 M% g7 j, e
{
# V3 b. J7 P) `- P' V6 J+ c- T
for(j=0; j<5; j++)
" c c+ k$ `: X8 I+ Y
{
, K7 @5 w, L7 h% h) F) P
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
2 h7 y1 @' B8 c! l
i++;
# H' X4 q% s8 @% k" |+ \
//if(i >= 4096)
" G$ [4 w2 T+ L6 D- p6 q
// break;
! h- ~! q- j+ `" T. P6 Z8 p8 A5 d
2 j: k: y2 V7 n7 p6 C1 a
}
6 N. V! t: b/ K3 K
UARTPuts("\n",-2);
5 O$ E7 b3 x7 F$ Z: J
}
/ \/ |' \3 k( x% `
}
0 Q# k ~# Z+ Z: f
' I. A7 T9 k' w8 R) T$ z7 m
}
6 _3 M1 W! d8 I
1 l" A' Q2 q! d, D: ^5 _$ \8 Z
" `4 u$ M C; o+ c! G7 E
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
$ `# h1 t: o6 Q8 c1 H5 O
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
; w+ s8 G9 Q3 c( s! f) n
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4