嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
- z4 r8 W. j$ s0 m4 t
Void UPP_TASK(Void)
7 q! ]4 z# q8 G6 s6 |" e: w8 v' J/ n
{
' O: I2 y; b( A p+ V0 a: I$ E
# q* j% }+ r0 G
int i,j,k,target_int_count=2;
" E/ j0 f9 F- g5 x; Y) w
char ch[2];
% U& B, |' |$ }0 o; }1 |1 s% E
( R: g4 O- E7 R& q2 c- q6 v
( o2 A7 ~* r/ a' j5 h
* ^% f5 q b4 r0 n5 ] _5 a; {
upp_interrupt_count = 0;
! x+ p. J* n& M8 w
upp_error_count = 0;
" c" p. F: m, G N. @
7 p1 b: F1 b# a: E! x6 u
UARTPuts("\tResetting uPP buffers...\r\n",-2);
! D; p8 E' E$ m7 M+ l
// Initialize data buffers
* B$ M; G$ b' k; j* I
for (i = 0; i < upp_frame_size; i++)
1 M% S, r4 m2 b7 K s3 {
{
* l$ B! N [, a$ u7 ^0 L
upp_buffer_b
=i;
8 {3 d! m/ V5 M
upp_buffer_a
= 0xDEAD;
! @4 E% r* j7 b% x' H$ c$ O% Z# q
}
9 F( |6 [" s% q, h' t
1 h0 K' q( C7 v$ T) f
//for(i=0;i<1024;i++)
) B1 J, ` H0 i) y
// temp
=0;
4 x, n, K1 f: U
/ i! {0 W* P6 H% C/ X" h
//UPPReset();
6 \# l' H, K1 v+ C `8 d
/*启动UPP DMA传输*/
% N5 g" ]) P, I4 Q. i6 f
UARTPuts("upp_prog_dma_i\n",-2);
9 s% Z* S' z- a" ]) a/ ?+ ~% K
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
" h1 j w' O8 E5 ~( r( U* G1 v
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
. Y; V+ w6 P7 y* w/ E1 r
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
9 n2 L/ `) Z7 l% t: ?7 e
1 g7 L/ T! m& B2 }6 G4 y
UARTPuts("upp_prog_dma_i\n",-2);
9 W0 U) |* N$ J1 E% @- U: p/ O2 D2 h
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
/ E1 p U" n6 ? U5 ~
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
- z. C/ h! z# G- ]
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
( [" I( G! e, |1 g/ K
8 G6 s I- k0 b2 L6 B% H; |
/*等待UPP传输完毕*/
/ V0 a' P" S) B3 f3 t; d h
//i=0;
/ T( E7 x1 H' ]5 O
//j=0;
- V3 l$ }8 d% H
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
( y9 G$ u1 C$ F! J! n3 y! u: ]* g% \* E
{
9 N/ o+ d: A2 J" H5 R
/* 测试UPP传输的同时操作普通DDR数据
% ?% C0 {) g) r& u) ^$ B p9 `+ s
temp
=i;
7 w5 X# j& z+ Q
i++;
) k1 Z7 d; v9 X' V: X: g
if(i==1024)
6 v ` q/ z$ z2 h l7 M+ l
{
1 _ D% e) v: Q! H: R S9 o; Q" S
i=0;
# g+ ~- B" y# C. a B% ]8 {+ l
j++;
) X; Z+ Q* w$ x$ Y# j |0 i
}
, L% P+ {+ u+ H
*/
" U( q5 n1 G& o" C8 W" m
% O( I5 r- r7 J+ F" Y
asm(" nop");
6 b9 e( h4 P/ H9 l; @2 K7 K; W
9 P) G9 H- ]6 d6 q2 y, h+ j
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
' y% u3 `# F& h
}
* D' @" w- a5 {3 }4 o9 r& X
) _# `# w3 j5 f! T
/*检查UPP传输的数据是否正确 (loopback modes only)*/
) |: S6 T8 H2 ^ y: \
//UARTprintf( "i=%d\n",i);
2 z. e6 c& s7 a4 T
//UARTprintf( "j=%d\n",j);
q! V5 t1 {* f+ K# W, }( V0 G. W2 ]
UARTPuts("Data mismatch in buffers.\n",-2);
: e+ ^6 d7 d u" I# H G; j9 |0 i
if (upp_interrupt_count == 2 && upp_error_count == 0)
7 s7 \' g. y. ?: ]$ p+ w
{
& ?5 l' S2 C3 O9 q- p
for (i = 0; i<upp_frame_size; i++)
% i7 X) h+ {5 ?5 @
{
+ v% t: E! f8 h" ^7 ]+ \/ z* ]
if (upp_buffer_a
!= upp_buffer_b
)
6 s3 A \$ M2 U6 g( \8 ^! q
{
& y s( u: x( h" S. l- s# B9 p$ @
upp_error_count++;
& p" l: Z4 R) k; l9 Y' S
}
& {8 ]# z. X2 k
}
( x$ r7 ]+ Y- I& H9 M
}
0 i- n# ?6 p/ N/ t
" _ z7 i' E0 \! U
/* 报告通信结果*/
$ I" W3 u: p" h( M" C' [) K
if(upp_error_count != 0)
; G0 X0 j; G: n' l8 }
UARTprintf( "upp_error_count=%d\n",upp_error_count);
6 g/ V, h! c- P O# L
else
; q9 `8 b7 t. c* j9 y: l2 V, k; ?: I+ a
UARTPuts("uPP transfers complete!\n",-2);
: c; ]3 l8 Y2 W: ~& E
$ L% i/ P( `- ^) v
UARTPuts("Do you want to print all the data?(y/n) ",-2);
' K4 V, b8 w _2 f+ A* B5 I, s
UARTGets(ch,2);
( n% c2 C$ u6 ?& |, H D
UARTPuts("\n", -2);
- r. A% ~, m t
4 _( ?& Q- n* `4 I
if(ch[0] == 'y')
2 K7 J, u }3 [. k2 o3 M
{
; o2 b0 H( N- I; _! w
/*打印全部读到的数据*/
4 W! L. O) O O
for(i=0; i<upp_frame_size; )
' o2 H* e1 h9 N$ X. J! l4 [
{
3 l. K4 F% A* o5 ~) y e
for(j=0; j<5; j++)
0 i2 d& L5 D8 B! |
{
7 j% B6 { b* H8 v
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
9 C# h+ Y2 P9 F7 g
i++;
( } Y6 Z8 \3 G$ [! V
//if(i >= 4096)
; B) y$ h' R" Q. X. K X `; {; M
// break;
( R* A# t9 j, c6 ^* \
+ y7 E L/ Q- w) u
}
/ P6 t: D: a6 X& L7 G$ S
UARTPuts("\n",-2);
, a# f. r* e* {% v
}
# {' \9 w: H/ W9 F
}
7 C, z0 ~6 b5 e8 x+ M$ |! X
# ]# K/ t* f) Y% {: J
}
# I1 I3 J( x9 O$ Q& `. B& B: x# l X
4 n$ o7 f6 `( `! l. |- Y$ P6 |
# Y" v" H# P9 W: c( F4 `
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
6 Y) t7 M# {3 U+ h: l
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
$ p; P6 Y6 i; |
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4