嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
$ O8 O, }1 n O
Void UPP_TASK(Void)
' f7 K' k% O: M) r1 t* B
{
. H; x _2 X5 T) j; G# X+ E
3 i& R4 {3 B r( w G1 K
int i,j,k,target_int_count=2;
w, ]" k& O h& w
char ch[2];
$ d- q4 h$ f- z& _$ q
# Q( ^1 `" o, l1 R. Y( |
0 s5 i6 ?: R* q5 i) a& S8 V
( y. H6 I! ~# S& S
upp_interrupt_count = 0;
( n* u, H% }& o1 d& H
upp_error_count = 0;
, T! T: J! u5 Q
9 \! l, J/ M& }9 G4 _$ O+ D# K+ h
UARTPuts("\tResetting uPP buffers...\r\n",-2);
" n. X1 M0 n8 H+ p+ R7 ]& P
// Initialize data buffers
1 Z, W2 p6 k. m, i
for (i = 0; i < upp_frame_size; i++)
; M* r" T3 G( n
{
, o8 r* I+ W$ i* }$ I( f% u
upp_buffer_b
=i;
j0 P/ t# K5 f4 K
upp_buffer_a
= 0xDEAD;
8 y% C& w, z. l! @# d
}
[# r' k, _( e
3 s6 B7 V6 J! q0 h0 ?
//for(i=0;i<1024;i++)
: U" w: \1 ?% G$ q4 [% S, Q9 a
// temp
=0;
4 X% b( @; p: T; \# Z
1 J1 J1 M9 y4 i
//UPPReset();
- Q' ~/ u: B, u) o. @! `
/*启动UPP DMA传输*/
/ Y7 `! c) x6 Y) U* m& v) {$ `+ z
UARTPuts("upp_prog_dma_i\n",-2);
1 G. U& q" p2 d. _ L
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
) x' G0 b* J/ G" R
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
9 @. S( `( x4 x) h: q- J& x
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
4 i/ |' u3 L! G; \
! o! O2 V: |/ ^8 l9 v' I
UARTPuts("upp_prog_dma_i\n",-2);
- F t2 s. E4 v8 D' E6 G. i
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
3 k3 a# d- U5 k. e9 v5 |" @* x
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
$ y; @; X" \, u; C/ R
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
" X4 p+ D* E! U7 B& h7 D
. U0 v) w5 w" h/ F" a) O& ^" G
/*等待UPP传输完毕*/
+ h! t/ ?3 _0 q6 z* l( P% Y0 O
//i=0;
w$ ?& o- p0 P; w
//j=0;
) B) `# o; l; l, m+ _% S
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
" }; h/ M. C t( M0 I4 @
{
" ]8 C, I: n. }' o, {- s; A! {! Z
/* 测试UPP传输的同时操作普通DDR数据
: l) I" V& P# f5 d
temp
=i;
# {- {; I& ~+ Q, \. q4 }
i++;
& Z% w3 K/ M- w. S
if(i==1024)
7 J- J. ?6 ?1 x" ^
{
0 u% r( e' m9 k: Q
i=0;
: x* y. h& ^& L* T" L
j++;
* N5 p) a+ }5 a) T* X* Q& Y9 }
}
9 z- h! R. i. \5 Q2 i5 F: `+ i
*/
' Z/ S( R2 g: g! P
: A) G" B# g/ H" W2 P. R# e' Q
asm(" nop");
' {! o& J _" f: m' U' b- k9 t! m
& _7 O6 @+ B5 B8 G- m0 \9 e
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
o0 E v8 R, f# y6 O
}
1 \* K1 b, L( Z# A/ [ M" I
# A$ d# N1 J( K. A% O, T4 @
/*检查UPP传输的数据是否正确 (loopback modes only)*/
% o# F& p1 m7 ]. G
//UARTprintf( "i=%d\n",i);
% o7 ]2 B6 s! t# y; k7 y
//UARTprintf( "j=%d\n",j);
5 H# M" a7 ^1 n1 w
UARTPuts("Data mismatch in buffers.\n",-2);
3 t1 G$ ]2 o g2 \
if (upp_interrupt_count == 2 && upp_error_count == 0)
. g& i3 W3 R- z/ x3 T7 l
{
' y( {% M4 K' P( y0 L1 g7 W! `( c
for (i = 0; i<upp_frame_size; i++)
" d; r1 a( J$ X- T7 C" w
{
) C5 L" |4 b) r7 ~7 ]) G
if (upp_buffer_a
!= upp_buffer_b
)
, n4 P4 m; T4 O6 H
{
0 ^# I+ f% N: P! r& h
upp_error_count++;
/ X. Z0 R) q, h P7 C6 U# P- ^' F3 o6 B
}
* v% n% X: |6 x
}
5 n" ~; c1 H) b% z! P" Y
}
3 y/ U A" N8 Z% r$ a
8 k" C) B/ c" [6 E8 l
/* 报告通信结果*/
! N" e# j8 ^. D% c3 C
if(upp_error_count != 0)
2 l. \3 V& ] O; {4 T% Y! l* N
UARTprintf( "upp_error_count=%d\n",upp_error_count);
1 B) P; w) n. F/ \! X
else
] e+ G& I3 g! W L% O" ^* s) ]
UARTPuts("uPP transfers complete!\n",-2);
( N8 \3 M3 q' W) B- u
8 r4 v0 v0 h' \" W/ w
UARTPuts("Do you want to print all the data?(y/n) ",-2);
& ]! H( |9 K) T% i
UARTGets(ch,2);
+ l6 v( G& K( [* L5 C2 z) r% `
UARTPuts("\n", -2);
* v6 Y0 F0 \& W2 L- ]: D% U
1 D0 x: X# j; q* }
if(ch[0] == 'y')
3 G6 W J, B |) s( @
{
6 N! x: `5 J m$ i! M3 O7 ~
/*打印全部读到的数据*/
9 M; [) H; c2 u, O) g% |, \) _
for(i=0; i<upp_frame_size; )
& T7 w9 Q# S4 { i9 S- r
{
7 P" H; n/ l# M# j! y0 m
for(j=0; j<5; j++)
3 u. _9 [, a9 L+ }: M% L
{
4 J/ P& ~! s* y6 A9 W" N! @, U
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
" A; i3 D! s* c& J# f7 B0 K
i++;
2 k, Q1 j# e0 c2 a
//if(i >= 4096)
7 X- }; H) s9 F
// break;
% A$ U" p0 A6 C. E+ x" q
0 r" ?( ]: S5 S8 ?
}
/ K! I/ N0 Z" W: ]
UARTPuts("\n",-2);
( W( g/ e L0 ^/ T% g# ?
}
. E( `4 j/ c1 K: z
}
% O/ e5 J/ U/ D- Z" j- E' t
, N" ?! x. b, G
}
6 A2 B5 b7 S( J/ J8 K
8 |0 v/ W5 I d' R5 z! D
7 I& `- k; e! C _$ G1 a
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
' x! h8 o4 Y3 w5 ?& g4 [
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
3 A- K/ d. _9 N( Z+ R7 z' D
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4