嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
0 I R8 F% c6 @6 y; V( R
Void UPP_TASK(Void)
% V% ~% F! D6 E3 f
{
0 u8 z- X" E# X4 o2 k1 r
/ H2 Y& F: C# ~, m$ E$ Y
int i,j,k,target_int_count=2;
7 r K# R6 c8 h$ d7 \
char ch[2];
% N$ o2 x% `: w: i8 c1 q
) b4 k5 [0 Q# y, P9 }
, s5 U) v9 h) W4 [
0 q; u& @! _& R/ s2 h9 L( n
upp_interrupt_count = 0;
B' W* n1 B4 h" K3 W0 R
upp_error_count = 0;
2 b A! a( _, {/ u- A. O) I# b) @
. \( v! n: u" Z# y. A8 R+ H
UARTPuts("\tResetting uPP buffers...\r\n",-2);
. a! W% B1 ], z. p G
// Initialize data buffers
8 ?; }- X& p" `, |. J( ^' i# G1 W
for (i = 0; i < upp_frame_size; i++)
& k2 j( H+ d/ B$ D4 {0 h# F
{
1 r% s( p8 T# x' a7 z# `
upp_buffer_b
=i;
, j. I4 h7 q, p. J3 f
upp_buffer_a
= 0xDEAD;
1 ^2 b# `" [ P2 v7 P
}
: p+ A, Y2 y) G. X) ?) l
& }# S; n3 r/ b
//for(i=0;i<1024;i++)
% `8 @. \7 Z9 p, f1 [+ }0 s% S
// temp
=0;
7 J4 N4 \4 S! A1 B0 }8 j
5 R4 X+ V, i% S1 n& B6 @: p% k
//UPPReset();
, x7 f: P3 \8 f
/*启动UPP DMA传输*/
) e9 R9 S7 I) Z+ J" s* W1 P- V M- H2 |
UARTPuts("upp_prog_dma_i\n",-2);
7 s0 F+ }" _" V6 e
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
$ o6 v R0 ]$ l9 k8 @0 w
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
1 X9 ]. ?( F0 }7 i
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
+ ?0 N! ~) F2 { D, p' @0 f( A1 O
' t* m/ E# A; a' p; A
UARTPuts("upp_prog_dma_i\n",-2);
$ X8 G- {" j* t, {
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
3 f9 S0 ^+ N6 ]/ J: a" G
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
/ X% D7 [ P( D: a5 A5 M
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
) q# L6 [+ `* v8 G3 W; i- ]8 I' |) {
& v( L1 f: ?$ F v5 t7 {
/*等待UPP传输完毕*/
& q7 O) v, _ w! W% m
//i=0;
- J+ |6 }" X) X- i+ ^ G6 i5 ~
//j=0;
% Q5 B# V Z" Z# B+ ?" j
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
0 K: I+ [* d, c2 k+ h* o: \- Q, ?
{
7 l0 k y8 z3 ?7 P0 b
/* 测试UPP传输的同时操作普通DDR数据
5 X( g0 L- _3 q! I8 W
temp
=i;
+ w3 P, I; Q: }. z# |7 |5 b! M7 i
i++;
4 R: i8 X2 D: ^- L4 R
if(i==1024)
' ?. s( u; |9 o( y& `# f
{
; J" l' {1 I1 o' ]
i=0;
( ]# E) }3 {3 R$ {% p6 }4 e# O7 z6 n
j++;
4 f) Z5 M1 f+ {+ b6 L* l1 G; q
}
9 w, v r1 n6 b& o
*/
. k, u* K. W& M7 q M
, ~0 x" L @5 i8 R
asm(" nop");
2 t3 n" l$ l2 F1 [' t6 n
+ T4 Y( H. C* \" _" r) Y
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
, P) G1 a7 c( _. [. U
}
) z$ o7 i1 D( W+ Z8 O7 F# m2 H; T; a. T
+ E0 E. y5 r8 h% @7 ~
/*检查UPP传输的数据是否正确 (loopback modes only)*/
) u; D! H5 R4 ^1 A( U" {' \
//UARTprintf( "i=%d\n",i);
& x+ ^) l+ X" E& \# S
//UARTprintf( "j=%d\n",j);
9 ?" f+ S9 K3 W$ C8 \3 Y ~
UARTPuts("Data mismatch in buffers.\n",-2);
+ E7 S# X7 y, p1 ~9 k
if (upp_interrupt_count == 2 && upp_error_count == 0)
G6 [. }+ s) h5 w/ D1 W1 d
{
! i7 f, _8 R/ f, \+ B
for (i = 0; i<upp_frame_size; i++)
0 M) @/ S7 f: O
{
* ^3 n" d- g4 M5 b, U
if (upp_buffer_a
!= upp_buffer_b
)
8 O- Z& e7 l+ C& n
{
- R l" N1 _( o# _" l4 _8 X
upp_error_count++;
2 c1 U. e6 J" U& {" c' i1 y: O
}
+ ~- |- ]: J$ N+ s: F
}
, o |& |: d2 v r. X
}
: H5 ^3 j, o& Z( G" R! y
6 V2 o8 o: e' ~" h; l- ~" S: @
/* 报告通信结果*/
& J: g1 j9 p% q/ M
if(upp_error_count != 0)
) r8 C1 ~- t9 z5 G# n# [* G
UARTprintf( "upp_error_count=%d\n",upp_error_count);
, F- ~* L b* ]
else
/ R2 d v3 [. p0 c+ b5 p. l9 a7 O
UARTPuts("uPP transfers complete!\n",-2);
3 F' R5 {% C/ B
. {( \2 g5 g$ ~8 L: y
UARTPuts("Do you want to print all the data?(y/n) ",-2);
4 A# _$ Y& ~" ~' a" W, {0 m& ?: L# t
UARTGets(ch,2);
" M& j/ U( @7 o# A- i6 _5 N
UARTPuts("\n", -2);
; b8 t& B2 x2 l! T' r
! O# e' l/ K% F1 W: v% {: U
if(ch[0] == 'y')
3 E: o/ P0 Q% s) ?6 W/ ~( z
{
9 }, x$ Q6 b% o% f% G; w0 G
/*打印全部读到的数据*/
, k5 ^% h. q( Z J
for(i=0; i<upp_frame_size; )
9 x$ W+ w4 A' b) E- z: S
{
( o. T$ A! N. \2 L9 y+ ?
for(j=0; j<5; j++)
/ }) C1 O, y( p2 `+ y/ a7 b) R
{
8 U+ F& T( L$ {5 D9 |
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
9 \3 q/ L4 N+ x) Q/ o: i
i++;
8 D4 }& ^; Y$ V0 m" H7 ^8 Q
//if(i >= 4096)
) [8 G! M& E9 B: T0 H z
// break;
4 B# X, M2 `9 u* A% B, a5 V/ q
, z7 e' ?8 v/ r
}
7 P6 R% `* G( a4 J4 r
UARTPuts("\n",-2);
1 P$ E" F* l$ n: i% u+ m9 E
}
( f3 z6 @% ]1 h1 l; V+ s+ C
}
( ~" q+ l0 C0 ~! }9 ^2 W
' n% a; _8 Q' w; Q# W" e
}
6 G s# S3 X( j$ z+ q" C
0 [+ v$ Z( C5 f# m
; y7 v( E9 W4 }/ r- q' |5 D; Q: w
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
1 b$ D% ?: _( z" E/ U$ T
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
. Q$ x( O4 A3 I
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4