嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
' s4 ~& D" {5 r3 |
Void UPP_TASK(Void)
% ^8 V* h( R+ i
{
& y3 p+ c$ ]3 p2 `
# s2 r+ }% l1 t4 p
int i,j,k,target_int_count=2;
8 ~! g! F9 m6 k4 x' e
char ch[2];
N) A* L+ V' @1 a4 J( g% n
M& s( y3 j& `
8 E$ b% z% n- m
* O9 C' p' J" X4 }9 B& K
upp_interrupt_count = 0;
/ w" n5 t0 [- Y. k
upp_error_count = 0;
1 k) ?( z: l7 e5 V$ g& @
( ~ \( l* W% n3 G' m
UARTPuts("\tResetting uPP buffers...\r\n",-2);
1 S! `+ H0 c8 T9 ?7 M, X
// Initialize data buffers
- k" f1 Q6 K' j4 o) f
for (i = 0; i < upp_frame_size; i++)
7 l( X/ v, ^9 E9 ]8 P7 G
{
: C; M+ B% H4 q, i" S3 K+ w2 j
upp_buffer_b
=i;
/ @- ~7 y0 ], I
upp_buffer_a
= 0xDEAD;
% i, g: y3 }9 f4 D5 E; Z
}
# [. D9 `* Y/ _5 Z( T) k
- M0 a+ C5 K) |
//for(i=0;i<1024;i++)
: o) X! @2 I, ]4 E; Z2 C
// temp
=0;
/ v: O( w' q$ M$ c; j
|1 h N5 P: z6 e D
//UPPReset();
1 a1 Q/ w" h/ _* B
/*启动UPP DMA传输*/
5 |- v1 W& o8 R( w1 \; S
UARTPuts("upp_prog_dma_i\n",-2);
. L8 q5 |: w3 w& z& P
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
( y& p0 a7 @' V. w/ X2 e
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
4 w7 R5 H5 p' \6 A& e! K4 m
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
9 n( u- V9 F7 S$ v8 I
. Q0 U0 d. L, J8 x# K1 [5 C
UARTPuts("upp_prog_dma_i\n",-2);
9 L0 w. P$ O' J8 ]
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
6 L. C% v$ {7 m, T; i& Y$ l; d
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
: I7 l: l) l9 j) a% W9 W8 P
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
- V& R' P9 W# K/ Y6 U) z
' z# r. X% I& f" E9 G3 r
/*等待UPP传输完毕*/
5 h j1 | j% t
//i=0;
5 o! E* F" E/ R0 o6 y5 n7 n
//j=0;
4 ~5 @: v; Z y l+ p# }
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
, |! b8 D; i& x6 t
{
* d1 B8 n- Z, q! d. i3 ^! a
/* 测试UPP传输的同时操作普通DDR数据
/ ~6 E3 B! ~5 ~' `) |, u; Y+ \( l
temp
=i;
6 T9 L( r+ G8 w& F) u6 n
i++;
: w) \. R' n+ P/ G0 x
if(i==1024)
9 {4 Q% c0 G4 H [& C; V1 I
{
0 s, j8 S8 e+ P
i=0;
% B1 k& C% O1 n0 x+ j# X1 R" y& B
j++;
% ]* o6 L9 h, j: r, P
}
) W3 F6 Z" k) H$ e
*/
! s8 I3 R K# I0 B- Y$ x n- ?' x2 z
: H5 J% B7 J9 t$ |4 A! ]
asm(" nop");
. G3 @, I1 k; K0 o5 n# F8 e6 g
1 n, s' A3 r6 Z7 B
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
: Q; |! i5 a/ }$ f0 t' _
}
4 v7 w+ S9 F% b
' x& G4 X& N( K: Q; C9 `8 V
/*检查UPP传输的数据是否正确 (loopback modes only)*/
9 k8 [1 A4 H4 |9 n0 H0 r3 q! m2 o
//UARTprintf( "i=%d\n",i);
7 H7 N8 g( `$ `+ T: L( d2 C
//UARTprintf( "j=%d\n",j);
0 B* a, ~" c' P8 T7 t: `& X- z
UARTPuts("Data mismatch in buffers.\n",-2);
# }: u4 ?1 U- c3 @' x( i
if (upp_interrupt_count == 2 && upp_error_count == 0)
: ~- L8 n1 X' _) ?+ Q
{
/ q" C! }' h0 J: y5 H+ }
for (i = 0; i<upp_frame_size; i++)
) d& @+ U2 y0 x. K
{
# W0 F, n% ~8 A3 A* h" r
if (upp_buffer_a
!= upp_buffer_b
)
1 u) y: {% v: G5 s
{
6 p: `$ Y# Q% M4 q0 D
upp_error_count++;
+ M. X- g, \' d* @
}
* z$ b" t4 u" R, }" j4 |7 E
}
" G# [+ }1 }4 I- S ?! R- r
}
, a0 }' ~6 d X2 Y
$ F% ~1 w2 z5 ?5 A2 s2 u9 y
/* 报告通信结果*/
6 A- B1 v) G; ?, j! ?- C: K7 |
if(upp_error_count != 0)
7 d9 Q" @3 o8 [
UARTprintf( "upp_error_count=%d\n",upp_error_count);
3 ]0 P* X" e, ]* j* o
else
- e& n9 P; K% p9 E
UARTPuts("uPP transfers complete!\n",-2);
+ ~ @( Y" e1 d7 c+ d
0 M! V$ Y& K" x& _) ^3 ?* b) ]6 r
UARTPuts("Do you want to print all the data?(y/n) ",-2);
" R6 S3 u: R* k9 y- O- N- w: B
UARTGets(ch,2);
0 g0 K! l( t* }+ U
UARTPuts("\n", -2);
5 ]- Y' E j, f" f) r' X
) S3 V5 H# z$ |. L E5 l
if(ch[0] == 'y')
0 c9 h6 c# G6 r( s7 ]9 z
{
E% B- @7 D$ R2 x- G- _
/*打印全部读到的数据*/
1 P& Q s1 y& F$ Z$ z) w4 q% d
for(i=0; i<upp_frame_size; )
9 [, h4 O- z" M
{
, X: g1 l* W2 i( H/ G
for(j=0; j<5; j++)
3 [. K3 h# v& G' f+ C3 Q
{
# ]- a) l: }7 e1 Z) U( s: W
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
1 ^! S; s# e* x3 u. K5 }' u' [! H4 ^% l
i++;
% E \# W4 v6 a5 E$ ~ I# n
//if(i >= 4096)
* j: J- Z" G( Z9 S( f# F
// break;
# I% B# c5 e" D# ~+ W/ V R
$ Q0 W. `9 | ?9 e
}
+ s$ l7 N& r1 |$ q
UARTPuts("\n",-2);
2 k( {; s# I8 K% X" N
}
$ X6 ~9 z1 T2 c: e* V: I. v/ K
}
& [+ n5 Z N! j5 ~1 j8 A/ ~
' T, j1 g/ g' _( `" S
}
. U2 j8 |# f. d% @
0 C- h* P1 I0 E2 V$ |5 z- H, a
! _" w4 B* ~% C$ Y
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
5 p9 P4 t1 Q; _1 V3 K! n7 l
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
% V3 i/ S! e H9 g. k0 w
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4