嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
, w Q9 C6 A7 x2 X6 A7 N1 o
Void UPP_TASK(Void)
9 C; f6 | n0 W D* u/ @
{
( A3 l1 m2 R9 ?5 S
1 `$ `# B; R, [5 A) ]- |# @
int i,j,k,target_int_count=2;
; s9 d- ?# r+ P7 J2 U F( {
char ch[2];
' S. |4 e' J" ~6 T2 U
9 T* A5 l# ?: S5 p4 C, Q
' z$ @' g0 F& g- J* B: k- ]
+ e8 R- c4 F9 d
upp_interrupt_count = 0;
& N+ |4 V0 k0 c# ^7 t M- b8 l+ U
upp_error_count = 0;
+ j P0 m0 p6 G; m7 c7 V
! Z7 M# d; ^/ w7 q2 u" U
UARTPuts("\tResetting uPP buffers...\r\n",-2);
0 E, I7 A+ P: b9 H A! g
// Initialize data buffers
g4 |% T; s5 E8 n
for (i = 0; i < upp_frame_size; i++)
+ I' u0 u! W) p* t8 M9 x0 ~+ a
{
! ^" f8 p( b$ w% K% q$ d
upp_buffer_b
=i;
" `) F' H& V. B3 M& g3 p
upp_buffer_a
= 0xDEAD;
& A+ l- @4 q* ]( y% E/ D( ^% z
}
& b% @4 w$ q" |! o6 C0 U. s' R
E+ k( u9 m4 h# Z
//for(i=0;i<1024;i++)
2 B7 k& E6 ]* Q
// temp
=0;
4 C) p7 j3 T( X6 g0 s% R
& G; O$ X/ n7 |$ W% ?
//UPPReset();
1 i9 k" J5 Y h. M5 r: ~% ]! Y
/*启动UPP DMA传输*/
' k- x7 B5 r0 d. |' Q
UARTPuts("upp_prog_dma_i\n",-2);
( @- c; {3 m! z& U, A
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
! Y7 N" G* \' r3 a O& f
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
! p2 o, E" e2 B- S2 i2 x
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
k: ?, D' T/ ^: z$ |3 m1 j" T$ U
7 |! `% o6 z0 r; ~& Q
UARTPuts("upp_prog_dma_i\n",-2);
7 v k# ~$ C& L: U0 R' E+ N+ i
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
! T# ~5 j% y! T: G9 X
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
j5 j% f6 C1 {5 k9 _% @: [
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
& C2 r; c* s! L
0 K- B8 T8 n0 a9 N4 T4 d
/*等待UPP传输完毕*/
& U# U4 q/ Z: a( f& B9 i5 F
//i=0;
" G- W0 \, }% B+ [9 f4 [
//j=0;
, m, @0 k# ]" R4 U* r
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
% ^8 G3 T1 k& }+ ]
{
; G3 w# x( _+ M! m0 n/ `
/* 测试UPP传输的同时操作普通DDR数据
; R4 `1 u$ _) h+ \' A7 q! a
temp
=i;
- w# M" k( `! x: X6 X+ ] A7 P
i++;
; A) o( |: z4 o7 c
if(i==1024)
+ R! G# m6 d# s; \" y
{
! l* Q! o( u# [( [0 |5 ^, A" B1 u3 I6 V
i=0;
, e* Z" ^+ B$ }+ Q
j++;
" C* v% ~" v9 |$ i7 ?
}
: b. ~# q& v& d/ V: |& x( K+ c3 D
*/
. I* s8 O( p2 h. S n2 g6 n- K [
$ U1 O# y4 @8 J9 D9 m; J# O
asm(" nop");
. V0 T; }" |& ?, W! K
4 ^) B7 \8 n3 X* ]: s" i- |
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
' t+ Z1 }: q( J, x4 A4 {
}
; J0 s4 d8 L/ V( p
5 w5 o9 C; x' E( g) l
/*检查UPP传输的数据是否正确 (loopback modes only)*/
5 i) p8 n; w/ `2 Z3 @- ?9 B
//UARTprintf( "i=%d\n",i);
+ [& v: S# D6 j3 T! M5 N
//UARTprintf( "j=%d\n",j);
' b! I) U9 g7 `: E$ g
UARTPuts("Data mismatch in buffers.\n",-2);
2 y5 z- c3 u% g
if (upp_interrupt_count == 2 && upp_error_count == 0)
/ t( A5 T B$ C6 n+ K
{
) h) w; o7 ?+ U2 }
for (i = 0; i<upp_frame_size; i++)
5 o$ ~' C2 K1 ^( X; i
{
# V5 s ~% q. i$ p4 F- Y
if (upp_buffer_a
!= upp_buffer_b
)
6 G; R8 O' V: Z( U/ ^7 w
{
* C' G P ]. t5 u# |
upp_error_count++;
1 I2 t3 c- ?- e+ M) Y. t, o7 Q
}
9 Q8 ^ P8 S" E K3 h4 k
}
; X; ]. c1 X+ ^+ N {# T5 J
}
4 G; a) C' w# O) w* T! H
1 U& y: J: |/ @6 I
/* 报告通信结果*/
j, ?9 p0 _; _+ s2 G
if(upp_error_count != 0)
+ k, E+ {! `2 H
UARTprintf( "upp_error_count=%d\n",upp_error_count);
+ e/ M& Y' S, i# c
else
, A. C1 P5 b0 @5 d
UARTPuts("uPP transfers complete!\n",-2);
* p$ u* C, {0 o" D
/ h3 @2 V( P( Q: ~ Z* p6 U# w' l4 e
UARTPuts("Do you want to print all the data?(y/n) ",-2);
& S$ c, |% P c/ z# r
UARTGets(ch,2);
3 u- A. i8 I! X: _. s8 k2 `( T; I8 v2 p
UARTPuts("\n", -2);
7 R/ c. C3 s: P- }# c
6 z% d7 N$ y" S- [- u
if(ch[0] == 'y')
/ U* p& n w9 N f2 O+ W
{
5 S* {2 |* B1 \5 S. k
/*打印全部读到的数据*/
+ g: R; V: K) g/ S$ H' i
for(i=0; i<upp_frame_size; )
4 p: Y( C. h0 F' w
{
9 }0 p$ O @% P0 k# p
for(j=0; j<5; j++)
9 _3 e( A+ u/ \
{
% n/ Q- `2 O9 t$ ]
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
5 r% ]: W P$ _3 A
i++;
, [% r/ P) x1 C9 i1 r
//if(i >= 4096)
: D3 p0 _4 Y0 U. `3 y
// break;
: m$ @2 Y3 l. I4 p# V, i8 U
7 Q1 f/ P) Y) U. P# V
}
. S( V; q. Q" b5 H7 {4 m) l/ c% O* N
UARTPuts("\n",-2);
6 ]0 S2 Q5 d3 ~) _
}
: D$ A6 o! e) _
}
( z$ W# O- ^% l
( ?" P; B! \1 f3 }' g" a
}
* {3 ~7 k# G6 s% u+ i
, c0 T2 ~, m0 p' [9 M1 z3 o
: k* y5 v- m6 [+ c% W6 W6 Z% I
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
y* F# |/ ^( j# ?4 e
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
0 W* G9 e" I5 B
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4